]> SALOME platform Git repositories - modules/eficas.git/commitdiff
Salome HOME
*** empty log message ***
authorPascale Noyret <pascale.noyret@edf.fr>
Fri, 17 Sep 2010 13:11:51 +0000 (13:11 +0000)
committerPascale Noyret <pascale.noyret@edf.fr>
Fri, 17 Sep 2010 13:11:51 +0000 (13:11 +0000)
568 files changed:
AIDE/CMakeLists.txt [new file with mode: 0644]
AIDE/__init__.py
AIDE/viewer.py
Accas/A_AU_PLUS_UN.py
Accas/A_AVANT.py [new file with mode: 0644]
Accas/CMakeLists.txt [new file with mode: 0644]
Accas/__init__.py
Accas/__init__NonAster.py [new file with mode: 0644]
Aide/CMakeLists.txt [new file with mode: 0644]
Aide/eficas_ASTER.adp [new file with mode: 0644]
Aide/eficas_OPENTURNS_STUDY.adp [new file with mode: 0644]
Aide/fichiers_ASTER/CMakeLists.txt [new file with mode: 0644]
Aide/fichiers_ASTER/INSTALL.txt [new file with mode: 0644]
Aide/fichiers_ASTER/NEWS.txt [new file with mode: 0644]
Aide/fichiers_ASTER/faqs.txt [new file with mode: 0644]
Aide/fichiers_ASTER/includes.txt [new file with mode: 0644]
Aide/fichiers_ASTER/index.html [new file with mode: 0644]
Aide/fichiers_OPENTURNS_STUDY/CMakeLists.txt [new file with mode: 0644]
Aide/fichiers_OPENTURNS_STUDY/EficasGui.txt [new file with mode: 0644]
Aide/fichiers_OPENTURNS_STUDY/UncertaintyStudy.txt [new file with mode: 0644]
Aide/fichiers_OPENTURNS_STUDY/index.html [new file with mode: 0644]
Aster/CMakeLists.txt [new file with mode: 0644]
Aster/Cata/CMakeLists.txt [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/__init__.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/calc_ecrevisse_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/calc_essai_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/calc_europlexus_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/calc_fonction_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/calc_miss_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/calc_modal_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/calc_mode_rotation_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/calc_precont_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/calc_spec_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/calc_table_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/creation_donnees_homard.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/defi_cable_bp_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/defi_fonc_elec_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/defi_inte_spec_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/defi_part_feti_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/defi_sol_miss_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/dyna_iss_vari_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/exec_logiciel_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/externe_mess.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/fiabilite_fichier.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/fiabilite_mefisto.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/gene_vari_alea_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/impr_diag_campbell_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/impr_diag_campbell_utils.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/impr_fonction_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/impr_oar_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/impr_table_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/info_fonction_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/lire_fonction_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/lire_inte_spec_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/lire_table_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macr_adap_mail_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macr_ascouf_calc_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macr_ascouf_mail_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macr_aspic_calc_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macr_aspic_mail_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macr_cara_poutre_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macr_ecla_pg_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macr_ecre_calc_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macr_ecrevisse_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macr_fiab_impr_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macr_fiabilite_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macr_lign_coupe_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macr_recal_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macr_spectre_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macro_elas_mult_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macro_expans_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macro_matr_ajou_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macro_matr_asse_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macro_miss_3d_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macro_mode_meca_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/macro_proj_base_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/observation_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/post_coque_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/post_dyna_alea_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/post_endo_fiss_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/post_gp_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/post_k1_k2_k3_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/post_k_trans_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/propa_fiss_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/raff_xfem_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/reca_algo.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/reca_calcul_aster.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/reca_controles.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/reca_evol.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/reca_graphique.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/reca_interp.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/reca_mac.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/reca_message.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/reca_utilitaires.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/recal.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/simu_point_mat_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/stanley_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/test_fichier_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/test_fonction_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/Macro/test_temps_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/__init__.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_base_modale.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_cabl_precont.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_cara_elem.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_carte.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_cham_elem.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_cham_mater.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_cham_no.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_champ.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_char_acou.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_char_cine_acou.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_char_cine_meca.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_char_cine_ther.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_char_meca.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_char_ther.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_compor.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_contact.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_courbe.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_fiss_xfem.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_fonction.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_fond_fiss.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_gfibre.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_interf_dyna_clas.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_list_inst.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_listis.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_listr8.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_macr_elem_dyna.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_macr_elem_stat.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_maillage.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_mater.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_matr_asse.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_matr_asse_gd.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_matr_asse_gene.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_matr_elem.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_melasflu.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_mode_cycl.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_mode_meca.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_modele.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_modele_gene.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_nume_ddl.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_nume_ddl_gene.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_resultat.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_resultat_dyn.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_sd_feti.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_spectre.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_squelette.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_surface.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_table.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_table_container.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_table_fonction.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_tran_gene.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_type_flui_stru.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_vect_asse_gene.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/co_vect_elem.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_amor_modal.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_base_modale.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_cabl_precont.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_cara_elem.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_carte.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_cham_elem.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_cham_gene.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_cham_mater.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_cham_no.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_champ.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_char_acou.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_char_cine.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_char_meca.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_char_ther.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_char_unilate.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_compor.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_contact.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_corresp_2_mailla.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_courbe.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_courbe_lm.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_courbe_sa.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_feti.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_fonction.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_fond_fiss.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_gfibre.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_interf_dyna_clas.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_l_charges.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_l_table.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_ligrel.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_list_inst.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_liste_rela.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_listis.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_listr8.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_macr_elem_dyna.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_macr_elem_stat.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_maillage.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_mater.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_matr_asse.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_matr_asse_com.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_matr_asse_gd.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_matr_asse_gene.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_matr_cine.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_matr_elem.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_melasflu.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_mode_cycl.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_mode_meca.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_modele.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_modele_gene.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_multi_appui.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_nume_ddl.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_nume_ddl_com.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_nume_ddl_gd.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_nume_ddl_gene.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_nume_eqge.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_nume_equa.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_para_sensi.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_partition.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_prof_chno.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_prof_vgen.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_proj_mesu.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_proj_modal.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_reperage_1d.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_reperage_omega.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_resuelem.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_resultat.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_resultat_dyn.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_sddyna.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_solveur.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_spectre.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_squelette.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_stoc_lciel.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_stoc_mltf.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_stoc_morse.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_stockage.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_surface.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_surface_1d.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_table.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_table_container.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_table_fonction.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_titre.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_tran_gene.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_type_flui_stru.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_util.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_vect_elem.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/sd_xfem.py [new file with mode: 0644]
Aster/Cata/cataSTA10/SD/utilsd.py [new file with mode: 0644]
Aster/Cata/cataSTA10/__init__.py [new file with mode: 0644]
Aster/Cata/cataSTA10/cata.py [new file with mode: 0755]
Aster/Cata/cataSTA10/ops.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Macro/calc_ecrevisse_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Macro/calc_essai_ops.py
Aster/Cata/cataSTA9/Macro/calc_europlexus_ops.py
Aster/Cata/cataSTA9/Macro/calc_table_ops.py
Aster/Cata/cataSTA9/Macro/defi_fonc_elec_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Macro/exec_logiciel_ops.py
Aster/Cata/cataSTA9/Macro/macr_ecla_pg_ops.py
Aster/Cata/cataSTA9/Macro/macr_ecre_calc_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Macro/macr_ecrevisse_ops.py [new file with mode: 0644]
Aster/Cata/cataSTA9/Macro/macr_lign_coupe_ops.py
Aster/Cata/cataSTA9/Macro/macro_elas_mult_ops.py
Aster/Cata/cataSTA9/Macro/macro_matr_asse_ops.py
Aster/Cata/cataSTA9/Macro/post_gp_ops.py
Aster/Cata/cataSTA9/Macro/post_k1_k2_k3_ops.py
Aster/Cata/cataSTA9/Macro/propa_fiss_ops.py
Aster/Cata/cataSTA9/SD/co_fonction.py
Aster/Cata/cataSTA9/SD/utilsd.py
Aster/Cata/cataSTA9/__init__.py
Aster/Cata/cataSTA9/cata.py
Aster/Cata/cataSTA9/ops.py
Aster/Cata/cataSTA9c_clefs_docu [new file with mode: 0644]
Aster/configuration_ASTER.py [new file with mode: 0644]
Aster/editeur.ini
Aster/editeur_salome.ini
Aster/eficas_aster.py
Aster/prefs.py
Aster/prefs_ASTER.py [new file with mode: 0644]
Aster/properties.py
Aster/qtEficas_aster.py
Aster/qtGroup.py [new file with mode: 0755]
Aster/sdist.py
CMakeLists.txt [new file with mode: 0644]
CMakeModules/FindOpenTURNS.cmake [new file with mode: 0644]
Cuve2dg/Cuve2dg_Cata_V1.py [new file with mode: 0644]
Cuve2dg/Cuve2dg_Cata_V2.py [new file with mode: 0644]
Cuve2dg/Cuve2dg_Cata_V3.py [new file with mode: 0644]
Cuve2dg/Cuve2dg_Cata_VPN.py [new file with mode: 0644]
Cuve2dg/DefaillCUVE_Cata.py [new file with mode: 0644]
Cuve2dg/DefaillCUVE_Cata.py_V1 [new file with mode: 0644]
Cuve2dg/DefaillCUVE_Cata.py_V2 [new file with mode: 0644]
Cuve2dg/catalogues_cuve2dg.ini [new file with mode: 0644]
Cuve2dg/configuration_CUVE2DG.py [new file with mode: 0644]
Cuve2dg/generator_cuve2dg.py [new file with mode: 0644]
Cuve2dg/prefs.py [new file with mode: 0644]
Cuve2dg/prefs_CUVE2DG.py [new file with mode: 0644]
Cuve2dg/properties.py [new file with mode: 0644]
Cuve2dg/qtEficas_cuve2dg.py [new file with mode: 0755]
Cuve2dg/sdistCuveqt.py [new file with mode: 0644]
Cuve2dg/style.py [new file with mode: 0644]
Editeur/CMakeLists.txt [new file with mode: 0644]
Editeur/Objecttreeitem.py
Editeur/Patrons/CMakeLists.txt [new file with mode: 0644]
Editeur/analyse_catalogue_initial.py [new file with mode: 0644]
Editeur/catadesc.py [new file with mode: 0644]
Editeur/comploader.py
Editeur/icons/application.gif [new file with mode: 0644]
Editeur/icons/block_node.png [new file with mode: 0644]
Editeur/icons/compute.png [new file with mode: 0644]
Editeur/icons/map.ppm [new file with mode: 0644]
Editeur/import_code.py
Editeur/listePatrons.py
Editeur/styles.py
Extensions/CMakeLists.txt [new file with mode: 0644]
Extensions/param2.py
Extensions/parametre.py
Ihm/CMakeLists.txt [new file with mode: 0644]
Ihm/I_AVANT.py [new file with mode: 0644]
Ihm/I_ETAPE.py
Ihm/I_JDC.py
Ihm/I_MACRO_ETAPE.py
Ihm/I_MCCOMPO.py
Ihm/I_MCLIST.py
Ihm/I_MCSIMP.py
InterfaceQT/compofact.py
InterfaceQT/compooper.py
InterfaceQT/editor.py
InterfaceQT/qtEficas.py
InterfaceQT4/CMakeLists.txt [new file with mode: 0644]
InterfaceQT4/browser.py
InterfaceQT4/compocomm.py
InterfaceQT4/compoerror.py
InterfaceQT4/compofact.py
InterfaceQT4/compoformule.py
InterfaceQT4/compojdc.py
InterfaceQT4/compomacro.py
InterfaceQT4/compomclist.py
InterfaceQT4/componiveau.py
InterfaceQT4/compooper.py
InterfaceQT4/compoparam.py
InterfaceQT4/composimp.py
InterfaceQT4/configuration.py [new file with mode: 0644]
InterfaceQT4/editor.py
InterfaceQT4/eficas_go.py
InterfaceQT4/gereTraduction.py
InterfaceQT4/monChoixCata.py
InterfaceQT4/monChoixMap.py [new file with mode: 0644]
InterfaceQT4/monCommentairePanel.py
InterfaceQT4/monFonctionPanel.py
InterfaceQT4/monFormulePanel.py
InterfaceQT4/monIncludePanel.py
InterfaceQT4/monListeParamPanel.py
InterfaceQT4/monMCListAjoutPanel.py
InterfaceQT4/monMatricePanel.py [new file with mode: 0644]
InterfaceQT4/monOptions_ASTER.py [new file with mode: 0644]
InterfaceQT4/monOptions_CUVE2DG.py [new file with mode: 0644]
InterfaceQT4/monOptions_MAP.py [new file with mode: 0644]
InterfaceQT4/monOptions_OPENTURNS_STUDY.py [new file with mode: 0644]
InterfaceQT4/monOptions_OPENTURNS_WRAPPER.py [new file with mode: 0644]
InterfaceQT4/monParamPanel.py
InterfaceQT4/monPixmap.py [new file with mode: 0644]
InterfaceQT4/monPlusieursASSDPanel.py
InterfaceQT4/monPlusieursBasePanel.py
InterfaceQT4/monPlusieursIntoPanel.py
InterfaceQT4/monPoursuitePanel.py
InterfaceQT4/monRacinePanel.py
InterfaceQT4/monSelectVal.py
InterfaceQT4/monUniqueASSDPanel.py
InterfaceQT4/monUniqueBasePanel.py
InterfaceQT4/monUniqueCompPanel.py
InterfaceQT4/monUniqueSDCOIntoPanel.py
InterfaceQT4/monUniqueSDCOPanel.py
InterfaceQT4/monVisu.py [new file with mode: 0644]
InterfaceQT4/politiquesValidation.py
InterfaceQT4/qtCommun.py
InterfaceQT4/qtEficas.py
InterfaceQT4/qtSaisie.py
InterfaceQT4/readercata.py
InterfaceQT4/ssIhm.py [new file with mode: 0644]
InterfaceQT4/typeNode.py
InterfaceQT4/viewManager.py
InterfaceTK/CMakeLists.txt [new file with mode: 0644]
InterfaceTK/appli.py
InterfaceTK/bureau.py
InterfaceTK/change_comm.py
InterfaceTK/compofact.py
InterfaceTK/compomclist.py
InterfaceTK/compooper.py
InterfaceTK/compoparam.py
InterfaceTK/composimp.py
InterfaceTK/eficas.py
InterfaceTK/eficas_go.py
InterfaceTK/faq.py
InterfaceTK/fonctionpanel.py
InterfaceTK/images.py
InterfaceTK/menubar.py
InterfaceTK/panels.py
InterfaceTK/plusieursassdpanel.py
InterfaceTK/plusieursbasepanel.py
InterfaceTK/plusieursintopanel.py
InterfaceTK/plusieurspanel.py
InterfaceTK/shellpanel.py
InterfaceTK/styles.py
InterfaceTK/uniqueassdpanel.py
InterfaceTK/uniquebasepanel.py
InterfaceTK/uniquecomppanel.py
InterfaceTK/uniqueintopanel.py
InterfaceTK/uniquepanel.py
InterfaceTK/uniquesdcopanel.py
InterfaceTK/widgets.py
MAP/CMakeLists.txt [new file with mode: 0644]
MAP/Doc/MAP_2010_MOD1_20100531.pdf [new file with mode: 0755]
MAP/Templates/README.txt [new file with mode: 0644]
MAP/Templates/s_poly_st_1_V1/benhur_pygmee_template.txt [new file with mode: 0644]
MAP/Templates/s_poly_st_1_V1/pygmee_input_template.txt [new file with mode: 0644]
MAP/Templates/s_poly_st_1_V1/s_poly_st_1_aster_template.comm [new file with mode: 0644]
MAP/Templates/s_poly_st_1_V1/s_poly_st_1_aster_template.export [new file with mode: 0644]
MAP/catalogues_MAP.ini [new file with mode: 0644]
MAP/configuration_MAP.py [new file with mode: 0644]
MAP/prefs.py [new file with mode: 0644]
MAP/prefs_MAP.py [new file with mode: 0644]
MAP/properties.py [new file with mode: 0644]
MAP/qtEficas_map.py [new file with mode: 0755]
MAP/s_poly_st_1_V1.py [new file with mode: 0644]
MAP/s_poly_st_1_V1_clefs_docu [new file with mode: 0644]
MAP/s_poly_st_1_V2.py [new file with mode: 0644]
MAP/s_polymers_st_1_V1.py [new file with mode: 0644]
MAP/s_scc_st_2_V1.py [new file with mode: 0644]
MAP/style.py [new file with mode: 0644]
Misc/CMakeLists.txt [new file with mode: 0644]
Noyau/CMakeLists.txt [new file with mode: 0644]
Noyau/N_ASSD.py
Noyau/N_ASSD_NonAster.py [new file with mode: 0644]
Noyau/N_BLOC.py
Noyau/N_CO.py
Noyau/N_CONVERT.py
Noyau/N_CR.py
Noyau/N_ENTITE.py
Noyau/N_ETAPE.py
Noyau/N_Exception.py
Noyau/N_FACT.py
Noyau/N_FONCTION.py
Noyau/N_FORM.py
Noyau/N_FORM_ETAPE.py
Noyau/N_GEOM.py
Noyau/N_JDC.py
Noyau/N_JDC_CATA.py
Noyau/N_MACRO.py
Noyau/N_MACRO_ETAPE.py
Noyau/N_MCBLOC.py
Noyau/N_MCCOMPO.py
Noyau/N_MCFACT.py
Noyau/N_MCLIST.py
Noyau/N_MCSIMP.py
Noyau/N_OBJECT.py
Noyau/N_OPER.py
Noyau/N_PROC.py
Noyau/N_PROC_ETAPE.py
Noyau/N_REGLE.py
Noyau/N_SENSIBILITE.py
Noyau/N_SIMP.py
Noyau/N_VALIDATOR.py
Noyau/N__F.py
Noyau/N_types.py [new file with mode: 0644]
Noyau/N_utils.py
Noyau/ascheckers.py
Noyau/asnom.py
Noyau/asojb.py
Noyau/basetype.py
Noyau/context.py
Noyau/nommage.py
Openturns_Study/CMakeLists.txt [new file with mode: 0644]
Openturns_Study/OpenTURNS_Cata_Study_V10.py [new file with mode: 0644]
Openturns_Study/OpenTURNS_Cata_Study_V5.py [new file with mode: 0644]
Openturns_Study/OpenTURNS_Cata_Study_V6.py [new file with mode: 0644]
Openturns_Study/OpenTURNS_Cata_Study_V7.py [new file with mode: 0644]
Openturns_Study/OpenTURNS_Cata_Study_V7.py.orig [new file with mode: 0644]
Openturns_Study/OpenTURNS_Cata_Study_V8.py [new file with mode: 0644]
Openturns_Study/OpenTURNS_Cata_Study_V9.py [new file with mode: 0644]
Openturns_Study/catalogues_openturns.ini
Openturns_Study/configuration_OPENTURNS_STUDY.py [new file with mode: 0644]
Openturns_Study/opsOT.py [new file with mode: 0644]
Openturns_Study/prefs_OPENTURNS_STUDY.py [new file with mode: 0644]
Openturns_Study/prefs_OPENTURNS_STUDY.py.in [new file with mode: 0644]
Openturns_Wrapper/CMakeLists.txt [new file with mode: 0644]
Openturns_Wrapper/OpenTURNS_Cata_Wrapper_V3.py [new file with mode: 0644]
Openturns_Wrapper/OpenTURNS_Cata_Wrapper_V4.py [new file with mode: 0644]
Openturns_Wrapper/catalogues_openturns.ini
Openturns_Wrapper/configuration_OPENTURNS_WRAPPER.py [new file with mode: 0644]
Openturns_Wrapper/prefs.py
Openturns_Wrapper/prefs_OPENTURNS_WRAPPER.py [new file with mode: 0644]
Openturns_Wrapper/prefs_OPENTURNS_WRAPPER.py.in [new file with mode: 0644]
Openturns_Wrapper/qtEficas_openturns_wrapper.py
Pmw/CMakeLists.txt [new file with mode: 0644]
Pmw/Pmw_1_2/CMakeLists.txt [new file with mode: 0644]
README
Sep/CMakeLists.txt [new file with mode: 0644]
Sep/SEP_Cata_V0.py [new file with mode: 0644]
Sep/SEP_Cata_V1.py [new file with mode: 0644]
Sep/SEP_Cata_V1_2.py [new file with mode: 0644]
Sep/SEP_Cata_V1_3.py [new file with mode: 0644]
Sep/SEP_Cata_V1_4.py [new file with mode: 0644]
Sep/__init__.py [new file with mode: 0644]
Sep/catalogues_sep.ini [new file with mode: 0644]
Sep/configuration_SEP.py [new file with mode: 0644]
Sep/editeur.ini [new file with mode: 0644]
Sep/prefs.py [new file with mode: 0644]
Sep/prefs_SEP.py [new file with mode: 0644]
Sep/properties.py [new file with mode: 0644]
Sep/qtEficas_SEP.py [new file with mode: 0755]
Sep/sdistSEP.py [new file with mode: 0644]
Sep/style.py [new file with mode: 0644]
Tools/CMakeLists.txt [new file with mode: 0644]
Tools/foztools/CMakeLists.txt [new file with mode: 0644]
Traducteur/CMakeLists.txt [new file with mode: 0644]
UiQT4/CMakeLists.txt [new file with mode: 0644]
UiQT4/OptionsCuve.ui [new file with mode: 0644]
UiQT4/OptionsMAP.ui [new file with mode: 0644]
UiQT4/OptionsOT.ui [new file with mode: 0644]
UiQT4/desChoixMap.ui [new file with mode: 0644]
UiQT4/desCommande.ui
UiQT4/desFormule.ui
UiQT4/desInclude.ui
UiQT4/desListeParam.ui
UiQT4/desMatrice.ui [new file with mode: 0644]
UiQT4/desPixmap.ui [new file with mode: 0644]
UiQT4/desPlusieursBase.ui
UiQT4/desUniqueBase.ui
UiQT4/makefile
UiQT4/myMain.ui
Validation/CMakeLists.txt [new file with mode: 0644]
Validation/V_AU_MOINS_UN.py
Validation/V_AU_PLUS_UN.py
Validation/V_A_CLASSER.py
Validation/V_ENSEMBLE.py
Validation/V_ETAPE.py
Validation/V_EXCLUS.py
Validation/V_JDC.py
Validation/V_MACRO_ETAPE.py
Validation/V_MCBLOC.py
Validation/V_MCCOMPO.py
Validation/V_MCFACT.py
Validation/V_MCLIST.py
Validation/V_MCSIMP.py
Validation/V_PRESENT_ABSENT.py
Validation/V_PRESENT_PRESENT.py
Validation/V_PROC_ETAPE.py
Validation/V_UN_PARMI.py
convert/CMakeLists.txt [new file with mode: 0644]
convert/convert_file_from_template.py [new file with mode: 0644]
convert/convert_map.py [new file with mode: 0644]
convert/convert_perfect.py [new file with mode: 0644]
convert/parseur_python.py
generator/CMakeLists.txt [new file with mode: 0644]
generator/Formatage.py
generator/OpenturnsBase.py
generator/OpenturnsSTD.py
generator/OpenturnsXML.py
generator/generator_GroupMA.py [new file with mode: 0644]
generator/generator_SEP.py
generator/generator_aplat.py
generator/generator_cuve2dg.py
generator/generator_file_from_template.py [new file with mode: 0644]
generator/generator_homard.py
generator/generator_ini.py
generator/generator_map.py [new file with mode: 0644]
generator/generator_openturns.py
generator/generator_openturns_study.py
generator/generator_openturns_wrapper.py
generator/generator_pyth.py
generator/generator_python.py
generator/generator_s_poly_st_1.py [new file with mode: 0644]
generator/generator_s_polymers_st_1.py [new file with mode: 0644]
generator/generator_s_scc_st_2.py [new file with mode: 0644]
generator/generator_vers3DSalome.py
generator/monCreateYacs.py [new file with mode: 0755]

diff --git a/AIDE/CMakeLists.txt b/AIDE/CMakeLists.txt
new file mode 100644 (file)
index 0000000..47a67f8
--- /dev/null
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+
+install ( FILES 
+              aide_gui.py aide_objets.py index_aide.py __init__.py viewer.py
+         DESTINATION ${CMAKE_INSTALL_PREFIX}/AIDE
+        )
+
+
+
+### Local Variables:
+### mode: cmake
+### End:
index edcb6b4d34ea0f7bd7982457c5b31d6b842beefc..2fc2837643a67129059e1fd52c756c1c57d1db03 100644 (file)
@@ -6,7 +6,8 @@ import viewer
 
 def go(fichier=None,master=None):
     if not fichier :
-       fichier=os.path.join(os.path.dirname(__file__),"fichiers","index.html")
+       fichier=os.path.join(os.path.dirname(__file__),"../Aide/fichiers_ASTER","index.html")
+       print fichier
     o=viewer.HTMLViewer(master)
     o.display(fichier)
     return o
index a9ef3aadaa1e23c5beeff8d3651715152d828046..ad3e2f4263f7638fc1500ac165f021ce7001875f 100644 (file)
@@ -186,7 +186,8 @@ class HTMLViewer:
       if ext == ".html":
          parser=HTMLParser(fmt)
       else:
-         parser=DumbParser(fmt)
+         #parser=DumbParser(fmt)
+         parser=HTMLParser(fmt)
       parser.feed(data)
       parser.close()
       self.text.config(state="disabled")
index e7742703fa1921c632666f14d687d71a788c278c..c1a95bdb323f7797a68d4ee90ab8bf0eea630ac4 100644 (file)
@@ -20,8 +20,9 @@
 
 from Noyau import N_REGLE
 from Validation import V_AU_PLUS_UN
+from Ihm import I_REGLE
 
-class AU_PLUS_UN(V_AU_PLUS_UN.AU_PLUS_UN,N_REGLE.REGLE):
+class AU_PLUS_UN(V_AU_PLUS_UN.AU_PLUS_UN,I_REGLE.REGLE,N_REGLE.REGLE):
    """
        La classe utilise l'initialiseur de REGLE. Il n'est pas
        nécessaire d'expliciter son initialiseur car
diff --git a/Accas/A_AVANT.py b/Accas/A_AVANT.py
new file mode 100644 (file)
index 0000000..35f4741
--- /dev/null
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+from Noyau import N_REGLE
+from Ihm import I_REGLE, I_AVANT
+
+class AVANT(I_AVANT.I_AVANT,I_REGLE.REGLE,N_REGLE.REGLE):
+   """
+       La classe utilise l'initialiseur de REGLE. Il n'est pas 
+       nécessaire d'expliciter son initialiseur car 
+       I_AVANT.I_AVANT n'en a pas 
+   """
diff --git a/Accas/CMakeLists.txt b/Accas/CMakeLists.txt
new file mode 100644 (file)
index 0000000..e3ce058
--- /dev/null
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python du repertoire et des sous-repertoires (sauf CVS)
+install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+          DESTINATION ${CMAKE_INSTALL_PREFIX}
+         FILES_MATCHING PATTERN *.py
+          PATTERN CVS EXCLUDE
+       )
+
+
+### Local Variables:
+### mode: cmake
+### End:
index 67de064c36c9fce8e5062a11f7413b6b483bc3ce..4897f586af8699d54ff0a954659538fb65130983 100644 (file)
@@ -65,6 +65,7 @@ from A_PRESENT_ABSENT import PRESENT_ABSENT
 from A_EXCLUS import EXCLUS
 from A_ENSEMBLE import ENSEMBLE
 from A_A_CLASSER import A_CLASSER
+from A_AVANT import AVANT
 
 from A_ASSD import ASSD,assd
 from A_ASSD import GEOM,geom
@@ -83,7 +84,7 @@ from A_VALIDATOR import OrVal,AndVal
 from A_VALIDATOR import OrdList,NoRepeat,LongStr,Compulsory
 from A_VALIDATOR import RangeVal, EnumVal, TypeVal, PairVal
 from A_VALIDATOR import CardVal, InstanceVal
-#from A_VALIDATOR import VerifTypeTuple
+from A_VALIDATOR import VerifTypeTuple, VerifExiste
 
 # On remplace la factory des validateurs initialement dans Noyau par celle
 # de A_VALIDATOR
diff --git a/Accas/__init__NonAster.py b/Accas/__init__NonAster.py
new file mode 100644 (file)
index 0000000..324ed71
--- /dev/null
@@ -0,0 +1,104 @@
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+
+"""
+   Ce package contient les classes qui seront effectivement utilisees dans les applications.
+   C'est dans ce package que sont realisees les combinaisons de classes de base
+   avec les classes MIXIN qui implementent les fonctionnalites qui ont ete separees
+   du noyau pour des raisons de modularite afin de faciliter la maintenance et
+   l'extensibilite.
+
+   De plus toutes les classes utilisables par les applications sont remontees au
+   niveau du package afin de rendre le plus independant possible l'utilisation des
+   classes et leur implementation.
+"""
+
+# permet de se proteger de l'oubli de carte coding
+# ce warning deviendra fatal en python 2.4
+import warnings
+warnings.filterwarnings('error','Non-ASCII character.*pep-0263',DeprecationWarning)
+
+from A_JDC_CATA import JDC_CATA
+from A_OPER import OPER
+from A_PROC import PROC
+from A_MACRO import MACRO
+from A_FORM import FORM
+from A_BLOC import BLOC
+from A_FACT import FACT
+from A_SIMP import SIMP
+from A_EVAL import EVAL
+from A_NUPLET import NUPL
+
+from A_JDC import JDC
+from A_ETAPE import ETAPE
+from A_PROC_ETAPE import PROC_ETAPE
+from A_MACRO_ETAPE import MACRO_ETAPE
+from A_FORM_ETAPE import FORM_ETAPE
+from A_MCFACT import MCFACT
+from A_MCLIST import MCList
+from A_MCBLOC import MCBLOC
+from A_MCSIMP import MCSIMP
+
+# Les règles
+from A_AU_MOINS_UN import AU_MOINS_UN
+from A_AU_PLUS_UN import AU_PLUS_UN
+from A_UN_PARMI import UN_PARMI
+from A_PRESENT_PRESENT import PRESENT_PRESENT
+from A_PRESENT_ABSENT import PRESENT_ABSENT
+from A_EXCLUS import EXCLUS
+from A_ENSEMBLE import ENSEMBLE
+from A_A_CLASSER import A_CLASSER
+from A_AVANT import AVANT
+
+from A_ASSD import ASSD,assd
+from A_ASSD import GEOM,geom
+# Pour le moment on laisse fonction (ceinture et bretelles)
+from A_ASSD import FONCTION, fonction
+from A_ASSD import formule
+from A_ASSD import formule_c
+from A_ASSD import CO
+
+from Noyau.N__F import _F
+
+from Noyau.N_Exception import AsException
+from Noyau.N_utils import AsType
+
+from A_VALIDATOR import OrVal,AndVal
+from A_VALIDATOR import OrdList,NoRepeat,LongStr,Compulsory
+from A_VALIDATOR import RangeVal, EnumVal, TypeVal, PairVal
+from A_VALIDATOR import CardVal, InstanceVal
+from A_VALIDATOR import VerifTypeTuple
+
+# On remplace la factory des validateurs initialement dans Noyau par celle
+# de A_VALIDATOR
+import A_VALIDATOR
+import Noyau.N_ENTITE
+Noyau.N_ENTITE.ENTITE.factories['validator']=A_VALIDATOR.validatorFactory
+
+from A_SENSIBILITE import CONCEPT_SENSIBLE, REUSE_SENSIBLE, DERIVABLE
+
+from Extensions.niveau import NIVEAU
+from Extensions.etape_niveau import ETAPE_NIVEAU
+from Extensions.commentaire import COMMENTAIRE
+from Extensions.parametre import PARAMETRE  
+from Extensions.parametre_eval import PARAMETRE_EVAL
+from Extensions.commande_comm import COMMANDE_COMM 
+from Extensions.mcnuplet import MCNUPLET
+
diff --git a/Aide/CMakeLists.txt b/Aide/CMakeLists.txt
new file mode 100644 (file)
index 0000000..7295b57
--- /dev/null
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Installation des fichiers d'aide : Open TURNS
+if (WITH_OPENTURNS)
+  install ( FILES eficas_OPENTURNS_STUDY.adp
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/Aide
+           )
+  add_subdirectory ( fichiers_OPENTURNS_STUDY )
+endif (WITH_OPENTURNS)
+
+# Installation des fichiers d'aide : Aster
+if (WITH_ASTER)
+  install ( FILES eficas_ASTER.adp
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/Aide
+           )
+  add_subdirectory ( fichiers_ASTER )
+endif (WITH_ASTER)
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/Aide/eficas_ASTER.adp b/Aide/eficas_ASTER.adp
new file mode 100644 (file)
index 0000000..e12922c
--- /dev/null
@@ -0,0 +1,5 @@
+ <assistantconfig version="3.2.0">
+     <DCF ref="eficas_aster.html"
+             title="Eficas pour Aster ">
+     </DCF>
+ </assistantconfig>
diff --git a/Aide/eficas_OPENTURNS_STUDY.adp b/Aide/eficas_OPENTURNS_STUDY.adp
new file mode 100644 (file)
index 0000000..db67cb4
--- /dev/null
@@ -0,0 +1,5 @@
+ <assistantconfig version="3.2.0">
+     <DCF ref="eficas_openturns.html"
+             title="Eficas pour OPENTURNS ">
+     </DCF>
+ </assistantconfig>
diff --git a/Aide/fichiers_ASTER/CMakeLists.txt b/Aide/fichiers_ASTER/CMakeLists.txt
new file mode 100644 (file)
index 0000000..24e1d29
--- /dev/null
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Installation des fichiers d'aide : Aster
+if (WITH_ASTER)
+  install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/Aide
+           FILES_MATCHING PATTERN *.txt PATTERN *.html
+            PATTERN CMakeLists.txt EXCLUDE
+            PATTERN CVS EXCLUDE
+         )
+endif (WITH_ASTER)
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/Aide/fichiers_ASTER/INSTALL.txt b/Aide/fichiers_ASTER/INSTALL.txt
new file mode 100644 (file)
index 0000000..eb75932
--- /dev/null
@@ -0,0 +1,52 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//FR">
+<html>
+<head>
+
+<TITLE> Installation Standard d Eficas </TITLE> 
+</head>
+
+<body>
+
+<H1>
+1- Installation standard
+</H1> 
+
+Pour installer EFICAS a partir de la distribution : <nom_distrib>.tgz<BR>
+faire :<BR>
+<dd>tar xzvf <nom_distrib>.tgz<BR> </dd><BR>
+
+ce qui a pour effet de créer un répertoire de nom V1EficasV1_16a4AsterSTA9.
+<BR><BR>
+
+Pour modifier l'emplacement de la doc, le chemin d'accès à Acrobat Reader,
+les catalogues, il faut modifier le fichier 
+<BR>                editeur.ini <BR>
+dans le répertoire Aster ou utiliser le sous-menu "Parametres Eficas" du men Options .
+<BR><BR>
+ATTENTION : <BR>
+Si Eficas est installé dans un répertoire particulier d'administration 
+dans lequel les utilisateurs n'ont pas le droit d'écriture,<BR>
+ il faut que l'administrateur lance Eficas pour générer
+les fichiers et catalogues compilés .pyc 
+<BR><BR>
+
+
+2- Utilisation d'Eficas
+<BR>
+<BR>
+Pour utiliser Eficas, aller dans le répertoire Aster et faire :
+<BR>        python eficas_aster.py
+<BR>
+<BR>
+3- Installation avec un noyau pré-installé
+<BR>
+<BR>
+Aller dans le répertoire Aster du répertoire Eficas
+et modifier le fichier prefs.py comme suit :
+Mettre dans la variable CODE_PATH le chemin absolu vers
+le répertoire contenant les deux répertoires Noyau et Validation que vous voulez
+utiliser à la place de ceux fournis dans la livraison d'Eficas
+<BR>
+Pour changer les catalogues, modifier le fichier editeur.ini dans le répertoire Aster
+</body>
+</html>
diff --git a/Aide/fichiers_ASTER/NEWS.txt b/Aide/fichiers_ASTER/NEWS.txt
new file mode 100644 (file)
index 0000000..0ca44af
--- /dev/null
@@ -0,0 +1,99 @@
+Version 2.O (12/2009):
+<BR>
+   fusion des versions d Eficas pour Code_Aster, Outils Metiers et OpenTURNS
+<BR>
+Version 1.17 (12/2009):
+<BR>
+   Mise en synchronisation avec la version 10.0 de Code_Aster de décembre 2009.
+<BR>
+   Version en QT4
+<BR>
+   La version TK est figee
+<BR> <BR>
+
+Version 1.16 (6/2009):
+<BR>
+   Mise en synchronisation avec la version 9.3 de Code_Aster de mai 2007.
+<BR> <BR>
+
+
+Version 1.13 (6/2008):
+<BR>
+   Mise en synchronisation avec la version 9.2 de Code_Aster de mai 2007.
+<BR> <BR>
+
+Version 1.12 (6/2007):
+<BR>
+   Mise en synchronisation avec la version 9.1 de Code_Aster de mai 2007.
+<BR> <BR>
+
+Version 1.11 (12/2006):
+<BR>
+   Mise en synchronisation avec la version 8.4 de Code_Aster de decembre 2006.
+   Première version du Traducteur de V7 en V8
+<BR> <BR>
+
+Version 1.10 (6/2006):
+<BR>
+   Mise en synchronisation avec la version 8.3 de Code_Aster de juin 2006.
+<BR> <BR>
+
+Version 1.9 (12/2005):
+<BR>
+   Mise en synchronisation avec la version 8.2 de Code_Aster de decembre 2005.
+<BR> <BR>
+
+Version 1.8 (6/2005):
+<BR>
+   Mise en synchronisation avec la version 8.1 de Code_Aster de mai 2005.
+   Les includes et poursuites peuvent etre édités. Introduction de la notation
+   scientifique pour les flottants.
+<BR> <BR>
+
+Version 1.7 : (12/2004)
+<BR>
+   Mise en synchronisation avec la version STA7 de Code_Aster (7.4).
+   Les formules changent et deviennent des formules au sens python.
+   Disparition des PARAMETRE-EVAL
+   Les touches raccourcis (CtrlC par exple) sont activées et paramétrables dans prefs.py.
+<BR> <BR>
+
+Version 1.6 : (05/2004)
+<BR>
+   Mise en synchronisation avec la version STA7 de Code_Aster (7.2.26)
+   Evolution de la saisie des valeurs pour definir une fonction (EO2003-241) :
+    - Saisie des valeurs sous forme de tuple.
+    - Si une valeur est selectionnée, l'insertion se fera après cette valeur
+      et non en fin de liste
+<BR> <BR>
+
+Version 1.5 (10/2003):
+<BR>
+   Mise en synchronisation avec la version STA7 de Code_Aster d'octobre 2003 (7.2)
+   Introduction des validateurs de mots cles simples
+<BR> <BR>
+
+Version 1.4 (5/2003):
+<BR>
+   Mise en synchronisation avec la version STA7 de Code_Aster de mai 2003 (7.1)
+   Possibilité de donner un nom de fichier en argument lors de l'ouverture d'EFICAS (EO2003-060)
+   Correction d'une anomalie dans la fonctionnalité de commentarisation des commandes (AO2003-041)
+   Ajout du bouton de documentation dans le panneau FORMULE (AO2002-447)
+   Selection automatique du concept quand il n'en existe qu'un (EO2002-162)
+<BR> <BR>
+
+Version 1.3 (11/2002):
+<BR>
+   Mise en synchronisation avec la version STA6 de Code_Aster de septembre 2002
+   Ajout de la possibilité de visualiser les INCLUDE, INCLUDE_MATERIAU et POURSUITE (popup
+   sur click droit de la souris sur l'icone de la commande)
+   Possibilité d'afficher la liste des commandes par groupe (menu option->affichage commandes)
+   Reprise profonde du mécanisme de gestion des fichiers inclus (voir menus d'AIDE pour plus de détails)
+   Corrections diverses 
+<BR> <BR>
+
+Version 1.2 (5/2002):
+<BR>
+    Reconception de la version 1.1 : décomposition en packages Python
+    Mise en synchronisation avec la version STA6 de Code_Aster de fevrier 2002
+<BR> <BR>
diff --git a/Aide/fichiers_ASTER/faqs.txt b/Aide/fichiers_ASTER/faqs.txt
new file mode 100644 (file)
index 0000000..cb1a82d
--- /dev/null
@@ -0,0 +1,59 @@
+<BR>
+-------------------------------------------------------------------------------------------------------------
+                        FAQs et Limitations d'EFICAS
+-------------------------------------------------------------------------------------------------------------
+
+<BR>
+<BR>
+
+1. Mots réservés :
+<BR>
+
+        Tous les mots du langage Python sont des mots réservés.
+        On ne peut donc pas appeler une variable ou un concept 'fin' ou 'dir'
+        Pour la liste complète de ces mots-clés, veuillez vous référer à la 
+        documentation Python
+<BR>
+<BR>
+
+2. Concepts réentrants :
+<BR>
+
+        Ne pas indiquer par un '&' devant son nom qu'un concept est utilisé comme
+        concept réentrant. En effet EFICAS le sait !
+<BR> <BR>
+
+3. Carte commentaire :
+<BR>
+
+        La carte commentaire est désormais le '#' (dièse) au lieu du '%' (pourcent)
+   Les commentaires sont gérés comme des objets de même niveau que les
+   commandes ; il n'est plus possible de placer des commentaires "dans"
+   une commande. Attention, lors de la traduction d'un fichier de version 5
+   en 6, les commentaires "dans" les commandes seront perdus.
+
+<BR> <BR>
+4. Nommer le concept produit par un opérateur :
+<BR>
+
+        Vous ne pouvez nommer le concept produit d'un opérateur que lorsque
+        celui-ci aura été entièrement et correctement rempli.
+
+<BR> <BR>
+5. Règle de rémanence dans les mots-clés facteurs répétés :
+
+        La règle de rémanence qui permettait pour certains mots-clés facteurs
+        et pour certains de leurs mots-clés simples de ne pas répeter la valeur
+        de ces derniers dans toutes les occurrences du mot-clé facteur n'est pas 
+        connue d'EFICAS.
+        En conséquence, vous devez répéter les mots-clés simples concernés dans 
+        toutes les occurrences des mots-clés facteurs.
+
+<BR> <BR>
+6. Besoin d'aide ?
+<BR>
+        
+        La documentation d'utilisation d'EFICAS a pris un peu de retard sur le produit ...
+        Néanmoins, vous disposez sur la plupart des panneaux contextuels ( les panneaux à
+        droite de l'arbre) d'une aide en ligne que vous pouvez activer en maintenant le 
+        bouton droit de votre souris enfoncé.
diff --git a/Aide/fichiers_ASTER/includes.txt b/Aide/fichiers_ASTER/includes.txt
new file mode 100644 (file)
index 0000000..aadbb81
--- /dev/null
@@ -0,0 +1,49 @@
+Les macros INCLUDE, INCLUDE_MATERIAU et POURSUITE ont un fonctionnement spécial.<BR>
+Les concepts produits par ces macros sont obtenus par une interpretation séparée
+du fichier de commandes correspondant. Les concepts produits sont ensuite inclus
+dans le contexte du jeu de commandes principal.<BR>
+La mise à jour du jeu de commandes et de ses includes et poursuites
+est presque complètement automatique. Cependant dans quelques cas particuliers
+le mécanisme de mise à jour peut être pris en défaut.
+
+<BR> <BR>
+Les principes retenus sont les suivants :
+<BR> <BR>
+
+1- Un fichier invalide n'est pas du tout pris en compte meme si quelques
+commandes de ce fichier sont valides
+<BR><BR>
+
+2- Il est possible de visualiser (bouton droit de la souris sur l'icone de
+la macro -> menu View) le contenu de ces types de macros. Le bouton (icone
+loupe) permet de visualiser le source du fichier inclus.
+<BR><BR>
+
+3- Les fichiers inclus sont mémorisés en fonction de leur UNITE
+pour les INCLUDE, du nom de matériau pour les INCLUDE_MATERIAU et comme poursuite
+pour une POURSUITE (il n'est pas possible d'avoir plus d'une POURSUITE par fichier).
+ATTENTION : comme on s'appuie sur l'UNITE pour memoriser les fichers inclus il est
+conseillé d'utiliser des numéros d'UNITE différents sinon la reactualisation sera
+faite avec le meme fichier pour des INCLUDE différents.
+<BR><BR>
+
+4- Pour changer les fichiers inclus, il faut passer par l'onglet FICHIER, modifier
+le nom du fichier et appuyer sur le bouton Valider. Il est possible en passant par
+cet onglet de forcer la prise en compte d'un fichier include partiellement valide
+ce qui n'est pas possible lors de l'import initial. Pour changer un fichier INCLUDE
+contenu dans un INCLUDE ou dans une POURSUITE, il faut editer l'INCLUDE ou la POURSUITE
+englobante (voir 6.) et passer par l'onglet FICHIER.
+<BR><BR>
+
+5- Le nom d'un fichier INCLUDE_MATERIAU est construit à partir des valeurs des mots-clés
+de la commande, il n'est donc jamais demandé explicitement à l'utilisateur.
+
+<BR><BR>
+6- Il est possible d'editer un fichier include ou poursuite. Pour cela, il suffit d'utiliser
+l'entrée "Edit" du menu contextuel de l'étape en question (bouton droit de la souris).
+Le fichier include ou poursuite en cours d'edition apparaitra dans un onglet distinct.
+Les modifications dans un fichier include ou poursuite sont normalement propagées au fichier
+principal et aux autres includes et poursuites. Il est cependant possible que quelques cas
+tordus ne soient pas correctement traités. Dans le doute, une demande de rapport de validation
+peut permettre de réactualiser l'état des différents fichiers.
+
diff --git a/Aide/fichiers_ASTER/index.html b/Aide/fichiers_ASTER/index.html
new file mode 100644 (file)
index 0000000..49da947
--- /dev/null
@@ -0,0 +1,18 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+
+<HTML>
+<HEAD>
+<TITLE>EFICAS</TITLE>
+</HEAD>
+
+<BODY TEXT="#000000" BGCOLOR="#F7F3FF" LINK="#0000FF" VLINK="#660099" ALINK="#FF0000">
+
+<H1>EFICAS</H1>
+<HR>
+
+<P> <A HREF="NEWS.txt">Evolution des versions</A>
+<P> <A HREF="faqs.txt">FAQ</A>
+<P> <A HREF="includes.txt">Macros INCLUDE, INCLUDE_MATERIAU et POURSUITE</A>
+
+</BODY>
+</HTML>
diff --git a/Aide/fichiers_OPENTURNS_STUDY/CMakeLists.txt b/Aide/fichiers_OPENTURNS_STUDY/CMakeLists.txt
new file mode 100644 (file)
index 0000000..574fedf
--- /dev/null
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Installation des fichiers d'aide : Open TURNS
+if (WITH_OPENTURNS)
+  install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/Aide
+           FILES_MATCHING PATTERN *.txt PATTERN *.html
+            PATTERN CMakeLists.txt EXCLUDE
+            PATTERN CVS EXCLUDE
+         )
+endif (WITH_OPENTURNS)
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/Aide/fichiers_OPENTURNS_STUDY/EficasGui.txt b/Aide/fichiers_OPENTURNS_STUDY/EficasGui.txt
new file mode 100644 (file)
index 0000000..b6a6ad1
--- /dev/null
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//FR">
+<html>
+<head>
+<TITLE> What is the EFICAS Graphical User Interface?  </TITLE>
+</head>
+
+<h2 align="center">
+ What is the EFICAS Graphical User Interface?
+</h2>
+<body>
+<BR>
+EFICAS is an open source software which proposes a graphical user interface to OpenTURNS. <BR>
+EFICAS enables to the User to lead an uncertainty study without having to learn the python statements.<BR>
+<BR>
+Eficas is structured in two parts : <BR>
+<ul>
+<li>1. Part 1 defines the calculus function (the wrapper definition);</li>
+<li>2. Part 2 defines the uncertainty study using a previously defined model.</li>
+</ul>
+note that Part 1 must be fulfilled before Part 2.<BR>
+<BR>
+<BR>
+It has been made with the following objectives : 
+<ul>
+<li>1. to ease the use of Open TURNS, avoiding to the User writing the python statements;</li>
+<li>2. to ease the learning of the python statements by generating the python script after the study has been graphically defined.</li>
+</ul>
+<BR>
+<BR>
+When used, the EFICAS GUI generates :<BR>
+</ul>
+<li>1. the file.comm which contains all the information declared in the EFICAS GUI. </li>
+<li>2. the file.py which is the  python script associated to the study and that can be launched through a python session.</li>
+</ul>
+
+</body>
+</html>
+
diff --git a/Aide/fichiers_OPENTURNS_STUDY/UncertaintyStudy.txt b/Aide/fichiers_OPENTURNS_STUDY/UncertaintyStudy.txt
new file mode 100644 (file)
index 0000000..e363562
--- /dev/null
@@ -0,0 +1,190 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//FR">
+<html>
+<head>
+<TITLE> DEFINITION OF THE UNCERTAINTY STUDY
+</TITLE>
+</head>
+
+
+<h2 align="center">
+ DEFINITION OF THE UNCERTAINTY STUDY
+</h2>
+<body>
+
+<h3>
+Limitations of the EFICAS GUI<BR>
+</h3>
+EFICAS version 2.0 has the following limitations : 
+<ul>
+ <li> on models : <ul>
+ <li>- the calculus fucntion f has to have a scalar output variable, which means that f : R^n --> R;</li>
+ <li>- only one model can be defined within a study;</li>
+ </li><\ul>
+ <li> on the input random vector : the probabilistic input variables must be independent or with a normal copula dependence structure;</li>
+ <li> on sample manipulation : there is no statistical functionalities except the evaluation of some correlation coefficients whithin the Central Uncertainty criteria evaluation;</li>
+  <li> on response surface tools : there is no possibility to create a polynomial response surface nor a polynomial chaos expansion.</li>
+  <li> on CRITERIA : only one criteria can be defined within a study.</l>
+</ul>
+<BR>
+
+<h3> Define your uncertainty study</h3>
+
+To perform a uncertainty study through the EFICAS Graphical User Interface, you need to follow these steps. 
+As some concepts need other ones to be created, you have to respect the given order in the study definition. Note that only the two first steps (Step 1 and Step 2) may be exchanged.
+
+<ul>
+<li> Step 1 : Define the 1D distribution pool you'll need within the study.<BR>
+This step defines all the 1D distributions that will be affected to probabilistic variables of the uncertainty study. To have information on distributions, see the Use Cases guide or User Manual Guide.
+<BR>
+   <ul> <li> - create a DISTRIBUTION :
+         <ul><li> 1. click on SansNom (which is the case study which still has no named until you save it);</li>
+         <li> 2. click on "Nouvelle Commande" on the upright of the board;</li>
+         <li> 3. click on DISTRIBUTION.
+         </ul></li>
+<BR>
+    <li>   - fulfill the DISTRIBUTION :
+<ul><li> 1. click on Kind and choose a probabilistic distribution;</li>
+<li> 2. click on the just created field named by the chosen distribution; </li>
+<li>3. give some values to each parameter of the distribution. In the Histogram case, give one by one the couples (class bandwith, class height) by typing : class bandwith, class height.</li>
+    </ul></li>
+<BR>
+   <li> name the DISTRIBUTION : 
+<ul><li>1. click on DISTRIBUTION; </li>
+<li>2. click on "Name Concept" on the upright of the board; </li>
+<li>3. give a name to the DISTRIBUTION</li>
+    </ul></li>
+<BR>
+   <li>- create another DISTRIBUTION : <ul><li>1. click on the last DISTRIBUTION you created;</li>
+<li> 2. click on "Nouvelle Commande" on the upright of the board; </li>
+<li>3. click on DISTRIBUTION.</li>
+    </ul></li>
+<BR>
+   <li> - visualise the probabilistic density function of the DISTRIBUTION : 
+<ul><li>1. right click on DISTRIBUTION; </li>
+<li>2. click on Graphique.</li>
+    </ul></li>
+</ul>
+<BR>
+<BR>
+
+
+<li> Step 2 : Define your model.<BR>
+This step gives the link towards the calculus function through which uncertainties will be propagated. The model is described thanks to an xml file To have information on wrappers, see Wrapper Guide.
+<ul><li>  - create a MODEL : 
+    <ul><li>1. click on the last DISTRIBUTION you created; </li>
+    <li>2. click on "Nouvelle Commande" on the upright of the board; </li>
+    <li>3. click on MODEL.</li> </ul>
+</li>
+<BR>
+<li> - fulfill the MODEL : 
+    <ul><li>1. click on FileName; </li>
+         <li>2. give the adress of the file.xml corresponding to your calculus function.
+</li></ul></li>
+</ul>
+
+<BR>
+<BR>
+
+
+<li> Step 3 : Define the probabilistic input variables.<BR>
+This step associates a probabilistic distribution function previously defined in Step 1 to each variable defined in the model.
+<ul><li>  - create a VARIABLE : 
+     <ul><li>1. click on the last DISTRIBUTION you created; </li>
+         <li>2. click on "Nouvelle Commande" on the upright of the board; </li>
+         <li>3. click on VARIABLE.</li>
+     </ul> </li> <BR>
+     <li>  - fulfill the VARIABLE :
+         <ul><li>1. click on ModelVariable; </li>
+             <li>2. choose a variable within the list of the variables coming from the previously defined model; </li>
+             <li>3. click on Distribution; </li>
+             <li>4. choose a distribution among the ones previously defined in Step 1 (correctly fulfilled and named).</li>
+         </ul></li> <BR>
+     <li>   - create another VARIABLE : 
+          <ul><li>1. click on the last VARIABLE you created; </li>
+          <li>2. click on "Nouvelle Commande" on the upright of the board; </li>
+          <li>3. click on VARIABLE.</li>
+          </ul></li> 
+</ul><BR>
+
+<li> Step 4 : Define the dependance structure of the probabilistic input variables.<BR>
+This step defines the structure dependence of the probabilistic input variables previously declared.
+<ul>
+<li>  - create a CORRELATION : <ul><li>1. click on the last VARIABLE you created; </li>
+<li>2. click on "Nouvelle Commande" on the upright of the board; </li>
+<li>3. click on CORRELATION.</li></ul><BR>
+<li>  - fulfill the CORRELATION : <ul><li>1. click on Copula; </li>
+<li>2. choose a copula within Normal copula and Independent one; </li>
+<li>3. In case of Normal copula, give the correlation matrix by clicking on CorrelationMatrix.</li>
+</ul></li><BR></ul>
+
+
+<li> Step 5 : Define the criteria you will evaluate.<BR>
+This step defines the criteria which will be evakluated by the uncertainty study. To have more information on criterias, see the Reference Guide.<BR>
+<ul><li>
+  - create a CRITERIA : <ul><li>1. click on the last VaRIABLE you created; </li>
+   <li>2. click on "Nouvelle Commande" on the upright of the board; </li>
+   <li>3. click on CRITERIA;</li></ul> 
+   <li>  - fulfill the CRITERIA : <ul><li>1. click on CRITERIA; </li>
+   <li>2. choose a specific criteria among the three proposed ones.</li><BR></ul>
+The following steps are described just below.</li><BR>
+
+<li>CRITERIA MinMax : <BR>
+This criteria aims at evaluating some extreme values of the output variable of interest, which is the output variable of the model. To have more information on the different methods, see the Use Cases Guide.
+<ul>
+   <li>  - 3. click on MinMax; </li>
+   <li>  - 4. click on the just created field Method which defines how input probabilistic variables will be generated;</li>
+   <li>  - 5. click on the just created field corresponding to the chosen Method; </li>
+   <li>  - 6. fulfill the required fields;</li>
+   <li>  - 7. The Results are the extreme values evaluated on the output variable onf interest.</li>
+</ul></li><BR>
+
+<li>CRITERIA  Central Uncertainty : <BR>
+This criteria aims at evaluating some central probabilistic carateristics of the output variable of interest. To have more information on the different methods, see the Use Cases Guide.
+<ul><li> - 3. click on CentralUncertainty; </li>
+     <li>- 4. click on the just created field Method which defines how the central probabilistic caracteristics will be evaluated and choose one; </li>
+     <li>- 5. click on the just created field corresponding to the chosen Method;</li>
+     <li>- 6. fulfill the required fields;</li>
+     <li>- 7. The Results are the mean, standard deviation whatever the chosen Method and in the case of a Radom sampling Method, also some empirical quantiles previoulsy defined, the evaluation of some correlation coefficients (PCC, PRCC, SRC and SRRC) and the kernel smoothing of the probabilistic density function of the output variable of interest.</li>
+</ul><BR></li>
+
+
+<li>CRITERIA Threshold Exceedance : <BR>
+This criteria aims at evaluating the probability that the ouput variable of interest exceeds or remaines under a define threshold. To have more information on the different methods, see the Use Cases Guide.
+<ul><li>- 3. click on Threshold Exceedence; </li>
+     <li>- 4. click on the just created field Method which defines how the central probabilistic caracteristics will be evaluated;</li>
+     <li>- 5. define the Event : click on Threshold and fulfill it; click on the ComparisonOperator and fulfill it; </li>
+     <li>- 6. define the probability evaluation Method : click on Method  and choose one;</li>
+     <li>- 7. fulfill the required fields. In the FORM and SORM cases, it is possible to perform some importance sampling around the design point : the importance distribution is the standard Normal distribution defined int he stansard space, with independent components, unit variance and centered around the design point.</li>
+     <li>- 8. The Results are the following ones :<BR> in the case of a Simulation Method, the probability evaluation with the standard deviation and the coefficient of vrariation of its estimator, the confidence interval defined previously, the final number of simulation used for the evaluation,  the convergence graph of the estimator; in the case of a FORM Method, the probability evaluation, the associated design point, the Hasofer reliability index, the importance factors also drawed in a graph, the sensitivity factors evaluated on the FORM probability estimation and on the Hasofer reliability index and the calls number of the model; in the case of a SORM Method, the probability evaluation, the associated design point, the Hasofer, Tvedt and HohenBichler reliability indexes, the importance factors also drawed in a graph, the sensitivity factors evaluated on the Hasofer reliability index and the calls number of the model.
+</li>
+</ul><BR></ul>
+
+<h3>
+General rules
+</h3>
+<ul>
+<li> To erase a concept, right click on it  and click on Supprimer.</li>
+<li> While the concept is not colored in green, you have not completely fulfilled the concepts. The orange color means a concept needs to be named.</li>
+<li> To fulfill a list of values (v1, v2, ..., vn), type the whole values separated by coma. For example, to fulfill (1,2,3) in the field Levels of an Experiment plane, type : 1,2,3.</li>
+<li> To fulfill a list of list of values, type one by one each list of values as previously described. For example, ((v1,v2), (v3,v4)), type : v1,v2 then "entered", v3,v4 then 'entered". This is the case in the Histogramm distribution.</li>
+<li> Files names or graphics impression are given without their extensions. Open TURNS will authomatically provide the .eps, .png and .fig formats.</li>
+</ul>
+<BR><BR>
+
+
+<h3>
+Save and Run your uncertainty study
+</h3>
+Once correctly fulfilled, the study can be saved under a specific name chosen by the User, for example "myStudy".<BR>
+Then, two files are authomatically created : 
+<ul>
+<li>- a myStudy.comm which contains all the information declared in the EFICAS GUI. This file myStudy.comm may be opened once more within EFICAS.</li>
+<li>- a myStudy.py which is the corresponding python script. The python script is generated given that each concept has been correctly and entirely fulfilled. </li>
+</ul>
+To run your uncertainty analyses, you nedd to type "python myStudy.py" or "python -i myStudy.py" in your shell. All the graphs are created in the repertory where the python session has been launched.
+To have more information on how to modify the python script, see the Use Cases Guide.
+<BR>
+
+</body>
+</html>
diff --git a/Aide/fichiers_OPENTURNS_STUDY/index.html b/Aide/fichiers_OPENTURNS_STUDY/index.html
new file mode 100644 (file)
index 0000000..0d5bf82
--- /dev/null
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+
+<HTML>
+<HEAD>
+<TITLE>EFICAS</TITLE>
+</HEAD>
+
+<BODY TEXT="#000000" BGCOLOR="#F7F3FF" LINK="#0000FF" VLINK="#660099" ALINK="#FF0000">
+
+<H1>EFICAS</H1>
+<HR>
+
+<P> <A HREF="EficasGui.txt">What is the EFICAS Graphical User Interface</A>
+<P> <A HREF="UncertaintyStudy.txt">Definition of the uncertainty study</A>
+
+</BODY>
+</HTML>
diff --git a/Aster/CMakeLists.txt b/Aster/CMakeLists.txt
new file mode 100644 (file)
index 0000000..4311057
--- /dev/null
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python, texte et images du repertoire et des sous-repertoires (sauf CVS)
+install (
+          FILES
+                 configuration_ASTER.py __init__.py prefs_ASTER.py prefs.py 
+                 properties.py qtEficas_aster.py qtGroup.py style.py
+                 editeur_salome.ini editeur.ini eficas_aster.py
+                 LICENSE.TERMS
+          DESTINATION ${CMAKE_INSTALL_PREFIX}/Aster
+       )
+add_subdirectory (Cata)
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/Aster/Cata/CMakeLists.txt b/Aster/Cata/CMakeLists.txt
new file mode 100644 (file)
index 0000000..0eb5eaa
--- /dev/null
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python, texte et images du repertoire et des sous-repertoires (sauf CVS)
+install ( 
+          FILES
+           __init__.py cataSTA8c_clefs_docu cataSTA9c_clefs_docu
+          DESTINATION ${CMAKE_INSTALL_PREFIX}/Aster/Cata
+       )
+install (
+          DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Utilitai
+                    ${CMAKE_CURRENT_SOURCE_DIR}/cataSTA10
+                    ${CMAKE_CURRENT_SOURCE_DIR}/cataSTA9
+                    ${CMAKE_CURRENT_SOURCE_DIR}/cataSTA8
+          DESTINATION ${CMAKE_INSTALL_PREFIX}/Aster/Cata
+)
+
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/Aster/Cata/cataSTA10/Macro/__init__.py b/Aster/Cata/cataSTA10/Macro/__init__.py
new file mode 100644 (file)
index 0000000..4aebb58
--- /dev/null
@@ -0,0 +1,21 @@
+#@ MODIF __init__ Macro  DATE 20/09/2004   AUTEUR DURAND C.DURAND 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+#                                                                       
+#                                                                       
+# ======================================================================
diff --git a/Aster/Cata/cataSTA10/Macro/calc_ecrevisse_ops.py b/Aster/Cata/cataSTA10/Macro/calc_ecrevisse_ops.py
new file mode 100644 (file)
index 0000000..fb0f15d
--- /dev/null
@@ -0,0 +1,1101 @@
+#@ MODIF calc_ecrevisse_ops Macro  DATE 21/04/2010   AUTEUR BOTTONI M.BOTTONI 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+
+# ------------------OUTILS ------------------------------
+
+# Determination de la direction de la fissure
+#   a partir du points initial et final :
+# theta : angle par rapport a la verticale ascendente (degres)
+#         positif si sens horaire
+#   -180< theta <=180
+# beta : angle par rapport a la horizontale (degres)
+#         positif si sens anti-horaire
+#         -180< beta <=180
+def dirfiss(Xa,Ya,Xb,Yb) :
+    from math import atan2, degrees
+
+    xia = Xa[0]
+    yia = Ya[0]
+    xea = Xa[-1]
+    yea = Ya[-1]
+    xib = Xb[0]
+    yib = Yb[0]
+    xeb = Xb[-1]
+    yeb = Yb[-1]
+
+    xi = (xia+xib)/2.
+    yi = (yia+yib)/2.
+    xe = (xea+xeb)/2.
+    ye = (yea+yeb)/2.
+
+    dx = xe -xi
+    dy = ye -yi
+
+    try :
+        tangA= dy/dx
+    except ZeroDivisionError :
+        if (dy>0.) :
+            theta = 0.
+            beta  = 90.
+        else :
+            theta = 180.
+            beta  = -90.
+    else :
+        beta = atan2(dy,dx)
+        beta = degrees(beta)
+        theta = 90.-beta
+        if (theta>180.):
+            theta=theta-360.
+
+    if (abs(beta)<45. or abs(beta)>135.) :
+        DIR_PREV = 'X'
+    else:
+        DIR_PREV = 'Y'
+
+    if (round(abs(beta))==0. or round(abs(beta))==180.):
+        DIR_FISS = 'X'
+    elif (round(abs(beta))==90.):
+        DIR_FISS = 'Y'
+    else :
+        DIR_FISS = 'GEN'
+
+    return DIR_FISS, DIR_PREV, beta, theta, xi, yi
+
+
+# Determination de l ouverture de la fissure
+def ouvFiss(DIR_FISS,beta,Xa,Ya,Xb,Yb) :
+    from math import sin, cos, sqrt, radians
+
+    if DIR_FISS=='X' :
+        Ouv = map(lambda y1,y2: abs(y2-y1),Ya,Yb)
+        Gli = map(lambda x1,x2: abs(x2-x1),Xa,Xb)
+    elif DIR_FISS=='Y' :
+        Ouv = map(lambda x1,x2: abs(x2-x1),Xa,Xb)
+        Gli = map(lambda y1,y2: abs(y2-y1),Ya,Yb)
+    else :
+        xi  = (Xa[0]+Xb[0])*0.5
+        yi  = (Ya[0]+Yb[0])*0.5
+        Xa1 = [x-y for (x,y) in zip(Xa,[xi]*len(Xa))]
+        Ya1 = [x-y for (x,y) in zip(Ya,[yi]*len(Ya))]
+        Xb1 = [x-y for (x,y) in zip(Xb,[xi]*len(Xb))]
+        Yb1 = [x-y for (x,y) in zip(Yb,[yi]*len(Yb))]
+        Xa2 = [ x*cos(radians(beta)) + y*sin(radians(beta)) for (x,y) in zip(Xa,Ya)]
+        Ya2 = [-x*sin(radians(beta)) + y*cos(radians(beta)) for (x,y) in zip(Xa,Ya)]
+        Xb2 = [ x*cos(radians(beta)) + y*sin(radians(beta)) for (x,y) in zip(Xb,Yb)]
+        Yb2 = [-x*sin(radians(beta)) + y*cos(radians(beta)) for (x,y) in zip(Xb,Yb)]
+        Ouv = map(lambda x,y: abs(y-x), Ya2, Yb2)
+        Gli = map(lambda x,y: abs(y-x), Xa2, Xb2)
+    return Ouv, Gli
+
+
+
+
+
+# ------------------DEBUT MACRO ------------------------------
+# Debut de la macro, on impose en parametre les donnees placer
+#     dans T_EC, l'appel a ecrevisse
+def calc_ecrevisse_ops(self,
+    CHARGE_MECA,
+    CHARGE_THER1,
+    CHARGE_THER2,
+    TABLE,
+    DEBIT,
+    MODELE_MECA,
+    MODELE_THER,
+    RESULTAT,
+    FISSURE,
+    ECOULEMENT,
+    MODELE_ECRE,
+    CONVERGENCE,
+    LOGICIEL,
+    VERSION,
+    ENTETE,
+    IMPRESSION,
+    INFO,
+    COURBES,
+    **args):
+
+    """
+        Procedure de couplage Aster-Ecrevisse
+        Recuperation du profil de la fissure , appel de MACR_ECRE_CALC,
+        creation des tableaux de resultats et des chargements pour AsterGeneration par Aster
+    """
+
+    import os, string, types, shutil
+    import aster
+    from Accas import _F
+    from Noyau.N_utils import AsType
+    from Utilitai.Utmess import UTMESS, MasquerAlarme, RetablirAlarme
+    from Utilitai.Table import Table, merge
+    from copy import copy
+    from math import atan, pi, sqrt, atan2, degrees, sin, cos
+
+    ier=0
+
+    # Concepts sortant
+    self.DeclareOut('__TAB',TABLE)
+    self.DeclareOut('__ECR_F1',CHARGE_THER1)
+    self.DeclareOut('__ECR_F2',CHARGE_THER2)
+    self.DeclareOut('__ECR_P',CHARGE_MECA)
+    self.DeclareOut('__DEB',DEBIT)
+
+    # La macro compte pour 1 dans la numerotation des commandes
+    self.set_icmd(1)
+
+    # Parametres debug
+    debug = False
+
+    # Fonctionnalitees cachees :
+    # 1- oldVersion : "=True" permet de retourner un chargement thermique defini selon l'ancien mode (flux thermique)
+    #                 ATTENTION!! L'ancienne version ne marche que avec la fissure orientee dans la direction Y,
+    #                 et avec le point initila en y=0!!
+    # 2- chargeLin : "=True" permet d'appliquer le chargement d'Ecrevisse avec interpolation lineaire sur le mailles,
+    #                 et non constant par maille, comme c'est par defaut
+    oldVersion = False
+    chargeLin  = False
+
+
+    # Parametres developpeur
+    tmp_ecrevisse = "tmp_ecrevisse"
+
+    # Info
+    info2 = (INFO==2)
+    InfoAster = 1
+    if debug :
+        info2=True
+
+    # IMPORTATION DE COMMANDES ASTER
+    DEFI_GROUP       = self.get_cmd("DEFI_GROUP")
+    POST_RELEVE_T    = self.get_cmd("POST_RELEVE_T")
+    MACR_ECRE_CALC   = self.get_cmd("MACR_ECRE_CALC")
+    IMPR_TABLE       = self.get_cmd("IMPR_TABLE")
+    DETRUIRE         = self.get_cmd("DETRUIRE")
+    IMPR_CO          = self.get_cmd("IMPR_CO")
+    DEFI_FONCTION    = self.get_cmd("DEFI_FONCTION")
+    CREA_TABLE       = self.get_cmd("CREA_TABLE")
+    IMPR_TABLE       = self.get_cmd("IMPR_TABLE")
+    CO               = self.get_cmd("CO")
+    AFFE_CHAR_THER_F = self.get_cmd("AFFE_CHAR_THER_F")
+    AFFE_CHAR_MECA_F = self.get_cmd("AFFE_CHAR_MECA_F")
+    DEFI_FICHIER     = self.get_cmd("DEFI_FICHIER")
+    DEFI_CONSTANTE   = self.get_cmd("DEFI_CONSTANTE")
+
+    # RECUPERATION DES MOTS-CLES FACTEURS
+    dRESULTAT=RESULTAT[0].cree_dict_valeurs(RESULTAT[0].mc_liste)
+    for i in dRESULTAT.keys():
+        if dRESULTAT[i]==None : del dRESULTAT[i]
+
+    dECOULEMENT=ECOULEMENT[0].cree_dict_valeurs(ECOULEMENT[0].mc_liste)
+    for i in dECOULEMENT.keys():
+        if dECOULEMENT[i]==None : del dECOULEMENT[i]
+
+    dMODELE_ECRE=MODELE_ECRE[0].cree_dict_valeurs(MODELE_ECRE[0].mc_liste)
+    for i in dMODELE_ECRE.keys():
+        if dMODELE_ECRE[i]==None : dMODELE_ECRE[i]=None #del dMODELE_ECRE[i]
+
+    dCONVERGENCE=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
+    for i in dCONVERGENCE.keys():
+        if dCONVERGENCE[i]==None : del dCONVERGENCE[i]
+
+
+    # INSTANTS
+    _l_inst = dRESULTAT['MECANIQUE'].LIST_VARI_ACCES()
+    if dRESULTAT.has_key('INST'):
+        Inst_Ecrevisse = dRESULTAT['INST']
+    else:
+        pass
+
+
+    # INITIATION DES CHARGEMENTS ECREVISSE --> ASTER :
+    #     liste des mots cles facteurs de PRES_REP pour chaque fissure
+    l_PRES_REP = []
+    if oldVersion :
+        # liste des mots cles facteurs de FLUX_REP pour le flux F1/F2
+        #     de chaque fissure (soit sur les deux levres :GROUP_MA[0], GROUP_MA[1])
+        l_FLUX_REP_F1 = []
+        l_FLUX_REP_F2 = []
+    else :
+        # liste des mots cles facteurs de ECHANGE pour le flux F1/F2
+        #     de chaque fissure (soit sur les deux levres :GROUP_MA[0], GROUP_MA[1])
+        l_ECHANGE_F1 = []
+        l_ECHANGE_F2 = []
+
+
+
+    # ON CREE LES GROUP_NO ORDONNES DES LEVRES DE FISSURE
+    #     Liste des noms des groupes de noeuds du maillage :
+    _lgno = map(lambda x: x[0], MODELE_MECA['MAILLAGE'].LIST_GROUP_NO() )
+
+    for k, fissure in enumerate(FISSURE):
+        dFISSURE=fissure.cree_dict_valeurs(fissure.mc_liste)
+        for i in dFISSURE.keys():
+            if dFISSURE[i]==None : del dFISSURE[i]
+
+        # On cree les group_no correspondant aux group_ma des levres de la fissure dans le cas ou ils n'existent pas deja
+        if not dFISSURE['GROUP_MA'][0] in _lgno:
+            DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
+                       MAILLAGE=MODELE_MECA['MAILLAGE'],
+                       CREA_GROUP_NO=_F(GROUP_MA=(dFISSURE['GROUP_MA'][0]),),);
+
+        if not dFISSURE['GROUP_MA'][1] in _lgno:
+            DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
+                       MAILLAGE=MODELE_MECA['MAILLAGE'],
+                       CREA_GROUP_NO=_F(GROUP_MA=(dFISSURE['GROUP_MA'][1]),),);
+
+        # Test sur le nombre de caracteres du nom des group_ma
+        if (len(dFISSURE['GROUP_MA'][0]) >7 or len(dFISSURE['GROUP_MA'][1]) >7):
+            sys.exit(1)
+
+        # Creation des group_no ordonnes des levres des fissures
+        _nom_gno_1 = '_' + dFISSURE['GROUP_MA'][0]
+        if not _nom_gno_1 in _lgno:
+            DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
+                       MAILLAGE=MODELE_MECA['MAILLAGE'],
+                       CREA_GROUP_NO=_F(OPTION='SEGM_DROI_ORDO',
+                                        NOM=_nom_gno_1,
+                                        GROUP_NO=dFISSURE['GROUP_MA'][0],
+                                        GROUP_NO_ORIG=dFISSURE['GROUP_NO_ORIG'][0],
+                                        GROUP_NO_EXTR=dFISSURE['GROUP_NO_EXTR'][0],
+                                        PRECISION=0.01,
+                                        CRITERE='RELATIF',),
+                       INFO=InfoAster,);
+
+        _nom_gno_2 = '_' + dFISSURE['GROUP_MA'][1]
+        if not _nom_gno_2 in _lgno:
+            DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
+                        MAILLAGE=MODELE_MECA['MAILLAGE'],
+                        CREA_GROUP_NO=_F(OPTION='SEGM_DROI_ORDO',
+                                        NOM=_nom_gno_2,
+                                        GROUP_NO=dFISSURE['GROUP_MA'][1],
+                                        GROUP_NO_ORIG=dFISSURE['GROUP_NO_ORIG'][1],
+                                        GROUP_NO_EXTR=dFISSURE['GROUP_NO_EXTR'][1],
+                                        PRECISION=0.01,
+                                        CRITERE='RELATIF',),
+                        INFO=InfoAster,);
+
+
+
+        # EXTRACTIONS DE QUANTITES NECESSAIRES DES RESULTATS THERMIQUE ET MECANIQUE
+        #  On cree les chargements Aster --> Ecrevisse :
+        #     ouverture de fissure et temperature sur le materiau
+
+        # premiere levre de fissure
+        _T_DPL=POST_RELEVE_T(ACTION=_F(INTITULE='DEP_FIS1',
+                                      GROUP_NO=_nom_gno_1,
+                                      RESULTAT=dRESULTAT['MECANIQUE'],
+                                      NOM_CHAM='DEPL',
+                                      NOM_CMP=('DX','DY',),
+                                      INST = Inst_Ecrevisse,
+                                      OPERATION='EXTRACTION',),
+                                      );
+
+        _T_TEMP=POST_RELEVE_T(ACTION=_F(INTITULE='TEMP_FI1',
+                                        GROUP_NO=_nom_gno_1,
+                                        RESULTAT=dRESULTAT['THERMIQUE'],
+                                        NOM_CHAM='TEMP',
+                                        TOUT_CMP='OUI',
+                                        INST = Inst_Ecrevisse,
+                                        OPERATION='EXTRACTION',),);
+
+        # deuxieme levre de la fissure
+        _T_DPL_B=POST_RELEVE_T(ACTION=_F(INTITULE='DEP_FIS2',
+                                        GROUP_NO=_nom_gno_2,
+                                        RESULTAT=dRESULTAT['MECANIQUE'],
+                                        NOM_CHAM='DEPL',
+                                        NOM_CMP=('DX','DY',),
+                                        INST = Inst_Ecrevisse,
+                                        OPERATION='EXTRACTION',),);
+
+        _T_TEMPB=POST_RELEVE_T(ACTION=_F(INTITULE='TEMP_FI2',
+                                          GROUP_NO=_nom_gno_2,
+                                          RESULTAT=dRESULTAT['THERMIQUE'],
+                                          NOM_CHAM='TEMP',
+                                          TOUT_CMP='OUI',
+                                          INST = Inst_Ecrevisse,
+                                          OPERATION='EXTRACTION',),);
+
+        if ( debug ) :
+            print '_T_DPL ==================================================='
+            print  _T_DPL.EXTR_TABLE()
+            print '_T_DPL_B ================================================='
+            print  _T_DPL_B.EXTR_TABLE()
+            print '_T_TEMP ================================================='
+            print  _T_TEMP.EXTR_TABLE()
+            print '_T_TEMP_B ==============================================='
+            print  _T_TEMPB.EXTR_TABLE()
+
+        # Extraction des tables Temperatures + deplacement levres fissure
+        _tbl_temp = _T_TEMP.EXTR_TABLE()
+        _tbl_dpl   = _T_DPL.EXTR_TABLE()
+        DETRUIRE(CONCEPT=_F(NOM=(_T_DPL,_T_TEMP,)),INFO=1,ALARME='NON')
+        _tbl_dpl_b  = _T_DPL_B.EXTR_TABLE()
+        _tbl_temp_b = _T_TEMPB.EXTR_TABLE()
+        DETRUIRE(CONCEPT=_F(NOM=(_T_DPL_B,_T_TEMPB,)),INFO=1,ALARME='NON')
+
+
+        # --Determination des cotes a donner a ecrevisse--
+        #   a partir des resultats mecanique et thermique :
+        _l_tang   = _tbl_dpl.values()['ABSC_CURV']
+        _l_tang_b = _tbl_dpl_b.values()['ABSC_CURV']
+        try :
+            _l_absz_m   = map(lambda x,y: 0.5*(x+y), _l_tang,_l_tang_b)
+        except TypeError :
+            UTMESS('F','ECREVISSE0_40')
+        #
+        _l_tang_t  = _tbl_temp.values()['ABSC_CURV']
+        _l_tang_t_b  = _tbl_temp_b.values()['ABSC_CURV']
+        _l_absz_t   = map(lambda x,y: 0.5*(x+y), _l_tang_t,_l_tang_t_b)
+
+
+       # Coordonnees des points des levres (initiales et a l instant actuel
+        _X0    = _tbl_dpl.values()['COOR_X']
+        _Y0    = _tbl_dpl.values()['COOR_Y']
+        _X0_b  = _tbl_dpl_b.values()['COOR_X']
+        _Y0_b  = _tbl_dpl_b.values()['COOR_Y']
+        _X    = [x + y for (x,y) in zip(_tbl_dpl.values()['DX'],_X0)]
+        _Y    = [x + y for (x,y) in zip(_tbl_dpl.values()['DY'],_Y0)]
+        _X_b    = [x + y for (x,y) in zip(_tbl_dpl_b.values()['DX'],_X0_b)]
+        _Y_b    = [x + y for (x,y) in zip(_tbl_dpl_b.values()['DY'],_Y0_b)]
+
+
+        # Determination de la direction de la fissure
+        (DIR_FISS, DIR_PREV, beta, theta, _xi, _yi) = dirfiss(_X,_Y,_X_b,_Y_b)
+        if oldVersion :
+            (DIR_FISS, DIR_PREV, beta, theta, _xi, _yi) = dirfiss(_X0,_Y0,_X0_b,_Y0_b)
+
+        if (DIR_FISS == 'GEN') and oldVersion :
+            UTMESS('F','ECREVISSE0_23', valr=[theta])
+
+        # --Calcul de l ouverture de fissure--
+        #     une fissure refermee a une ouverture
+        #     egale a l'ouverture remanente
+        (_l_ouv0,_l_gli0) = ouvFiss(DIR_FISS,beta,_X0,_Y0,_X0_b,_Y0_b)
+        for i in range(len(_l_ouv0)) :
+            if _l_ouv0[i] < dFISSURE['OUVERT_REMANENTE'] :
+                UTMESS('A','ECREVISSE0_39')
+
+
+        (_l_ouv,_l_gli)   = ouvFiss(DIR_FISS,beta,_X,_Y,_X_b,_Y_b)
+        if dFISSURE['OUVERT_REMANENTE'] :
+            _l_ouv = map(lambda x: max(dFISSURE['OUVERT_REMANENTE'],x), _l_ouv)
+            if info2 :
+                nbOuvRem = _l_ouv.count(dFISSURE['OUVERT_REMANENTE'])
+                if nbOuvRem != 0 :
+                    UTMESS('I', 'ECREVISSE0_41',valr=[nbOuvRem])
+
+
+
+        # Controle sur l entite du glissement entre les levres
+        DeltaMaille = [abs(y-x) for (x,y) in zip(_l_absz_m[1:len(_l_absz_m)], _l_absz_m[0:len(_l_absz_m)-1])]
+        for i in range(len(DeltaMaille)) :
+            deltamai = DeltaMaille[i]
+            if (deltamai <= _l_gli[i]) or (deltamai <= _l_gli[i+1]) :
+                UTMESS('A', 'ECREVISSE0_38')
+                break
+
+
+        # -- Calcul de la temperature sur le materiau (levres de la fissure) --
+        #     on fait la moyenne des temperatures des deux levres
+        _l_t2  = _tbl_temp.values()['TEMP']
+        _l_t2_b  = _tbl_temp_b.values()['TEMP']
+        _l_temp_aster  = map(lambda x,y: 0.5*(x+y), _l_t2_b,_l_t2)
+
+
+        # Infos / Debug : fichier .mess ou .resu
+        if (info2) :
+            UTMESS('I', 'ECREVISSE0_1', valk=["Premiere levre"],
+                valr=[Inst_Ecrevisse, min(_l_tang_t), max(_l_tang_t), min(_l_t2), max(_l_t2), min(_l_tang), max(_l_tang)])
+            UTMESS('I', 'ECREVISSE0_1',valk=["Deuxieme levre"],
+                    valr=[Inst_Ecrevisse,min(_l_tang_t_b), max(_l_tang_t_b), min(_l_t2_b), max(_l_t2_b), min(_l_tang_b), max(_l_tang_b)])
+            UTMESS('I', 'ECREVISSE0_2',
+                    valr=[Inst_Ecrevisse, min(_l_absz_t), max(_l_absz_t), min(_l_temp_aster), max(_l_temp_aster), min(_l_absz_m), max(_l_absz_m), min(_l_ouv), max(_l_ouv), min(_l_gli),max(_l_gli)])
+
+
+        if ( debug ) :
+            print "\n INFORMATIONS DE DEBUG: "
+            print 'Inst_Ecrevisse=', Inst_Ecrevisse
+            print 'theta:', theta
+            print 'beta:', beta
+            print 'DIR_FISS:', DIR_FISS
+            print 'DIR_PREV:', DIR_PREV
+            print 'point initial de la fissure: (xi,yi) :', _xi,_yi
+            print len(_X0),   '_X0  =', _X0
+            print len(_X0_b), '_X0_b=', _X0_b
+            print len(_Y0),   '_Y0  =', _Y0
+            print len(_Y0_b), '_Y0_b=', _Y0_b
+            print len(_X),    '_X   =', _X
+            print len(_Y),    '_Y   =', _Y
+            print len(_X_b),  '_X_b =', _X_b
+            print len(_Y_b),  '_Y_b =', _Y_b
+            print 'Controle sur les abszisses curvilignes (mecaniques/thermiques) '
+            print '_l_absz_m==_l_absz_t?', _l_absz_m==_l_absz_t
+            print '_l_absz_m=', len(_l_absz_m),_l_absz_m
+            print '_l_absz_t=', len(_l_absz_t),_l_absz_t
+            print '_l_temp_aster=', len(_l_temp_aster),_l_temp_aster
+            print '_l_ouv=', len(_l_ouv),_l_ouv
+            print '_l_gli=', len(_l_gli),_l_gli
+            print '_l_tang=', _l_tang
+            print '_l_tang_b=', _l_tang
+
+
+# ----------------------------------------------------------------------------
+#       PREPARATION ET LANCEMENT D ECREVISSE
+
+        # TESTS de non divergence, les messages sont assez explicites :
+        # Si toutes les listes sont bien definies
+        if len(_l_absz_m)*len(_l_ouv)*len(_l_absz_t)*len(_l_temp_aster) == 0:
+            UTMESS('F','ECREVISSE0_3', valr=[Inst_Ecrevisse])
+            __TAB = None
+            break
+        # Si les ouvertures ne sont pas trop faibles
+        elif min(_l_ouv) < 1e-20:
+            UTMESS('F','ECREVISSE0_4', valr=[Inst_Ecrevisse, min(_l_ouv)])
+            __TAB = None
+            break
+        elif max(_l_t2) > 700:
+            UTMESS('F','ECREVISSE0_5', valr=[Inst_Ecrevisse, max(_l_t2)])
+            __TAB = None
+            break
+        elif max(_l_t2_b) > 700:
+            UTMESS('F','ECREVISSE0_5', valr=[Inst_Ecrevisse, max(_l_t2_b )])
+            __TAB = None
+            break
+        elif min(_l_t2) < 0:
+            UTMESS('F','ECREVISSE0_6', valr=[Inst_Ecrevisse, min(_l_t2 )])
+            __TAB = None
+            break
+        elif min(_l_t2_b) < 0:
+            UTMESS('F','ECREVISSE0_6', valr=[Inst_Ecrevisse, min(_l_t2_b )])
+            __TAB = None
+            break
+        elif abs( float(dECOULEMENT['PRES_ENTREE']) - float(dECOULEMENT['PRES_SORTIE']) )< 5:
+            UTMESS('F','ECREVISSE0_7', valr=[Inst_Ecrevisse, abs( float(dECOULEMENT['PRES_ENTREE']) - float(dECOULEMENT['PRES_SORTIE']) ) ] )
+            __TAB = None
+            break
+        # On lance Ecrevisse!
+        else:
+            UTMESS('I','ECREVISSE0_8', valr=[Inst_Ecrevisse])
+
+            # On efface le rep
+            try:
+                for fic in os.listdir(os.path.join(os.getcwd(),tmp_ecrevisse)):
+                    try:
+                        os.remove( os.path.join(os.getcwd(),tmp_ecrevisse) + '/' + fic )
+                    except:
+                        pass
+            except:
+                pass
+
+            # Recalcul des cotes par rapport a la tortuoiste
+            tort = dFISSURE['TORTUOSITE']
+            try :
+                _l_absz_m = [x/tort for x in _l_absz_m]
+                _l_absz_t = [x/tort for x in _l_absz_t]
+            except ZeroDivisionError :
+                UTMESS('F','ECREVISSE0_42')
+
+
+            if dFISSURE.has_key('LISTE_COTES_BL'):
+                __LISTE_COTES_BL = dFISSURE['LISTE_COTES_BL']
+            else:
+                __LISTE_COTES_BL = (0., max(_l_absz_m))
+
+            # Mot-cle ECOULEMENT
+            txt = {}
+            txt = { 'PRES_ENTREE' : dECOULEMENT['PRES_ENTREE'],
+                    'PRES_SORTIE' : dECOULEMENT['PRES_SORTIE'],
+                    'FLUIDE_ENTREE'   : dECOULEMENT['FLUIDE_ENTREE'],
+                    }
+            if int(dECOULEMENT['FLUIDE_ENTREE']) in [1, 3, 4, 6]:
+                txt['TEMP_ENTREE'] = dECOULEMENT['TEMP_ENTREE']
+            if int(dECOULEMENT['FLUIDE_ENTREE']) in [2, 5]:
+                txt['TITR_MASS'] = dECOULEMENT['TITR_MASS']
+            if int(dECOULEMENT['FLUIDE_ENTREE']) in [4, 5]:
+                txt['PRES_PART'] = dECOULEMENT['PRES_PART']
+
+
+            # Traitement des cas ou les mots cles reynold, xminch, etc... ne doivent pas apparaitre
+            # Mot-cle MODELE_ECRE
+            txt2 = {}
+            txt2['ECOULEMENT'] = dMODELE_ECRE['ECOULEMENT']
+            if dMODELE_ECRE['ECOULEMENT'] == 'GELE' :
+                txt2['PRESS_EBULLITION'] = dMODELE_ECRE['PRESS_EBULLITION']
+
+            txt2['FROTTEMENT'] = dMODELE_ECRE['FROTTEMENT']
+
+            if int(dMODELE_ECRE['FROTTEMENT']) in [-4,-3,-2,-1] :
+                txt2['REYNOLDS_LIM'] = dMODELE_ECRE['REYNOLDS_LIM']
+                txt2['FROTTEMENT_LIM'] = dMODELE_ECRE['FROTTEMENT_LIM']
+
+            txt2['TRANSFERT_CHAL'] = dMODELE_ECRE['TRANSFERT_CHAL']
+            if int(dMODELE_ECRE['TRANSFERT_CHAL']) in [-2,-1] :
+                txt2['XMINCH'] = dMODELE_ECRE['XMINCH']
+                txt2['XMAXCH'] = dMODELE_ECRE['XMAXCH']
+
+            try :
+                if dMODELE_ECRE['IVENAC'] in [0, 1]:
+                    txt2['IVENAC'] = dMODELE_ECRE['IVENAC']
+                else :
+                    txt2['IVENAC'] = 0
+            except :
+                txt2['IVENAC'] = 0
+
+            motscle2= {'ECOULEMENT': txt, 'MODELE_ECRE' : txt2 }
+
+            DETRUIRE(OBJET=_F(CHAINE = '_TAB2' ),INFO=1,ALARME='NON')
+            DETRUIRE(OBJET=_F(CHAINE = '_DEB2' ),INFO=1,ALARME='NON')
+            __TAB_i = CO('_TAB2')
+            __DEB_i = CO('_DEB2')
+
+            MACR_ECRE_CALC(TABLE      = __TAB_i,
+                           DEBIT      = __DEB_i,
+                           ENTETE     = ENTETE,
+                           COURBES    = COURBES,
+                           IMPRESSION = IMPRESSION,
+                           INFO       = INFO,
+                           LOGICIEL   = LOGICIEL,
+                           VERSION    = VERSION,
+                           FISSURE    = _F(LONGUEUR        = max(_l_absz_m),
+                                            ANGLE              = theta,
+                                            RUGOSITE           = dFISSURE['RUGOSITE'],
+                                            ZETA               = dFISSURE['ZETA'],
+                                            SECTION            = dFISSURE['SECTION'],
+                                            LISTE_COTES_AH     = _l_absz_m,
+                                            LISTE_VAL_AH       = _l_ouv,
+                                            LISTE_COTES_BL     = __LISTE_COTES_BL,
+                                            LISTE_VAL_BL       = dFISSURE['LISTE_VAL_BL'],
+                                            ),
+                           TEMPERATURE=_F(GRADIENT       = 'FOURNI',
+                                        LISTE_COTES_TEMP = _l_absz_t,
+                                        LISTE_VAL_TEMP   = _l_temp_aster,
+                                       ),
+                           CONVERGENCE=_F(KGTEST         = dCONVERGENCE['KGTEST'],
+                                          ITER_GLOB_MAXI = dCONVERGENCE['ITER_GLOB_MAXI'],
+                                          CRIT_CONV_DEBI = dCONVERGENCE['CRIT_CONV_DEBI'],
+                                       ),
+                           **motscle2
+                           );
+
+
+#-------------------------------------------------------------
+#           EXTRACTION DES RESULTATS D ECREVISSE
+
+
+
+            # Creation de la table
+            __TABFISS_i = __TAB_i.EXTR_TABLE()
+
+            nb_lignes_table = len(__TABFISS_i["COTES"])
+            # Re-definition des cotes utilisateur (on elimine l effet de la tortuosite)
+            _lst_c   =  __TABFISS_i.COTES.values()
+            _l_cotes = [x*tort for x in _lst_c]
+            dictTab =  __TABFISS_i.dict_CREA_TABLE()['LISTE']
+
+            __TABFISS_i = CREA_TABLE(LISTE = (
+                            _F(PARA = "COTES",     LISTE_R = _l_cotes,),
+                            _F(PARA = "FLUX",      LISTE_R = dictTab[1]['LISTE_R'],),
+                            _F(PARA = "PRESSION",  LISTE_R = dictTab[2]['LISTE_R'],),
+                            _F(PARA = "TEMP",      LISTE_R = dictTab[3]['LISTE_R'],),
+                            _F(PARA = "COEF_CONV", LISTE_R = dictTab[4]['LISTE_R'],),
+                            ),)
+
+            DETRUIRE(OBJET=_F(CHAINE = '__TAB_i' ),INFO=1,ALARME='NON')
+            DETRUIRE(OBJET=_F(CHAINE = '__DEB_i' ),INFO=1,ALARME='NON')
+
+            if ( debug ):
+               os.system('ls -al ' + os.path.join(os.getcwd(),tmp_ecrevisse) )
+
+            if dFISSURE['PREFIXE_FICHIER'] :
+                pref_fic = dFISSURE['PREFIXE_FICHIER']
+            else :
+                pref_fic = 'FISSURE'+str(k+1)
+
+            ## Ecriture du fichier debits en fonction du temps:
+            #try:
+                ## on lit le fichier debit produit par ecrevisse
+                #f_ast = open(os.path.join(tmp_ecrevisse, 'debits'),'r')
+                #_txt = f_ast.read()
+                #f_ast.close()
+                #nomfic = str(pref_fic) + '_debits'
+                ## on concatene
+                #fw = open( os.getcwd() + os.sep + 'REPE_OUT' + os.sep + nomfic, 'a')
+                #fw.write( str(Inst_Ecrevisse) + ' ' + _txt )
+                #fw.close()
+                ## On recopie le fichier debits pour reprise ulterieure
+                #nomfic2 = 'debits_dernier'
+                #fw = open( os.getcwd() + os.sep + 'REPE_OUT' + os.sep + nomfic2, 'w')
+                #fw.write( _txt )
+                #fw.close()
+            #except Exception, e:
+                #print e
+
+            # CREATION DES COURBES:
+            if COURBES != "AUCUNE":
+                # Pour masquer certaines alarmes
+
+                MasquerAlarme('TABLE0_6')
+
+                nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_flux'+ '_' + str(Inst_Ecrevisse))
+                if not os.path.isfile(nomfic): acces='NEW'
+                else: acces='APPEND'
+
+                DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
+                IMPR_TABLE(FORMAT='XMGRACE',
+                          TABLE=__TABFISS_i,
+                          UNITE=55,
+                          PILOTE=COURBES,
+                          NOM_PARA=('COTES','FLUX',),
+                          TITRE='Flux de chaleur a l\'instant %s' % Inst_Ecrevisse,
+                          LEGENDE_X='Abscisse curviligne (m)',
+                          LEGENDE_Y='Flux (W/m2)',
+                          COULEUR  = 1,
+                          MARQUEUR = 1,
+                          );
+                DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
+
+                nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_temperature'+ '_' + str(Inst_Ecrevisse))
+                if not os.path.isfile(nomfic): acces='NEW'
+                else: acces='APPEND'
+
+                DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
+                IMPR_TABLE(FORMAT='XMGRACE',
+                          TABLE=__TABFISS_i,
+                          UNITE=55,
+                          PILOTE=COURBES,
+                          NOM_PARA=('COTES','TEMP',),
+                          TITRE='Temperature a l\'instant %s' % Inst_Ecrevisse,
+                          LEGENDE_X='Abscisse curviligne (m)',
+                          LEGENDE_Y='Temperature (degres C)',
+                          COULEUR  = 2,
+                          MARQUEUR = 2,
+                          );
+                DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
+
+                nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_coeffconv'+ '_' + str(Inst_Ecrevisse))
+                if not os.path.isfile(nomfic): acces='NEW'
+                else: acces='APPEND'
+
+                DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
+                IMPR_TABLE(FORMAT='XMGRACE',
+                          TABLE=__TABFISS_i,
+                          UNITE=55,
+                          PILOTE=COURBES,
+                          NOM_PARA=('COTES','COEF_CONV',),
+                          TITRE='Coefficient de convection a l\'instant %s' % Inst_Ecrevisse,
+                          LEGENDE_X='Abscisse curviligne (m)',
+                          LEGENDE_Y='Coefficient de convection (W/m2/K)',
+                          COULEUR  = 3,
+                          MARQUEUR = 3,
+                          );
+                DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
+
+
+                nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_pression'+ '_' + str(Inst_Ecrevisse))
+                if not os.path.isfile(nomfic): acces='NEW'
+                else: acces='APPEND'
+
+                DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
+                IMPR_TABLE(FORMAT='XMGRACE',
+                          TABLE=__TABFISS_i,
+                          UNITE=55,
+                          PILOTE=COURBES,
+                          NOM_PARA=('COTES','PRESSION',),
+                          TITRE='Pression a l\'instant %s' % Inst_Ecrevisse,
+                          LEGENDE_X='Abscisse curviligne (m)',
+                          LEGENDE_Y='Pression (Pa)',
+                          COULEUR  = 4,
+                          MARQUEUR = 4,
+                          );
+                DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
+
+                # Pour la gestion des alarmes
+                RetablirAlarme('TABLE0_6')
+
+
+
+            # On recopie dans REPE_OUT les fichiers resultats d'Ecrevisse
+            tmp_ecrevisse_absolu = os.path.join(os.getcwd(),tmp_ecrevisse)
+            repe_out_absolu = os.path.join(os.getcwd(),'REPE_OUT')
+            for file in os.listdir(tmp_ecrevisse_absolu):
+                if not file in ['ecrevisse', 'ecrevisse.sh']:
+                    old_file = os.path.join(tmp_ecrevisse_absolu, file)
+                    new_file = os.path.join(repe_out_absolu, str(pref_fic) + '_' + file + '_' + str(Inst_Ecrevisse))
+                    shutil.copy(old_file, new_file)
+
+            # Creation de la table resultat sur toutes les fissures :
+            #  Nom de la fissure
+            nom_fiss = dFISSURE['GROUP_MA'][0] + "-" + dFISSURE['GROUP_MA'][1]
+            __TABFISS_i = __TABFISS_i.EXTR_TABLE()
+            __DEBFISS_i = __DEB_i.EXTR_TABLE()
+            __TABFISS_i["FISSURE"] = [nom_fiss]*nb_lignes_table
+            __DEBFISS_i["FISSURE"] = [nom_fiss]
+
+            if k==0 :
+                __TABFISS_tot = __TABFISS_i
+                __DEBFISS_tot = __DEBFISS_i
+            else :
+                __TABFISS_tot = merge(__TABFISS_tot, __TABFISS_i)
+                __DEBFISS_tot = merge(__DEBFISS_tot, __DEBFISS_i)
+
+
+            if ( debug ):
+                os.system('ls -al ' + os.path.join(os.getcwd(),tmp_ecrevisse) )
+
+#--------------------------------------------------------------
+#           CREATIONS DES CHARGEMENTS ASTER
+
+            # Recuperation des valeurs dans la table (voir si il y a plus simple)
+            _lst_c  = __TABFISS_i.COTES.values()
+            _lst_f  = __TABFISS_i.FLUX.values()
+            _lst_p  = __TABFISS_i.PRESSION.values()
+            _lst_t  = __TABFISS_i.TEMP.values()
+            _lst_cc = __TABFISS_i.COEF_CONV.values()
+
+
+            try:
+                a=len(_lst_c)
+            except:
+                _lst_c = []
+                _lst_f = []
+                _lst_p = []
+                _lst_t = []
+                _lst_cc = []
+            try:
+                if _lst_c[1]==0:
+                    _lst_c = []
+                    _lst_f = []
+                    _lst_p = []
+                    _lst_t = []
+                    _lst_cc = []
+            except:
+                pass
+
+
+
+            # ------------------------------------------------------
+            # Extraction des conditions limites du calcul Ecrevisse
+            #
+            if len(_lst_c)>=2:
+                if not chargeLin :
+                    nbCotes     = len(_l_absz_m)
+                    nbCotesEcre = nbCotes-1
+
+                    # epsilon pour le decalage :
+                    #   le chargement est uniforme par maille
+                    if _X0[1]>=_X0[0] :
+                        epsx = 1.e-8
+                    else :
+                        epsx = -1.e-8
+                    if _Y0[1]>=_Y0[0] :
+                        epsy = 1.e-8
+                    else :
+                        epsy = -1.e-8
+
+                    _lst_x0   = []
+                    _lst_y0   = []
+                    _lst_x0_b = []
+                    _lst_y0_b = []
+                    ly        = []
+                    ly2       = []
+                    ly3       = []
+                    ly4       = []
+
+                    _lst_x0.append(_X0[0])
+                    _lst_y0.append(_Y0[0])
+                    _lst_x0_b.append(_X0_b[0])
+                    _lst_y0_b.append(_Y0_b[0])
+                    ly.append( _lst_f[0] )
+                    ly2.append( _lst_p[0] )
+                    ly3.append( _lst_t[0] )
+                    ly4.append( _lst_cc[0] )
+
+                    for i in range(nbCotes-2):
+                        x = _X0[i+1]
+                        y = _Y0[i+1]
+                        toto1 =  x - epsx
+                        toto2 =  x + epsx
+
+                        _lst_x0.append( x - epsx )
+                        _lst_x0.append( x + epsx )
+                        _lst_y0.append( y - epsy )
+                        _lst_y0.append( y + epsy )
+                        x = _X0_b[i+1]
+                        y = _Y0_b[i+1]
+                        _lst_x0_b.append( x - epsx )
+                        _lst_x0_b.append( x + epsx )
+                        _lst_y0_b.append( y - epsy )
+                        _lst_y0_b.append( y + epsy )
+                        ly.append( _lst_f[i] )
+                        ly.append( _lst_f[i+1] )
+                        ly2.append( _lst_p[i] )
+                        ly2.append( _lst_p[i+1] )
+                        ly3.append( _lst_t[i] )
+                        ly3.append( _lst_t[i+1] )
+                        ly4.append( _lst_cc[i] )
+                        ly4.append( _lst_cc[i+1] )
+
+                    _lst_x0.append( _X0[nbCotes-1] )
+                    _lst_y0.append( _Y0[nbCotes-1] )
+                    _lst_x0_b.append( _X0_b[nbCotes-1] )
+                    _lst_y0_b.append( _Y0_b[nbCotes-1] )
+                    ly.append( _lst_f[nbCotesEcre-1] )
+                    ly2.append( _lst_p[nbCotesEcre-1] )
+                    ly3.append( _lst_t[nbCotesEcre-1] )
+                    ly4.append( _lst_cc[nbCotesEcre-1] )
+                    _lst_f = ly
+                    _lst_p = ly2
+                    _lst_t = ly3
+                    _lst_cc = ly4
+                else :
+                    _lst_x0   = [(x1+x2)*0.5 for (x1,x2) in zip(_X0[0:len(_X0)-1],_X0[1:len(_X0)])]
+                    _lst_y0   = [(x1+x2)*0.5 for (x1,x2) in zip(_Y0[0:len(_Y0)-1],_Y0[1:len(_Y0)])]
+                    _lst_x0_b = [(x1+x2)*0.5 for (x1,x2) in zip(_X0_b[0:len(_X0_b)-1],_X0_b[1:len(_X0_b)])]
+                    _lst_y0_b = [(x1+x2)*0.5 for (x1,x2) in zip(_Y0_b[0:len(_Y0_b)-1],_Y0_b[1:len(_Y0_b)])]
+                    _lst_x0.append(_X0[-1])
+                    _lst_x0_b.append(_X0_b[-1])
+                    _lst_y0.append(_Y0[-1])
+                    _lst_y0_b.append(_Y0_b[-1])
+
+                # ANCIENNE VERSION (TRANSMISSION DES FLUX THERMIQUES
+                if(oldVersion) :
+                    alpha = round(theta)
+                    if DIR_FISS == 'X' :
+                        levre1pos = ((_Y0[0]-_yi)>=0.)
+                        if alpha == -90. :
+                            _lst_x0.reverse()
+                            _lst_p.reverse()
+                            _lst_f.reverse()
+                        _lst_dir = _lst_x0
+                    else :
+                        levre1pos = ((_X0[0]-_xi)>=0.)
+                        if abs(alpha) == 180. :
+                            _lst_y0.reverse()
+                            _lst_p.reverse()
+                            _lst_f.reverse()
+                        _lst_dir = _lst_y0
+
+                    # Creation des listes pour les chargements aster :
+                    #     (x1, y1, x2, y2, ...)
+                    _tmp1=[]
+                    _tmp2=[]
+                    _tmp3=[]
+
+                    for i in range(len(_lst_p)) :
+                        _tmp1.append( _lst_dir[i] )
+                        _tmp2.append( _lst_dir[i] )
+                        _tmp3.append( _lst_dir[i] )
+
+                        _tmp2.append( _lst_p[i] )
+                        if levre1pos :
+                            #_tmp1.append( -1*_lst_f[i] )
+                            #_tmp3.append( _lst_f[i] )
+                            _tmp1.append( _lst_f[i] )
+                            _tmp3.append( -1*_lst_f[i] )
+                        else :
+                            #_tmp1.append( _lst_f[i] )
+                            #_tmp3.append( -1*_lst_f[i] )
+                            _tmp1.append( -1*_lst_f[i] )
+                            _tmp3.append( _lst_f[i] )
+
+
+
+                    # Flux en provenance d'Ecrevisse
+                    _L_F1=DEFI_FONCTION(NOM_PARA=DIR_FISS,
+                                        VALE=_tmp1,
+                                        PROL_GAUCHE='LINEAIRE',
+                                        PROL_DROITE='LINEAIRE');
+
+                    _L_F2=DEFI_FONCTION(NOM_PARA=DIR_FISS,
+                                        VALE=_tmp3,
+                                        PROL_GAUCHE='LINEAIRE',
+                                        PROL_DROITE='LINEAIRE' );
+
+                    if DIR_FISS == 'X':
+                        l_FLUX_REP_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
+                                                                FLUX_Y=_L_F1,))
+                        l_FLUX_REP_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
+                                                                FLUX_Y=_L_F2,))
+                    else :
+                        l_FLUX_REP_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
+                                                                FLUX_X=_L_F1,))
+                        l_FLUX_REP_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
+                                                                FLUX_X=_L_F2,))
+
+                    # Pressions en provenance d'Ecrevisse
+                    _L_P=DEFI_FONCTION(NOM_PARA = DIR_FISS,
+                                        VALE    = _tmp2,
+                                        PROL_GAUCHE = 'LINEAIRE',
+                                        PROL_DROITE = 'LINEAIRE');
+
+                    l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][0],dFISSURE['GROUP_MA'][1]),
+                                                            PRES=_L_P,))
+
+
+
+                # NOUVELLE VERSION
+                else :
+                    # Creation des deux listes (x1, y1, x2, y2, ...)
+                    # On cree trois/six listes :
+                    # Les valeurs sont constant par maille sur les levres de la fissure,
+                    #  _tmp1/_tmp2 = temperature
+                    #  _tmp3/_tmp4 = coefficient d echange
+                    #  _tmp5/_tmp6 = pression
+                    _tmp1=[]
+                    _tmp2=[]
+                    _tmp3=[]
+                    _tmp4=[]
+                    _tmp5=[]
+                    _tmp6=[]
+
+                    for i in range(len(_lst_f)) :
+                        ix = copy(i)
+                        iy = copy(i)
+                        if _X0[1]<_X0[0] :
+                            ix = len(_lst_f)-1-i
+                        if _Y0[1]<_Y0[0] :
+                            iy = len(_lst_f)-1-i
+
+                        if (DIR_PREV=='X'):
+                            _tmp1.append( _lst_x0[ix] )
+                            _tmp1.append( _lst_t[ix] )
+                            _tmp3.append( _lst_x0[ix] )
+                            _tmp3.append( _lst_cc[ix] )
+                            _tmp5.append( _lst_x0[ix] )
+                            _tmp5.append( _lst_p[ix] )
+                            _tmp2.append( _lst_x0_b[ix] )
+                            _tmp2.append( _lst_t[ix] )
+                            _tmp4.append( _lst_x0_b[ix] )
+                            _tmp4.append( _lst_cc[ix] )
+                            _tmp6.append( _lst_x0_b[ix] )
+                            _tmp6.append( _lst_p[ix] )
+                        else :
+                            _tmp1.append( _lst_y0[iy] )
+                            _tmp1.append( _lst_t[iy] )
+                            _tmp3.append( _lst_y0[iy] )
+                            _tmp3.append( _lst_cc[iy] )
+                            _tmp5.append( _lst_y0[iy] )
+                            _tmp5.append( _lst_p[iy] )
+                            _tmp2.append( _lst_y0_b[iy] )
+                            _tmp2.append( _lst_t[iy] )
+                            _tmp4.append( _lst_y0_b[iy] )
+                            _tmp4.append( _lst_cc[iy] )
+                            _tmp6.append( _lst_y0_b[iy] )
+                            _tmp6.append( _lst_p[iy] )
+
+
+
+
+
+                    # Couplage thermique : Temperature et coefficients d'echange en provenance d'Ecrevisse
+                    _L_T1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+                                        VALE=_tmp1,
+                                        PROL_GAUCHE='LINEAIRE',
+                                        PROL_DROITE='LINEAIRE')
+
+                    _L_T2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+                                        VALE=_tmp2,
+                                        PROL_GAUCHE='LINEAIRE',
+                                        PROL_DROITE='LINEAIRE')
+
+                    _L_CC1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+                                        VALE=_tmp3,
+                                        PROL_GAUCHE='LINEAIRE',
+                                        PROL_DROITE='LINEAIRE')
+
+                    _L_CC2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+                                        VALE=_tmp4,
+                                        PROL_GAUCHE='LINEAIRE',
+                                        PROL_DROITE='LINEAIRE')
+
+                    l_ECHANGE_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
+                                                            TEMP_EXT=_L_T1,
+                                                            COEF_H=_L_CC2))
+
+                    l_ECHANGE_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
+                                                            TEMP_EXT=_L_T2,
+                                                            COEF_H=_L_CC2))
+
+                    # Couplage mecanique : Pressions en provenance d'Ecrevisse
+                    _L_P1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+                                        VALE=_tmp5,
+                                        PROL_GAUCHE='LINEAIRE',
+                                        PROL_DROITE='LINEAIRE')
+
+                    _L_P2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+                                        VALE=_tmp6,
+                                        PROL_GAUCHE='LINEAIRE',
+                                        PROL_DROITE='LINEAIRE')
+
+                    l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][0]),
+                                                            PRES=_L_P1,))
+                    l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][1]),
+                                                            PRES=_L_P2,))
+
+            # Fin extraction des conditions limites du calcul Ecrevisse
+            # ----------------------------------------------------------
+
+        if debug :
+            print ('FISSURE-'+str(k+1))
+            print  '_lst_c:', len(_lst_c),        _lst_c
+            print  '_lst_f:', len(_lst_f),        _lst_f
+            print  '_lst_p:', len(_lst_p),        _lst_p
+            print  '_lst_t:',  len(_lst_t),       _lst_t
+            print  '_lst_cc:', len(_lst_cc),      _lst_cc
+            print  '_lst_x0:', len(_lst_x0),      _lst_x0
+            print  '_lst_x0_b :', len(_lst_x0_b), _lst_x0_b
+            print  '_lst_y0:', len(_lst_y0),      _lst_y0
+            print  '_lst_y0_b :', len(_lst_y0_b), _lst_y0_b
+            print  '_tmp1 :', len(_tmp1),     _tmp1
+            print  '_tmp2 :', len(_tmp2),     _tmp2
+            print  '_tmp3 :', len(_tmp3),     _tmp3
+            if (not oldVersion) :
+                print '_tmp4 :', len(_tmp4),  _tmp4
+                print '_tmp5 :', len(_tmp5),  _tmp5
+                print '_tmp6 :', len(_tmp6),  _tmp6
+
+        #Fin du boucle sur la fissure for k
+
+
+    # Assemblage des concepts sortants
+    if(oldVersion) :
+        __ECR_F1=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
+                                  FLUX_REP=l_FLUX_REP_F1);
+
+        __ECR_F2=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
+                                  FLUX_REP=l_FLUX_REP_F2);
+    else:
+        __ECR_F1=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
+                                  ECHANGE=l_ECHANGE_F1);
+
+        __ECR_F2=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
+                                  ECHANGE=l_ECHANGE_F2);
+
+    __ECR_P=AFFE_CHAR_MECA_F(MODELE=MODELE_MECA,
+                             PRES_REP=l_PRES_REP);
+
+    # Table resultat
+    try:
+       dprod = __TABFISS_tot.dict_CREA_TABLE()
+       __TAB = CREA_TABLE(**dprod)
+       debprod = __DEBFISS_tot.dict_CREA_TABLE()
+       __DEB = CREA_TABLE(**debprod)
+    except:
+       UTMESS('F','ECREVISSE0_9', valr=[Inst_Ecrevisse])
diff --git a/Aster/Cata/cataSTA10/Macro/calc_essai_ops.py b/Aster/Cata/cataSTA10/Macro/calc_essai_ops.py
new file mode 100644 (file)
index 0000000..749fa42
--- /dev/null
@@ -0,0 +1,272 @@
+#@ MODIF calc_essai_ops Macro  DATE 28/01/2010   AUTEUR BODEL C.BODEL 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+## \package calc_essai_ops Implémentation de la macro CALC_ESSAI
+#
+# Ce module contient la partie controle de la macro CALC_ESSAI
+# l'implémetation de cette macro se trouve dans les modules
+# meidee_help, meidee_mac, meidee_massamor, meidee_turbulent
+# on utilise aussi une librairie de support
+# pour la gestion de l'interface graphique dans meidee_iface
+
+
+def calc_essai_ops( self,
+                    INTERACTIF          = None,
+                    #UNITE_FIMEN         = None,
+                    UNITE_RESU          = None,
+                    EXPANSION           = None,
+                    #MEIDEE_FLUDELA      = None,
+                    #MEIDEE_TURBULENT    = None,
+                    IDENTIFICATION      = None,
+                    MODIFSTRUCT         = None,
+                    TRAITEMENTSIG       = None,
+                    GROUP_NO_CAPTEURS   = None,
+                    GROUP_NO_EXTERIEUR  = None,
+                    #RESU_FLUDELA        = None,
+                    #RESU_TURBULENT      = None,
+                    RESU_IDENTIFICATION = None,
+                    RESU_MODIFSTRU      = None,
+                    **args):
+    import aster
+    from Meidee.meidee_cata import MeideeObjects
+    ier = 0
+    
+    # La macro compte pour 1 dans la numerotation des commandes
+    self.set_icmd(1)
+
+    prev = aster.onFatalError()
+    
+    # gestion des concepts sortants de la macro, declares a priori
+    table = []
+    table_fonction = []
+    mode_mec = []
+
+
+    if not RESU_MODIFSTRU:
+        out_modifstru = {}
+    else:
+        out_modifstru = RESU_MODIFSTRU[0] # max=1 dans le capy
+
+
+    if not RESU_IDENTIFICATION:
+        RESU_IDENTIFICATION = []
+    else:
+        for res in RESU_IDENTIFICATION:
+            table_fonction.append(res['TABLE'])
+    out_identification = {"DeclareOut" : self.DeclareOut,
+                          "TypeTables" : 'TABLE_FONCTION',
+                          "ComptTable" : 0,
+                          "TablesOut"  : table_fonction}
+
+## SUPRESSION (PROVISOIRE ?) DES ONGLETS IFS
+##    if not RESU_FLUDELA:
+##        RESU_FLUDELA = []
+##    else:
+##        for res in RESU_FLUDELA:
+##            table.append(res['TABLE'])
+##    out_fludela = {"DeclareOut" : self.DeclareOut,
+##                   "TypeTables" : 'TABLE',
+##                   "ComptTable" : 0,
+##                   "TablesOut" : table}
+##
+##    if not RESU_TURBULENT:
+##        RESU_TURBULENT = []
+##    else:
+##        for res in RESU_TURBULENT:
+##            table_fonction.append(res['FONCTION'])
+##    out_meideeturb = {"DeclareOut" : self.DeclareOut,
+##                      "FoncOut" : table_fonction}
+    
+    # Mode interactif : ouverture d'une fenetre Tk
+    if INTERACTIF == "OUI":
+        aster.onFatalError('EXCEPTION')
+
+        create_interactive_window(self,
+                                  #UNITE_FIMEN,
+                                  #out_fludela,
+                                  #out_meideeturb,
+                                  out_identification,
+                                  out_modifstru,
+                                  )
+    else:
+        from Meidee.meidee_calcul import MessageBox
+        from Meidee.meidee_test import TestMeidee
+        mess = MessageBox(UNITE_RESU)
+        mess.disp_mess("Mode non intéractif")
+        
+        objects = MeideeObjects(self, mess)
+
+        # importation des concepts aster existants de la memoire jeveux
+        TestMeidee(self,
+                   mess,
+                   #out_fludela,
+                   #out_meideeturb,
+                   out_identification,
+                   out_modifstru,
+                   objects,
+                   EXPANSION,
+                   #MEIDEE_FLUDELA,
+                   #MEIDEE_TURBULENT,
+                   IDENTIFICATION,
+                   MODIFSTRUCT,
+                   GROUP_NO_CAPTEURS,
+                   GROUP_NO_EXTERIEUR              
+                   )
+
+        mess.close_file()
+    aster.onFatalError(prev)
+    return ier
+
+
+
+def create_tab_mess_widgets(tk):
+    """Construits les objects table et boîte à messages."""
+    try:
+        from Pmw import PanedWidget
+    except ImportError:
+        PanedWidget = None
+    
+    from Meidee.meidee_iface import MessageBoxInteractif, TabbedWindow
+    
+    tabsw = tk
+    msgw = tk
+    tk.rowconfigure(0, weight=2)
+    tk.rowconfigure(1, weight=1)
+
+    tabs = TabbedWindow(tabsw, ["Expansion de modeles",
+                                "Modification structurale",
+                                #"MEIDEE mono-modal fludela",
+                                #"MEIDEE mono-modal turbulent",
+                                "Identification de chargement",
+                                "Traitement du signal",
+                                "Parametres de visualisation",
+                               ])
+
+    tabs.grid(row=0, column=0, sticky='nsew')
+    # pack(side='top',expand=1,fill='both')
+    
+    # ecriture des message dans un fichier message
+    mess = MessageBoxInteractif(msgw)
+    mess.grid(row=1, column=0, sticky='nsew')
+    
+    return tabs, mess
+
+## SUPRESSION (PROVISOIRE ?) DES ONGLETS IFS
+##def get_fimen_files(UNITE_FIMEN, FIMEN=None):
+##    """Fichiers fimen éventuels associés aux unités logiques en entrée"""
+##    # XXX FIMEN is not defined (should it be included in the macro)
+##    from Utilitai.UniteAster import UniteAster
+##    fichiers_fimen = []
+##    print "FIMEN:", UNITE_FIMEN
+##
+##    if UNITE_FIMEN:
+##        if type(FIMEN)==int:
+##            UNITE_FIMEN= [ UNITE_FIMEN ]
+##        for unit in UNITE_FIMEN:
+##            UL = UniteAster()
+##            fichiers_fimen.append( (unit, UL.Nom(unit)) )
+##
+##    return fichiers_fimen
+
+
+class FermetureCallback:
+    """Opérations à appliquer lors de la fermeture de la
+    fenêtre Tk.
+    """
+
+    def __init__(self, main_tk, turbulent):
+        self.main_tk = main_tk
+        self.turbulent = turbulent
+
+    def apply(self):
+        """Enlève les fichiers temporaires de Xmgrace"""
+        if self.turbulent.param_visu.logiciel_courbes is not None:
+            self.turbulent.param_visu.logiciel_courbes.fermer()
+        self.main_tk.quit()
+
+
+def create_interactive_window(macro,
+                              #UNITE_FIMEN,
+                              #out_fludela,
+                              #out_meideeturb,
+                              out_identification,
+                              out_modifstru,
+                              ):
+    """Construit la fenêtre interactive comprenant une table pour 
+    les 4 domaines de Meidee."""
+    from Tkinter import Tk
+    
+    from Meidee.meidee_cata import MeideeObjects
+    from Meidee.meidee_correlation import InterfaceCorrelation
+    from Meidee.meidee_modifstruct import InterfaceModifStruct
+    from Meidee.meidee_turbulent import InterfaceTurbulent
+    from Meidee.meidee_parametres import InterfaceParametres
+    from Meidee.meidee_calc_spec import InterfaceCalcSpec
+## SUPRESSION (PROVISOIRE ?) DES ONGLETS IFS
+##    from Meidee.meidee_fludela import InterfaceFludela, InterfaceTurbMonomod
+    
+    # fenetre principale
+    tk = Tk()
+    tk.rowconfigure(0, weight=1)
+    tk.columnconfigure(0,weight=1)
+    tk.title("CALC_ESSAI")
+
+    tabs, mess = create_tab_mess_widgets(tk)
+    main = tabs.root()
+    
+    # importation des concepts aster de la memoire jeveux    
+    objects = MeideeObjects(macro, mess)
+    tabs.set_objects(objects)
+    
+    param_visu = InterfaceParametres(main, mess)
+    
+    iface = InterfaceCorrelation(main, objects, macro, mess,
+                                 param_visu)
+    imodifstruct = InterfaceModifStruct(main, objects, macro,
+                                        mess, out_modifstru, param_visu)
+    identification = InterfaceTurbulent(main, objects, mess, out_identification, param_visu)
+    
+    calc_spec= InterfaceCalcSpec(main,objects,mess,param_visu)
+## SUPRESSION (PROVISOIRE ?) DES ONGLETS IFS
+##    fludelamonomod = InterfaceFludela(main, objects,
+##                                      get_fimen_files(UNITE_FIMEN), mess, out_fludela, param_visu)
+##    turbmonomod = InterfaceTurbMonomod(main, objects,get_fimen_files(UNITE_FIMEN) ,mess, out_meideeturb, param_visu)
+
+
+    tabs.set_tab("Expansion de modeles", iface.main)
+    tabs.set_tab("Modification structurale", imodifstruct.main)
+    tabs.set_tab("Identification de chargement", identification)
+    tabs.set_tab("Traitement du signal", calc_spec)
+    tabs.set_tab("Parametres de visualisation", param_visu)
+## SUPRESSION (PROVISOIRE ?) DES ONGLETS IFS
+##    tabs.set_tab("MEIDEE mono-modal fludela", fludelamonomod )
+##    tabs.set_tab("MEIDEE mono-modal turbulent", turbmonomod )
+    
+    
+    tabs.set_current_tab("Expansion de modeles")
+
+    tk.protocol("WM_DELETE_WINDOW", FermetureCallback(tk, identification).apply)
+    
+    try:
+        tk.mainloop()
+    except :
+        print "MEIDEE : *ERREUR*"
+
+    
diff --git a/Aster/Cata/cataSTA10/Macro/calc_europlexus_ops.py b/Aster/Cata/cataSTA10/Macro/calc_europlexus_ops.py
new file mode 100644 (file)
index 0000000..95a09ff
--- /dev/null
@@ -0,0 +1,2546 @@
+#@ MODIF calc_europlexus_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+#-----------------------------------------------------------------------   
+#----------------------------- Importation des modules  ----------------
+#-----------------------------------------------------------------------   
+
+# unite associe au fichier ou le pos-traitement CASTE2000 est fait en commandes epx
+# unite_cast2000 = 0 # il ne fait pas le pos-traitement
+# __temp
+unite_cast2000 = 95
+
+debug = False
+dryrun = False
+
+import types,string
+import os
+import numpy
+import math 
+import copy
+
+# Protection pour Eficas
+try:
+   import aster
+   from Accas import _F
+   from Utilitai.partition import MAIL_PY
+   from Utilitai.Utmess import UTMESS
+except:
+  pass
+      
+#----------------------------- Precision ------------------------------- 
+tst = 1.0E-10
+
+#-----------------------------------------------------------------------   
+#----------------------------- Fonctions de calcul vectoriel -----------
+#-----------------------------------------------------------------------   
+
+def norme(u) :
+  return numpy.sqrt(numpy.dot(u,u))
+
+def vecteurs_egaux(v1,v2):
+  diff = v1-v2
+  #print 'v1',v1
+  #print 'v2',v2
+  for v in diff:
+    if abs(v) > tst : return False
+  return True  
+
+#-----------------------------------------------------------------------   
+#----------------------------- Operateur de la Macro-commande ----------
+#-----------------------------------------------------------------------   
+
+def calc_europlexus_ops(self,MODELE,CARA_ELEM,CHAM_MATER,EXCIT,FONC_PARASOL=None,
+                             DIME=None,OBSERVATION=None,ARCHIVAGE=None,COURBE=None,
+                             CALCUL=None,DOMAINES=None,INTERFACES=None,INFO=1,**args):
+        
+#   import aster
+#   from Accas import _F
+
+  ier=0
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  # On importe les definitions des commandes a utiliser dans la macro
+  # Le nom de la variable doit etre obligatoirement le nom de la commande
+  
+  global _F,INFO_EXEC_ASTER,DETRUIRE,IMPR_RESU,DEFI_FICHIER,LIRE_RESU,CREA_MAILLAGE
+  global DEFI_GROUP,LIRE_MAILLAGE,CREA_TABLE,IMPR_TABLE,AFFE_MODELE,EXEC_LOGICIEL
+  global LIRE_CHAMP,CREA_CHAMP,CREA_RESU,FORMULE
+  
+  INFO_EXEC_ASTER = self.get_cmd('INFO_EXEC_ASTER')
+  DETRUIRE        = self.get_cmd('DETRUIRE')
+  IMPR_RESU       = self.get_cmd('IMPR_RESU')
+  DEFI_FICHIER    = self.get_cmd('DEFI_FICHIER')
+  LIRE_RESU       = self.get_cmd('LIRE_RESU')
+  CREA_MAILLAGE   = self.get_cmd('CREA_MAILLAGE')
+  DEFI_GROUP      = self.get_cmd('DEFI_GROUP')
+  LIRE_MAILLAGE   = self.get_cmd('LIRE_MAILLAGE')
+  CREA_TABLE      = self.get_cmd('CREA_TABLE')
+  IMPR_TABLE      = self.get_cmd('IMPR_TABLE')
+  AFFE_MODELE     = self.get_cmd('AFFE_MODELE')
+  EXEC_LOGICIEL   = self.get_cmd('EXEC_LOGICIEL')
+  LIRE_CHAMP      = self.get_cmd('LIRE_CHAMP')
+  CREA_CHAMP      = self.get_cmd('CREA_CHAMP')
+  CREA_RESU       = self.get_cmd('CREA_RESU')
+  FORMULE         = self.get_cmd('FORMULE')
+
+  # Pour la gestion des Exceptions
+  prev_onFatalError = aster.onFatalError()
+  aster.onFatalError('EXCEPTION')
+
+
+  # Pour masquer certaines alarmes
+  from Utilitai.Utmess import UTMESS, MasquerAlarme, RetablirAlarme
+  MasquerAlarme('MED_1')
+  MasquerAlarme('MED_54')
+
+  # Ligne de commande d'Europlexus
+  if args.has_key('LOGICIEL'): EXEC = args['LOGICIEL']
+  else: EXEC = '/home/europlex/EPXD/EUROPLEXUS_GESTION/runepx_d'
+  if debug: print 'args_keys : %s'%args.keys()
+  if args.has_key('PAS_NBRE_COURBE') :
+     if debug: print 'PAS NBRE COURBE = ok (%s)'%args['PAS_NBRE_COURBE']
+  else :
+     if debug: print 'PAS NBRE COURBE = nook'
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  # classs Europlexus permettant de faire le chainage avec le Code_Aster
+  EPX = EUROPLEXUS(MODELE,CARA_ELEM,CHAM_MATER,FONC_PARASOL,EXCIT,DIME,
+# AA                   ECRITURE,CALCUL,REPE='REPE_OUT',EXEC=EXEC)
+                   OBSERVATION,ARCHIVAGE,COURBE,CALCUL,DOMAINES,INTERFACES,
+                   REPE='REPE_OUT',EXEC=EXEC, INFO=INFO, args=args)
+
+  # Eriture du fichier de commande Europlexus
+  EPX.ecrire_fichier()
+
+  # Si dryrun alors on ne lance pas le calcul Europlexus
+  if dryrun: return ier
+
+  # Lancement du calcul Europlexus
+  EPX.lancer_calcul()
+
+  # Recuperer le resulat Europlexus a l'aide d'un concept aster de type evol_noli
+  fichier_med = 'auto'
+  fichier_pun = 'auto'
+#  if debug  : 
+#    fichier_med='fort.81'
+#    fichier_pun ='fort.85'
+
+  self.DeclareOut('resu',self.sd) # Le concept sortant (de type evol_noli) est nomme 'resu'   
+  global resu # pour que le nom du concept prenne celui defini par l'utilisateur
+  EPX.get_resu(fichier_med=fichier_med)
+
+  #Recuperer les concepts table
+  if COURBE is not None:
+    global table
+    # icourbe = 0
+    # for fonc in COURBE['TABLE'] :
+      # icourbe += 1
+    self.DeclareOut('table',args['TABLE_COURBE'])
+    EPX.get_table()
+      # EPX.get_table(icourbe=icourbe,fichier=fichier_pun)
+
+
+  # Pour la gestion des Exceptions
+  aster.onFatalError(prev_onFatalError)
+
+  # Pour la gestion des alarmes
+  RetablirAlarme('MED_1')
+  RetablirAlarme('MED_54')
+
+  return ier
+
+#-----------------------------------------------------------------------   
+#----------------------------- class EUROPLEXUS ------------------------
+#-----------------------------------------------------------------------   
+
+class EUROPLEXUS:
+# AA  def __init__(self,MODELE,CARA_ELEM,CHAM_MATER,FONC_PARASOL,EXCIT,DIME,ECRITURE,CALCUL,REPE,EXEC,**args):
+  def __init__(self,MODELE,CARA_ELEM,CHAM_MATER,FONC_PARASOL,EXCIT,DIME,OBSERVATION,ARCHIVAGE,COURBE,CALCUL,DOMAINES,INTERFACES,REPE,EXEC,INFO,args):
+
+    if debug: print 'args_key %s'%args.keys()
+    # Mettre toutes les entrees en attributs
+    self.DIME = DIME
+    self.MODELE = MODELE
+    self.CARA_ELEM = CARA_ELEM
+    self.CHAM_MATER = CHAM_MATER
+    self.FONC_PARASOL = FONC_PARASOL
+    self.EXCIT = EXCIT
+#    self.ECRITURE = ECRITURE
+    self.OBSERVATION = OBSERVATION
+    self.ARCHIVAGE = ARCHIVAGE
+    self.COURBE = COURBE
+    self.CALCUL = CALCUL
+    self.DOMAINES = DOMAINES
+    self.INTERFACES = INTERFACES
+    self.INFO = INFO
+
+    # Repertoire de calcul Europlexus 
+    self.REPE   = REPE 
+    # Commande d'execution de Europlexus
+    self.EXEC   = EXEC
+    
+    if args.has_key('UNITE_COURBE'): self.UNITE_COURBE = args['UNITE_COURBE']
+    else:                            self.UNITE_COURBE = None
+    
+    if args.has_key('PAS_INST_COURBE'): self.PAS_INST_COURBE = args['PAS_INST_COURBE']
+    else:                            self.PAS_INST_COURBE = None
+   
+    if args.has_key('PAS_NBRE_COURBE'): self.PAS_NBRE_COURBE = args['PAS_NBRE_COURBE']
+    else:                            self.PAS_NBRE_COURBE = None
+
+    if args.has_key('TABLE_COURBE'): self.TABLE_COURBE = args['TABLE_COURBE']
+    else:                            self.TABLE_COURBE = None
+    # Dictionnaire contenant le texte associé au fichier de commande Europlexus
+    self.epx = {}
+    
+    if debug: print 'pas nbre courbe = %s'%self.PAS_NBRE_COURBE
+    
+    # Concept pour un nouveau maillage si on utilise RIGI_PARASOL ou 
+    # si on regroupe separement les mailles tria3 et quad4
+    self.NEW_MA = None
+    
+    # Nom des fichiers de Europlexus (commande et sorties)
+    self.nom_fichiers = {'COMMANDE' : 'commandes.epx',
+                         'MAILLAGE' : 'maillage_epx',
+                         'ALIT'     : 'champ.alit',
+                         'MED'      : 'champ.e2m',
+                         'PUN'      : 'courbes.pun',
+                        }
+    
+    # Chemin du repertoire courant ou le calcul Aster est lance
+    self.pwd = os.getcwd() + os.sep                     
+    
+
+  
+#-----------------------------------------------------------------------       
+  def get_unite_libre(self,):
+
+    _UL=INFO_EXEC_ASTER(LISTE_INFO='UNITE_LIBRE')
+    unite=_UL['UNITE_LIBRE',1]
+    DETRUIRE(CONCEPT=(_F(NOM=_UL),), INFO=1)
+    return(unite)
+    
+     
+#-----------------------------------------------------------------------   
+  def reupere_structure(self,concept,mot_cle=None):
+
+    try : structure = concept.etape.valeur
+    except : UTMESS('F','PLEXUS_1') 
+
+    if mot_cle : 
+      if structure.has_key(mot_cle) : return structure[mot_cle]
+      else : return None 
+    return structure
+#-----------------------------------------------------------------------   
+  def get_motcle(self,fact,mot_cle,code_mess='F'):
+    try : 
+      out = fact[mot_cle]
+    except : 
+      out = None
+    if not out is None : return out    
+    if not code_mess is None and code_mess: UTMESS(code_mess,'PLEXUS_2',valk=mot_cle)
+    return None
+
+#-----------------------------------------------------------------------   
+  def get_group_ma(self,fact):
+    group_ma = self.get_motcle(fact,'GROUP_MA',code_mess='F')
+    if types.TypeType(group_ma) == types.StringType : group_ma = (group_ma,)
+    # elif types.TypeType(group_ma) == types.ListType   : group_ma = tupel(group_ma)  
+    return group_ma
+    
+#-----------------------------------------------------------------------   
+  def get_group_ma_f(self,fact):
+    group_ma = self.get_motcle(fact,'GROUP_MA',None)
+    if types.TypeType(group_ma) == types.StringType : group_ma = (group_ma,)
+    # elif types.TypeType(group_ma) == types.ListType   : group_ma = tupel(group_ma) 
+    if not group_ma : group_ma=[]
+    return group_ma
+    
+#-----------------------------------------------------------------------   
+  def setlist(self,fact):
+    #print 'types.TypeType(fact)',types.TypeType(fact)
+    if fact is None : return fact
+    #if not types.TypeType(fact) in [types.ListType,types.TupleType] : fact= [fact]
+    if not (isinstance(fact,types.ListType) or isinstance(fact,types.TupleType))  : fact= [fact]
+    return fact
+    
+#-----------------------------------------------------------------------   
+  def lire_fichier(self,fichier,):
+    fd = open(fichier,'r')
+    lignes = fd.readlines()
+    fd.close()
+    valeurs = []
+    commentaires = ['#','%','$','*']
+    for ll in lignes:
+      add = 1
+      for comment in commentaires : 
+        if string.find(ll,comment) != -1 : add = 0;break
+      if add :   
+         data = [val for val in ll.split(None)]
+         valeurs.append(data)
+    return valeurs
+    
+#-----------------------------------------------------------------------   
+  def fichier2dic(self,fichier):
+    valeurs = self.lire_fichier(fichier)
+    dic = {}
+    mot_cle = None
+    for ll in valeurs:
+      if len(ll) > 1 :    
+        for mot in ll :
+          try : 
+            val = float(mot)
+            if not mot_cle is None : dic[mot_cle].append(val)
+          except : 
+            mot_cle = mot
+            dic[mot_cle] = []
+            
+    return dic
+    
+#-----------------------------------------------------------------------   
+  def lire_pun(self,fichier):
+    if debug: print 'lire_pun : fichier = %s'%fichier
+    data  = self.lire_fichier(fichier)
+    icourbe = 0
+    courbes = {}
+    for ligne in data:
+      if debug: print 'lire_pun : %s'%ligne
+      if ligne[0] in ('VALEURS','VALUES'):
+         icourbe += 1;
+         nb = int(ligne[1])
+         courbes[icourbe] = []
+      else:
+        ligne_vale = [float(val) for val in ligne]
+        courbes[icourbe].append(ligne_vale)
+    for courbe in courbes :
+        courbes[courbe]=numpy.transpose(numpy.array(courbes[courbe]))
+    return courbes
+    
+#-----------------------------------------------------------------------   
+  def export_DEBUT(self):
+    
+    epx = self.epx
+    
+    # Cle identifiant 
+    MODULE = 'DEBUT'
+    
+    # Entete de la commande Europlexus courante
+    epx[MODULE] = ['*--FICHIER CREE PAR CALC_EUROPLEXUS/Code_Aster']
+    
+    # Texte declarant le debut
+    epx[MODULE].append('TITRE')
+    epx[MODULE].append('ECHO')
+    options = 'TRID NONL'
+# AA    champ_fact = self.ECRITURE['CHAMP']
+    champ_fact = self.ARCHIVAGE
+    if champ_fact is not None : options += ' MEDE'
+    epx[MODULE].append(options)
+    epx[MODULE].append('\n')
+    
+    # __temp
+    fichier_cast2000 = 'fort.%i' %unite_cast2000
+    if unite_cast2000 and os.path.isfile(fichier_cast2000) :
+      sorite_cast2000 = self.pwd + 'REPE_OUT/post.k2000'
+      epx[MODULE].append('OPNF 12') 
+      epx[MODULE].append(2*' ' + "'%s'" %sorite_cast2000)
+      epx[MODULE].append('\n')
+
+#-----------------------------------------------------------------------   
+  def export_MAILLAGE(self,format='CASTEM'):
+
+    epx = self.epx
+
+    # Cle identifiant 
+    MODULE = 'MAILLAGE'
+
+    # Entete de la commande Europlexus courante
+    epx[MODULE] = ['*--LECTURE MAILLAGE']
+
+    # Recuperer la concept maillage modifie ou initial 
+    if self.NEW_MA is None :
+      concept_maillage = self.reupere_structure(self.MODELE,'MAILLAGE')
+    else :
+      concept_maillage = copy.copy(self.NEW_MA) 
+
+    # Ecrire le maillage, qui peut etre a ete enrichi avec des commandes Aster, sous le format souhaite (MED ou CASTEM)
+    unite = self.get_unite_libre()
+
+    # Extensions des formats de maillage 
+    extension = {'CASTEM' : '.mgib', 'MED':'.med'}
+
+    # donner un nom au fichier de maillage parce que le fort.unite peut etre ecrase par d'autre operation d'ecriture
+    nom_fichier = self.REPE + os.sep + self.nom_fichiers['MAILLAGE'] + extension[format]
+    DEFI_FICHIER(UNITE=unite,FICHIER=nom_fichier,ACTION='ASSOCIER')
+    IMPR_RESU(UNITE=unite,
+              FORMAT=format,
+              RESU = _F(MAILLAGE=concept_maillage)
+             )
+    DEFI_FICHIER(UNITE=unite,ACTION='LIBERER');    
+
+    # Ecriture de la commande Europlexus associee
+    fichier_maillage = self.pwd + nom_fichier
+
+    #epx[MODULE].append('OPNF FORMAT 9')
+    epx[MODULE].append('%s '%format)
+    epx[MODULE].append("'%s' TOUT" %fichier_maillage)    
+    #epx[MODULE].append('CASTEM 9 TOUT')
+
+    epx[MODULE].append('\n')    
+
+#-----------------------------------------------------------------------   
+  def export_DIME(self,):
+    epx = self.epx
+
+    # Cle identifiant 
+    MODULE = 'DIME'
+
+    # Entete de la commande Europlexus courante
+    epx[MODULE] = ['*--DIMENSIONNEMENT']
+    epx[MODULE].append('\n')
+
+    # Test si des parametres de dime seront introuduites à l'aide d'un fichier externe 
+    try    : unite_dime = self.DIME['UNITE_DIME']
+    except : unite_dime = None
+
+    # Recuperer le dictionnaire issu du fichier associe à UNITE_DIME (s'il existe)
+    if unite_dime is not None : 
+      fort = 'fort.%i' %unite_dime
+      dic_fichier = self.fichier2dic(fort)
+    else:
+      dic_fichier = {}
+
+    # mettre a jour les cles definis dans le fichier par celles qui sont 
+    # definies directement sous le mot-cle facteur DIME
+    cles = ['Q4GS', 'FORCE', 'PT6L', 'ZONE', 'POUT', 
+            'ECRO', 'APPU', 'BLOQ', 'PRESS', 'PMAT', 
+            'FTAB', 'DKT3', 'DEPL', 'FNOM', 'TABLE', 
+            'LIAI', 'MTTI', 'PT1L','NEPE']
+
+    for cle in cles:
+      try:
+        if self.DIME[cle] is not None : 
+          dic_fichier[cle] = self.DIME[cle]
+      except : pass  
+
+    # Imprimer les mot-cles et leurs dans epx
+    epx[MODULE].append('DIME')
+    for cle in dic_fichier:
+      vale = dic_fichier[cle]
+      st = 5*' ' + cle
+      for v in vale:
+        st += ' %i' %v
+      epx[MODULE].append(st)  
+    epx[MODULE].append('TERM')    
+
+    epx[MODULE].append('\n')
+         
+#-----------------------------------------------------------------------   
+  def export_MODELE(self):
+    
+    epx = self.epx
+    
+    # Cle identifiant 
+    MODULE = 'MODELE'
+    
+    epx[MODULE] = ['*--DEFINITION DE LA GEOMETRIE']
+    
+    # Entete de la commande Europlexus courante
+    epx[MODULE].append('GEOMETRIE')
+    
+    # Recuperer la structure sous le mot_cle facteur AFFE de AFFE_MODELE 
+    affe_modele = self.reupere_structure(self.MODELE,'AFFE')
+    affe_modele = self.setlist(affe_modele)
+    
+    # Correspondance de modelisation aster/europlexus
+    dic_modele = {'DKT':'DKT3','DKTG':'Q4GS','POU_D_E':'POUT'}
+    
+    # Correspondance de modelisation europlexus/aster
+    dic_modele_epx = {}
+    for cle in dic_modele.keys():
+      dic_modele_epx[dic_modele[cle]] = cle
+
+    # initialisation du dictioannaire qui contient les group_ma en fonction de la modelisation
+    dic_gma = {}
+    for cle in dic_modele.values():
+      dic_gma[cle] = []
+      
+    for affe in affe_modele:
+      modelisation = affe['MODELISATION']
+      phenomene = affe['PHENOMENE']
+      if  phenomene == 'MECANIQUE' and modelisation in dic_modele.keys():
+        if affe.has_key('GROUP_MA') :
+          group_ma = self.get_group_ma(affe)
+          dic_gma[dic_modele[modelisation]].extend(group_ma)
+        else : 
+          UTMESS('F','PLEXUS_3') 
+    
+    # Regrouper separement les mailles tria3 et quad4 de la modilisation DKT (s'il y a lieu)
+    # parce que leurs modilisations dans europlexus sont differentes:
+    #                                                                tria3 : DKT3
+    #                                                                quad4 : Q4GS
+    
+    # Initialisation du dictionnaire contenant les elements du modele de type TRIA3 et QUAD4
+    nom_groups= {'TRIA3':[],'QUAD4':[]}
+    
+    if len(dic_gma['DKT3']) > 0:
+      concept_maillage = self.reupere_structure(self.MODELE,'MAILLAGE')
+      class_dkt = DKT(MAILLAGE=concept_maillage,)
+      nom_groups = class_dkt.aster2epx(groups=dic_gma['DKT3'])
+      if debug: print 'nom_groups = %s'%nom_groups
+      # mettre a jour les groups de chaque modelisation
+      dic_gma['DKT3'] = nom_groups['TRIA3']
+      dic_gma['Q4GS'].extend(nom_groups['QUAD4'])
+      
+    
+    # liste comportant les modelisations definis dans le module GEOMETRIE
+    # cette liste va servir à determiner les indices des champs stockes dans le fichier med (get_resu)
+    self.modelisations = []
+    # Ecriture sous format europlexus
+    for modelisation in  dic_gma.keys() :
+      len_groups = len(dic_gma[modelisation])
+      if len_groups > 0 :
+        self.modelisations.append(modelisation)
+        epx[MODULE].append(5*' ' + modelisation + 2*' ' + dic_gma[modelisation][0])
+        if len_groups > 1 :
+          for ig in range(1,len_groups) :
+            group_ma = dic_gma[modelisation][ig]
+            epx[MODULE].append((len(modelisation)+5+2)*' ' + group_ma)
+
+                
+    
+    # Mettre a jour le modele dans le cas ou le maillage a ete modifie pour la seperation de TRIA3 et QUAD4
+    # ce modele va etre utilise dans la lecture du fichier med (get_resu)
+    if len(nom_groups['QUAD4']) == 0 :
+      self.NEW_MODELE = copy.copy(self.MODELE)
+    else :
+      affe_model = []
+      for modelisation in self.modelisations :
+         affe_model.append({'GROUP_MA':dic_gma[modelisation],
+                           'MODELISATION': dic_modele_epx[modelisation],
+                           'PHENOMENE':'MECANIQUE' })
+        
+      __MO = AFFE_MODELE(MAILLAGE = concept_maillage,
+                          AFFE = affe_model,
+                          );
+        
+      self.NEW_MODELE = copy.copy(__MO);
+    
+    # Utiliser dans Ecriture des elements et points du fichier med    
+    self.dic_gma = dic_gma
+    # Il y a une suite dans RIGI_PARSOL
+    
+    #epx[MODULE].append('TERM')
+    #epx[MODULE].append('\n') 
+    
+    
+ #-----------------------------------------------------------------------   
+  def export_CARA_ELEM(self):
+    
+    epx = self.epx
+    
+    # Cle identifiant 
+    MODULE = 'CARA_ELEM'
+
+    # Recuperer la structure du concept sorti de AFFE_CARA_ELEM
+    cara_elem_struc = self.reupere_structure(self.CARA_ELEM)
+
+    epx[MODULE] = ['*--CARACTERISTIQUES DES ELEMENTS DE STRUCTURE']
+
+    # Entete de la commande Europlexus courante
+    epx[MODULE].append('COMPLEMENT')
+
+    # Dictionnaire conteant les donnees associees aux differents elements de structure
+    dic_elem = {}
+    for cle in ['DISCRET','COQUE','POUTRE','RIGI_PARASOL']:
+      if cara_elem_struc.has_key(cle):
+        fact = cara_elem_struc[cle]
+        if fact :
+          dic_elem[cle] = self.setlist(fact)
+     
+    # traduire les masses concentrees si elles existent
+    cle = 'DISCRET'
+    self.discretParasol = {}
+    if dic_elem.has_key(cle):
+      epx[MODULE].append('\n') 
+      epx[MODULE].append('*--MASSES AJOUTEES')
+      for elem in dic_elem[cle]:
+        if elem['CARA'] == 'M_T_D_N' :
+          group_ma = self.get_group_ma(elem)
+          vale = elem['VALE']
+          epx[MODULE].append('MASSE  123456 %s' %vale)
+          epx[MODULE].append(7*' ' + 'LECT')
+          for group in group_ma:
+            epx[MODULE].append(11*' '+group)
+          epx[MODULE].append(7*' ' + 'TERM')
+        if elem['CARA'] == 'K_TR_D_N' :
+          group_ma = self.get_group_ma(elem)
+          vale     = elem['VALE']
+          for gma in group_ma :
+            self.discretParasol[gma] = vale
+           
+    # traduire les elements coques s'ils existent
+    cle = 'COQUE'
+    self.dicOrthotropie={}
+    self.listEpais=[]
+    self.listEpais2=[]
+    if dic_elem.has_key(cle):
+      epx[MODULE].append('\n') 
+      epx[MODULE].append('*--ELEMENTS COQUES')
+      for elem in dic_elem[cle]:
+#        print elem     
+        group_ma = self.get_group_ma(elem)
+        epais = elem['EPAIS']
+        if self.ARCHIVAGE['CONT_GENER'] == 'OUI' :
+            self.listEpais.append({'VALE' : epais, 'GROUP_MA' : group_ma, 'NOM_CMP' : 'X21'})
+            self.listEpais2.append({'VALE' : epais**2/6., 'GROUP_MA' : group_ma, 'NOM_CMP' : 'X22'})
+        else :
+            self.listEpais.append({'VALE' : 1., 'GROUP_MA' : group_ma, 'NOM_CMP' : 'X21'})
+            self.listEpais2.append({'VALE' : 1., 'GROUP_MA' : group_ma, 'NOM_CMP' : 'X22'})
+        st = 'EPAIS  %s  ' %epais
+        #ajouter les group_ma qui ont ete affecte par ces caracteristiques
+        epx[MODULE].append(st+'LECT')
+        for group in group_ma:
+          epx[MODULE].append((len(st)+4)*' '+group)
+        epx[MODULE].append((len(st))*' '+'TERM')
+        if elem.has_key('VECTEUR'):
+# AA       if elem['VECTEUR'] :
+            for group in group_ma :
+                self.dicOrthotropie[group] = elem['VECTEUR']
+         
+    # traduire les elements poutres s'ils existent
+    cle = 'POUTRE'
+    if dic_elem.has_key(cle):
+      concept_maillage = self.reupere_structure(self.MODELE,'MAILLAGE')
+      #class permettant de calculer et verifier les vecteurs de poutre dans Europlexus
+      class_poutre = POUTRE(MAILLAGE=concept_maillage,CARA_ELEM=self.CARA_ELEM)
+      epx[MODULE].append('\n') 
+      epx[MODULE].append('*--ELEMENTS POUTRES')
+      for elem in dic_elem[cle]:       
+        group_ma = self.get_group_ma(elem)
+        vecteurs = class_poutre.getvecteurs(group_ma,verif='non')
+        vect_y = vecteurs[group_ma[0]]
+        type_section = elem['SECTION']
+        st = 'GEOP %s ' %type_section
+        if type_section == 'RECTANGLE' :
+          # Correspondance de caracteristique de poutre aster/europlexus
+          dic_corresp = {'HY':'AY','HZ':'AZ'}
+          epx[MODULE].append(st)
+          # ajouter le vecteur definisant l'orientation de la section
+          epx[MODULE].append(len(st)*' ' + 'VX %s' %vect_y[0])
+          epx[MODULE].append(len(st)*' ' + 'VY %s' %vect_y[1])
+          epx[MODULE].append(len(st)*' ' + 'VZ %s' %vect_y[2])
+          # ajouter les caracteristiques de la poutre
+          cara = elem['CARA']
+          vale = elem['VALE']
+          for icar in range(len(cara)):
+            car = cara[icar]
+            val = vale[icar]
+            car_epx = dic_corresp[car]
+            epx[MODULE].append(len(st)*' ' + '%s %s' %(car_epx,val))
+          # ajouter les group_ma qui ont ete affecte par ces caracteristiques
+          epx[MODULE].append(5*' '+'LECT')
+          for group in group_ma:
+            epx[MODULE].append(len(st)*' '+group)
+          epx[MODULE].append(5*' '+'TERM')     
+        else : 
+          UTMESS('A','PLEXUS_4',valk=type_section) 
+      
+    epx[MODULE].append('\n') 
+
+#-----------------------------------------------------------------------   
+  def export_RIGI_PARASOL(self):
+
+    epx = self.epx
+    
+    # Cle identifiant 
+    MODULE = 'RIGI_PARASOL'
+    concept_maillage = self.reupere_structure(self.MODELE,'MAILLAGE')
+    self.MApyt = MAIL_PY()
+    self.MApyt.FromAster(concept_maillage)
+
+    # Recuperer la structure du concept sorti de AFFE_CARA_ELEM
+    cara_elem_struc = self.reupere_structure(self.CARA_ELEM)
+    
+    # Recuperer la structure RIGI_PARASOL si elles existe
+    list_rigi_parasol = None
+    if cara_elem_struc.has_key('RIGI_PARASOL'):
+      fact = cara_elem_struc['RIGI_PARASOL']
+      if fact :list_rigi_parasol = self.setlist(fact)
+   
+    # Traduction des fonctions definies dans FONC_PARASOL    
+    #dic_fonc_parasol = self.get_FONC_PARASOL(list_rigi_parasol)
+    dic_fonc_parasol = self.get_FONC_PARASOL()
+#    if not dic_fonc_parasol: return
+
+    epx[MODULE] = ['*--SUPPORT ELASTIQUE']
+   
+    # si l'utilisateur a lui meme fourni des GROUP_MA de discrets : on commence par la
+    gmaParasol=self.get_group_ma_f(self.FONC_PARASOL)
+    group_union = ''
+    for gma in gmaParasol :
+        if gma not in self.discretParasol :
+            if debug: print gma
+            if debug: print self.discretParasol.keys()
+            raise 'Discret non defini'
+        vale = self.discretParasol[gma]
+        epx[MODULE].append('SUPPORT')
+        epx[MODULE].append(6*' '+'KX %s  KY %s  KZ %s'%(vale[0],vale[1],vale[2]))
+        epx[MODULE].append(6*' '+'KRX %s KRY %s KRZ %s'%(vale[3],vale[4],vale[5]))       
+        for cle_fonc_parasol in dic_fonc_parasol.keys() :
+          epx[MODULE].append(6*' ' + '%s %i' %(cle_fonc_parasol,dic_fonc_parasol[cle_fonc_parasol]) )
+        epx[MODULE].append(6*' '+'LECT %s TERM'% gma)
+        group_union += '%s '% gma
+    if len(gmaParasol) > 0 :
+        epx['MODELE'].append(5*' ' + 'APPU  ' + group_union)
+
+    # concept_maillage = self.reupere_structure(self.MODELE,'MAILLAGE')
+    # DEFI_GROUP(reuse         = concept_maillage,
+                 # MAILLAGE      = concept_maillage,
+                 # CREA_GROUP_NO = _F(GROUP_MA = gmaParasol),
+                # );
+        
+   
+   
+    # traduire les rigi_parasol
+# AA    if list_rigi_parasol :   
+    if list_rigi_parasol and dic_fonc_parasol:   
+      # changement de module parce que les supports issus de RIGI_PARASOL  doivent etre imprimes apres les materiaux
+      # fichiers_parasol = []
+      # cles_oblig = ['UNITE_EUROPLEXUS','GROUP_MA_POI1']
+      # for elem in list_rigi_parasol:
+        # elem_cara = elem['CARA']
+        # if elem_cara == 'K_TR_D_N':
+          # for cle_test in cles_oblig:
+            # if not elem.has_key(cle_test):
+              # pass
+          # unite = elem['UNITE_EUROPLEXUS']
+          # fichier = 'fort.%i' %unite
+          # if fichier not in fichiers_parasol : fichiers_parasol.append(fichier)
+        # else :
+        #   pass
+      # Lecture des valeurs de rigidites generees par aster a partir des rigidites globales definis dans PARA_RIGISOL
+      # ressorts = []        
+      # for fichier in fichiers_parasol :
+        # ressorts.extend(self.lire_fichier(fichier))
+      ressorts = self.CARA_ELEM.toEPX()
+      # Creer un maillage qui, pour chaque noeud de l'interface utilisee dans rigi_parsol, asscocie un group_ma asscie
+      # parce que on n'a pas les memes numeros des noeuds dans Europlexus
+      crea_poi1 = []
+      dic_gma = {}
+      igr = -1
+      # Liste des group_ma associes au noeuds ou le RIGI_PARSOL a ete applique 
+      groups_parasol = []
+      
+      for noeud in ressorts.keys() :
+        # noeud = ressor[0]
+        if not dic_gma.has_key(noeud):
+          igr += 1
+          group_ma = 'SUP%i' %igr
+          dic_gma[noeud] = group_ma
+          groups_parasol.append(group_ma)
+          crea_poi1.append(_F(NOEUD=noeud,NOM_GROUP_MA=group_ma)) 
+      
+      # ATTENTION : a deplacer
+      # crea_maillage a faire de facon centraliser pour RIGI_PARASOL et le POST-TRAITEMENT ailleurs
+      courbe_fact = self.COURBE
+      if courbe_fact is None: courbe_fact = []
+      lnoeuds=set()
+      lmailles=set()
+      dicma=[]
+      for courbe in courbe_fact :
+        if courbe['GROUP_NO'] != None :
+            noeuds = courbe['GROUP_NO']
+            if type(noeuds) == tuple :
+                for el in noeuds :
+                    lnoeuds.add(el)
+            else :
+                lnoeuds.add(noeuds)
+        if courbe['GROUP_MA'] != None :
+            mailles = courbe['GROUP_MA']
+            if type(mailles) == tuple :
+                for el in mailles :
+                    lmailles.add(el)
+            else :
+                lmailles.add(mailles)
+      for maille in lmailles :
+        dicma.append({'NOM' : maille, 'MAILLE' : maille})
+
+      for no in lnoeuds :
+        if not self.MApyt.gno.has_key(no) :
+            crea_poi1.append(_F(NOEUD=no,NOM_GROUP_MA=no)) 
+      
+      __NEW = CREA_MAILLAGE(MAILLAGE=concept_maillage,
+                             CREA_POI1 = crea_poi1,
+                            );
+      self.NEW_MA = copy.copy(__NEW)
+      # Ecriture sous format europlexus
+      # Indices des composantes
+      indices_comps = {'KX':1,'KY':2,'KZ':3,'KRX':4,'KRY':5,'KRZ':6}
+      for noeud in ressorts :
+        valeurs = ressorts[noeud]
+        epx[MODULE].append('SUPPORT')
+        # ecriture des composantes et de leurs valeurs associees
+        for comp in indices_comps.keys():
+          if debug: print len(valeurs),indices_comps[comp]-1          
+          vale = valeurs[indices_comps[comp]-1]
+          epx[MODULE].append(3*' ' + '%s %s' %(comp,vale))
+        # caracteristiques des translations et des rotations  
+        for cle_fonc_parasol in dic_fonc_parasol.keys() :
+          epx[MODULE].append(3*' ' + '%s %i' %(cle_fonc_parasol,dic_fonc_parasol[cle_fonc_parasol]) )
+        
+        # ecriture du group_ma associe
+        # noeud = ressor[0]
+        group_ma = dic_gma[noeud]
+        epx[MODULE].append(3*' ' + 'LECT %s TERM' % group_ma) 
+    
+      epx[MODULE].append('\n')
+      
+      group_union = 'PARASOL'
+      dicma.append({'NOM' : group_union, 'UNION' : groups_parasol})
+      __NEW = DEFI_GROUP(reuse = __NEW, 
+                MAILLAGE = __NEW,
+                CREA_GROUP_MA = dicma
+                )     
+      
+      # Mettre a jour le module modele qd les ressorts existent
+      epx['MODELE'].append(5*' ' + 'APPU  ' + group_union)
+
+    # Fermer le module modele dans tous les cas 
+    self.multidomaine = 0
+    listInterfaces = self.INTERFACES
+    self.gmaInterfaces=[]
+    if listInterfaces :
+        i=0
+        self.multidomaine = 1
+        for interface in listInterfaces :
+            Lgma1 = self.setlist(interface['GROUP_MA_1'])
+            Lgma2 = self.setlist(interface['GROUP_MA_2'])
+            self.gmaInterfaces.extend(Lgma1)
+            self.gmaInterfaces.extend(Lgma2)
+            for gma in Lgma1 :
+                if i==0 :
+                    epx['MODELE'].append(5*' ' + 'CL3L' + 2*' ' + gma)
+                else :
+                    epx['MODELE'].append(11*' ' + gma)
+            for gma in Lgma2 :
+                    epx['MODELE'].append(11*' ' + gma)
+            i+=1
+    epx['MODELE'].append('TERM')
+    epx['MODELE'].append('\n')
+
+    if self.gmaInterfaces :
+        epx['CHAM_MATER'].append('FANTOME 0. LECT')
+        for gma in self.gmaInterfaces :
+            epx['CHAM_MATER'].append(15*' '+'%s'% gma)
+        epx['CHAM_MATER'].append('           TERM')
+    epx['CHAM_MATER'].append('\n')   
+    
+    
+    # DEFINITION REPERES ORTHOTROPIE QUI DOIT ETRE APRES LES SUPPORTS
+    for gma in self.gmaGLRC :
+        if gma not in self.dicOrthotropie :
+            raise "Erreur : %s non affecte par un repere d'orthotropie : ajouter le mot-cle 'VECTEUR' dans AFFE_CARA_ELEM"% gma
+        vale = self.dicOrthotropie[gma]
+        epx[MODULE].append('COMP ORTS %s %s %s'%(vale[0],vale[1],vale[2]))
+        epx[MODULE].append(3*' '+'LECT')
+        epx[MODULE].append(7*' '+'%s'% gma)
+        epx[MODULE].append(3*' '+'TERM')
+    epx[MODULE].append('\n') 
+#-----------------------------------------------------------------------   
+  def get_FONC_PARASOL(self,list_rigi_parasol=None) :
+    
+    epx = self.epx
+    
+    MODULE = 'FONC_PARASOL'
+    if list_rigi_parasol is not None :
+      if self.FONC_PARASOL is None : UTMESS('F','PLEXUS_12')
+    # else : return None
+    
+    epx[MODULE] = ['*--DEFINITIONS DES FONCTIONS']
+    
+    # Entete de la commande europlexus
+    epx[MODULE].append('FONC')
+    
+    # Cles de FONC_PARASOL dans l'ordre
+    cles = ['NFKT','NFKR']
+    # Dictionnaire faisant la correspondance entre la fonction et son numero europlexus
+    dic_fonc = {}
+    try : 
+        ifonc = self.ifonc
+        if debug: print 'self.ifonc = %s'%ifonc
+    except : 
+        self.ifonc=0
+        ifonc = self.ifonc     
+        if debug: print 'ifonc = %s'%ifonc
+    if epx.has_key('FONC_MATER') :
+        epx[MODULE].extend(epx['FONC_MATER'])
+    for cle in cles:
+      ifonc += 1
+      dic_fonc[cle] = ifonc
+      fonction = self.get_motcle(self.FONC_PARASOL,cle,code_mess=None)
+      if not fonction: return {}    # Si les mots-cles sont manquants on passe
+      (temps,valeurs) = fonction.Valeurs()
+      # imprimer les valeurs de la table
+      epx[MODULE].append(5*' ' +'NOPA %i TABLE %i' %(ifonc,len(temps)) )
+      for ival in range(len(temps)):
+#         epx[MODULE].append(17*' ' +'%s %s' %(temps[ival],valeurs[ival]))   
+         epx[MODULE].append(17*' ' +'%s %s' %(temps[ival],valeurs[ival]))   
+    self.ifonc = ifonc
+    self.dic_fonc = dic_fonc
+    epx[MODULE].append('\n')
+    return dic_fonc
+
+#-----------------------------------------------------------------------   
+  def export_CHAM_MATER(self): 
+
+    epx = self.epx
+
+    # CLe identifiant
+    MODULE = 'CHAM_MATER'
+
+    epx[MODULE] = ['*--DEFINITION DES MATERIAUX']
+
+    # Entete de la commande Europlexus courante
+    epx[MODULE].append('MATERIAUX')
+
+    # Recuperer la structure sous le mot_cle facteur AFFE de AFFE_MATER 
+    affe_mater = self.reupere_structure(self.CHAM_MATER,'AFFE')
+    affe_mater = self.setlist(affe_mater)
+
+    # Dictionnaire stoquant les caracteristiques mecaniques et les group_ma associe a chaque materiau
+    dic_mater = {}
+    typMat = {}
+    # GLRC impose de définir l'orientation : on stocke dans gmaGLRC les GMA dont il faudra retrouver l'orientation dans MODI_MAILLAGE/ORIE_NORM_COQUE
+    self.gmaGLRC = []
+    epx['FONC_MATER'] = []
+    ref_fonc=[]
+    for affe in affe_mater :
+      # Recuperer le concept du materiau defini par DEFI_MATERIAU
+      concept_mater = affe['MATER']
+      # Recuperer le nom du materiau
+      nom_mater = concept_mater.get_name()
+      # Recuperer le group_ma concerne
+      group_ma = self.get_group_ma(affe)
+      if debug: print 'type(group_ma) = %s'%type(group_ma)
+      if not dic_mater.has_key(nom_mater):
+         dic_mater[nom_mater] = {'GROUP_MA':[]}
+         # Recuperer les caracteristiques elastiques du materiau
+         elas = self.reupere_structure(concept_mater,'ELAS')
+         if elas :
+            typMat[nom_mater] = 'ELAS'
+            for car in ['E','RHO','NU']:
+              dic_mater[nom_mater][car] = elas[car]
+            for car in ['AMOR_ALPHA','AMOR_BETA'] :
+              if elas.has_key(car) :
+                dic_mater[nom_mater][car] = elas[car]
+              else :
+                dic_mater[nom_mater][car] = None                 
+         beton = self.reupere_structure(concept_mater,'BETON')
+         if beton  :
+            typMat[nom_mater] = 'GLRC'
+            self.gmaGLRC.extend(group_ma)
+            dic_mater[nom_mater]['LINER']=[]
+            dic_mater[nom_mater]['NAPPE']=[]
+            materBeton = beton['MATER']
+            elasBeton = self.reupere_structure(materBeton,'ELAS')
+            dic_mater[nom_mater]['BETON']={}
+            for car in ['E','RHO','NU']:
+              dic_mater[nom_mater]['BETON'][car] = self.get_motcle(elasBeton,car)
+            for car in ['AMOR_ALPHA','AMOR_BETA']:
+              dic_mater[nom_mater]['BETON'][car] = self.get_motcle(elasBeton,car,None)
+            ecroBeton = self.reupere_structure(materBeton,'BETON_ECRO_LINE')
+            for car in ['SYT','SYC']:
+              dic_mater[nom_mater]['BETON'][car] = self.get_motcle(ecroBeton,car,None)
+            for car in ['EPAIS','GAMMA','QP1','QP2','C1N1','C1N2','C1N3','C2N1','C2N2','C2N3','C1M1','C1M2','C1M3','C2M1','C2M2','C2M3'] :
+              dic_mater[nom_mater]['BETON'][car] = self.get_motcle(beton,car)
+            for car in ['OMT','EAT','BT1','BT2'] :
+              dic_mater[nom_mater]['BETON'][car] = self.get_motcle(beton,car,None)
+            for car in ['MP1X','MP1Y','MP2X','MP2Y'] :
+              car_temp = self.get_motcle(beton,car,None)
+              if debug: print 'type(car_temp) = %s'%type(car_temp)
+              dic_mater[nom_mater]['BETON'][car] = None
+              if car_temp :
+                  if isinstance(car_temp, float) :
+                    dic_mater[nom_mater]['BETON'][car] = car_temp
+                  else :
+                    if debug: print dir(car_temp)
+                    try : 
+                        ifonc = self.ifonc
+                    except : 
+                        self.ifonc=0
+                        ifonc = self.ifonc     
+                    ifonc += 1
+                    val = car_temp.Valeurs()
+                    x = val[:len(val):2]
+                    y = val[1:len(val):2]
+                    # imprimer les valeurs de la table
+                    epx['FONC_MATER'].append(5*' ' +'%i LSQU 2 TABLE %i' %(ifonc,len(x)) )
+                    for ival in range(len(x)):
+#                       epx['FONC_MATER'].append(17*' ' +'%s %s' %(x[ival],y[ival]))   
+                       epx['FONC_MATER'].append(17*' ' +'%s %s' %(x[ival],y[ival]))   
+                    dic_mater[nom_mater]['BETON'][car] = 'FONC %i'%ifonc
+                    self.ifonc=ifonc
+
+
+         cable = self.reupere_structure(concept_mater,'CABLE_PREC')
+         if cable  :
+            materCable = cable['MATER']
+            elasCable = self.reupere_structure(materCable,'ELAS')
+            ecroCable = self.reupere_structure(materCable,'ECRO_LINE')
+            dic_mater[nom_mater]['CABLE']={}
+            for car in ['E','NU']:
+              dic_mater[nom_mater]['CABLE'][car] = elasCable[car]           
+            for car in ['SY']:
+              dic_mater[nom_mater]['CABLE'][car] = ecroCable[car]
+            for car in ['OMX','OMY','RX','RY','PREX','PREY'] :
+              dic_mater[nom_mater]['CABLE'][car] = cable[car]
+         Lnappes = self.setlist(self.reupere_structure(concept_mater,'NAPPE'))
+         if Lnappes  :
+            for nappe in Lnappes :
+                dic_tmp = {}
+                materNappe = nappe['MATER']
+                elasNappe = self.reupere_structure(materNappe,'ELAS')
+                ecroNappe = self.reupere_structure(materNappe,'ECRO_LINE')
+                for car in ['E','NU']:
+                  dic_tmp[car] = elasNappe[car]           
+                for car in ['SY']:
+                  if ecroNappe :
+                    dic_tmp[car] = ecroNappe[car]
+                  else :
+                    dic_tmp[car] = None
+                for car in ['OMX','OMY','RX','RY'] :
+                  dic_tmp[car] = nappe[car]
+                for car in ['FS',] :
+                  if nappe.has_key(car) :
+                    dic_tmp[car] = nappe[car]
+                  else :
+                    dic_tmp[car] = None
+                dic_mater[nom_mater]['NAPPE'].append(dic_tmp)
+         Lliners = self.setlist(self.reupere_structure(concept_mater,'LINER'))
+         if Lliners :
+            for liner in Lliners :
+                dic_tmp = {}
+                materLiner = liner['MATER']
+                elasLiner = self.reupere_structure(materLiner,'ELAS')
+                ecroLiner = self.reupere_structure(materLiner,'ECRO_LINE')
+                for car in ['E','NU']:
+                  dic_tmp[car] = elasLiner[car]           
+                for car in ['SY']:
+                  dic_tmp[car] = ecroLiner[car]
+                for car in ['OML','RLR'] :
+                  dic_tmp[car] = liner[car]
+                dic_mater[nom_mater]['LINER'].append(dic_tmp)
+                
+
+      if debug: print 'MATER = %s \n type = %s \n dic = %s'%(nom_mater,typMat, dic_mater[nom_mater])
+      dic_mater[nom_mater]['GROUP_MA'].extend(group_ma)
+      
+      # if gmaGLRC :
+          # concept_maillage = self.reupere_structure(self.MODELE,'MAILLAGE')
+          # if debug: print 'ETAPES MAILLAGES'
+          # if debug: print dir(concept_maillage)
+          # if debug: print concept_maillage.executed
+          # if debug: print concept_maillage.etape
+          # if debug: print dir(concept_maillage.etape)
+          # if debug: print concept_maillage.etape.get_liste_etapes()
+          # if debug: print concept_maillage.etape.valeur
+        
+      
+    # Impression au format Europlexus
+    
+    for nom_mater in dic_mater.keys():
+      epx[MODULE].append('*--MATERIAU %s' %nom_mater)
+      # mot cle indicant qu'il s'agit des caracteristiques lineaires du materiau
+      if typMat[nom_mater] == 'ELAS' :
+          dic_corresp = {'E':'YOUNG','NU':'NU','RHO':'RO'}
+          dic_corresp2 ={'AMOR_ALPHA':'KRAY','AMOR_BETA':'MRAY'}
+          epx[MODULE].append('LINE')
+          for car_aster in dic_corresp.keys():
+            vale    = dic_mater[nom_mater][car_aster]
+            car_epx = dic_corresp[car_aster]
+            if vale is not None :
+              epx[MODULE].append('%s %s' %(car_epx,vale))
+          for car_aster in dic_corresp2.keys():
+            vale    = dic_mater[nom_mater][car_aster]
+            car_epx = dic_corresp2[car_aster]
+            if vale is not None :
+              epx[MODULE].append('%s %s' %(car_epx,vale))
+      else : #GLRC
+        dic_corres1 = {'RHO':'RO','EPAIS':'H','E':'EB','NU':'NUB'}
+        dic_corresNapp = {'E' : 'EA','SY':'FY','OMX':'OMX','OMY':'OMY','RX':'RX','RY':'RY','FS':'FS'}
+        dic_corresPrec = {'E' : 'EA','SY':'FY','OMX':'OMX','OMY':'OMY','RX':'RX','RY':'RY'}
+        dic_corresLinr = {'E' : 'EA','SY':'FY','OML':'OMLR','NU':'NULR','RLR':'RLR'}
+        dic_corres2 = {'OMT' : 'OMT','EAT':'EAT','BT1':'BT1','BT2':'BT2','SYT' : 'FT','GAMMA':'GAMM','QP1':'QP1','QP2':'QP2','C1N1':'C1N1','C1N2':'C1N2','C1N3':'C1N3','C2N1':'C2N1','C2N2':'C2N2','C2N3':'C2N3','C1M1':'C1M1','C1M2':'C1M2','C1M3':'C1M3','C2M1':'C2M1','C2M2':'C2M2','C2M3':'C2M3','SYC':'FC'}
+        dic_corres2b = {'MP1X':'MP1X','MP2X':'MP2X','MP1Y':'MP1Y','MP2Y':'MP2Y',}
+        dic_corres3 = {'PREX' : 'PREX', 'PREY' : 'PREY'}
+        dic_corres4 = {'AMOR_ALPHA':'KRAY','AMOR_BETA':'MRAY'}
+        epx[MODULE].append('GLRC DAMA')
+        for car_aster in dic_corres1.keys():
+            vale    = dic_mater[nom_mater]['BETON'][car_aster]
+            car_epx = dic_corres1[car_aster]
+            if vale is not None :
+                epx[MODULE].append('%s %s' %(car_epx,vale))
+        nlit = len(dic_mater[nom_mater]['NAPPE'])+len(dic_mater[nom_mater]['LINER'])
+        if dic_mater[nom_mater].has_key('CABLE') : 
+            nlit+=1
+        if nlit :
+            epx[MODULE].append('%s %s' %('NLIT',nlit))
+        for nappe in dic_mater[nom_mater]['NAPPE'] :
+            epx[MODULE].append('NAPP')
+            for car_aster in dic_corresNapp.keys():
+                if nappe.has_key(car_aster) :
+                    vale    = nappe[car_aster]
+                    car_epx = dic_corresNapp[car_aster]
+                    if vale is not None:
+                        epx[MODULE].append('%s %s' %(car_epx,vale))
+        if dic_mater[nom_mater].has_key('CABLE') : 
+            epx[MODULE].append('PREC')
+            for car_aster in dic_corresPrec.keys():
+                vale    = dic_mater[nom_mater]['CABLE'][car_aster]
+                car_epx = dic_corresPrec[car_aster]
+                if vale is not None :
+                    epx[MODULE].append('%s %s' %(car_epx,vale))
+        for liner in dic_mater[nom_mater]['LINER'] :
+            epx[MODULE].append('LINR')
+            for car_aster in dic_corresLinr.keys():
+                vale    = liner[car_aster]
+                car_epx = dic_corresLinr[car_aster]
+                if vale is not None :
+                    epx[MODULE].append('%s %s' %(car_epx,vale))
+        for car_aster in dic_corres2.keys():
+            vale    = dic_mater[nom_mater]['BETON'][car_aster]
+            car_epx = dic_corres2[car_aster]
+            if vale is not None :
+                if isinstance(vale, float) :
+                    epx[MODULE].append('%s %s' %(car_epx,vale))
+                else :
+                    epx[MODULE].append('%s %s' %(car_epx,vale))
+        for car_aster in dic_corres2b.keys():
+            vale    = dic_mater[nom_mater]['BETON'][car_aster]
+            car_epx = dic_corres2b[car_aster]
+            if vale is not None :
+                if isinstance(vale, float) :
+                    epx[MODULE].append('%s %s' %(car_epx,vale))
+                else :
+                    epx[MODULE].append('%s %s' %(car_epx,vale))
+        if dic_mater[nom_mater].has_key('CABLE') : 
+            for car_aster in dic_corres3.keys():
+                vale    = dic_mater[nom_mater]['CABLE'][car_aster]
+                car_epx = dic_corres3[car_aster]
+                if vale is not None :
+                    epx[MODULE].append('%s %s' %(car_epx,vale))
+        for car_aster in dic_corres4.keys():
+            vale    = dic_mater[nom_mater]['BETON'][car_aster]
+            car_epx = dic_corres4[car_aster]
+            if vale is not None :
+                epx[MODULE].append('%s %s' %(car_epx,vale))
+      
+          # ajouter les group_ma qui ont ete affecte par ces caracteristiques
+      epx[MODULE].append(3*' '+'LECT')
+      for group in dic_mater[nom_mater]['GROUP_MA']:
+        epx[MODULE].append(7*' '+group)
+      epx[MODULE].append(3*' '+'TERM')
+
+    
+    return epx
+    
+#-----------------------------------------------------------------------   
+  def export_EXCIT(self):
+  
+    epx = self.epx
+    
+    # CLe identifiant
+    MODULE = 'EXCIT'
+    
+    epx[MODULE] = ['*--DEFINITION DES CHARGEMENTS et DES CONDITIONS AUX LIMITES']
+    
+    # Entete de la commande Europlexus courante
+    #epx[MODULE].append('CHARGEMENT')
+
+    try : 
+      test = self.EXCIT[0]
+      excit_list = self.EXCIT
+    except :  
+      excit_list = self.setlist(self.EXCIT)
+    
+    #print '<INFO> excit_list = ',excit_list
+    #print '<INFO> type(excit_list) = ', type(excit_list)
+    
+    # Traduction de ddl_impo
+    dic_ddl_impo = {'DX':1,'DY':2,'DZ':3,'DRZ':4,'DRY':5,'DRZ':6}
+
+    # Initialisation des variables decrivant le chargement et les conditions de blocage
+    CHARGEMENT = []
+    LIAISON   = []
+    
+    for excit in excit_list:
+      concept_charge = excit['CHARGE']
+      pres_rep_list = self.reupere_structure(concept_charge,'PRES_REP')
+      ddl_impo_list = self.reupere_structure(concept_charge,'DDL_IMPO')
+      pres_rep_list = self.setlist(pres_rep_list)
+      ddl_impo_list = self.setlist(ddl_impo_list)
+      # PRES_REP
+      if pres_rep_list :
+        if len(CHARGEMENT) == 0 : 
+          CHARGEMENT = ['CHARGEMENT']
+          CHARGEMENT.append(2*' ' + '1 FACTO 2')
+        fonction = self.get_motcle(excit,'FONC_MULT',code_mess='A')
+        if fonction is None:
+          UTMESS('F','PLEXUS_7')
+        (temps,valeurs) = fonction.Valeurs()
+        for pres_rep in  pres_rep_list :
+          pression = pres_rep['PRES']
+          group_ma = self.get_group_ma(pres_rep)
+          CHARGEMENT.append(6*' ' +'PRESS COQU %s' %pression)
+          # ajouter les group_ma qui ont ete affecte par ces caracteristiques
+          CHARGEMENT.append(6*' '+'LECT')
+          for group in group_ma:
+            CHARGEMENT.append(10*' '+group)
+          CHARGEMENT.append(6*' '+'TERM') 
+          # imprimer les valeurs de la table
+          CHARGEMENT.append(6*' ' +'TABLE %i' %len(temps))
+          for ival in range(len(temps)):
+            CHARGEMENT.append(10*' ' +'%s %s' %(temps[ival],valeurs[ival]))
+      # DDL_IMPO
+      #if debug: print 'ddl_impo_list',ddl_impo_list
+      if ddl_impo_list :
+        #UTMESS('A','PLEXUS_8')
+# AA        if len(LIAISON) == 0 : LIAISON = ['LIAISON']
+        if len(LIAISON) == 0 : LIAISON = ['LINK']
+
+        for ddl_impo in ddl_impo_list:
+          blocage = ''
+
+          # DDL_IMPO / DX
+          for cle in dic_ddl_impo.keys() :
+            vale = self.get_motcle(ddl_impo,cle,code_mess=None)
+            if vale is not None:
+              if vale != 0 : UTMESS('F','PLEXUS_13')
+              else : 
+                blocage += `dic_ddl_impo[cle]`
+
+          # LIAISON / ENCASTRE
+          if ddl_impo.has_key('LIAISON'):
+             if ddl_impo['LIAISON']=='ENCASTRE':
+                blocage += ' 123456'
+
+          # recupere les entites geometriques
+          for entite in ['GROUP_MA','GROUP_NO'] :
+            group_ma = self.get_motcle(ddl_impo,entite,code_mess=None)
+            if group_ma is not None : 
+              group_ma = self.setlist(group_ma);break
+          LIAISON.append(' '*2 + 'BLOQ %s' %blocage)
+          # ajouter les group_ma qui ont ete affecte par ces caracteristiques
+          LIAISON.append(6*' '+'LECT')
+          for group in group_ma:
+            LIAISON.append(10*' '+group)
+          LIAISON.append(6*' '+'TERM') 
+
+      if not ddl_impo_list and not pres_rep_list :
+        UTMESS('F','PLEXUS_9')
+    
+    # Transmettre les commandes a la liste global epx
+    for var in [CHARGEMENT,LIAISON] :
+      if len(var) > 0 :
+        epx[MODULE].append('\n')
+        for ligne in var : epx[MODULE].append(ligne)
+    
+    epx[MODULE].append('\n')    
+#-----------------------------------------------------------------------   
+  def Correspondance_champ(self):
+   
+    # Dictionnaire de passage de champs Aster --> Europlexus
+    dic_champ = {'DEPL':'DEPLACEMENT','VITE':'VITESSE','ACCE':'ACCELERATION',
+                 'SIEF_ELGA':'CONT','EPSI_ELGA':'EPST','VARI_ELGA':'ECRO'}
+    
+    # Dictionnaire de passage de composantes Aster --> Europlexus
+    dic_cmp = {}
+    for cham in ['DEPL','VITE','ACCE'] :
+      dic_cmp[cham] = {'DX' : 1,'DY':2,'DZ':3,'DRX':4,'DRY':5,'DRZ':6}
+    
+    dic_cmp['SIEF_ELGA']  = {'SIXX':1,'SIYY':2,'SIZZ':3,'SIXY':4,'SIXZ':5,'SIYZ':6,'NXX':1,'NYY':2,'NXY':3,'MXX':4,'MYY':5,'MXY':6,'QX':7,'QY':8}
+    dic_cmp['VARI_ELGA'] = {}
+    for ii in range(1,25):
+      dic_cmp['VARI_ELGA']['V%i'%ii] = ii
+    
+    self.dic_champ = dic_champ  
+    self.dic_cmp = dic_cmp
+        
+    
+#-----------------------------------------------------------------------   
+  def export_ECRITURE(self):
+    
+    epx = self.epx
+    
+    self.Correspondance_champ()
+             
+    # CLe identifiant
+    MODULE = 'ECRITURE'
+
+    dcles_freq = {'FREQ':'PAS_NBRE', 'TFREQ':'PAS_INST'}
+
+    def get_freq(fact):
+      for cle_freq in dcles_freq.keys(): 
+# AA        vale_freq = self.get_motcle(fact,cle_freq,code_mess=None)
+        vale_freq = self.get_motcle(fact,dcles_freq[cle_freq],code_mess=None)
+        if vale_freq is not None : break
+      return cle_freq,vale_freq  
+      
+    def get_freq2() :
+        if self.PAS_NBRE_COURBE :
+            return 'FREQ',self.PAS_NBRE_COURBE
+        elif self.PAS_INST_COURBE :
+            return 'TFREQ',self.PAS_INST_COURBE
+        else :
+            raise 'Erreur programmation'
+        
+
+    def string2list(var) :
+      if types.TypeType(var) == types.StringType : var = (var,)
+      return var
+
+
+    epx[MODULE] = ['*--ECRITURES DES RESULTATS']
+    epx[MODULE] = ['opti K2GP']
+    # Entete de la commande Europlexus courante
+    epx[MODULE].append('ECRITURE')
+
+
+    # Traitement du mot-cle facteur OBSERVATION (EPX = LISTING)
+# AA    listing_fact = self.ECRITURE['LISTING']
+    listing_fact = self.OBSERVATION
+    nom_cham = string2list(listing_fact['NOM_CHAM'])
+
+    cle_freq_listing, vale_freq_listing = get_freq(listing_fact)
+# AA   cles_entite = ['POINTS','ELEMEMTS']
+    dcles_entite = {'POINT':'GROUP_NO', 'ELEM':'GROUP_MA'}
+# AA    dcles_tout   = {'POINTS':'TOUT_GROUP_NO', 'ELEMEMTS':'GROUP_MA'}
+    cles_entite = dcles_entite.keys()
+
+    # Ecriture format Europlexus
+    
+    # Ecriture LISTING
+    st = 2*' '   
+    for cham_aster in nom_cham:
+      cham_epx = self.dic_champ[cham_aster]
+      st +=  '%s ' % cham_epx  
+    st += ' %s %s' % (cle_freq_listing,vale_freq_listing)
+    st += ' NOPO NOEL'
+    epx[MODULE].append(st)
+    for cle in cles_entite:
+# AA    for cle in cles_entite :
+# AA      entite_geo = self.get_motcle(listing_fact ,cle, code_mess=None)
+# AA       entite_geo = string2list(entite_geo)
+
+       entite_geo = string2list(listing_fact[dcles_entite[cle]])
+       # if listing_fact['TOUT_%s' % dcles_entite[cle]] == 'OUI': epx[MODULE].append(2*' ' +'%s TOUS ' % cle)
+       # elif entite_geo is None:                                 epx[MODULE].append(2*' ' +'NO%s' % cle)
+       # else:
+          # epx[MODULE].append(2*' ' +'%s LECT' %cle)
+          # for group in entite_geo :
+             # epx[MODULE].append(6*' '+group)
+          # epx[MODULE].append(2*' '+'TERM') 
+
+#        if entite_geo is None : 
+#           epx[MODULE].append(2*' ' +'NO%s' %cle)
+#        elif  entite_geo[0] == 'TOUS' :
+#          epx[MODULE].append(2*' ' +'%s TOUS ' %cle)
+#        else :
+#           epx[MODULE].append(2*' ' +'%s LECT' %cle)
+#           for group in entite_geo :
+#              epx[MODULE].append(6*' '+group)
+#           epx[MODULE].append(2*' '+'TERM') 
+#           
+
+    # Ecriture FICHIER ALICE UTILISE par le mot-cle facteur COURBE
+# AA    courbe_fact = self.ECRITURE['COURBE']
+    courbe_fact = self.COURBE
+    if courbe_fact is not None :
+
+      # dcourbe=[]
+      # for j in courbe_fact:
+         # dcourbe.append(j.cree_dict_valeurs(j.mc_liste))
+         # for i in dcourbe[-1].keys():
+            # if dcourbe[-1][i]==None : del dcourbe[-1][i]
+
+      # if debug: print 'dcourbe=', dcourbe
+
+      cle_freq, vale_freq = get_freq2()
+      fichier_alit = self.pwd + self.REPE + os.sep + self.nom_fichiers['ALIT']
+      epx[MODULE].append(2*' ' + "FICH ALIT 11  %s %s" %(cle_freq,vale_freq))
+
+      # Liste les noeuds a postraiter
+      lnoeuds=set()
+      lmailles=set()
+      for courbe in courbe_fact :
+        if courbe['GROUP_NO'] != None :
+            noeuds = courbe['GROUP_NO']
+            if debug: print type(noeuds)
+            # liste de noeud ou un seul noeud ?
+            if type(noeuds) == tuple :
+                for el in noeuds :
+                    lnoeuds.add(el)
+            else :
+                lnoeuds.add(noeuds)
+        elif courbe['GROUP_MA'] != None :
+            mailles = courbe['GROUP_MA']
+            if debug: print type(mailles)
+            # liste de mailles ou une seule maille ?
+            if type(mailles ) == tuple :
+                for el in mailles :
+                    lmailles.add(el)
+            else :
+                lmailles.add(mailles)           
+        else :
+            raise 'Erreur ni noeud ni maille'
+      # sys.exit()
+      # tables = self.get_motcle(courbe_fact,'TABLE',code_mess='F')
+      # tables = self.setlist(tables)
+
+      # icourbe = 0
+      # for table in tables:
+        # icourbe += 1
+        # noeud = table['NOEUD']
+        # list_noeuds.append(noeud)
+      # Ecriture la liste des noeuds sous format epx
+      if lnoeuds :
+          epx[MODULE].append(4*' ' +'POINTS')
+          epx[MODULE].append(6*' ' +'LECT ')
+          for noeud in lnoeuds :
+            epx[MODULE].append(8*' '+noeud)
+          epx[MODULE].append(6*' '+'TERM')   
+      if lmailles :
+          epx[MODULE].append(4*' ' +'ELEM')
+          epx[MODULE].append(6*' ' +'LECT ')
+          for maille in lmailles :
+            epx[MODULE].append(8*' '+maille)
+          epx[MODULE].append(6*' '+'TERM')   
+     
+     
+      # Pas besoin d'elements 
+      # epx[MODULE].append(4*' ' + 'NOELEMENTS')
+    
+    # Ecriture fichier MED representant les champs aux noeuds et aux points de gauss
+    # Traitement du mot-cle facteur ARCHIVAGE
+#    # Traitement du mot-cle facteur CHAMP
+#    champ_fact = self.ECRITURE['CHAMP']
+    champ_fact = self.ARCHIVAGE
+    if champ_fact is not None :
+      cle_freq_champ,vale_freq_champ = get_freq(champ_fact)
+      epx[MODULE].append(2*' ' + 'FICHIER MED')
+      # chemin complet du fichier med
+      fichier_med = self.pwd + self.REPE + os.sep + self.nom_fichiers['MED']
+      epx[MODULE].append(2*' ' + "'%s'" %fichier_med)
+      cle_freq,vale_freq = get_freq(champ_fact)
+      epx[MODULE].append(2*' ' + ' %s %s' %(cle_freq_champ,vale_freq_champ))
+      
+      # groupes de mailles du modele
+      entite_geo={}
+      entite_geo['ELEM'] = []
+      for model in ['DKT3','Q4GS'] :
+         if model in self.modelisations :
+             entite_geo['ELEM'].extend(self.dic_gma[model])
+      entite_geo['POINT'] = []
+      for model in ['DKT3','Q4GS','POUT'] :
+         if model in self.modelisations :
+             entite_geo['POINT'].extend(self.dic_gma[model])
+      for cle in cles_entite :
+       epx[MODULE].append(2*' ' +'%s LECT' %cle)
+       for group in entite_geo[cle] :
+          epx[MODULE].append(6*' '+group)
+       epx[MODULE].append(2*' '+'TERM') 
+    
+    
+    # ecriture CAST2000
+    # __temp
+    fichier_cast2000 = 'fort.%i' %unite_cast2000
+    if unite_cast2000 and os.path.isfile(fichier_cast2000) :
+      # titre
+      epx[MODULE].append('\n*-- CAST2000')
+      fd = open(fichier_cast2000,'r')
+      lst = fd.readlines()
+      fd.close()
+      for st in lst :
+        st = string.replace(st,'\n','')
+        epx[MODULE].append(st)
+          
+    # Une ligne de saut
+    epx[MODULE].append('\n')
+    
+#-----------------------------------------------------------------------   
+
+  def export_POST_COURBE(self):
+
+    # Suite de postraitement permettant d'ecrire des fichiers ASCII 
+    # des grandeurs demandees
+    
+    # Tester si le mot_cle facteur COURBE a ete renseigne
+# AA   courbe_fact = self.ECRITURE['COURBE']
+    courbe_fact = self.COURBE
+    if courbe_fact is None : return
+
+    epx = self.epx
+                 
+    # Cle identifiant
+    MODULE = 'POST_COURBE'
+
+    # Ecriture fort Europlexus
+    # Entete de la commande courante
+    epx[MODULE] = ['SUITE\n']
+    # epx[MODULE].append("'TITRE'")
+#    unite_alit = self.get_motcle(courbe_fact,'UNITE_ALIT',code_mess=None)
+#    if debug: print 'unite_alit=', unite_alit
+    if self.UNITE_COURBE: fichier_courbes = os.path.join(self.pwd, 'fort.%s' % str(self.UNITE_COURBE))
+    else:                 fichier_courbes = self.pwd + self.REPE + os.sep + self.nom_fichiers['PUN']
+    fichier_alit = self.pwd + self.REPE + os.sep + self.nom_fichiers['ALIT']
+    epx[MODULE].append("RESULTAT ALICE TEMPS 11")
+    epx[MODULE].append("OPNF FORMAT 17 '%s'" %fichier_courbes)    
+    epx[MODULE].append("SORTIES GRAPHIQUES")
+    # epx[MODULE].append("PERFO '%s'"%fichier_courbes)
+    epx[MODULE].append("AXTEMPS 1. 'TEMPS(s)'")
+
+    # recuperer le mot-cle facteur COURBE
+# AA    courbe_fact = self.ECRITURE['COURBE']
+    courbe_fact = self.COURBE
+    # recuperer les mot_cle TABLE
+    # tables = self.get_motcle(courbe_fact,'TABLE',code_mess='F')
+    #tables = self.setlist(tables)
+
+    # Dictionnaire decrivant les legendes des abscisses et ordodonnees des courbes imprimees
+    # etl utilisee dans get_tables
+    self.legend_courbes = {}
+    entites_courbe = ['GROUP_NO','GROUP_MA'] 
+    entite_EPX={'GROUP_NO' : 'NOEUD', 'GROUP_MA' : 'ELEM'}
+    icourbe = 0
+    # for table in tables:
+    lnoeuds = []
+    for table in courbe_fact :
+      for entite_type in entites_courbe :
+        try : entite = table[entite_type]
+        except : entite = None
+        if entite is not None :        
+            cham_aster = table['NOM_CHAM']
+            cmp_aster = table['NOM_CMP']
+            cham_epx = self.dic_champ[cham_aster]
+            cmp_epx  = self.dic_cmp[cham_aster][cmp_aster]
+            ylabel   = cham_aster + '_' + cmp_aster
+            #ylabel   = cmp_aster
+            if type(entite) is not tuple : entite = [entite,]
+            for el in entite :
+                icourbe+=1
+                label = ylabel + '_%s'%el
+                if entite_type == 'GROUP_MA' :
+                    label = label+'_%s'%table['NUM_GAUSS']
+                st = "COURBE %i '%s' %s COMP %i "% (icourbe,label,cham_epx,cmp_epx)
+                if entite_type == 'GROUP_MA' :
+                    st=st+"GAUSS %i "%table['NUM_GAUSS']
+                st=st+"%s LECT %s TERM"%(entite_EPX[entite_type],el)
+                if debug: print 'st = %s'%st
+                epx[MODULE].append(st)
+                # epx[MODULE].append("LIST %i AXES 1. '%s'" % (icourbe,ylabel))
+                st = "LIST %s AXES 1. '%s'" % (icourbe,label)
+                if debug: print 'st = %s'%st
+                epx[MODULE].append(st)
+                self.legend_courbes[icourbe] = ['TEMPS',label]
+
+
+
+    # Une ligne de saut
+    epx[MODULE].append('\n')
+
+#-----------------------------------------------------------------------   
+  def export_CALCUL(self):
+    
+    epx = self.epx
+    
+    # CLe identifiant
+    MODULE = 'CALCUL'
+
+    # Entete de la commande Europlexus courante
+    epx[MODULE] = ['*--OPTION DE CALCUL']
+    epx[MODULE].append('')
+    type_discr = self.CALCUL['TYPE_DISCRETISATION']
+    
+    epx[MODULE].append('OPTION PAS %s' %type_discr)
+      
+    if  type_discr == 'AUTO':
+      cstab = self.CALCUL['CSTAB']
+      epx[MODULE].append(7*' ' + 'CSTAB %s' %cstab)
+    
+    listInterfaces = self.INTERFACES
+    listDomaines = self.DOMAINES
+    domaineInterfaces = {}
+    if listDomaines :
+        epx[MODULE].append('\n')
+        epx[MODULE].append('*--DEFINITION DES SOUS DOMAINES')
+        epx[MODULE].append('')
+        epx[MODULE].append('STRUCTURE %s'%len(listDomaines))
+        for interface in listInterfaces :
+            Lgma1 = self.setlist(interface['GROUP_MA_1'])
+            Lgma2 = self.setlist(interface['GROUP_MA_2'])
+            idS1 = interface['IDENT_DOMAINE_1']
+            idS2 = interface['IDENT_DOMAINE_2']
+            if not domaineInterfaces.has_key(idS1) :
+                domaineInterfaces[idS1]= []
+            if not domaineInterfaces.has_key(idS2) :
+                domaineInterfaces[idS2]= []
+            domaineInterfaces[idS1].extend(Lgma1)
+            domaineInterfaces[idS2].extend(Lgma2)
+    else : 
+        listDomaines = []
+    for domaine in listDomaines :
+        Lgma = self.setlist(domaine['GROUP_MA'])
+        id  = domaine['IDENTIFIANT']
+        epx[MODULE].append(3*' '+'DOMA LECT')
+        for gma in Lgma :
+            epx[MODULE].append(12*' '+gma)
+        for gma in domaineInterfaces[id] :
+            epx[MODULE].append(12*' '+gma)
+        epx[MODULE].append(8*' '+'TERM')
+        epx[MODULE].append(8*' '+'IDENTIFIANT %s\n'%id)
+        
+    
+    if listInterfaces :
+        epx[MODULE].append('')
+        epx[MODULE].append('INTERFACE %s'%len(listInterfaces))
+    else :
+        listInterfaces = []
+    for interface in listInterfaces :
+        Lgma1 = self.setlist(interface['GROUP_MA_1'])
+        Lgma2 = self.setlist(interface['GROUP_MA_2'])
+        idS1 = interface['IDENT_DOMAINE_1']
+        idS2 = interface['IDENT_DOMAINE_2']
+        tole = interface['TOLE']
+        epx[MODULE].append(3*' '+'MORTAR TOLE %s'%tole)
+        epx[MODULE].append(7*' '+'DOMA %s LECT'%idS1)
+        for gma in Lgma1 :
+            epx[MODULE].append(13*' '+gma)
+        epx[MODULE].append(10*' '+'TERM')
+        epx[MODULE].append(7*' '+'DOMA %s LECT'%idS2)
+        for gma in Lgma2 :
+            epx[MODULE].append(13*' '+gma)
+        epx[MODULE].append(10*' '+'TERM')
+                
+    epx[MODULE].append('\n')
+    epx[MODULE].append('*--LANCEMENT DE CALCUL')
+    epx[MODULE].append('')
+    calcul = 'CALCUL'
+# AAA    cles = ['INST_INIT','PASFIX','INST_FIN','DTMAX']
+    cles = ['INST_INIT','PASFIX','INST_FIN']
+    dcles = {'INST_INIT':'TINI', 'PASFIX':'PASFIX', 'INST_FIN':'TFIN'}
+    for cle in dcles.keys():
+      try : calcul += ' %s %s' %(dcles[cle], self.CALCUL[cle])
+      except : pass
+    # Doit etre mis en entier
+    try : calcul += ' %s %d' %('NMAX',self.CALCUL['NMAX'])
+    except : pass
+    epx[MODULE].append(calcul) 
+    epx[MODULE].append('\n')
+    #epx[MODULE].append('FIN')  
+    
+  
+#-----------------------------------------------------------------------   
+  def ecrire_fichier(self,):
+    
+    fichier = self.REPE + os.sep + self.nom_fichiers['COMMANDE']
+
+    # ordre des modules de definition du modele EPX
+    modules = ['DEBUT','MAILLAGE','DIME','MODELE','CARA_ELEM','FONC_PARASOL','CHAM_MATER','RIGI_PARASOL','EXCIT','ECRITURE','CALCUL','POST_COURBE']
+    
+    #les modules MODELE et RIGI_PARASOL doivent etre executes avant MAILLAGE 
+    # car le maillage peut etre modifie dans ces modules
+    modules_exe = []
+    modules_exe.extend(modules)
+    modules_exe.remove('MAILLAGE') 
+    modules_exe.append('MAILLAGE')
+    
+    # Excecution des differentes modules
+    for module in modules_exe:
+      fct = 'export_%s' %module
+      if hasattr(self,fct) : 
+        eval('self.'+fct+'()')  
+      else :  
+        print 'module %s pas encore developpe' %fct
+    
+    # Ecriture du fichier texte contenant toutes les commandes Europlexus
+    fd = open(fichier,'w')
+    for module in modules :
+      if self.epx.has_key(module) :
+        for ll in self.epx[module]:
+          if debug: print 'EPX : %s'%ll
+          fd.write('%s\n'%ll)
+    # Fin du fichier de commandes epx      
+    fd.write('FIN')      
+    fd.close()
+
+#-----------------------------------------------------------------------   
+  def get_table(self,icourbe=1,fichier='auto') :
+   
+    global table
+    
+    if not hasattr(self,'courbes'): 
+      if fichier == 'auto' : fichier = self.pwd + self.REPE + os.sep + self.nom_fichiers['PUN']
+      if not os.path.isfile(fichier) : return
+      self.courbes = self.lire_pun(fichier=fichier)
+    
+    if not os.path.isfile(fichier) : return
+    if debug: print self.courbes,type(self.courbes)
+    nc = 0
+    para_ordonnee = []
+    dico = []
+    for icourbe in self.courbes :
+        valeurs = self.courbes[icourbe]
+        if debug: print 'icourbe = %s ; valeurs = %s'%(icourbe, valeurs)
+        if nc == 0 :
+            para_abscisse = self.legend_courbes[icourbe][0]
+            vale_abscisse = valeurs[0,:].tolist()
+            assert (len(para_abscisse)<17)
+            dico.append({'TYPE_K':'K16','LISTE_R' : vale_abscisse , 'PARA' : para_abscisse})
+            para_ordonnee = self.legend_courbes[icourbe][1]
+            vale_ordonnee = valeurs[1,:].tolist()
+            assert (len(para_ordonnee)<17)
+            dico.append({'TYPE_K':'K16','LISTE_R' : vale_ordonnee , 'PARA' : para_ordonnee})
+            nc=1
+        else :
+            if ((self.legend_courbes[icourbe][0] == para_abscisse) and (vale_abscisse == valeurs[0,:].tolist())) :
+                para_ordonnee = self.legend_courbes[icourbe][1]
+                vale_ordonnee = valeurs[1,:].tolist()
+                assert (len(para_ordonnee)<17)
+                dico.append({'TYPE_K':'K16','LISTE_R' : vale_ordonnee , 'PARA' : para_ordonnee})
+            else :
+                raise 'Table non compatible'
+    
+    table = CREA_TABLE( LISTE =dico
+                      );
+    
+    if 0 :
+      unite = self.get_unite_libre()
+      unite = 90
+      DEFI_FICHIER(UNITE=unite,ACTION='ASSOCIER'); 
+                                                
+      IMPR_TABLE(UNITE = unite,
+               FORMAT = 'XMGRACE',
+               TABLE = table,
+               LEGENDE_X = para_abscisse,
+               LEGENDE_Y = para_ordonnee,
+               LEGENDE   = 'test'
+           );
+           
+      os.system('xmgrace fort.%i' %unite) 
+    
+      DEFI_FICHIER(UNITE=unite,ACTION='LIBERER'); 
+           
+                  
+#-----------------------------------------------------------------------
+  def get_resu(self,fichier_med='auto'):
+    
+    # Rendre global le resu pour qu'il soit accepte dans self.DeclareOut 
+    global resu
+    
+    if fichier_med == 'auto' : fichier_med = self.REPE + os.sep + self.nom_fichiers['MED'] 
+    
+    if debug: print fichier_med
+    if not os.path.isfile(fichier_med) :
+       print "Pas de fichier MED !"
+       return
+        
+    # Format med des champs depl, vite et acce
+    format_med =[_F(NOM_CHAM_MED='CHAMP___DEPLACEMENT___001',
+                    NOM_CMP=('DX','DY','DZ','DRX','DRY','DRZ'),
+                    NOM_CMP_MED=('UX','UY','UZ','RX','RY','RZ'),
+                    NOM_CHAM    ='DEPL' ),
+                 _F(NOM_CHAM_MED='CHAMP___VITESSE___001',
+                    NOM_CMP=('DX','DY','DZ','DRX','DRY','DRZ'),
+                    NOM_CMP_MED=('VX','VY','VZ','RX','RY','RZ'),
+                    NOM_CHAM    ='VITE' ),
+                 _F(NOM_CHAM_MED='CHAMP___ACCELERATION___001',
+                    NOM_CMP=('DX','DY','DZ','DRX','DRY','DRZ'),
+                    NOM_CMP_MED=('GX','GY','GZ','RX','RY','RZ'),
+                    NOM_CHAM    ='ACCE' ),
+                ]    
+
+    # Dicionnaire permettant de faire la correspondance des champs aux pts de gauss entre le med de europlexus et aster
+    dic_cmp_gauss = {}
+    
+    dic_cmp_gauss['CONTRAINTE'] = {'DKT3': {'NOM_CMP'     : ('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ'),
+                                            'NOM_CMP_MED' : ('SIG1','SIG2','SIG3','SIG4','SIG5','SIG6',),},
+                                   'Q4GS': {'NOM_CMP'     : ('NXX','NYY','NXY','MXX','MYY','MXY','QX','QY'),
+                                            'NOM_CMP_MED' : ('SIG1','SIG2','SIG3','SIG4','SIG5','SIG6','SIG7','SIG8'),},
+                                   'POUT' : {}        
+                    
+                                   }
+
+    dic_cmp_gauss['DEFORMATION'] = {'DKT3': {'NOM_CMP'     : ('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ'),
+                                            'NOM_CMP_MED' : ('EPS1','EPS2','EPS3','EPS4','EPS5','EPS6',),},
+                                   'Q4GS': {'NOM_CMP'     : ('EXX','EYY','EXY','KXX','KYY','KXY','GAX','GAY'),
+                                            'NOM_CMP_MED' : ('EPS1','EPS2','EPS3','EPS4','EPS5','EPS6','EPS7','EPS8'),},
+                                   'POUT' : {}        
+                    
+                                   }
+
+    dic_cmp_gauss['ECROUISSAGE'] = {'DKT3': {'NOM_CMP'     : ('V1','V2','V3','V4','V5','V6','V7','V8','V9','V10','V11','V12','V13','V14','V15','V16','V17','V18','V19'),
+                                            'NOM_CMP_MED'  : ('VAR1','VAR2','VAR3','VAR4','VAR5','VAR6','VAR7','VAR8','VAR9','VAR10','VAR11','VAR12','VAR13','VAR14','VAR15','VAR16','VAR17','VAR18','VAR19'),},
+                                   'Q4GS' : {'NOM_CMP'     : ('V1','V2','V3','V4','V5','V6','V7','V8','V9','V10','V11','V12','V13','V14','V15','V16','V17','V18','V19'),
+                                            'NOM_CMP_MED'  : ('VAR1','VAR2','VAR3','VAR4','VAR5','VAR6','VAR7','VAR8','VAR9','VAR10','VAR11','VAR12','VAR13','VAR14','VAR15','VAR16','VAR17','VAR18','VAR19'),},
+                                   'POUT' : {}        
+                        
+                                    }
+    tupVar = ('X1','X2','X3','X4','X5','X6','X7','X8','X9','X10','X11','X12','X13','X14','X15','X16','X17','X18','X19')                                
+    
+    # Dictionnaire permettant de traduire le champ epx en med au nom asscie dans aster
+# AA    epx2aster = {'CONTRAINTE':'SIEF_ELGA','ECROUISSAGE':'VARI_ELGA'}
+    epx2aster = {'CONTRAINTE':'SIEF_ELGA','DEFORMATION':'EPSI_ELGA_DEPL','ECROUISSAGE':'VARI_ELGA'}
+
+# AA : desactive pour le moment
+#     # Enrichir la liste format_med par les champs aux pts de gauss
+#     imode = 0
+#     if debug: print 'self.modelisations',self.modelisations
+#     for modelisation in self.modelisations :
+#       #if modelisation in ['Q4GS','DKT3'] :
+#         imode += 1
+#         numero =  string.replace('%3.i' %imode,' ','0')
+#         for champ in dic_cmp_gauss.keys():
+#           if len(dic_cmp_gauss[champ][modelisation]) > 0 :
+#             nom_cham_med = 'CHAMP___'+ champ + (13-len(champ))*'_' + numero
+#             nom_cham = epx2aster[champ]
+#             nom_cmp = dic_cmp_gauss[champ][modelisation]['NOM_CMP']
+#             nom_cmp_med = dic_cmp_gauss[champ][modelisation]['NOM_CMP_MED']
+#             # ajouer a la list format_med
+#             format_med.append(_F(NOM_CHAM_MED=nom_cham_med,NOM_CMP=nom_cmp,
+#                                NOM_CMP_MED=nom_cmp_med,NOM_CHAM=nom_cham)
+#                            )
+
+    # Lire le fichier med avec les options choisies dans la liste format_med
+    unite = self.get_unite_libre()
+    DEFI_FICHIER(UNITE=unite,ACTION='LIBERER'); 
+    fort = 'fort.%i' %unite
+    if os.path.isfile(fort) : os.remove(fort)
+
+    os.symlink(fichier_med,fort)
+
+    # Regeneration des mots-cles EXCIT passés en argument de la macro
+    dExcit=[]
+    for j in self.EXCIT :
+       dExcit.append(j.cree_dict_valeurs(j.mc_liste))
+       for i in dExcit[-1].keys():
+          if dExcit[-1][i]==None : del dExcit[-1][i]
+    resu = LIRE_RESU(TYPE_RESU='EVOL_NOLI',
+#                  VERI_ELGA='NON',
+                  FORMAT='MED',
+                  MODELE=self.NEW_MODELE,
+                  FORMAT_MED=format_med,
+                  UNITE=unite,
+                  CHAM_MATER=self.CHAM_MATER,
+                  CARA_ELEM=self.CARA_ELEM,
+                  TOUT_ORDRE='OUI',
+                  EXCIT=dExcit,
+                  INFO=self.INFO,
+                  );
+
+    __EPN = CREA_CHAMP(
+            INFO      = self.INFO,
+            TYPE_CHAM = 'ELGA_NEUT_R',
+            OPERATION = 'AFFE',
+            MODELE    = self.NEW_MODELE,
+            PROL_ZERO = 'OUI',
+            AFFE      = self.listEpais,
+            )
+    __EPN2 = CREA_CHAMP(
+            INFO      = self.INFO,
+            TYPE_CHAM = 'ELGA_NEUT_R',
+            OPERATION = 'AFFE',
+            MODELE    = self.NEW_MODELE,
+            PROL_ZERO = 'OUI',
+            AFFE      = self.listEpais2,
+            )
+    __UNN = CREA_CHAMP(
+            INFO      = self.INFO,
+            TYPE_CHAM = 'ELGA_NEUT_R',
+            OPERATION = 'AFFE',
+            MODELE    = self.NEW_MODELE,
+            PROL_ZERO = 'OUI',
+            AFFE = _F(VALE=(1.,1.), TOUT='OUI', NOM_CMP=('X21','X22')),
+            )
+    __UNDEU = CREA_CHAMP(
+            INFO      = self.INFO,
+            TYPE_CHAM = 'ELGA_NEUT_R',
+            OPERATION = 'AFFE',
+            MODELE    = self.NEW_MODELE,
+            PROL_ZERO = 'OUI',
+            AFFE = _F(VALE=(1.,1./2.), TOUT='OUI', NOM_CMP=('X21','X22')),
+            )
+    __FONC1 = FORMULE(VALE='X1*X21',NOM_PARA=('X1','X21'))
+    __FONC2 = FORMULE(VALE='X2*X21',NOM_PARA=('X2','X21'))
+    __FONC3 = FORMULE(VALE='X3*X21',NOM_PARA=('X3','X21'))
+    __FONC4 = FORMULE(VALE='X4*X22',NOM_PARA=('X4','X22'))
+    __FONC5 = FORMULE(VALE='X5*X22',NOM_PARA=('X5','X22'))
+    __FONC6 = FORMULE(VALE='X6*X22',NOM_PARA=('X6','X22'))
+    __FONC7 = FORMULE(VALE='X7*X21',NOM_PARA=('X7','X21'))
+    __FONC8 = FORMULE(VALE='X8*X21',NOM_PARA=('X8','X21'))
+    __FONC11 = FORMULE(VALE='X11*X21',NOM_PARA=('X11','X21'))
+    __FONC12 = FORMULE(VALE='X12*X21',NOM_PARA=('X12','X21'))
+    __FONC13 = FORMULE(VALE='X13*X21',NOM_PARA=('X13','X21'))
+    __FONC14 = FORMULE(VALE='X14*X22',NOM_PARA=('X14','X22'))
+    __FONC15 = FORMULE(VALE='X15*X22',NOM_PARA=('X15','X22'))
+    __FONC16 = FORMULE(VALE='X16*X22',NOM_PARA=('X16','X22'))
+    __FONC17 = FORMULE(VALE='X17*X21',NOM_PARA=('X17','X21'))
+    __FONC18 = FORMULE(VALE='X18*X21',NOM_PARA=('X18','X21'))
+
+    __FONE1 = FORMULE(VALE='X1*X21',NOM_PARA=('X1','X21'))
+    __FONE2 = FORMULE(VALE='X2*X21',NOM_PARA=('X2','X21'))
+    __FONE3 = FORMULE(VALE='X3*X22',NOM_PARA=('X3','X22'))
+    __FONE4 = FORMULE(VALE='X4*X21',NOM_PARA=('X4','X21'))
+    __FONE5 = FORMULE(VALE='X5*X21',NOM_PARA=('X5','X21'))
+    __FONE6 = FORMULE(VALE='X6*X22',NOM_PARA=('X6','X22'))
+    __FONE7 = FORMULE(VALE='X7*X21',NOM_PARA=('X7','X21'))
+    __FONE8 = FORMULE(VALE='X8*X21',NOM_PARA=('X8','X21'))
+    __FONE9 = FORMULE(VALE='X9*X21',NOM_PARA=('X9','X21'))
+    __FONE10 = FORMULE(VALE='X10*X21',NOM_PARA=('X10','X21'))
+    __FONE11 = FORMULE(VALE='X11*X21',NOM_PARA=('X11','X21'))
+    __FONE12 = FORMULE(VALE='X12*X21',NOM_PARA=('X12','X21'))
+    __FONE13 = FORMULE(VALE='X13*X21',NOM_PARA=('X13','X21'))
+    __FONE14 = FORMULE(VALE='X14*X21',NOM_PARA=('X14','X21'))
+    __FONE15 = FORMULE(VALE='X15*X21',NOM_PARA=('X15','X21'))
+    __FONE16 = FORMULE(VALE='X16*X21',NOM_PARA=('X16','X21'))
+    __FONE17 = FORMULE(VALE='X17*X21',NOM_PARA=('X17','X21'))
+    __FONE18 = FORMULE(VALE='X18*X21',NOM_PARA=('X18','X21'))
+    __FONE19 = FORMULE(VALE='X19*X21',NOM_PARA=('X19','X21'))
+    
+    __FONCC = CREA_CHAMP(
+        INFO      = self.INFO,
+        TYPE_CHAM = 'ELGA_NEUT_F',
+        OPERATION = 'AFFE',
+        MODELE    = self.NEW_MODELE,
+        PROL_ZERO = 'OUI',
+        AFFE      = _F(
+               TOUT    = 'OUI',
+               NOM_CMP = ('X1','X2','X3','X4','X5','X6','X7','X8','X11','X12','X13','X14','X15','X16','X17','X18'),
+               VALE_F  = (__FONC1,__FONC2,__FONC3,__FONC4,__FONC5,__FONC6,__FONC7,__FONC8,__FONC11,__FONC12,__FONC13,
+                          __FONC14,__FONC15,__FONC16,__FONC17,__FONC18)),
+                          )
+    __FONCC2 = CREA_CHAMP(
+        INFO      = self.INFO,
+        TYPE_CHAM = 'ELGA_NEUT_F',
+        OPERATION = 'AFFE',
+        MODELE    = self.NEW_MODELE,
+        PROL_ZERO = 'OUI',
+        AFFE      = _F(
+               TOUT    = 'OUI',
+               NOM_CMP = tupVar,
+     #          VALE_F  = (__FONE1,__FONE2)
+               VALE_F  = (__FONE1,__FONE2,__FONE3,__FONE4,__FONE5,__FONE6,__FONE7,__FONE8,__FONE9,__FONE10,__FONE11,__FONE12,__FONE13,__FONE14,__FONE15,__FONE16,__FONE17,__FONE18,__FONE19)
+               ),
+               )
+    listEffg = []
+    i=0
+    listType=[]
+    __SIG11 = [None]*10
+    __SIG21 = [None]*10
+    __ECR11 = [None]*10
+
+    # Pour masquer certaines alarmes
+    from Utilitai.Utmess import MasquerAlarme, RetablirAlarme
+    MasquerAlarme('MED_83')
+    MasquerAlarme('MED_98')
+
+    while 1:
+        # index=1
+        # pas = self.ARCHIVAGE['PAS_NBRE']
+        # dicDetr=[]
+        # if 'Q4GS' in self.modelisations :
+            err = 0
+            try :
+                __SIG11[i] = LIRE_CHAMP(
+                    INFO        = self.INFO,
+                    TYPE_CHAM   = 'ELGA_SIEF_R',
+                    UNITE       = 99,
+                    NUME_PT     = 0,
+                    MODELE      = self.NEW_MODELE,
+                    MAILLAGE    = self.reupere_structure(self.MODELE,'MAILLAGE'),
+                    PROL_ZERO   = 'OUI',
+                    NOM_MED     = 'CHAMP___CONTRAINTE___00%d'%(i+1),
+                    NOM_CMP     = dic_cmp_gauss['CONTRAINTE']['Q4GS']['NOM_CMP'],
+                    NOM_CMP_MED = dic_cmp_gauss['CONTRAINTE']['Q4GS']['NOM_CMP_MED'])
+                # dicDetr.append({'NOM' : __SIG11})
+                DETRUIRE(CONCEPT=_F(NOM = __SIG11[i]), INFO=1)
+                listType.append('Q4GS')
+                # index=2 
+            except :
+                err+=1
+            try :
+                __SIG21[i] = LIRE_CHAMP(
+                    INFO        = self.INFO,
+                    TYPE_CHAM   = 'ELGA_SIEF_R',
+                    UNITE       = 99,
+                    NUME_PT     = 0,
+                    MODELE      = self.NEW_MODELE,
+                    MAILLAGE    = self.reupere_structure(self.MODELE,'MAILLAGE'),
+                    PROL_ZERO   = 'OUI',
+                    NOM_MED     = 'CHAMP___CONTRAINTE___00%d'%(i+1),
+                    NOM_CMP     = dic_cmp_gauss['CONTRAINTE']['DKT3']['NOM_CMP'],
+                    NOM_CMP_MED = dic_cmp_gauss['CONTRAINTE']['DKT3']['NOM_CMP_MED']),
+                DETRUIRE(CONCEPT=_F(NOM = __SIG21[i]), INFO=1)
+                if len(listType)<i+1 :
+                    listType.append('DKT3')
+            except : 
+                err+=1
+            if err<2 :
+                i+=1
+            else :
+                break
+        # if 'DKT3' in self.modelisations :
+            # try : 
+                # __SIG21 = LIRE_CHAMP(
+                    # INFO        = self.INFO,
+                    # TYPE_CHAM   = 'ELGA_SIEF_R',
+                    # UNITE       = 99,
+                    # NUME_PT     = i*pas,
+                    # MODELE      = self.NEW_MODELE,
+                    # MAILLAGE    = self.reupere_structure(self.MODELE,'MAILLAGE'),
+                    # PROL_ZERO   = 'OUI',
+                    # NOM_MED     = 'CHAMP___CONTRAINTE___00%d'%index,
+                    # NOM_CMP     = dic_cmp_gauss['CONTRAINTE']['DKT3']['NOM_CMP'],
+                    # NOM_CMP_MED = dic_cmp_gauss['CONTRAINTE']['DKT3']['NOM_CMP_MED']),
+                # dicDetr.append({'NOM' : __SIG21})
+
+            # except :
+                # err +=1
+        # if err > 1 :
+            # break
+        # DETRUIRE(CONCEPT=dicDetr) 
+        # i+=1
+
+    # Pour la gestion des alarmes
+    RetablirAlarme('MED_83')
+    RetablirAlarme('MED_98')
+
+
+    nbChamp = i
+    
+    listVari = [0]*nbChamp
+    
+    for i in xrange(nbChamp) :
+            if listType[i] == 'Q4GS' :
+               try :
+                   __ECR11[i] = LIRE_CHAMP(
+                       INFO        = self.INFO,
+                       TYPE_CHAM   = 'ELGA_VARI_R',
+                       UNITE       = 99,
+                       NUME_PT     = 0,
+                       MODELE      = self.NEW_MODELE,
+                       MAILLAGE    = self.reupere_structure(self.MODELE,'MAILLAGE'),
+                       PROL_ZERO   = 'OUI',
+                       NOM_MED     = 'CHAMP___ECROUISSAGE__00%d'%(i+1),
+                       NOM_CMP     = dic_cmp_gauss['ECROUISSAGE']['Q4GS']['NOM_CMP'],
+                       NOM_CMP_MED = dic_cmp_gauss['ECROUISSAGE']['Q4GS']['NOM_CMP_MED'])
+                   # dicDetr.append({'NOM' : __SIG11})
+                   DETRUIRE(CONCEPT=_F(NOM = __ECR11[i]), INFO=1)
+                   listVari[i]=1
+               except :
+                   err+=1
+            elif listType[i] == 'DKT3' :
+               try :
+                   __ECR11[i] = LIRE_CHAMP(
+                       INFO        = self.INFO,
+                       TYPE_CHAM   = 'ELGA_VARI_R',
+                       UNITE       = 99,
+                       NUME_PT     = 0,
+                       MODELE      = self.NEW_MODELE,
+                       MAILLAGE    = self.reupere_structure(self.MODELE,'MAILLAGE'),
+                       PROL_ZERO   = 'OUI',
+                       NOM_MED     = 'CHAMP___ECROUISSAGE__00%d'%(i+1),
+                       NOM_CMP     = dic_cmp_gauss['ECROUISSAGE']['DKT3']['NOM_CMP'],
+                       NOM_CMP_MED = dic_cmp_gauss['ECROUISSAGE']['DKT3']['NOM_CMP_MED'])
+                   # dicDetr.append({'NOM' : __SIG11})
+                   DETRUIRE(CONCEPT=_F(NOM = __ECR11[i]), INFO=1)
+                   listVari[i]=1
+               except :
+                  err+=1
+    
+    
+    
+    itot=len(resu.LIST_PARA()['INST'])
+    __EFFG=[None]*itot
+    # __EPSG=[None]*itot
+    __ECRG=[None]*itot
+    __SIG1 = [None]*nbChamp
+    __SIG2 = [None]*nbChamp
+    __ECR1 = [None]*nbChamp
+    __ECR2 = [None]*nbChamp
+    for i in xrange(itot) :
+        dicAffe=[]
+        dicAffe2=[]
+        dicAffe3=[]
+        index=1
+        pas = self.ARCHIVAGE['PAS_NBRE']
+        dicAsse = [{'TOUT' : 'OUI', 'CHAM_GD' : __EPN, 'NOM_CMP' : 'X21', 'NOM_CMP_RESU' : 'X21'}]
+        dicAsse.append({'TOUT' : 'OUI', 'CHAM_GD' : __EPN2, 'NOM_CMP' : 'X22', 'NOM_CMP_RESU' : 'X22', 'CUMUL' : 'OUI','COEF_R':1.})
+        dicAsse2 = [{'TOUT' : 'OUI', 'CHAM_GD' : __UNN, 'NOM_CMP' : 'X21', 'NOM_CMP_RESU' : 'X21'}]
+        dicAsse2.append({'TOUT' : 'OUI', 'CHAM_GD' : __UNN, 'NOM_CMP' : 'X22', 'NOM_CMP_RESU' : 'X22', 'CUMUL' : 'OUI','COEF_R':1.})
+        dicAsse3 = [{'TOUT' : 'OUI', 'CHAM_GD' : __UNDEU, 'NOM_CMP' : 'X21', 'NOM_CMP_RESU' : 'X21'}]
+        dicAsse3.append({'TOUT' : 'OUI', 'CHAM_GD' : __UNDEU, 'NOM_CMP' : 'X22', 'NOM_CMP_RESU' : 'X22', 'CUMUL' : 'OUI','COEF_R':1.})
+        dicDetr=[]
+        # if 'Q4GS' in self.modelisations :
+        for j in xrange(nbChamp) :
+            if listType[j] == 'Q4GS' :
+                __SIG1[j] = LIRE_CHAMP(
+                    INFO        = self.INFO,
+                    TYPE_CHAM   = 'ELGA_SIEF_R',
+                    UNITE       = 99,
+                    NUME_PT     = resu.LIST_PARA()['NUME_ORDRE'][i],
+                    MODELE      = self.NEW_MODELE,
+                    MAILLAGE    = self.reupere_structure(self.MODELE,'MAILLAGE'),
+                    PROL_ZERO   = 'OUI',
+                    NOM_MED     = 'CHAMP___CONTRAINTE___00%d'%(j+1),
+                    NOM_CMP     = dic_cmp_gauss['CONTRAINTE']['Q4GS']['NOM_CMP'],
+                    NOM_CMP_MED = dic_cmp_gauss['CONTRAINTE']['Q4GS']['NOM_CMP_MED'],
+                        )
+                dicDetr.append({'NOM' : __SIG1[j]})
+                dicAsse.append({'TOUT' : 'OUI', 'CHAM_GD' : __SIG1[j], 'NOM_CMP' : tuple(dic_cmp_gauss['CONTRAINTE']['Q4GS']['NOM_CMP']), 
+                            'NOM_CMP_RESU' : ('X1','X2','X3','X4','X5','X6','X7','X8'), 'CUMUL' : 'OUI','COEF_R':1.})
+                # __EPS1 = LIRE_CHAMP(
+                    # INFO        = self.INFO,
+                    # TYPE_CHAM   = 'ELGA_EPSI_R',
+                    # UNITE       = 99,
+                    # NUME_PT     = resu.LIST_PARA()['NUME_ORDRE'][i],
+                    # MODELE      = self.NEW_MODELE,
+                    # MAILLAGE    = self.reupere_structure(self.MODELE,'MAILLAGE'),
+                    # PROL_ZERO   = 'OUI',
+                    # NOM_MED     = 'CHAMP___DEFORM_TOT___001',
+                    # NOM_CMP     = dic_cmp_gauss['DEFORMATION']['Q4GS']['NOM_CMP'],
+                    # NOM_CMP_MED = dic_cmp_gauss['DEFORMATION']['Q4GS']['NOM_CMP_MED'])
+                if listVari[j] :
+                    __ECR1[j] = LIRE_CHAMP(
+                        INFO     = self.INFO,
+                        TYPE_CHAM   = 'ELGA_VARI_R',
+                        UNITE    = 99,
+                        NUME_PT  = resu.LIST_PARA()['NUME_ORDRE'][i],
+                        MODELE   = self.NEW_MODELE,
+                        MAILLAGE         = self.reupere_structure(self.MODELE,'MAILLAGE'),
+                        PROL_ZERO   = 'OUI',
+                        NOM_MED  = 'CHAMP___ECROUISSAGE__00%d'%(j+1),
+                        NOM_CMP  = dic_cmp_gauss['ECROUISSAGE']['Q4GS']['NOM_CMP'],
+                        NOM_CMP_MED = dic_cmp_gauss['ECROUISSAGE']['Q4GS']['NOM_CMP_MED'])
+                    dicAsse3.append({'TOUT' : 'OUI', 'CHAM_GD' : __ECR1[j], 'NOM_CMP' : tuple(dic_cmp_gauss['ECROUISSAGE']['Q4GS']['NOM_CMP']), 
+                             'NOM_CMP_RESU' : tupVar, 'CUMUL' : 'OUI','COEF_R':1.})
+                    dicDetr.append({'NOM' : __ECR1[j]})
+                # dicAsse2.append({'TOUT' : 'OUI', 'CHAM_GD' : __EPS1, 'NOM_CMP' : tuple(dic_cmp_gauss['DEFORMATION']['Q4GS']['NOM_CMP']), 
+                            # 'NOM_CMP_RESU' : ('X1','X2','X3','X4','X5','X6','X7','X8'), 'CUMUL' : 'OUI','COEF_R':1.})
+            else :
+                __SIG2[j] = LIRE_CHAMP(
+                    INFO        = self.INFO,
+                    TYPE_CHAM   = 'ELGA_SIEF_R',
+                    UNITE       = 99,
+                    NUME_PT     = resu.LIST_PARA()['NUME_ORDRE'][i],
+                    MODELE      = self.NEW_MODELE,
+                    MAILLAGE    = self.reupere_structure(self.MODELE,'MAILLAGE'),
+                    PROL_ZERO   = 'OUI',
+                    NOM_MED     = 'CHAMP___CONTRAINTE___00%d'%(j+1),
+                    NOM_CMP     = dic_cmp_gauss['CONTRAINTE']['DKT3']['NOM_CMP'],
+                    NOM_CMP_MED = dic_cmp_gauss['CONTRAINTE']['DKT3']['NOM_CMP_MED'],
+                    )
+                dicAsse.append({'TOUT' : 'OUI', 'CHAM_GD' : __SIG2[j], 'NOM_CMP' : tuple(dic_cmp_gauss['CONTRAINTE']['DKT3']['NOM_CMP']),
+                                'NOM_CMP_RESU' : ('X11','X12','X13','X14','X15','X16'), 'CUMUL' : 'OUI','COEF_R':1.})
+                dicDetr.append({'NOM' : __SIG2[j]})
+                # __EPS2 = LIRE_CHAMP(
+                    # INFO        = self.INFO,
+                    # TYPE_CHAM   = 'ELGA_EPSI_R',
+                    # UNITE       = 99,
+                    # NUME_PT     = resu.LIST_PARA()['NUME_ORDRE'][i],
+                    # MODELE      = self.NEW_MODELE,
+                    # MAILLAGE    = self.reupere_structure(self.MODELE,'MAILLAGE'),
+                    # PROL_ZERO   = 'OUI',
+                    # NOM_MED     = 'CHAMP___DEFORM_TOT___00%d'%index,
+                    # NOM_CMP     = dic_cmp_gauss['DEFORMATION']['DKT3']['NOM_CMP'],
+                    # NOM_CMP_MED = dic_cmp_gauss['DEFORMATION']['DKT3']['NOM_CMP_MED']),
+                if listVari[j] :
+
+                   __ECR2[j] = LIRE_CHAMP(
+                       INFO      = self.INFO,
+                       TYPE_CHAM   = 'ELGA_VARI_R',
+                       UNITE     = 99,
+                       NUME_PT   = resu.LIST_PARA()['NUME_ORDRE'][i],
+                       MODELE    = self.NEW_MODELE,
+                       MAILLAGE  = self.reupere_structure(self.MODELE,'MAILLAGE'),
+                       PROL_ZERO   = 'OUI',
+                       NOM_MED   = 'CHAMP___ECROUISSAGE__00%d'%(j+1),
+                       NOM_CMP   = dic_cmp_gauss['ECROUISSAGE']['DKT3']['NOM_CMP'],
+                       NOM_CMP_MED = dic_cmp_gauss['ECROUISSAGE']['DKT3']['NOM_CMP_MED'])
+                   dicAsse3.append({'TOUT' : 'OUI', 'CHAM_GD' : __ECR2[j], 'NOM_CMP' : tuple(dic_cmp_gauss['ECROUISSAGE']['DKT3']['NOM_CMP']), 
+                                   'NOM_CMP_RESU' : tupVar, 'CUMUL' : 'OUI','COEF_R':1.})
+                   dicDetr.append({'NOM' : __ECR2[j]})
+                # dicAsse2.append({'TOUT' : 'OUI', 'CHAM_GD' : __EPS2, 'NOM_CMP' : tuple(dic_cmp_gauss['DEFORMATION']['DKT3']['NOM_CMP']), 
+                                # 'NOM_CMP_RESU' : ('X11','X12','X13','X14','X15','X16'), 'CUMUL' : 'OUI','COEF_R':1.})
+                # dicDetr.append({'NOM' : __EPS2})
+#                dicDetr.append({'NOM' : __ECR2})
+                # dicDetr.append({'NOM' : __EPS1})
+#                dicDetr.append({'NOM' : __ECR1})
+        # if 'DKT3' in self.modelisations:
+
+        __SIGN = CREA_CHAMP(
+            INFO      = self.INFO,
+            TYPE_CHAM = 'ELGA_NEUT_R',
+            OPERATION = 'ASSE',
+            PROL_ZERO = 'OUI',
+            MODELE    = self.NEW_MODELE,
+            ASSE      = dicAsse,
+            )
+        # __EPSN = CREA_CHAMP(
+            # INFO      = self.INFO,
+            # TYPE_CHAM = 'ELGA_NEUT_R',
+            # OPERATION = 'ASSE',
+            # PROL_ZERO = 'OUI',
+            # MODELE    = self.NEW_MODELE,
+            # ASSE      = dicAsse2)
+        __ECRN = CREA_CHAMP(
+             INFO      = self.INFO,
+             TYPE_CHAM = 'ELGA_NEUT_R',
+             OPERATION = 'ASSE',
+             PROL_ZERO = 'OUI',
+             MODELE    = self.NEW_MODELE,
+             ASSE      = dicAsse3)
+        dicDetr.append({'NOM' : __SIGN})
+        # dicDetr.append({'NOM' : __EPSN})
+        dicDetr.append({'NOM' : __ECRN})
+        __EFFGN = CREA_CHAMP(
+            INFO      = self.INFO,
+            TYPE_CHAM = 'ELGA_NEUT_R',
+            OPERATION = 'EVAL',
+            CHAM_F    = __FONCC,
+            CHAM_PARA = (__SIGN),
+          )
+        # __EPSGN = CREA_CHAMP(
+            # INFO      = self.INFO,
+            # TYPE_CHAM = 'ELGA_NEUT_R',
+            # OPERATION = 'EVAL',
+            # CHAM_F    = __FONCC,
+            # CHAM_PARA   = (__EPSN))
+        __ECRGN = CREA_CHAMP(
+            INFO      = self.INFO,
+            TYPE_CHAM = 'ELGA_NEUT_R',
+            OPERATION = 'EVAL',
+            CHAM_F    = __FONCC2,
+            CHAM_PARA   = (__ECRN))
+        dicDetr.append({'NOM' : __EFFGN})
+        # dicDetr.append({'NOM' : __EPSGN})
+        dicDetr.append({'NOM' : __ECRGN})
+        __EFFG[i] = CREA_CHAMP(
+            INFO      = self.INFO,
+            TYPE_CHAM  = 'ELGA_SIEF_R',
+            OPERATION = 'ASSE',
+            PROL_ZERO = 'OUI',
+            MODELE    = self.NEW_MODELE,
+            ASSE      = _F(
+                TOUT = 'OUI',
+                CHAM_GD = __EFFGN,
+                NOM_CMP = ('X1','X2','X3','X4','X5','X6','X7','X8')+('X11','X12','X13','X14','X15','X16'),
+                NOM_CMP_RESU = tuple(dic_cmp_gauss['CONTRAINTE']['Q4GS']['NOM_CMP']+dic_cmp_gauss['CONTRAINTE']['DKT3']['NOM_CMP'])),
+                )
+        # __EPSG[i] = CREA_CHAMP(
+            # INFO      = self.INFO,
+            # TYPE_CHAM  = 'ELGA_EPSI_R',
+            # OPERATION = 'ASSE',
+            # PROL_ZERO = 'OUI',
+            # MODELE    = self.NEW_MODELE,
+            # ASSE      = _F(
+                # TOUT = 'OUI',
+                # CHAM_GD = __EPSGN,
+                # NOM_CMP = ('X1','X2','X3','X4','X5','X6','X7','X8')+('X11','X12','X13','X14','X15','X16'),
+                # NOM_CMP_RESU = tuple(dic_cmp_gauss['DEFORMATION']['Q4GS']['NOM_CMP']+dic_cmp_gauss['DEFORMATION']['DKT3']['NOM_CMP'])))
+        __ECRG[i] = CREA_CHAMP(
+            INFO      = self.INFO,
+            TYPE_CHAM  = 'ELGA_VARI_R',
+            OPERATION = 'ASSE',
+            PROL_ZERO = 'OUI',
+            MODELE    = self.NEW_MODELE,
+            ASSE      = _F(
+                TOUT = 'OUI',
+                CHAM_GD = __ECRGN,
+                NOM_CMP = tupVar,
+                NOM_CMP_RESU = tuple(dic_cmp_gauss['ECROUISSAGE']['Q4GS']['NOM_CMP'])))
+# AA        dicAffe.append({'CHAM_GD' : __EFFG[i], 'MODELE' : self.NEW_MODELE,'CHAM_MATER' : self.CHAM_MATER,'INST': resu.LIST_PARA()['INST'][i]})
+        dicAffe.append({'CHAM_GD' : __EFFG[i], 'MODELE' : self.NEW_MODELE,'CHAM_MATER' : self.CHAM_MATER, 'CARA_ELEM' : self.CARA_ELEM, 'INST': resu.LIST_PARA()['INST'][i]})
+        # dicAffe2.append({'CHAM_GD' : __EPSG[i], 'MODELE' : self.NEW_MODELE,'CHAM_MATER' : self.CHAM_MATER,'INST': resu.LIST_PARA()['INST'][i]})
+# AA        dicAffe3.append({'CHAM_GD' : __ECRG[i], 'MODELE' : self.NEW_MODELE,'CHAM_MATER' : self.CHAM_MATER,'INST': resu.LIST_PARA()['INST'][i]})
+        dicAffe3.append({'CHAM_GD' : __ECRG[i], 'MODELE' : self.NEW_MODELE,'CHAM_MATER' : self.CHAM_MATER, 'CARA_ELEM' : self.CARA_ELEM, 'INST': resu.LIST_PARA()['INST'][i]})
+        DETRUIRE(CONCEPT=dicDetr, INFO=1)
+        resu = CREA_RESU(reuse=resu,
+            OPERATION = 'AFFE',
+            TYPE_RESU = 'EVOL_NOLI',
+            NOM_CHAM  = 'SIEF_ELGA',
+            AFFE = dicAffe,
+            )
+        # resu = CREA_RESU(reuse=resu,
+            # OPERATION = 'AFFE',
+            # TYPE_RESU = 'EVOL_NOLI',
+            # NOM_CHAM  = 'EPSI_ELGA_DEPL',
+            # AFFE = dicAffe2)
+        resu = CREA_RESU(reuse=resu,
+            OPERATION = 'AFFE',
+            TYPE_RESU = 'EVOL_NOLI',
+            NOM_CHAM  = 'VARI_ELGA',
+            AFFE = dicAffe3,
+            )
+
+    DEFI_FICHIER(UNITE=unite,ACTION='LIBERER');              
+
+    os.remove(fort)
+
+#-----------------------------------------------------------------------
+  def lancer_calcul(self,fichier_med='auto'):
+
+     fichier_epx = self.nom_fichiers['COMMANDE']
+     EXEC_LOGICIEL(LOGICIEL='cd %s ; unset TMPDIR ; %s -usetmpdir %s ; iret=$? ; cd %s ; echo "Code_Retour Europlexus : $iret" ; exit 0' % (self.pwd + self.REPE, self.EXEC, fichier_epx, self.pwd),
+                   CODE_RETOUR_MAXI=-1,
+                   INFO=2)
+
+
+#------------------------------------------------------------------------
+#----------------------------- FIN class EUROPLEXUS ---------------------
+#------------------------------------------------------------------------
+
+#------------------------------------------------------------------------
+#----------------------------- class POUTRE -----------------------------
+#------------------------------------------------------------------------
+
+class POUTRE:
+  def __init__(self,MAILLAGE,CARA_ELEM):
+    
+    # recuperer les infos du maillage sous format python 
+    self.MApyt = MAIL_PY()
+    self.MApyt.FromAster(MAILLAGE)
+    self.CARA_ELEM = CARA_ELEM
+    # un dictionnaire stockant tous orientations definis dans AFF_CARA_ELEM
+    self.dic_gma = self.orientation_cara_elem()
+       
+#------------------------------------------------------------------------
+  def getvecteurs(self,groupes_poutres,verif='non'):
+    vecteurs = {}
+    ig = 0
+    message = 0
+    for gr in groupes_poutres :
+      ig += 1 
+      if not self.dic_gma.has_key(gr): self.dic_gma[gr] = {'ANGL_VRIL':0.0}
+      vecteurs[gr] = self.get_vecty_group_ma(gr)  
+      if verif == 'oui':
+        if ig > 1 :
+          if not vecteurs_egaux(vecteurs[gr],vect_old) : message = 1
+        vect_old = vecteurs[gr]
+    
+    if message : UTMESS('F','PLEXUS_10',valk=groupes_poutres)   
+    
+    return vecteurs   
+  
+#------------------------------------------------------------------------
+  def orientation_cara_elem(self,):
+    
+    dic_gma = {}
+    etapes = self.CARA_ELEM.etape.valeur
+    
+    if not etapes.has_key('ORIENTATION') : return dic_gma
+         
+    orientation = etapes['ORIENTATION']
+    try :
+      test = orientation [0]
+    except :
+      orientation  = [orientation]
+
+    for ll in orientation  :
+      cara = ll['CARA']
+      if cara in ['ANGL_VRIL','ANGL_NAUT','VECT_Y'] : 
+        if ll.has_key('GROUP_MA') :
+          group_ma = ll['GROUP_MA']
+          if types.TypeType(group_ma) == types.StringType : group_ma = (group_ma,) 
+          a = ll['VALE']
+          for gr in group_ma:
+            if not dic_gma.has_key(gr): dic_gma[gr] = {}
+            dic_gma[gr][cara] = a
+    
+    for gr in dic_gma.keys() :
+      if not dic_gma[gr].has_key('VECT_Y'):
+        if not dic_gma[gr].has_key('ANGL_VRIL') : dic_gma[gr]['ANGL_VRIL'] = 0.0
+        if dic_gma[gr].has_key('ANGL_NAUT'):
+          if len(dic_gma[gr]['ANGL_NAUT']) == 2 : 
+            dic_gma[gr]['ANGL_NAUT'] = list(dic_gma[gr]['ANGL_NAUT']) + [dic_gma[gr]['ANGL_VRIL']]
+          
+    return(dic_gma)
+    
+#------------------------------------------------------------------------
+  def get_vecty_group_ma(self,group_ma):
+    
+    #if debug: print '*'*10
+    #if debug: print 'Test de group_ma',group_ma
+    #if debug: print '*'*10
+
+    message = 0
+
+    if self.dic_gma[group_ma].has_key('VECT_Y') : return self.dic_gma[group_ma]['VECT_Y']
+
+    if not self.dic_gma[group_ma].has_key('ANGL_NAUT'):calcul_angle = 1
+    else: calcul_angle = 0
+
+    mailles = self.MApyt.gma[string.rstrip(group_ma)]
+
+    for imaille in range(len(mailles)):
+      maille = mailles[imaille]
+      if calcul_angle:
+        alpha,beta = self.calcul_angles_naut(maille)
+        angl = [alpha,beta,self.dic_gma[group_ma]['ANGL_VRIL']]
+      else:
+        angl = self.dic_gma[group_ma]['ANGL_NAUT']
+
+      vect_y = self.angle2vecty(angl)
+      if imaille > 1 :  
+        if not vecteurs_egaux(vect_y0,vect_y) : message = 1
+      vect_y0 = vect_y   
+
+    self.dic_gma[group_ma]['VECT_Y'] = vect_y 
+
+    if message : 
+      #if debug: print 'group_ma',group_ma
+      UTMESS('F','PLEXUS_11',valk=group_ma) 
+
+    return vect_y        
+
+#------------------------------------------------------------------------
+  def angle2vecty(self,angl):
+    #transformer en rd
+    for iangl in range(len(angl)):
+      angl[iangl] = numpy.pi*angl[iangl]/180. 
+    cosa = math.cos( angl[0] )
+    sina = math.sin( angl[0] )
+    cosb = math.cos( angl[1] )
+    sinb = math.sin( angl[1] )
+    cosg = math.cos( angl[2] )
+    sing = math.sin( angl[2] )
+    vect = [ sing*sinb*cosa - cosg*sina , cosg*cosa + sing*sinb*sina , sing*cosb ]
+    for ii in range(len(vect)):
+      if abs(vect[ii]) <= tst : vect[ii] = 0.0
+    vect = numpy.array(vect)
+    vect = vect/norme(vect)
+    return vect
+    
+#------------------------------------------------------------------------
+  def get_coor_nodes_maille(self,maille):
+    node1,node2 = self.MApyt.co[maille]
+    coor1 = self.MApyt.cn[node1]
+    coor2 = self.MApyt.cn[node2]
+    return [coor1,coor2]
+    
+#------------------------------------------------------------------------
+  def calcul_angles_naut(self,maille):
+    
+    # Angles directeurs d'une poutre (nautiques)
+    
+    a,b = self.get_coor_nodes_maille(maille)
+
+    gx = [ b[0]-a[0] , b[1]-a[1] , b[2]-a[2] ]
+   
+    if( (abs(gx[1]) < tst)  and (abs(gx[0]) <= tst) ):
+      alpha = 0.0
+    else:
+      alpha = math.atan2(gx[1],gx[0])
+
+    p  = math.sqrt( gx[0]*gx[0] + gx[1]*gx[1] )
+    if( (abs(gx[2]) < tst ) and (abs(p) <=tst) ):
+      beta = 0.0
+    else:
+      beta  = -math.atan2(gx[2],p)
+    
+    # alpha et Beta en degre
+    alpha = alpha*180./math.pi
+    beta = beta*180./math.pi
+    
+    return alpha,beta
+
+#------------------------------------------------------------------------
+#----------------------------- FIN class POUTRE -------------------------
+#------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------
+#----------------------------- class DKT --------------------------------
+#------------------------------------------------------------------------
+
+class DKT:
+
+  def __init__(self,MAILLAGE):
+   
+    self.MAILLAGE = MAILLAGE
+    # recuperer les infos du maillage sous format python 
+    self.MApyt = MAIL_PY()
+    self.MApyt.FromAster(MAILLAGE)
+  
+  def aster2epx(self,groups):
+    
+    # initialisations du dic contenant les mailles de tria3 et quad4
+    dic_groups = {}
+    for cle in ['TRIA3','QUAD4']:
+      dic_groups[cle] = []
+    # placer les mailles dans le champ associe
+    for gr in groups:
+      mailles = self.MApyt.gma[string.rstrip(gr)]
+      for maille in mailles:
+        code_maille = self.MApyt.tm[maille]
+        type_maille = self.MApyt.nom[code_maille]
+        maille_initiale = string.rstrip(self.MApyt.correspondance_mailles[maille]) 
+        if not maille_initiale in dic_groups[type_maille] :
+          dic_groups[type_maille].append(maille_initiale) 
+        
+    # creer le mot-cle facteur permettant de creer les groupes de mailles associes au TRIA3 et QUAD4
+    crea_group_ma = []
+    # dictionnair contenant les noms des groups qui vont etre creer au besoin
+    nom_groups = {}
+    for cle in dic_groups.keys() :
+      if len(dic_groups[cle]) > 0 :
+        crea_group_ma.append({'MAILLE':dic_groups[cle],'NOM':cle})
+        nom_groups[cle] = [cle]
+      else:
+        nom_groups[cle] = []
+    # ce n'est pas necessaire de creer les group_ma si on n'a pas de quad4
+    if len(dic_groups['QUAD4']) >0:
+      
+      #global DEFI_GROUP
+      
+      DEFI_GROUP(reuse         = self.MAILLAGE,
+                 MAILLAGE      = self.MAILLAGE,
+                 CREA_GROUP_MA = crea_group_ma,
+                );
+       
+    else :
+      # on affecte au TRIA les groupes deja fournis en argument
+      nom_groups['TRIA3'] = groups
+    
+    return nom_groups
+      
+#------------------------------------------------------------------------
+#----------------------------- FIN class DKT ----------------------------
+#------------------------------------------------------------------------
diff --git a/Aster/Cata/cataSTA10/Macro/calc_fonction_ops.py b/Aster/Cata/cataSTA10/Macro/calc_fonction_ops.py
new file mode 100644 (file)
index 0000000..6ad2972
--- /dev/null
@@ -0,0 +1,418 @@
+#@ MODIF calc_fonction_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import os
+import copy
+import traceback
+
+
+def calc_fonction_ops(self,FFT,DERIVE,INTEGRE,LISS_ENVELOP,
+                      SPEC_OSCI,ABS,COMB,COMB_C,COMPOSE,EXTRACTION,
+                      ENVELOPPE,FRACTILE,ASSE,CORR_ACCE,PUISSANCE,INVERSE,
+                      NOM_PARA,NOM_RESU,INTERPOL,PROL_DROITE,
+                      PROL_GAUCHE,NOM_PARA_FONC,INTERPOL_FONC,PROL_DROITE_FONC,
+                      PROL_GAUCHE_FONC,INFO,**args):
+   """
+      Ecriture de la macro CALC_FONCTION
+   """
+   ier=0
+   from Cata_Utils.t_fonction import t_fonction, t_fonction_c, t_nappe, homo_support_nappe, \
+            FonctionError, ParametreError, InterpolationError, ProlongementError, enveloppe, fractile
+   from Utilitai import liss_enveloppe
+   from Macro.defi_inte_spec_ops import tocomplex
+   from Accas import _F
+   from Cata.cata import nappe_sdaster,fonction_sdaster,fonction_c
+   from Utilitai.Utmess import  UTMESS
+   import aster_fonctions
+   EnumTypes = (list, tuple)
+   
+   ### On importe les definitions des commandes a utiliser dans la macro
+   DEFI_FONCTION  = self.get_cmd('DEFI_FONCTION')
+   IMPR_FONCTION  = self.get_cmd('IMPR_FONCTION')
+   DEFI_NAPPE     = self.get_cmd('DEFI_NAPPE')
+   
+   ### Comptage commandes + déclaration concept sortant
+   self.set_icmd(1)
+   self.DeclareOut('C_out',self.sd)
+   
+   # éléments de contexte
+   ctxt = Context()
+   ### l'ensemble est dans un try/except pour recuperer les erreurs du module t_fonction
+   try:
+      ###
+      if (INTEGRE     != None):
+         __ff=INTEGRE['FONCTION'].convert()
+         ctxt.f = __ff.nom
+         if INTEGRE['METHODE']=='TRAPEZE' :
+            __ex=__ff.trapeze(INTEGRE['COEF'])
+         elif INTEGRE['METHODE']=='SIMPSON' :
+            __ex=__ff.simpson(INTEGRE['COEF'])
+      ###
+      if (DERIVE      != None):
+         __ff=DERIVE['FONCTION'].convert()
+         ctxt.f = __ff.nom
+         __ex=__ff.derive()
+      ###
+      if (INVERSE     != None):
+         __ff=INVERSE['FONCTION'].convert()
+         ctxt.f = __ff.nom
+         __ex=__ff.inverse()
+      ###
+      if (ABS         != None): 
+         __ff=ABS['FONCTION'].convert()
+         ctxt.f = __ff.nom
+         __ex=__ff.abs()
+      ###
+      if (COMPOSE     != None): 
+         __ff=COMPOSE['FONC_RESU'].convert()
+         __fg=COMPOSE['FONC_PARA'].convert()
+         ctxt.f = [__ff.nom, __fg.nom]
+         __ex=__ff[__fg]
+      ###
+      if (ASSE        != None):
+         __f0=ASSE['FONCTION'][0].convert()
+         __f1=ASSE['FONCTION'][1].convert()
+         ctxt.f = [__f0.nom, __f1.nom]
+         __ex=__f0.cat(__f1,ASSE['SURCHARGE'])
+      ###
+      if (COMB != None):
+         list_fonc=[]
+         if isinstance(self.sd,nappe_sdaster):
+            for mcfact in COMB :
+               list_fonc.append(mcfact['FONCTION'].convert())
+            ctxt.f = [f.nom for f in list_fonc]
+            list_fonc = homo_support_nappe(list_fonc)
+         elif isinstance(self.sd,fonction_sdaster):
+            for mcfact in COMB :
+               __ex=mcfact['FONCTION'].convert()
+               list_fonc.append(__ex)
+         
+         __ex = 0.
+         for item, comb in zip(list_fonc, COMB):
+            ctxt.f = item.nom
+            __ex = item * comb['COEF'] + __ex
+         # on prend les paramètres de la 1ère fonction
+         __ex.para = copy.copy(list_fonc[0].para)
+      ###
+      if (COMB_C != None):
+         list_fonc=[]
+         if isinstance(self.sd,nappe_sdaster):
+            for mcfact in COMB_C:
+               list_fonc.append(mcfact['FONCTION'].convert())
+            ctxt.f = [f.nom for f in list_fonc]
+            list_fonc = homo_support_nappe(list_fonc)
+         elif isinstance(self.sd,fonction_sdaster) or isinstance(self.sd,fonction_c):
+            for mcfact in COMB_C :
+               __ex=mcfact['FONCTION'].convert(arg='complex')
+               list_fonc.append(__ex)
+      
+         __ex = 0.
+         for item, comb in zip(list_fonc, COMB_C):
+            if comb['COEF_R'] != None:
+               coef = complex(comb['COEF_R'])
+            elif comb['COEF_C'] != None:
+               if type(comb['COEF_C']) in EnumTypes:
+                  coef = tocomplex(comb['COEF_C'])
+               else:
+                  coef = comb['COEF_C']
+            ctxt.f = item.nom
+            __ex = item * coef + __ex
+         # on prend les paramètres de la 1ère fonction
+         __ex.para = copy.copy(list_fonc[0].para)
+      
+      ### mot clé LIST_PARA uniquement présent si COMB ou COMB_C
+      if (COMB != None) or (COMB_C != None) :
+         if (args['LIST_PARA'] != None) :
+            __ex=__ex.evalfonc(args['LIST_PARA'].Valeurs())
+      ###
+      if (PUISSANCE   != None): 
+         __ff=PUISSANCE['FONCTION'].convert()
+         ctxt.f = __ff.nom
+         __ex=__ff
+         for i in range(PUISSANCE['EXPOSANT']-1):
+            __ex=__ex*__ff
+      ###
+      if (EXTRACTION  != None):
+         if EXTRACTION['PARTIE']=='REEL':
+            __ex=EXTRACTION['FONCTION'].convert(arg='real')
+         if EXTRACTION['PARTIE']=='IMAG':
+            __ex=EXTRACTION['FONCTION'].convert(arg='imag')
+         if EXTRACTION['PARTIE']=='MODULE':
+            __ex=EXTRACTION['FONCTION'].convert(arg='modul')
+         if EXTRACTION['PARTIE']=='PHASE':
+            __ex=EXTRACTION['FONCTION'].convert(arg='phase')
+      ###
+      if (ENVELOPPE   != None):
+         list_fonc=[]
+         l_env=ENVELOPPE['FONCTION']
+         if type(l_env) not in EnumTypes:
+            l_env=(l_env,)
+         if isinstance(self.sd,nappe_sdaster):
+            for f in l_env:
+               list_fonc.append(f.convert())
+            ctxt.f = [f.nom for f in list_fonc]
+            list_fonc = homo_support_nappe(list_fonc)
+            vale_para=list_fonc[0].vale_para
+            para     =list_fonc[0].para
+            l_fonc_f =[]
+            for i in range(len(vale_para)):
+               __ff=list_fonc[0].l_fonc[i]
+               for nap in list_fonc[1:] :
+                  ctxt.f = nap.l_fonc[i].nom
+                  __ff=enveloppe([__ff,nap.l_fonc[i]], ENVELOPPE['CRITERE'])
+               l_fonc_f.append(__ff)
+            __ex=t_nappe(vale_para,l_fonc_f,para)
+         elif isinstance(self.sd,fonction_sdaster):
+            for f in l_env:
+               list_fonc.append(f.convert())
+            ctxt.f = [f.nom for f in list_fonc]
+            __ex = enveloppe(list_fonc, ENVELOPPE['CRITERE'])
+      ###
+      if (FRACTILE   != None):
+         list_fonc=[]
+         l_frac=FRACTILE['FONCTION']
+         if type(l_frac) not in EnumTypes:
+            l_frac=(l_frac,)
+         if isinstance(self.sd,nappe_sdaster):
+            for f in l_frac:
+               list_fonc.append(f.convert())
+            ctxt.f = [f.nom for f in list_fonc]
+            list_fonc = homo_support_nappe(list_fonc)
+            vale_para=list_fonc[0].vale_para
+            para     =list_fonc[0].para
+            l_fonc_f =[]
+            for i in range(len(vale_para)):
+               ctxt.f = [nap.l_fonc[i].nom for nap in list_fonc]
+               __ff=fractile([nap.l_fonc[i] for nap in list_fonc], FRACTILE['FRACT'])
+               l_fonc_f.append(__ff)
+            __ex=t_nappe(vale_para,l_fonc_f,para)
+         elif isinstance(self.sd,fonction_sdaster):
+            for f in l_frac:
+               list_fonc.append(f.convert())
+            __ex=list_fonc[0]
+            for f in list_fonc[1:]:
+               ctxt.f = [__ex.nom, f.nom]
+               __ex = fractile(list_fonc, FRACTILE['FRACT'])
+      ###
+      if (CORR_ACCE   != None):
+         __ex=CORR_ACCE['FONCTION'].convert()
+         ctxt.f = __ex.nom
+         para=copy.copy(__ex.para)
+         # suppression de la tendance de l accelero
+         __ex=__ex.suppr_tend()
+         # calcul de la vitesse
+         __ex=__ex.trapeze(0.)
+         # calcul de la tendance de la vitesse : y = a1*x +a0
+         __ex=__ex.suppr_tend()
+         if CORR_ACCE['CORR_DEPL']=='OUI':
+            # suppression de la tendance deplacement
+            # calcul du deplacement : integration
+            __ex=__ex.trapeze(0.)
+            # calcul de la tendance du déplacement : y = a1*x +a0
+            __ex=__ex.suppr_tend()
+            # regeneration de la vitesse : derivation
+            __ex=__ex.derive()
+         # regeneration de l accelero : derivation
+         __ex=__ex.derive()
+         __ex.para=para
+      ###
+      if (FFT         != None):
+         if isinstance(self.sd,fonction_c):
+            __ff=FFT['FONCTION'].convert()
+            ctxt.f = __ff.nom
+            __ex=__ff.fft(FFT['METHODE'])
+         if isinstance(self.sd,fonction_sdaster):
+            __ff=FFT['FONCTION'].convert(arg='complex')
+            ctxt.f = __ff.nom
+            __ex=__ff.fft(FFT['METHODE'],FFT['SYME'])
+      ###
+      if (SPEC_OSCI   != None):
+         if SPEC_OSCI['AMOR_REDUIT']==None:
+            l_amor=[0.02, 0.05, 0.1]
+            UTMESS('I','FONCT0_31',valr=l_amor)
+         else:
+            if type(SPEC_OSCI['AMOR_REDUIT']) not in EnumTypes :
+               l_amor=[SPEC_OSCI['AMOR_REDUIT'],]
+            else:
+               l_amor= SPEC_OSCI['AMOR_REDUIT']
+         if SPEC_OSCI['FREQ']==None and SPEC_OSCI['LIST_FREQ']==None:
+            l_freq=[]
+            for i in range(56):
+               l_freq.append( 0.2+0.050*i)
+            for i in range( 8):
+               l_freq.append( 3.0+0.075*i)
+            for i in range(14):
+               l_freq.append( 3.6+0.100*i)
+            for i in range(24):
+               l_freq.append( 5.0+0.125*i)
+            for i in range(28):
+               l_freq.append( 8.0+0.250*i)
+            for i in range( 6):
+               l_freq.append(15.0+0.500*i)
+            for i in range( 4):
+               l_freq.append(18.0+1.000*i)
+            for i in range(10):
+               l_freq.append(22.0+1.500*i)
+            texte=[]
+            for i in range(len(l_freq)/5) :
+               texte.append(' %f %f %f %f %f' %tuple(l_freq[i*5:i*5+5]))
+            UTMESS('I','FONCT0_32',valk=os.linesep.join(texte))
+         elif SPEC_OSCI['LIST_FREQ']!=None:
+            l_freq=SPEC_OSCI['LIST_FREQ'].Valeurs()
+         elif SPEC_OSCI['FREQ']!=None:
+            if type(SPEC_OSCI['FREQ']) not in EnumTypes:
+               l_freq=[SPEC_OSCI['FREQ'],]
+            else:
+               l_freq= SPEC_OSCI['FREQ']
+         if min(l_freq)<1.E-10 :
+            UTMESS('S','FONCT0_43')
+         if abs(SPEC_OSCI['NORME'])<1.E-10 :
+            UTMESS('S','FONCT0_33')
+         if SPEC_OSCI['NATURE_FONC']!='ACCE' :
+            UTMESS('S','FONCT0_34')
+         if SPEC_OSCI['METHODE']!='NIGAM' :
+            UTMESS('S','FONCT0_35')
+         eps=1.e-6
+         for amor in l_amor :
+            if amor>(1-eps) :
+              UTMESS('S','FONCT0_36')
+         __ff=SPEC_OSCI['FONCTION'].convert()
+         ctxt.f = __ff.nom
+         
+         # appel à SPEC_OSCI
+         spectr = aster_fonctions.SPEC_OSCI(__ff.vale_x, __ff.vale_y, l_freq, l_amor)
+      
+         # construction de la nappe
+         vale_para = l_amor
+         para      = { 'INTERPOL'      : ['LIN','LOG'],
+                       'NOM_PARA_FONC' : 'FREQ',
+                       'NOM_PARA'      : 'AMOR',
+                       'PROL_DROITE'   : 'EXCLU',
+                       'PROL_GAUCHE'   : 'EXCLU',
+                       'NOM_RESU'      : SPEC_OSCI['NATURE'] }
+         para_fonc = { 'INTERPOL'      : ['LOG','LOG'],
+                       'NOM_PARA'      : 'FREQ',
+                       'PROL_DROITE'   : 'CONSTANT',
+                       'PROL_GAUCHE'   : 'EXCLU',
+                       'NOM_RESU'      : SPEC_OSCI['NATURE'] }
+         if   SPEC_OSCI['NATURE']=='DEPL':
+            ideb = 0
+         elif SPEC_OSCI['NATURE']=='VITE':
+            ideb = 1
+         else:
+            ideb = 2
+         l_fonc = []
+         for iamor in range(len(l_amor)) :
+            l_fonc.append(t_fonction(l_freq,spectr[iamor,ideb,:]/SPEC_OSCI['NORME'],para_fonc))
+         __ex=t_nappe(vale_para,l_fonc,para)
+      ###
+      if (LISS_ENVELOP!= None):
+         __ff=LISS_ENVELOP['NAPPE'].convert()
+         sp_nappe=liss_enveloppe.nappe(listFreq=__ff.l_fonc[0].vale_x, listeTable=[f.vale_y for f in __ff.l_fonc], listAmor=__ff.vale_para, entete="")
+         sp_lisse=liss_enveloppe.lissage(nappe=sp_nappe,fmin=LISS_ENVELOP['FREQ_MIN'],fmax=LISS_ENVELOP['FREQ_MAX'],elarg=LISS_ENVELOP['ELARG'],tole_liss=LISS_ENVELOP['TOLE_LISS'])
+         para_fonc=__ff.l_fonc[0].para
+         l_fonc=[]
+         for val in sp_lisse.listTable: 
+            l_fonc.append(t_fonction(sp_lisse.listFreq,val,para_fonc))
+         __ex=t_nappe(vale_para=sp_lisse.listAmor,l_fonc=l_fonc,para=__ff.para)
+
+   except InterpolationError, msg:
+      UTMESS('F', 'FONCT0_27', valk=(ctxt.f, str(msg)))
+   except ParametreError, msg:
+      UTMESS('F', 'FONCT0_28', valk=(ctxt.f, str(msg)))
+   except ProlongementError, msg:
+      UTMESS('F', 'FONCT0_29', valk=(ctxt.f, str(msg)))
+   except FonctionError, msg:
+      UTMESS('F', 'FONCT0_30', valk=(ctxt.f, str(msg), traceback.format_exc()))
+  
+   ### creation de la fonction produite par appel à DEFI_FONCTION
+   ### on récupère les paramètres issus du calcul de __ex
+   ### et on les surcharge par ceux imposés par l'utilisateur
+   
+   if isinstance(__ex,t_fonction) or isinstance(__ex,t_fonction_c):
+      para=__ex.para
+      if NOM_PARA   !=None : para['NOM_PARA']   =NOM_PARA
+      if NOM_RESU   !=None : para['NOM_RESU']   =NOM_RESU
+      if PROL_DROITE!=None : para['PROL_DROITE']=PROL_DROITE
+      if PROL_GAUCHE!=None : para['PROL_GAUCHE']=PROL_GAUCHE
+      if INTERPOL   !=None : para['INTERPOL']   =INTERPOL
+      if   isinstance(__ex,t_fonction_c): para['VALE_C'] = __ex.tabul()
+      elif isinstance(__ex,t_fonction)  : para['VALE']   = __ex.tabul()
+      C_out=DEFI_FONCTION(**para)
+   elif isinstance(__ex,t_nappe):
+      def_fonc=[]
+      for f in __ex.l_fonc :
+         para=f.para
+         def_fonc.append(_F(VALE       =f.tabul(),
+                            INTERPOL   =f.para['INTERPOL'],
+                            PROL_DROITE=f.para['PROL_DROITE'],
+                            PROL_GAUCHE=f.para['PROL_GAUCHE'],))
+      para=__ex.para
+      if NOM_PARA      !=None : para['NOM_PARA']   =NOM_PARA
+      if NOM_RESU      !=None : para['NOM_RESU']   =NOM_RESU
+      if PROL_DROITE   !=None : para['PROL_DROITE']=PROL_DROITE
+      if PROL_GAUCHE   !=None : para['PROL_GAUCHE']=PROL_GAUCHE
+      if NOM_PARA_FONC !=None : para['NOM_PARA_FONC']   =INTERPOL
+      if INTERPOL_FONC !=None : para['INTERPOL']   =INTERPOL
+      C_out=DEFI_NAPPE(PARA=__ex.vale_para.tolist(),DEFI_FONCTION=def_fonc,**para)
+   if INFO > 1:
+      IMPR_FONCTION(FORMAT='TABLEAU',
+                    UNITE=6,
+                    COURBE=_F(FONCTION=C_out),)
+   return ier
+
+
+
+class Context(object):
+   """Permet de stocker des éléments de contexte pour aider au
+   diagnostic lors de l'émission de message.
+   usage :
+      context = Context()
+      context.f = 'nomfon'
+      print context.f
+   """
+   def __init__(self):
+      self.__nomf = None
+   
+   def get_val(self):
+      """Retourne le texte formatté.
+      """
+      nomf = self.__nomf
+      if type(nomf) not in (list, tuple):
+         nomf = [nomf,]
+      pluriel = ''
+      if len(nomf) > 1:
+         pluriel = 's'
+      try:
+         res = """Fonction%(s)s concernée%(s)s : %(nomf)s""" % {
+            's'    : pluriel,
+            'nomf' : ', '.join(nomf),
+         }
+      except:
+         res = 'erreur de programmation !'
+      return res
+   
+   def set_val(self, value):
+      self.__nomf = value
+   
+   def del_val(self):
+      del self.__nomf
+   
+   f = property(get_val, set_val, del_val, "")
diff --git a/Aster/Cata/cataSTA10/Macro/calc_miss_ops.py b/Aster/Cata/cataSTA10/Macro/calc_miss_ops.py
new file mode 100644 (file)
index 0000000..dae87e7
--- /dev/null
@@ -0,0 +1,35 @@
+#@ AJOUT calc_miss_ops Macro
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
+
+import os
+
+
+def calc_miss_ops(self, OPTION, **kwargs):
+    """Macro CALC_MISS :
+    Préparation des données et exécution d'un calcul MISS3D
+    """
+    from Utilitai.Utmess  import UTMESS, MessageError
+    from Miss.miss_utils  import MISS_PARAMETER
+    from Miss.miss_calcul import CalculMissFactory
+    
+    ier = 0
+    # La macro compte pour 1 dans la numerotation des commandes
+    self.set_icmd(1)
+
+    # conteneur des paramètres du calcul
+    param = MISS_PARAMETER(initial_dir=os.getcwd(), **kwargs)
+    
+    # création de l'objet CALCUL_MISS_xxx
+    option_calcul = "TOUT"
+    if OPTION["TOUT"] != "OUI":
+        option_calcul = OPTION["MODULE"]
+    calcul = CalculMissFactory(option_calcul, self, param)
+
+    try:
+        calcul.prepare_donnees()
+        calcul.execute()
+        calcul.post_traitement()
+    except MessageError, err:
+        UTMESS('F', err.id_message, valk=err.valk, vali=err.vali, valr=err.valr)
+
diff --git a/Aster/Cata/cataSTA10/Macro/calc_modal_ops.py b/Aster/Cata/cataSTA10/Macro/calc_modal_ops.py
new file mode 100644 (file)
index 0000000..0a7a1ba
--- /dev/null
@@ -0,0 +1,162 @@
+#@ MODIF calc_modal_ops Macro  DATE 27/04/2009   AUTEUR NISTOR I.NISTOR 
+
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+#-*- coding: iso-8859-1 -*-
+
+
+def calc_modal_ops(self,MODELE,CHAM_MATER,CARA_ELEM,AMORTISSEMENT,
+                        SOLVEUR,CHARGE,INST,METHODE,CALC_FREQ, MODE_RIGIDE,
+                        VERI_MODE,INFO,**args):
+  """
+     Ecriture de la macro CALC_MODAL
+  """
+  from Accas import _F
+  ier=0
+  from Utilitai.Utmess     import  UTMESS
+
+  # On importe les definitions des commandes a utiliser dans la macro
+  # Le nom de la variable doit etre obligatoirement le nom de la commande
+  CALC_MATR_ELEM=self.get_cmd('CALC_MATR_ELEM')
+  NUME_DDL      =self.get_cmd('NUME_DDL')
+  ASSE_MATRICE  =self.get_cmd('ASSE_MATRICE')  
+  MODE_ITER_SIMULT  =self.get_cmd('MODE_ITER_SIMULT')
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+
+  # on defini la liste des mots cle pour les appels aux CALC_MATR_ELEM
+  motsclece={}
+  if CHARGE     != None: motsclece['CHARGE']      =CHARGE
+  if CHAM_MATER != None: motsclece['CHAM_MATER']  =CHAM_MATER
+  if CARA_ELEM  != None: motsclece['CARA_ELEM']   =CARA_ELEM
+  if INST       != None: motsclece['INST']        =INST
+
+  #c'est avec le mot cle AMORTISSEMENT qu'on decide si on calcule la matrice C
+  # d'amortissement 
+
+  
+  _a=CALC_MATR_ELEM(MODELE=MODELE, OPTION='RIGI_MECA', **motsclece)
+  _b=CALC_MATR_ELEM(MODELE=MODELE, OPTION='MASS_MECA', **motsclece)
+  if AMORTISSEMENT=='OUI':  
+    _c=CALC_MATR_ELEM(MODELE=MODELE, OPTION='AMOR_MECA',
+                       RIGI_MECA=_a, MASS_MECA=_b,**motsclece)
+
+  #on produit en local le concept NUME_DDL, il n'est pas visible pour l'utilisateur
+  
+  # Les mots cles simples sous SOLVEUR sont par defaut MULT_FRONT/METIS
+  methode=SOLVEUR['METHODE']
+  renum=SOLVEUR['RENUM'] 
+
+  _num=NUME_DDL(MATR_RIGI=_a,METHODE=methode,RENUM=renum,INFO=INFO)
+  
+  #assemblages des matrices 
+  _rigas=ASSE_MATRICE(MATR_ELEM=_a,NUME_DDL=_num)
+  _masas=ASSE_MATRICE(MATR_ELEM=_b,NUME_DDL=_num)
+  if AMORTISSEMENT=='OUI':     
+    _amoras=ASSE_MATRICE(MATR_ELEM=_c,NUME_DDL=_num)
+
+  #lancement du calcul des modes propres
+  # on defini la liste des mots cle pour l'appel au MODE_ITER_SIMULT
+
+  motscit={}
+  motscfa={}
+
+  if METHODE=='TRI_DIAG':
+     if args.has_key('NMAX_ITER_ORTHO'):
+        motscit['NMAX_ITER_ORTHO'] =args['NMAX_ITER_ORTHO']
+     if args.has_key('PREC_ORTHO'):
+        motscit['PREC_ORTHO']      =args['PREC_ORTHO']
+     if args.has_key('PREC_LANCZOS'):
+        motscit['PREC_LANCZOS']    =args['PREC_LANCZOS']
+     if args.has_key('MAX_ITER_QR'):
+        motscit['NMAX_ITER_QR']    =args['NMAX_ITER_QR']
+  elif METHODE=='JACOBI':
+     if args.has_key('NMAX_ITER_BATHE'):
+        motscit['NMAX_ITER_BATHE'] =args['NMAX_ITER_BATHE']
+     if args.has_key('PREC_BATHE'):
+        motscit['PREC_BATHE']      =args['PREC_BATHE']
+     if args.has_key('NMAX_ITER_JACOBI'):
+        motscit['NMAX_ITER_JACOBI']=args['NMAX_ITER_JACOBI']
+     if args.has_key('PREC_JACOBI'):
+        motscit['PREC_JACOBI']     =args['PREC_JACOBI']
+  elif METHODE=='SORENSEN':
+     if args.has_key('NMAX_ITER_SOREN'):
+        motscit['NMAX_ITER_SOREN'] =args['NMAX_ITER_SOREN']
+     if args.has_key('PARA_ORTHO_SOREN'):
+        motscit['PARA_ORTHO_SOREN']=args['PARA_ORTHO_SOREN']
+     if args.has_key('PREC_SOREN'):
+        motscit['PREC_SOREN']      =args['PREC_SOREN']
+  elif METHODE=='QZ':
+     if args.has_key('TYPE_QZ'):
+        motscit['TYPE_QZ'] =args['TYPE_QZ']
+  
+  if CALC_FREQ['DIM_SOUS_ESPACE']: motscfa['DIM_SOUS_ESPACE']=CALC_FREQ['DIM_SOUS_ESPACE']
+  if CALC_FREQ['COEF_DIM_ESPACE']: motscfa['COEF_DIM_ESPACE']=CALC_FREQ['COEF_DIM_ESPACE']
+  
+  if CALC_FREQ['OPTION']=='PLUS_PETITE':
+     motscfa['NMAX_FREQ']=CALC_FREQ['NMAX_FREQ']
+
+  if CALC_FREQ['OPTION']=='CENTRE':
+     motscfa['FREQ']=CALC_FREQ['FREQ']
+     if CALC_FREQ['AMOR_REDUIT']: motscfa['AMOR_REDUIT']=CALC_FREQ['AMOR_REDUIT']
+     motscfa['NMAX_FREQ']=CALC_FREQ['NMAX_FREQ']
+     
+  if CALC_FREQ['OPTION']=='BANDE':
+     motscfa['FREQ']=CALC_FREQ['FREQ']
+     
+  motscit['CALC_FREQ'] = _F(OPTION          =CALC_FREQ['OPTION'],
+                            SEUIL_FREQ      =CALC_FREQ['SEUIL_FREQ'],
+                            NPREC_SOLVEUR   =CALC_FREQ['NPREC_SOLVEUR'],
+                            NMAX_ITER_SHIFT =CALC_FREQ['NMAX_ITER_SHIFT'],
+                            PREC_SHIFT      =CALC_FREQ['PREC_SHIFT'],
+                            APPROCHE        =CALC_FREQ['APPROCHE'],
+                            **motscfa)
+
+  motscit['VERI_MODE'] = _F(STOP_ERREUR=VERI_MODE['STOP_ERREUR'],
+                            SEUIL      =VERI_MODE['SEUIL'],
+                            STURM      =VERI_MODE['STURM'],
+                            PREC_SHIFT =VERI_MODE['PREC_SHIFT'])
+
+  motscit['STOP_FREQ_VIDE'] = CALC_FREQ['STOP_FREQ_VIDE']
+
+  if MODE_RIGIDE=='OUI':
+    mode_rigi='MODE_RIGIDE'
+  elif MODE_RIGIDE=='NON':
+    mode_rigi='SANS' 
+  self.DeclareOut('modes',self.sd)
+  
+  if AMORTISSEMENT=='NON':
+     modes=MODE_ITER_SIMULT(MATR_A  =_rigas,
+                            MATR_B  =_masas,
+                            METHODE =METHODE,
+                            OPTION  =mode_rigi,
+                            INFO    =INFO,
+                            **motscit)
+  elif AMORTISSEMENT=='OUI':
+     modes=MODE_ITER_SIMULT(MATR_A  =_rigas,
+                            MATR_B  =_masas,
+                            MATR_C  =_amoras,
+                            METHODE =METHODE,
+                            OPTION  =mode_rigi,
+                            INFO    =INFO,
+                            **motscit)
+  return ier
diff --git a/Aster/Cata/cataSTA10/Macro/calc_mode_rotation_ops.py b/Aster/Cata/cataSTA10/Macro/calc_mode_rotation_ops.py
new file mode 100644 (file)
index 0000000..f5c598e
--- /dev/null
@@ -0,0 +1,97 @@
+#@ MODIF calc_mode_rotation_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE Mohamed TORKHANI
+
+from Accas import _F
+from types import ListType, TupleType
+
+
+def calc_mode_rotation_ops(self,MATR_A, MATR_B, MATR_AMOR, MATR_GYRO,
+                         VITE_ROTA,METHODE,CALC_FREQ,VERI_MODE,**args):
+# Macro pour calculer les frequences et modes en fonction des vitesses de rotation
+# MATR_A, matrice de raideur
+# MATR_B, matrice de masse
+# MATR_AMOR, matrice d'amortissement
+# MATR_GYRO, matrice de gyroscopie
+# VITE_ROTA, liste de vitesses de rotation
+# METHODE, methode de calcul, QZ par defaut ou SORENSEN
+# CALC_FREQ
+# VERI_MODE
+    from Utilitai.Table import Table
+    ier=0
+     
+    # On importe les definitions des commandes a utiliser dans la macro
+    MODE_ITER_SIMULT  =self.get_cmd('MODE_ITER_SIMULT')
+    COMB_MATR_ASSE    =self.get_cmd('COMB_MATR_ASSE')
+    IMPR_RESU         =self.get_cmd('IMPR_RESU')
+    DETRUIRE          =self.get_cmd('DETRUIRE')
+    CREA_TABLE        =self.get_cmd('CREA_TABLE')
+
+    # La macro compte pour 1 dans la numerotation des commandes
+    self.set_icmd(1)
+
+    motscit={}
+    if METHODE=='QZ':
+        motscit['CALC_FREQ']=_F(OPTION  ='PLUS_PETITE',
+                             NMAX_FREQ  =CALC_FREQ['NMAX_FREQ'])                         
+        
+    if METHODE=='SORENSEN':        
+        motscit['CALC_FREQ']=_F(OPTION  ='CENTRE',
+                             NMAX_FREQ  =CALC_FREQ['NMAX_FREQ'],
+                             FREQ       =CALC_FREQ['FREQ'])
+    
+    motscit['VERI_MODE']=_F(STOP_ERREUR=VERI_MODE['STOP_ERREUR'],
+                            SEUIL      =VERI_MODE['SEUIL'],
+                            STURM      =VERI_MODE['STURM'],
+                            PREC_SHIFT =VERI_MODE['PREC_SHIFT'])
+
+    
+    self.DeclareOut('tab_out',self.sd)
+    
+    NBV=len(VITE_ROTA);
+    
+    _mod=[None]*NBV;
+    
+    tab=Table()
+    for ii in range(0,NBV):
+        OM=VITE_ROTA[ii]
+        nom = 'OM_'+str(ii)
+
+        # ----------------------------------
+        # Ajout des effets gyroscopiques w*G
+        # dans la matrice d amortissement C
+        # ----------------------------------
+
+        
+        GYOM=COMB_MATR_ASSE(COMB_R=(_F(MATR_ASSE=MATR_GYRO, COEF_R=OM,),
+                            _F(MATR_ASSE=MATR_AMOR, COEF_R=1.,),))
+
+        _mod[ii]=MODE_ITER_SIMULT(MATR_A=MATR_A,
+                       MATR_B=MATR_B,
+                       MATR_C=GYOM,
+                       METHODE=METHODE,
+                       **motscit)
+        
+        DETRUIRE(CONCEPT=_F(NOM=GYOM),INFO=1,)
+        tab.append({'NUME_VITE' : ii, 'VITE_ROTA' : OM, 'NOM_OBJET': 'MODE_MECA', 'TYPE_OBJET': 'MODE_MECA', 'NOM_SD' : _mod[ii].nom})
+
+    motcles=tab.dict_CREA_TABLE()
+    tab_out=CREA_TABLE(TYPE_TABLE = 'TABLE_CONTENEUR', **motcles);
+    return ier
diff --git a/Aster/Cata/cataSTA10/Macro/calc_precont_ops.py b/Aster/Cata/cataSTA10/Macro/calc_precont_ops.py
new file mode 100644 (file)
index 0000000..090b69e
--- /dev/null
@@ -0,0 +1,452 @@
+#@ MODIF calc_precont_ops Macro  DATE 23/03/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+
+# RESPONSABLE ASSIRE A.ASSIRE
+
+def calc_precont_ops(self,reuse,MODELE,CHAM_MATER,CARA_ELEM,EXCIT,
+                                CABLE_BP,CABLE_BP_INACTIF,
+                                COMP_INCR,ETAT_INIT,NEWTON,RECH_LINEAIRE,
+                                CONVERGENCE,INCREMENT,SOLVEUR,
+                                INFO,TITRE,**args):
+
+
+  """
+     Ecriture de la macro CALC_PRECONT
+  """
+  import copy
+  import aster
+  import string
+  import types
+  from Accas import _F
+  from Noyau.N_utils import AsType
+  from Utilitai.Utmess     import  UTMESS
+  ier=0
+
+  # On importe les definitions des commandes a utiliser dans la macro
+  AFFE_MODELE      = self.get_cmd('AFFE_MODELE')
+  CREA_CHAMP       = self.get_cmd('CREA_CHAMP')
+  AFFE_CHAR_MECA   = self.get_cmd('AFFE_CHAR_MECA')
+  DEFI_LIST_REEL   = self.get_cmd('DEFI_LIST_REEL')
+  STAT_NON_LINE    = self.get_cmd('STAT_NON_LINE')
+  CALC_NO          = self.get_cmd('CALC_NO')
+  CREA_CHAMP       = self.get_cmd('CREA_CHAMP')
+  DEFI_FONCTION    = self.get_cmd('DEFI_FONCTION')
+  RECU_TABLE       = self.get_cmd('RECU_TABLE')
+  DEFI_MATERIAU    = self.get_cmd('DEFI_MATERIAU')
+  AFFE_MATERIAU    = self.get_cmd('AFFE_MATERIAU')
+
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  # Le concept sortant (de type evol_noli) est nomme RES dans
+  # le contexte de la macro
+
+  self.DeclareOut('RES',self.sd)
+
+  # -------------------------------------------------------------
+  # 1. CREATION DES MOTS-CLES ET CONCEPTS POUR LES STAT_NON_LINE
+  # ------------------------------------------------------------
+
+
+  # 1.1 Recuperation de la liste d'instants, de l'instant initial et final
+  #     Creation de la nouvelle liste d'instants
+  # ----------------------------------------------------------
+
+  dIncrement=INCREMENT[0].cree_dict_valeurs(INCREMENT[0].mc_liste)
+
+  __prec = dIncrement['PRECISION']
+  __L0   = dIncrement['LIST_INST']
+  __L1   = __L0.Valeurs()
+
+  # Traitement de l'etat initial
+  if ETAT_INIT:
+      dEtatInit=ETAT_INIT[0].cree_dict_valeurs(ETAT_INIT[0].mc_liste)
+      for i in dEtatInit.keys():
+          if dEtatInit[i]==None : del dEtatInit[i]
+
+      __EVINIT = dEtatInit['EVOL_NOLI']
+  else :
+      dEtatInit=None
+
+  # Teste si INST_INIT est donné ou bien recalcule __TMIN
+  if dIncrement['INST_INIT'] == None:
+    if self.reuse == None:
+      __TMIN = __L1[0]
+    else:
+      __dico = __EVINIT.LIST_VARI_ACCES()
+      __TMIN = __dico['INST'][-1]
+  else:
+    __TMIN = dIncrement['INST_INIT']
+
+  # Teste si INST_FIN est donné ou bien recalcule __TMAX
+  if dIncrement['INST_FIN'] == None:
+    __TMAX = __L1[-1]
+  else:
+    __TMAX = dIncrement['INST_FIN']
+
+  # Teste si INST_INIT est bien plus petit que INST_FIN
+  if __TMAX <= __TMIN:
+    UTMESS('F','CABLE0_1')
+
+  # Cree la liste d'instant __L2 allant de __TMIN a __TMAX et contenant
+  # un instant supplementaire __TINT
+  __L2=[]
+  for m in __L1:
+    if m>=__TMIN and m<=__TMAX:
+      __L2.append(m)
+
+  __TINT = (9.*__L2[-1] + __L2[-2])/10.
+  __L2[-1:-1] = [__TINT]
+
+  # __LST0 est la liste d'instants utilisée pour l'etape 1
+  __LST0=DEFI_LIST_REEL( DEBUT = __TMIN,
+                        INTERVALLE = _F(JUSQU_A = __TMAX, NOMBRE = 1),)
+
+  # __LST et __FCT sont utilisés pour les etapes 2 et 3
+  __LST=DEFI_LIST_REEL(VALE=__L2,);
+  __FCT=DEFI_FONCTION(INTERPOL=('LIN','LIN'),
+                         NOM_PARA='INST',
+                         VALE=(__TMIN,0.0,__TINT,1.0,__TMAX,1.0),);
+
+  for i in dIncrement.keys():
+      if dIncrement[i]==None : del dIncrement[i]
+  dIncrement['LIST_INST']= __LST
+  dIncrement['INST_FIN'] = __TINT
+
+
+
+  # 1.2 Recuperation des parametres pour STAT_NON_LINE
+  # -------------------------------------------------------
+
+  dNewton=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
+  for i in dNewton.keys():
+      if dNewton[i]==None : del dNewton[i]
+
+  dConvergence=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
+  for i in dConvergence.keys():
+      if dConvergence[i]==None : del dConvergence[i]
+
+  dSolveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
+  for i in dSolveur.keys():
+      if dSolveur[i]==None : del dSolveur[i]
+
+  if RECH_LINEAIRE:
+    dRech_lin=RECH_LINEAIRE[0].cree_dict_valeurs(RECH_LINEAIRE[0].mc_liste)
+    for i in dRech_lin.keys():
+        if dRech_lin[i]==None : del dRech_lin[i]
+  else :
+    dRech_lin=None
+
+
+  # 1.3 Creation des mots-cles pour les 3 AFFE_CHAR_MECA
+  #     Recuperation des cables dans les concepts CABLE_BP
+  #     et CABLE_BP_INACTIF
+  # ------------------------------------------------------
+  if type(CABLE_BP) is not types.NoneType:
+    if type(CABLE_BP) is not types.TupleType:
+      CABLE_BP0 = CABLE_BP
+      CABLE_BP = []
+      CABLE_BP.append ( CABLE_BP0 )
+
+  if type(CABLE_BP_INACTIF) is not types.NoneType:
+    if type(CABLE_BP_INACTIF) is not types.TupleType:
+      CABLE_BP_INACTIF0 = CABLE_BP_INACTIF
+      CABLE_BP_INACTIF = []
+      CABLE_BP_INACTIF.append ( CABLE_BP_INACTIF0 )
+
+  motscles={}
+  motscles['RELA_CINE_BP']=[]
+  motscle2={}
+  motscle2['RELA_CINE_BP']=[]
+  motscle3={}
+  motscle3['RELA_CINE_BP']=[]
+  __GROUP_MA_A=[]
+  Result = [[None]*1]
+  for mcabl in CABLE_BP:
+    # Creation de mots-cles pour les AFFE_CHAR_MECA
+    motscles['RELA_CINE_BP'].append(_F(CABLE_BP=mcabl,
+                                       SIGM_BPEL = 'OUI',
+                                       RELA_CINE = 'NON',) )
+    motscle2['RELA_CINE_BP'].append(_F(CABLE_BP=mcabl,
+                                       SIGM_BPEL = 'NON',
+                                       RELA_CINE = 'OUI',) )
+    motscle3['RELA_CINE_BP'].append(_F(CABLE_BP=mcabl,
+                                       SIGM_BPEL = 'OUI',
+                                       RELA_CINE = 'OUI',) )
+
+    # Creation de __GROUP_MA_A : liste des noms des cables contenus
+    # dans chaque concept CABLE_BP = cables  a activer
+    __TCAB = RECU_TABLE(CO=mcabl,NOM_TABLE='CABLE_BP');
+    __nb = 0
+    while 1:
+      try:
+          Result[__nb][0] = __TCAB['NOM_CABLE',__nb+1]
+          __CAB = __TCAB['NOM_CABLE',__nb+1]
+          if __nb == 0:
+            __GROUP_MA_A.append(__CAB)
+          else:
+            i = 0
+            # enlève les doublons
+            for m in __GROUP_MA_A:
+              i=i+1
+              if __CAB == m:
+                break
+              if i == len(__GROUP_MA_A):
+                __GROUP_MA_A.append(__CAB)
+
+          __nb = __nb + 1
+          Result.append([None]*1)
+    #   Si on a lu toutes les valeurs alors on sort de la boucle
+      except KeyError:
+        break
+
+  # Creation de __GROUP_MA_I : liste des noms des cables contenus
+  # dans chaque CABLE_BP_INACTIF
+  # __GROUP_MA_CABLE = liste des cables actifs et inactifs
+  Result = [[None]*1]
+  __GROUP_MA_I=[]
+
+  if CABLE_BP_INACTIF:
+    for mcabl in CABLE_BP_INACTIF:
+      __TCA0 = RECU_TABLE(CO=mcabl,NOM_TABLE='CABLE_BP');
+      __nb = 0
+      while 1:
+        try:
+            Result[__nb][0] = __TCA0['NOM_CABLE',__nb+1]
+            __CA0 = __TCA0['NOM_CABLE',__nb+1]
+            if __nb == 0:
+              __GROUP_MA_I.append(__CA0)
+            else:
+              i = 0
+              # enlève les doublons
+              for m in __GROUP_MA_I:
+                i=i+1
+                if __CA0 == m:
+                  break
+                if i == len(__GROUP_MA_I):
+                  __GROUP_MA_I.append(__CA0)
+
+            __nb = __nb + 1
+            Result.append([None]*1)
+      #   Si on a lu toutes les valeurs alors on sort de la boucle
+        except KeyError:
+          break
+    motscle6={}
+    motscle6['RELA_CINE_BP']=[]
+    for mcabl in CABLE_BP_INACTIF:
+      # Creation de mots-cles pour les AFFE_CHAR_MECA
+      motscle6['RELA_CINE_BP'].append(_F(CABLE_BP=mcabl,
+                                         SIGM_BPEL = 'NON',
+                                         RELA_CINE = 'OUI',) )
+
+  __GROUP_MA_CABLES = __GROUP_MA_A + __GROUP_MA_I
+
+
+  # 1.4 Creation des mots-clés facteurs COMP_INCR
+  # pour étape 2 (dComp_incr0) et étape 3 (dComp_incr1)
+  # ------------------------------------------------------
+
+  dComp_incr=[]
+  for j in COMP_INCR :
+      dComp_incr.append(j.cree_dict_valeurs(j.mc_liste))
+      for i in dComp_incr[-1].keys():
+          if dComp_incr[-1][i]==None : del dComp_incr[-1][i]
+
+  PARM_THETA=0.
+  for j in range(len(COMP_INCR)) :
+     if dComp_incr[j]['RELATION'] == 'ELAS':
+        PARM_THETA=dComp_incr[j]['PARM_THETA']
+
+  if PARM_THETA == 0:
+    PARM_THETA=dComp_incr[0]['PARM_THETA']
+
+  dComp_incr0=copy.copy(dComp_incr)
+  dComp_incr1=copy.copy(dComp_incr)
+
+  dComp_incr0.append(_F(RELATION='SANS',GROUP_MA=__GROUP_MA_CABLES,) )
+  if __GROUP_MA_I:
+    dComp_incr1.append(_F(RELATION='SANS',GROUP_MA=__GROUP_MA_I,) )
+
+
+  # 1.5 Modele contenant uniquement les cables de precontrainte
+  # ---------------------------------------------------------
+
+  __MOD = string.ljust(MODELE.nom,8)
+  __MOD =__MOD+'.MODELE    .LGRF        '
+  __LMAIL = aster.getvectjev(__MOD)
+  __MAIL  = string.strip(__LMAIL[0])
+
+  objma=self.get_sd_avant_etape(__MAIL,self)
+
+  __M_CA=AFFE_MODELE( MAILLAGE=objma,
+                       AFFE    =_F( GROUP_MA     = __GROUP_MA_A,
+                                    PHENOMENE    = 'MECANIQUE',
+                                    MODELISATION = 'BARRE') )
+
+
+  # 1.6 Blocage de tous les noeuds des cables actifs
+  # --------------------------------------------------
+
+  _B_CA=AFFE_CHAR_MECA(MODELE=__M_CA,
+                        DDL_IMPO= _F( GROUP_MA = __GROUP_MA_A,
+                                      DX = 0.,
+                                      DY = 0.,
+                                      DZ = 0.),)
+
+
+  # 1.7 Chargements concernant les cables
+  # -------------------------------------
+  _C_CN=AFFE_CHAR_MECA(MODELE=__M_CA,**motscles)
+  _C_CA=AFFE_CHAR_MECA(MODELE=MODELE,**motscle2)
+  _C_CT=AFFE_CHAR_MECA(MODELE=MODELE,**motscle3)
+  if CABLE_BP_INACTIF:
+    _C_CI=AFFE_CHAR_MECA(MODELE=MODELE,**motscle6)
+
+
+
+  # -------------------------------------------------------------
+  # 2. CALCULS
+  # ------------------------------------------------------------
+
+
+  #-------------------------------------------------------------------
+  # 2.1 Premiere etape : calcul sur le(s) cable(s) et
+  #     recuperation des _F_CAs aux noeuds
+  #     on travaile entre tmin et tmax
+  #-------------------------------------------------------------------
+
+  __EV1=STAT_NON_LINE(
+                         MODELE     = __M_CA,
+                         CHAM_MATER = CHAM_MATER,
+                         CARA_ELEM  = CARA_ELEM,
+                         EXCIT      =(_F(CHARGE = _B_CA),
+                                      _F(CHARGE = _C_CN),),
+                         COMP_INCR  =_F( RELATION = 'ELAS',
+                                         DEFORMATION = 'PETIT',
+                                         PARM_THETA = PARM_THETA,
+                                         TOUT = 'OUI'),
+                         INCREMENT  =_F(LIST_INST = __LST0,
+                                        PRECISION = __prec),
+                         SOLVEUR = dSolveur,
+                         INFO     =INFO,
+                         TITRE = TITRE,  )
+
+  __EV1 = CALC_NO( reuse    = __EV1,
+                   RESULTAT = __EV1,
+                   GROUP_MA = __GROUP_MA_A,
+                   OPTION = 'FORC_NODA' )
+
+  __REA = CREA_CHAMP (
+                     TYPE_CHAM = 'NOEU_DEPL_R',
+                     OPERATION = 'EXTR',
+                     RESULTAT  =  __EV1,
+                     NOM_CHAM  = 'FORC_NODA',
+                     INST      = __TMAX);
+
+  __REAC = CREA_CHAMP (TYPE_CHAM='NOEU_DEPL_R',
+                     OPERATION = 'ASSE',
+                     MODELE    = MODELE,
+                     ASSE= _F(GROUP_MA=__GROUP_MA_A,
+                              CHAM_GD=__REA,
+                              COEF_R = -1.), )
+
+  _F_CA=AFFE_CHAR_MECA(MODELE=__M_CA,
+                          VECT_ASSE = __REAC )
+
+
+
+  #-----------------------------------------------------------------------
+  # 2.2 Deuxieme etape : application de la precontrainte sur le beton
+  #     en desactivant les cables
+  #-----------------------------------------------------------------------
+
+  # Regeneration des mots-cles EXCIT passés en argument de la macro
+  dExcit=[]
+  for j in EXCIT :
+      dExcit.append(j.cree_dict_valeurs(j.mc_liste))
+      for i in dExcit[-1].keys():
+          if dExcit[-1][i]==None : del dExcit[-1][i]
+
+  if CABLE_BP_INACTIF:
+    dExcit.append(_F(CHARGE=_C_CI),)
+
+  # Creation du mots-cle EXCIT pour le STAT_NON_LINE
+  dExcit1=copy.copy(dExcit)
+  dExcit1.append(_F(CHARGE=_C_CA),)
+  dExcit1.append(_F(CHARGE = _F_CA,
+                    FONC_MULT=__FCT ),)
+
+  motscle4={}
+  if self.reuse:
+    motscle4['reuse'] = self.reuse
+
+  RES=STAT_NON_LINE(
+                     MODELE      =MODELE,
+                     CARA_ELEM   =CARA_ELEM,
+                     CHAM_MATER  = CHAM_MATER,
+                     COMP_INCR=dComp_incr0,
+                     INCREMENT=dIncrement,
+                     ETAT_INIT = dEtatInit,
+                     NEWTON =dNewton,
+                     CONVERGENCE=dConvergence,
+                     RECH_LINEAIRE = dRech_lin,
+                     SOLVEUR = dSolveur,
+                     ARCHIVAGE = _F(INST = __TINT),
+                     INFO     =INFO,
+                     TITRE = TITRE,
+                     EXCIT = dExcit1,
+                     **motscle4)
+
+  # Recuperation du dernier numero d'ordre pour pouvoir  l'écraser dans RES
+  __dico2 = RES.LIST_VARI_ACCES()
+  __no = __dico2['NUME_ORDRE'][-1]
+
+
+  #-----------------------------------------------------------------------
+  # 2.2 Troisieme etape : on remet la tension dans les cables
+  #-----------------------------------------------------------------------
+
+  # Creation du mots-cles EXCIT pour le STAT_NON_LINE
+  dExcit2=copy.copy(dExcit)
+  dExcit2.append(_F(CHARGE=_C_CT,) )
+
+  # Calcul sur un seul pas (de __TINT a __TMAX)
+  RES=STAT_NON_LINE( reuse      = RES,
+                     ETAT_INIT  = _F(EVOL_NOLI =RES),
+                     MODELE     = MODELE,
+                     CHAM_MATER = CHAM_MATER,
+                     CARA_ELEM  = CARA_ELEM,
+                     COMP_INCR=dComp_incr1,
+                     INCREMENT=_F(LIST_INST = __LST,
+                                  PRECISION = __prec),
+                     NEWTON =dNewton,
+                     RECH_LINEAIRE = dRech_lin,
+                     CONVERGENCE=dConvergence,
+                     SOLVEUR = dSolveur,
+                     ARCHIVAGE = _F(NUME_INIT = __no,
+                                    DETR_NUME_SUIV = 'OUI' ),
+                     INFO  =INFO,
+                     TITRE = TITRE,
+                     EXCIT =dExcit2,
+                     )
+
+  return ier
+
diff --git a/Aster/Cata/cataSTA10/Macro/calc_spec_ops.py b/Aster/Cata/cataSTA10/Macro/calc_spec_ops.py
new file mode 100644 (file)
index 0000000..12f6608
--- /dev/null
@@ -0,0 +1,436 @@
+#@ MODIF calc_spec_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import copy
+import types
+from SD.sd_fonction import sd_fonction
+
+# -----------------------------------------------------------------------------
+class FonctionError(Exception): pass
+class ParametreError(FonctionError):      pass  # probleme de NOM_PARA
+class InterpolationError(FonctionError):  pass
+class ProlongementError(FonctionError):   pass
+
+# -----------------------------------------------------------------------------
+
+
+def calc_spec_ops(self,TAB_ECHANT,ECHANT,INTERSPE,TRANSFERT,TITRE,INFO,**args):
+#  ------------------------------------------------------------------
+#  Calcul d'une matrice interspectrale
+#  a partir de fonctions reelles
+
+   import aster
+   from types import ListType, TupleType
+   EnumTypes = (ListType, TupleType)
+   from Accas               import _F
+   from Utilitai.Utmess     import  UTMESS
+   import numpy
+   import numpy.fft as FFT
+   
+   commande='CALC_SPEC'
+
+   ier = 0
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+
+   # Le concept sortant (de type table_sdaster ou derive) est tab
+   self.DeclareOut('tabout', self.sd)
+   
+   # On importe les definitions des commandes a utiliser dans la macro
+   # Le nom de la variable doit etre obligatoirement le nom de la commande
+   CREA_TABLE    = self.get_cmd('CREA_TABLE')
+   CALC_TABLE    = self.get_cmd('CALC_TABLE')
+   DEFI_FONCTION = self.get_cmd('DEFI_FONCTION')
+
+#--- Verifications sur les entrees --#
+
+   if (ECHANT==None and TAB_ECHANT==None) : 
+      raise FonctionError, 'Vous devez specifier des fonctions en entree'
+
+   if TAB_ECHANT==None : TAB_ECHANT=[]
+   if ECHANT==None : ECHANT=[]
+   if INTERSPE==None : INTERSPE=[]
+   if TRANSFERT==None : TRANSFERT=[]
+   if len(TAB_ECHANT)*len(ECHANT) !=0 :
+      raise FonctionError, 'Vous pouvez specifier une table_fonction ou' + ' une liste de fonctions en entree, mais pas les deux'
+   if len(TRANSFERT)*len(INTERSPE) !=0 :
+      raise FonctionError, 'Vous ne pouvez specifier qu' +"'"+'un type de calcul par appel'
+   
+   
+   
+#-- Recuperation des entrees --#  
+
+   l_f=[]
+   l_t=[]
+   l_G=[]
+   l_H=[]
+#   for occ in TAB_ECHANT : 
+#      l_t.append(('TAB_ECHANT',occ))   
+   if TAB_ECHANT:  #MC
+      l_t = TAB_ECHANT.List_F()[0]
+
+   for occ in ECHANT : 
+      l_f.append(('ECHANT',occ))
+   for occ in INTERSPE : 
+      l_G.append(('INTERSPE',occ))
+   for occ in TRANSFERT : 
+      l_H.append(('TRANSFERT',occ))
+      
+   
+# Pour dimensionner les fenetres :
+# Cas ECHANT : on recupere simplement la premiere fonction
+# Cas_TAB_ECHANT : on recupere toutes les fonctions
+   
+   if len(l_f) >0 :
+      vale_sig=l_f[0][1]['FONCTION'].Valeurs(); 
+      l_ech=len(vale_sig[0])
+      dt=vale_sig[0][1]-vale_sig[0][0]
+      print "test : l_ech = ", l_ech
+   else :
+      #tab_ast=l_t[0][1]['NOM_TAB'];
+      tab_ast=l_t['NOM_TAB']  #MC
+      tab_py=tab_ast.EXTR_TABLE();
+      
+      nom_fonc= tab_py['FONCTION'].values()['FONCTION']
+      fonc_py = [sd_fonction(fonc) for fonc in nom_fonc]
+      temp=fonc_py[0].VALE.get();
+      dt=temp[1]-temp[0];
+      
+      l_ech_temp=l_t['LONGUEUR_ECH'];
+      recouvr_temp=l_t['RECOUVREMENT'];
+      
+      l_ech_t=[l_ech_temp[0]['DUREE'] , l_ech_temp[0]['POURCENT'],l_ech_temp[0]['NB_PTS'] ];
+      recouvr_t=[recouvr_temp[0]['DUREE'] , recouvr_temp[0]['POURCENT'],recouvr_temp[0]['NB_PTS'] ];
+            
+      if l_ech_t.count(None)==3 : l_ech=len(temp)/2;
+      if recouvr_t.count(None)==3 : recouvr=0;
+      if l_ech_t.count(None)<2 : 
+         raise FonctionError, 'Vous ne pouvez utiliser qu'+"'"+ 'un mot clef pour definir la longueur des echantillons'
+      if recouvr_t.count(None)<2 : 
+         raise FonctionError, 'Vous ne pouvez utiliser qu'+"'"+'un mot clef pour definir la longueur de recouvrement des echantillons'
+      for i1 in range(3) :
+          if l_ech_t[i1] !=None :
+             if   i1 == 0 : 
+                l_ech=int(numpy.floor(l_ech_t[i1]/dt));
+             elif i1 == 1 :
+                l_ech=int(numpy.floor((len(temp)/2)*l_ech_t[i1]*0.01));
+             elif i1 == 2 :
+                l_ech=int(numpy.floor(l_ech_t[i1]))
+      if l_ech > len(temp)/2 :
+         raise FonctionError, 'Vous devez specifier une longueur d'+"'"+'echantillon inferieure a la longueur totale de l'+"'"+'acquisition'
+      for i1 in range(3) :
+          if recouvr_t[i1] !=None :
+             if   i1 == 0 : 
+                recouvr=int(numpy.floor(recouvr_t[i1]/dt));
+             elif i1 == 1 :
+                recouvr=int(numpy.floor((l_ech)*recouvr_t[i1]*0.01));
+             elif i1 == 2 :
+                recouvr=int(numpy.floor(recouvr_t[i1]))
+      if recouvr > l_ech :
+         raise FonctionError, 'La longueur de recouvrement ne peut exceder la longueur '
+      print "test2 : l_ech = ", l_ech
+
+#-- Recuperation des fenetres
+
+
+   for occ in l_G+l_H :
+      if occ[1]['FENETRE'] == 'RECT' :
+         fene=[1.]*l_ech
+      elif occ[1]['FENETRE'] == 'HAMM' :
+         fene=[0.54-0.46*numpy.cos(2*numpy.pi*i1/(l_ech-1)) for i1 in range(l_ech)]
+      elif occ[1]['FENETRE'] == 'HANN' :
+         fene=[0.5-0.5*numpy.cos(2*numpy.pi*i1/(l_ech-1)) for i1 in range(l_ech)]
+      elif occ[1]['FENETRE'] == 'EXPO' :
+         para=occ[1]['DEFI_FENE']
+         if len(para) != 2 :
+            raise FonctionError, 'Erreur de taille dans DEFI_FENE : ' + 'la fenetre exponentielle est definie par exactement deux valeurs'
+         fene=[1.]*int(para[0])+[numpy.exp(para[1]*(i1-int(para[0]-1))*dt) for i1 in range(int(para[0]),l_ech)]
+      elif occ[1]['FENETRE'] == 'PART' :
+         fene=occ[1]['DEFI_FENE']
+         if len(fene) != l_ech :
+            raise FonctionError, 'Erreur de taille dans DEFI_FENE : ' + 'La fenetre doit etre definie avec le meme nombre de points que les echantillons'
+      
+      # normalisation de la fenetre
+      fene=numpy.divide(fene,numpy.sqrt(numpy.sum(numpy.multiply(fene,fene)))).tolist()
+      
+   if len(TRANSFERT)+len(INTERSPE) == 0 : #-- on ne rentre rien : interspectre par defaut - fenetre rectangulaire
+      fene=[1.]*l_ech
+      INTERSPE=1.;
+      
+      
+#--          Recuperation des signaux           --#
+#-- Verifications et transformations de Fourier --#
+#--         Entrees sous formes de table        --#
+      
+   tmp=[];
+   lt=[];
+   frq=[];
+   fft=[];
+   df=[];
+   num_ord=[];
+   num_mes=[]; 
+   
+   
+   if TAB_ECHANT : # Cas TAB_ECHANT
+      num_mes_temp= tab_py['NUME_MES'].values()['NUME_MES']
+      max_mes=numpy.maximum.reduce(num_mes_temp);
+      num_ord_temp= tab_py['NUME_ORDRE_I'].values()['NUME_ORDRE_I']
+      long_fonc=[len(fonc_py[i1].VALE.get()) for i1 in range(len(fonc_py))]
+      
+      N_fen=int(numpy.floor((numpy.minimum.reduce(long_fonc)/2-l_ech)/(l_ech-recouvr))+1)
+
+      sig=[]; 
+      dt=[];    
+      for i1 in range(len(fonc_py)) :
+         vale=fonc_py[i1].VALE.get();
+         temp=(list(vale[0:int(len(vale)/2)]));
+         sig.append(list(vale[int(len(vale)/2):]));
+         test_pas=numpy.subtract(temp[1:],temp[0:-1])
+         crit=test_pas.tolist();
+         crit.sort();
+         dt.append(crit[-1]);
+         if abs((crit[-1]-crit[0])/crit[-1]) > 1.e-5 :
+            raise FonctionError, 'L'+"'"+'echantillonage doit etre fait a pas constant'
+
+      for j1 in range(N_fen) :
+         for i1 in range(len(fonc_py)) :
+            fft.append(FFT.fft(numpy.multiply(sig[i1][j1*(l_ech-recouvr):(j1*(l_ech-recouvr)+l_ech)],fene)))
+            if j1 == 0 : df.append(1./(dt[i1])/l_ech);
+            num_mes.append(num_mes_temp[i1]+max_mes*j1);
+            num_ord.append(num_ord_temp[i1]); 
+
+      if len(df)>1 :
+         test_df=numpy.subtract(df[1:],df[0:-1])
+         test_df=test_df.tolist();
+         test_df.sort();
+         if abs(test_df[-1]) > 1.e-5 :
+            raise FonctionError, 'Toutes les fonctions doivent etre definies ' + 'avec la meme frequence d'+"'"+'echantillonage'
+       
+      frq = [df[-1]*i1 for i1 in range(l_ech)]
+
+
+#--          Recuperation des signaux           --#
+#-- Verifications et transformations de Fourier --#
+#--         Entrees sous formes de fonction     --#
+
+   if ECHANT:
+      for occ in l_f :
+         vale_sig=occ[1]['FONCTION'].Valeurs();
+         #-- pour les tests ulterieurs --#
+         lt.append(len(vale_sig[0]))    
+         if len(vale_sig[0]) != len(vale_sig[1]) :
+            raise FonctionError, 'Les vecteurs associes au temps '+'et aux echantillons doivent etre de meme longueur'      
+         num_mes.append(occ[1]['NUME_MES'])
+         num_ord.append(occ[1]['NUME_ORDRE_I'])
+      
+         tmp.append(vale_sig[0])
+         test_pas=numpy.subtract(vale_sig[0][1:],vale_sig[0][0:-1])
+         crit=test_pas.tolist();
+         crit.sort();
+         if abs((crit[-1]-crit[0])/crit[-1]) > 1.e-5 :
+            raise FonctionError, 'L'+"'"+'echantillonage doit etre fait a pas constant'
+         print "vale_sig[1]= ", len(vale_sig[1]), vale_sig[1]
+         print "  fene = ",len(fene), fene
+         fft.append(FFT.fft(numpy.multiply(vale_sig[1],fene)))
+         df.append(1./(crit[-1])/len(vale_sig[0]));
+      
+      
+      #-- Verification des longueurs --#      
+      
+      test_long=numpy.subtract(lt[1:],lt[0:-1])
+      test_long=test_long.tolist();
+      test_long.sort();
+      if (test_long[-1]-test_long[0]) != 0 :
+         raise FonctionError, 'Toutes les fonctions doivent etre definies avec le meme nombre de points'
+   
+      if len(df) > 1 :
+         test_df=numpy.subtract(df[1:],df[0:-1])
+         test_df=test_df.tolist();
+         test_df.sort();
+         if abs(test_df[-1]) > 1.e-5 :
+             raise FonctionError, 'Toutes les fonctions doivent etre definies '+'avec la meme frequence d'+"'"+'echantillonage'
+       
+      frq = [df[-1]*i1 for i1 in range(lt[-1])]
+   
+   
+#-- index des numeros d'ordre pour le moyennage
+
+   uu=[];
+   vv=[];
+   uu=uu+num_ord;
+   vv=vv+num_ord;
+   uu.sort();
+   ind_ord=[];
+   list_ord=[];
+   while  len(uu) > 0 :
+      list_ord.append(uu[0])
+      tt=[];
+      for i1 in range(uu.count(uu[0])) : 
+         tt.append(vv.index(uu[0]))
+         vv[tt[-1]]=0
+      ind_ord.append(tt)
+      uu=uu[int(uu.count(uu[0])):]  
+   
+#-- Calcul de la matrice inter spectrale
+
+   if len(INTERSPE) != 0 :
+      nb_ord = len(list_ord)
+      dimh   = (nb_ord*(nb_ord+1))/2
+      l_fc=[];
+      nume_i1=[]
+      nume_j1=[]
+      
+      for i1 in range(nb_ord) :
+         for j1 in range(i1,nb_ord) :
+            #-- on ne calcule les spectres que pour des numeros de mesures correspondants
+            #-- Ca n'a a priori pas de sens de calculer l'interspectre entre deux signaux acquis a des instants differents
+            #-- Par contre, on peut moyenner deux interspectres obtenus a des instants differents, sous reserve
+            #-- de stationnarite et d'ergodicite du signal
+            mes_i1=[num_mes[k1] for k1 in ind_ord[i1]]
+            mes_j1=[num_mes[k1] for k1 in ind_ord[j1]]
+            ind_mes=[];
+            #-- recuperation des indices des fft a prendre en compte pour l'interspectre
+            for k1 in range(len(mes_i1)) :
+               if mes_i1[k1] in mes_j1 :
+                  ind_mes.append([ind_ord[i1][k1],
+                                  ind_ord[j1][mes_j1.index(mes_i1[k1])]])
+
+            #-- Calcul des interspectres   
+            dsp=[0.j]*l_ech;
+            if len(ind_mes) > 0 :   
+               for l1 in range(len(ind_mes)) :
+                  dsp_t=numpy.multiply(numpy.conjugate(fft[ind_mes[l1][0]]),fft[ind_mes[l1][1]])
+                  dsp_t=numpy.divide(dsp_t,l_ech*len(ind_mes))
+                  dsp=numpy.add(dsp,dsp_t)
+               dsp=dsp.tolist();
+               dsp_r=[];
+       
+               for k1 in range(int(numpy.floor(l_ech/2))) :
+                  dsp_r=dsp_r+[frq[k1],dsp[k1].real,dsp[k1].imag]
+    
+               _fonc = DEFI_FONCTION(NOM_PARA='FREQ',VALE_C=dsp_r,);
+               l_fc.append(_fonc.nom)
+               nume_i1.append(list_ord[i1])
+               nume_j1.append(list_ord[j1])
+   
+      mcfact=[]
+      mcfact.append(_F(PARA='NOM_CHAM'    ,LISTE_K='DSP'   ,NUME_LIGN=(1,) ))
+      mcfact.append(_F(PARA='OPTION'      ,LISTE_K='TOUT'  ,NUME_LIGN=(1,) ))
+      mcfact.append(_F(PARA='DIMENSION'   ,LISTE_I=(dimh,) ,NUME_LIGN=(1,) ))
+      mcfact.append(_F(PARA='NUME_ORDRE_I',LISTE_I=nume_i1 ,NUME_LIGN=range(2,dimh+2) ))
+      mcfact.append(_F(PARA='NUME_ORDRE_J',LISTE_I=nume_j1 ,NUME_LIGN=range(2,dimh+2) ))
+      mcfact.append(_F(PARA='FONCTION_C'  ,LISTE_K=l_fc    ,NUME_LIGN=range(2,dimh+2)))
+      self.DeclareOut('tab_inte',self.sd)
+      tab_inte=CREA_TABLE(LISTE=mcfact,
+                          TITRE='',
+                          TYPE_TABLE='TABLE_FONCTION')
+      
+            
+      
+
+#-- Calcul des transferts
+
+   if len(TRANSFERT) != 0 :
+      
+      l_fc=[];
+      nume_i1=[]
+      nume_j1=[]
+      
+      #-- test sur les entrees pour les references --#
+      if type(l_H[0][1]['REFER'])==int :
+         refer=[];
+         refer.append(l_H[0][1]['REFER'])
+      elif type(l_H[0][1]['REFER'])==tuple :
+         refer=list(l_H[0][1]['REFER'])
+      ind_refer=[];
+      dimh   = len(refer)*(len(list_ord)-len(refer))
+      for k1 in range(len(refer)) :
+         for l1 in range(len(list_ord)) :
+            if refer[k1] == list_ord[l1] : ind_refer.append(l1);
+
+      #-- H1 : interspectre / autospectre
+      #-- H2 : autospectre / interspectre
+      #-- CO : coherence entre H1 et H2. 
+      
+      if l_H[0][1]['ESTIM']!='HV' :
+         for i1 in range(len(refer)) :
+            for j1 in range(len(list_ord)) : 
+               if refer[i1] != list_ord[j1] :
+                  mes_i1=[num_mes[k1] for k1 in ind_ord[ind_refer[i1]]]  #-- mesures des efforts 
+                  mes_j1=[num_mes[k1] for k1 in ind_ord[j1]]  #-- mesures des reponses
+
+                  ind_mes=[];
+                  #-- recuperation des indices des mesures a predre en compte pour les spectres
+                  for k1 in range(len(mes_i1)) :
+                     if mes_i1[k1] in mes_j1 :
+                        ind_ord[j1][mes_j1.index(mes_i1[k1])]
+                        ind_mes.append([ind_ord[ind_refer[i1]][k1],ind_ord[j1][mes_j1.index(mes_i1[k1])]])
+
+                  #-- Calcul des FRF
+                  Guu=[0.j]*l_ech;
+                  Gyy=[0.j]*l_ech;
+                  Gyu=[0.j]*l_ech;
+                  if len(ind_mes) > 0 :   
+                     for l1 in range(len(ind_mes)) :
+                        Guu_t=numpy.multiply(numpy.conjugate(fft[ind_mes[l1][0]]),fft[ind_mes[l1][0]])
+                        Guu=numpy.add(Guu,Guu_t)
+                        Gyu_t=numpy.multiply(numpy.conjugate(fft[ind_mes[l1][1]]),fft[ind_mes[l1][0]])
+                        Gyu=numpy.add(Gyu,Gyu_t)
+                        Gyy_t=numpy.multiply(numpy.conjugate(fft[ind_mes[l1][1]]),fft[ind_mes[l1][1]])
+                        Gyy=numpy.add(Gyy,Gyy_t)
+
+                     if l_H[0][1]['ESTIM']=='H1' :
+                        frf=numpy.divide(numpy.conjugate(Gyu),Guu);
+                        nom_frf='FRF-H1';
+                     elif l_H[0][1]['ESTIM']=='H2' :
+                        frf=numpy.divide(Gyy,Gyu);
+                        nom_frf='FRF-H2';
+                     elif l_H[0][1]['ESTIM']=='CO' :
+                        H1=numpy.divide(numpy.conjugate(Gyu),Guu);
+                        H2=numpy.divide(Gyy,Gyu);
+                        frf=numpy.divide(H1,H2);
+                        nom_frf='FRF-COH';
+
+                     frf=frf.tolist();
+                     frf_r=[];
+
+                     for k1 in range(int(numpy.floor(l_ech/2))) :
+                        frf_r=frf_r+[frq[k1],frf[k1].real,frf[k1].imag]
+
+                     _fonc = DEFI_FONCTION(NOM_PARA='FREQ',VALE_C=frf_r,);
+                     l_fc.append(_fonc.nom)
+                     nume_i1.append(refer[i1])
+                     nume_j1.append(list_ord[j1])
+
+      #-- On remplit la table_fonction avec tout ce qui va bien 
+      mcfact=[]
+      mcfact.append(_F(PARA='NOM_CHAM'    ,LISTE_K=nom_frf ))
+      mcfact.append(_F(PARA='OPTION'      ,LISTE_K='TOUT'  ))
+      mcfact.append(_F(PARA='DIMENSION'   ,LISTE_I=(dimh,) ))
+      mcfact.append(_F(PARA='NUME_ORDRE_I',LISTE_I=nume_i1 ))
+      mcfact.append(_F(PARA='NUME_ORDRE_J',LISTE_I=nume_j1 ))
+      mcfact.append(_F(PARA='FONCTION_C'  ,LISTE_K=l_fc  ))
+      self.DeclareOut('tab_inte',self.sd)
+      tab_inte=CREA_TABLE(LISTE=mcfact,
+                          TITRE='',
+                          TYPE_TABLE='TABLE_FONCTION')
+
diff --git a/Aster/Cata/cataSTA10/Macro/calc_table_ops.py b/Aster/Cata/cataSTA10/Macro/calc_table_ops.py
new file mode 100644 (file)
index 0000000..842f7c5
--- /dev/null
@@ -0,0 +1,193 @@
+#@ MODIF calc_table_ops Macro  DATE 26/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# RESPONSABLE COURTOIS M.COURTOIS
+
+def calc_table_ops(self, TABLE, ACTION, INFO, **args):
+   """
+   Macro CALC_TABLE permettant de faire des opérations sur une table
+   """
+   import aster
+
+   macro = 'CALC_TABLE'
+   from Accas                 import _F
+   from Cata.cata             import table_sdaster, table_fonction, table_jeveux
+   from Utilitai.Utmess       import  UTMESS
+   from Utilitai              import transpose
+   from Utilitai.Table        import Table, merge
+   from Utilitai.utils        import get_titre_concept
+
+   ier = 0
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+
+   # Le concept sortant (de type table_sdaster ou dérivé) est tabout
+   self.DeclareOut('tabout', self.sd)
+   if self.sd.__class__ == table_fonction:
+      typ_tabout = 'TABLE_FONCTION'
+   else:
+      typ_tabout = 'TABLE'
+
+   # On importe les definitions des commandes a utiliser dans la macro
+   # Le nom de la variable doit etre obligatoirement le nom de la commande
+   CREA_TABLE    = self.get_cmd('CREA_TABLE')
+   DETRUIRE      = self.get_cmd('DETRUIRE')
+
+   # 0. faut-il utiliser une table dérivée
+   form_sens='\n... SENSIBILITE AU PARAMETRE %s (SD COMP %s)'
+   if args['SENSIBILITE']:
+      ncomp = self.jdc.memo_sensi.get_nocomp(TABLE.nom, args['SENSIBILITE'].nom)
+      sdtab = table_jeveux(ncomp)
+      tab = sdtab.EXTR_TABLE()
+   else:
+      tab = TABLE.EXTR_TABLE()
+
+   # Réinitialiser le titre si on n'est pas réentrant
+   if self.reuse is None:
+      tab.titr = get_titre_concept(self.sd)
+
+   #----------------------------------------------
+   # Boucle sur les actions à effectuer
+   for fOP in ACTION:
+      occ = fOP.cree_dict_valeurs(fOP.mc_liste)
+      for mc, val in occ.items():
+         if val == None:
+            del occ[mc]
+   
+      #----------------------------------------------
+      # 1. Traitement du FILTRE
+      # format pour l'impression des filtres
+      form_filtre = '\nFILTRE -> NOM_PARA: %-16s CRIT_COMP: %-4s VALE: %s'
+      if occ['OPERATION'] == 'FILTRE':
+         # peu importe le type, c'est la meme méthode d'appel
+         opts = [occ[k] for k in ('VALE','VALE_I','VALE_C','VALE_K') if occ.has_key(k)]
+         kargs = {}
+         for k in ('CRITERE','PRECISION'):
+            if occ.has_key(k):
+               kargs[k] = occ[k]
+
+         col = getattr(tab, occ['NOM_PARA'])
+         tab = getattr(col, occ['CRIT_COMP'])(*opts,**kargs)
+
+         # trace l'operation dans le titre
+         #if FORMAT in ('TABLEAU','ASTER'):
+         tab.titr += form_filtre % (occ['NOM_PARA'], occ['CRIT_COMP'], \
+            ' '.join([str(v) for v in opts]))
+
+      #----------------------------------------------
+      # 2. Traitement de EXTR
+      if occ['OPERATION'] == 'EXTR':
+         lpar = occ['NOM_PARA']
+         if type(lpar) not in (list, tuple):
+            lpar = [lpar]
+         for p in lpar:
+            if not p in tab.para:
+              UTMESS('F','TABLE0_2',valk=[p,TABLE.nom])
+         tab = tab[occ['NOM_PARA']]
+
+      #----------------------------------------------
+      # 3. Traitement de SUPPRIME
+      if occ['OPERATION'] == 'SUPPRIME':
+         lpar = occ['NOM_PARA']
+         if type(lpar) not in (list, tuple):
+            lpar = [lpar]
+         keep = []
+         for p in tab.para:
+            if not p in lpar:
+              keep.append(p)
+         tab = tab[keep]
+
+      #----------------------------------------------
+      # 4. Traitement de RENOMME
+      if occ['OPERATION'] == 'RENOMME':
+         try:
+            tab.Renomme(*occ['NOM_PARA'])
+         except KeyError, msg:
+            UTMESS('F','TABLE0_3',valk=msg)
+
+      #----------------------------------------------
+      # 5. Traitement du TRI
+      if occ['OPERATION'] == 'TRI':
+         tab.sort(CLES=occ['NOM_PARA'], ORDRE=occ['ORDRE'])
+   
+      #----------------------------------------------
+      # 6. Traitement de COMB
+      if occ['OPERATION'] == 'COMB':
+         tab2 = occ['TABLE'].EXTR_TABLE()
+         lpar = []
+         if occ.get('NOM_PARA') != None:
+            lpar = occ['NOM_PARA']
+            if type(lpar) not in (list, tuple):
+               lpar = [lpar]
+            for p in lpar:
+               if not p in tab.para:
+                  UTMESS('F','TABLE0_2',valk=[p, TABLE.nom])
+               if not p in tab2.para:
+                  UTMESS('F','TABLE0_2',valk=[p,occ['TABLE'].nom] )
+         restrict = occ.get('RESTREINT') == 'OUI'
+         tab = merge(tab, tab2, lpar, restrict=restrict)
+   
+      #----------------------------------------------
+      # 7. Traitement de OPER
+      if occ['OPERATION'] == 'OPER':
+         # ajout de la colonne dans la table
+         tab.fromfunction(occ['NOM_PARA'], occ['FORMULE'])
+         if INFO == 2:
+            vectval = getattr(tab, occ['NOM_PARA']).values()
+            aster.affiche('MESSAGE', 'Ajout de la colonne %s : %s' % (occ['NOM_PARA']+repr(vectval))+'\n')
+
+      #----------------------------------------------
+      # 8. Traitement de AJOUT
+      if occ['OPERATION'] == 'AJOUT':
+         if len(occ['NOM_PARA']) != len(occ['VALE']):
+            UTMESS('F', 'TABLE0_14')
+         dnew = dict(zip(occ['NOM_PARA'], occ['VALE']))
+         # ajout de la ligne avec vérification des types
+         tab.append(dnew)
+   
+   #----------------------------------------------
+   # 99. Création de la table_sdaster résultat
+   # cas réentrant : il faut détruire l'ancienne table_sdaster
+   if self.reuse is not None:
+      DETRUIRE(CONCEPT=_F(NOM=TABLE,), INFO=1)
+
+   dprod = tab.dict_CREA_TABLE()
+   if INFO == 2:
+      echo_mess = []
+      echo_mess.append( '@-'*30+'\n' )
+      echo_mess.append( tab )
+      from pprint import pformat
+      echo_mess.append( pformat(dprod) )
+      echo_mess.append( '@-'*30+'\n' )
+      texte_final = ' '.join(echo_mess)
+      aster.affiche('MESSAGE', texte_final)
+
+   # surcharge par le titre fourni
+   tit = args['TITRE']
+   if tit != None:
+      if type(tit) not in (list, tuple):
+         tit = [tit]
+      dprod['TITRE'] = tuple(['%-80s' % lig for lig in tit])
+   # type de la table de sortie à passer à CREA_TABLE
+   tabout = CREA_TABLE(TYPE_TABLE=typ_tabout,
+                       **dprod)
+   
+   return ier
+
diff --git a/Aster/Cata/cataSTA10/Macro/creation_donnees_homard.py b/Aster/Cata/cataSTA10/Macro/creation_donnees_homard.py
new file mode 100644 (file)
index 0000000..ccc4584
--- /dev/null
@@ -0,0 +1,696 @@
+#@ MODIF creation_donnees_homard Macro  DATE 15/03/2010   AUTEUR GNICOLAS G.NICOLAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                   
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+"""
+Cette classe crée le fichier de configuration permettant de lancer HOMARD
+depuis Code_Aster.
+"""
+__revision__ = "V1.5"
+__all__ = [ ]
+import os
+import os.path
+from types import ListType, TupleType
+EnumTypes = (ListType, TupleType)
+
+try:
+  from Utilitai.Utmess import   UTMESS
+except ImportError:
+  def UTMESS(code, idmess, valk=(), vali=(), valr=()):
+    """Clone de utmess si on ne reussit pas é le charger
+    """
+    fmt = '\n <%s> <%s> %s %s %s\n\n'
+    print fmt % (code, idmess, valk, vali, valr)
+
+# ------------------------------------------------------------------------------
+class creation_donnees_homard:
+  """Cette classe crée les données permettant de lancer HOMARD depuis Code_Aster.
+      Ce sont :
+      . le fichier de configuration
+      . le fichier des données dans le cas d'information
+   
+   Arguments (stockés en tant qu'attribut) :
+      . nom_macro : nom de la macro-commande qui appelle :
+                      'MACR_ADAP_MAIL' pour une adaptation
+                      'MACR_INFO_MAIL' pour une information sur un maillage
+      . mots_cles : mots-clés de la macro-commande
+      . dico_configuration : dictionnaire des options
+
+   Attributs :
+      . Nom_Fichier_Configuration : nom du fichier de configuration (immuable)
+      . Nom_Fichier_Donnees : nom du fichier de données (immuable)
+      . mode_homard : le mode pour filtrer ici ("ADAP" ou "INFO")
+      . mode_homard_texte : le mode d'utilisation, en francais ("ADAPTATION" ou "INFORMATION")
+      . mailles_incompatibles : que faire des mailles incompatibles avec HOMARD
+   """
+# ------------------------------------------------------------------------------
+  def __init__(self, nom_macro, mots_cles, dico_configuration ) :
+    """Construction + valeurs par défaut des attributs
+    """
+#
+# 1. Vérification de la macro qui appelle
+#
+    d_aux = {}
+    d_aux["MACR_ADAP_MAIL"] = ( "ADAP", "ADAPTATION" )
+    d_aux["MACR_INFO_MAIL"] = ( "INFO", "INFORMATION" )
+    if d_aux.has_key(nom_macro) :
+      self.mode_homard = d_aux[nom_macro][0]
+      self.mode_homard_texte = d_aux[nom_macro][1]
+    else :
+      UTMESS("F", 'HOMARD0_1')
+#
+# 2. Données générales de cette initialisation
+#
+#gn    for mot_cle in mots_cles.keys() :
+#gn      print "mots_cles[", mot_cle, "] = ", mots_cles[mot_cle]
+#gn    for mot_cle in dico_configuration.keys() :
+#gn      print "dico_configuration[", mot_cle, "] = ", dico_configuration[mot_cle]
+#
+    self.nom_macro = nom_macro
+    self.mots_cles = mots_cles
+    self.dico_configuration = dico_configuration
+#
+# 3. Quel type de traitement des mailles incompatibles
+#
+    if mots_cles.has_key("ELEMENTS_NON_HOMARD") :
+      d_aux = {}
+      d_aux["REFUSER"] = "TOUS"
+      d_aux["IGNORER"] = "IGNORE_QUAD"
+      self.mailles_incompatibles = d_aux[mots_cles["ELEMENTS_NON_HOMARD"]]
+    else :
+      self.mailles_incompatibles = None
+#
+# 4. Attributs immuables
+#
+    self.Nom_Fichier_Configuration = "HOMARD.Configuration"
+    self.Nom_Fichier_Donnees = "HOMARD.Donnees"
+#
+# ------------------------------------------------------------------------------
+  def int_to_str2 (self, entier) :
+    """
+    Transforme un entier compris entre 0 et 99 en une chaine sur deux caractéres
+    """
+#    print "\nArguments a l'entree de", __name__, ":", entier
+#
+    try:
+      la_chaine = '%02d' % entier
+    except TypeError:
+      la_chaine = None
+#
+    return la_chaine
+# ------------------------------------------------------------------------------
+  def quel_mode (self) :
+    """Informe sur le mode de lancement de HOMARD
+    """
+###    print self.mode_homard_texte
+    print "Lancement de creation_donnees_homard en mode", self.mode_homard_texte
+    return
+# ------------------------------------------------------------------------------
+  def creation_configuration (self) :
+    """Crée les données nécessaires é la configuration
+    """
+#
+    message_erreur = None
+#
+    while message_erreur is None :
+#
+#     1. Les chaines liées aux numéros d'itération
+#
+      if self.mode_homard == "ADAP" :
+        niter = self.dico_configuration["niter"]
+        self.str_niter = self.int_to_str2 (niter)
+        self.str_niterp1 = self.int_to_str2 (niter+1)
+        self.niter_vers_niterp1 = self.str_niter + ".vers." + self.str_niterp1
+#
+#     2. La liste standard
+#
+      if self.mode_homard == "INFO" :
+        aux = "Liste.info"
+      else :
+        aux = "Liste." + self.niter_vers_niterp1
+      self.ListeStd = aux
+#
+#     3. Le mode de pilotage
+#
+      if self.mode_homard == "INFO" :
+        self.ModeHOMA = 2
+        self.Action = "info"
+      else :
+        if self.mots_cles["ADAPTATION"] == "MODIFICATION" :
+          self.ModeHOMA = 3
+          self.Action = "modi"
+          self.ModDegre = "non"
+          self.CreJoint = "non"
+        else :
+          self.ModeHOMA = 1
+          self.Action = "homa"
+        self.TypeRaff = "non"
+        self.TypeDera = "non"
+        self.critere_raffinement = None
+        self.critere_deraffinement = None
+        self.niveau = []
+#
+#     4. Le type de bilan : il faut convertir la donnée textuelle en un entier,
+#        produit de nombres premiers.
+#        Si rien n'est demandé, on met 1.
+#
+      aux = 1
+      dico_aux = {}
+      dico_aux["INTERPENETRATION"] = 3
+      dico_aux["NOMBRE"] = 7
+      dico_aux["QUALITE"] = 5
+      dico_aux["CONNEXITE"] = 11
+      dico_aux["TAILLE"] = 13
+      dico_aux["PROP_CALCUL"] = 17
+      l_aux = dico_aux.keys()
+      for choix in l_aux :
+        if self.mots_cles.has_key(choix) :
+          if self.mots_cles[choix] == "OUI" :
+            aux = aux * dico_aux[choix]
+      if aux == 1 :
+        aux = 0
+      self.TypeBila = aux
+#
+#     5. Les entrées/sorties au format MED
+#
+      self.CCNoMN__ = self.dico_configuration["NOM_MED_MAILLAGE_N"]
+      if self.mode_homard == "ADAP" :
+        self.CCNoMNP1 = self.dico_configuration["NOM_MED_MAILLAGE_NP1"]
+        if self.dico_configuration.has_key("NOM_MED_MAILLAGE_NP1_ANNEXE") :
+          self.CCMaiAnn = self.dico_configuration["NOM_MED_MAILLAGE_NP1_ANNEXE"]
+        else :
+          self.CCMaiAnn = None
+#
+#     6. Les entrées/sorties au format HOMARD
+#
+      if self.mode_homard == "ADAP" :
+        self.fic_homard_niter   = "maill." + self.str_niter   + ".hom.med"
+        self.fic_homard_niterp1 = "maill." + self.str_niterp1 + ".hom.med"
+      else :
+        self.fic_homard_niter   = None
+        self.fic_homard_niterp1 = None
+#
+#     7. Le pilotage de l'adaptation
+#
+      if self.ModeHOMA == 1 :
+#
+#     7.1. Le type d'adaptation
+#
+        if self.mots_cles["ADAPTATION"] == "RAFFINEMENT" or self.mots_cles["ADAPTATION"] == "RAFFINEMENT_ZONE" :
+          self.TypeRaff = "libre"
+          self.TypeDera = "non"
+        elif self.mots_cles["ADAPTATION"] == "DERAFFINEMENT" :
+          self.TypeRaff = "non"
+          self.TypeDera = "libre"
+        elif self.mots_cles["ADAPTATION"] == "RAFF_DERA" :
+          self.TypeRaff = "libre"
+          self.TypeDera = "libre"
+        elif self.mots_cles["ADAPTATION"] == "RAFFINEMENT_UNIFORME" :
+          self.TypeRaff = "uniforme"
+          self.TypeDera = "non"
+        elif self.mots_cles["ADAPTATION"] == "DERAFFINEMENT_UNIFORME" :
+          self.TypeRaff = "non"
+          self.TypeDera = "uniforme"
+        elif self.mots_cles["ADAPTATION"] == "RIEN" :
+          self.TypeRaff = "non"
+          self.TypeDera = "non"
+#gn        print "... self.TypeRaff = ",self.TypeRaff
+#gn        print "... self.TypeDera = ",self.TypeDera
+#
+#     7.2. L'éventuel seuil de raffinement
+#
+        if self.TypeRaff == "libre" and self.mots_cles["ADAPTATION"] != "RAFFINEMENT_ZONE" :
+          d_aux = {}
+          d_aux["CRIT_RAFF_ABS"] = ("SeuilHau",   1)
+          d_aux["CRIT_RAFF_REL"] = ("SeuilHRe", 100)
+          d_aux["CRIT_RAFF_PE" ] = ("SeuilHPE", 100)
+          l_aux = d_aux.keys()
+          for mot_cle in l_aux :
+            if self.mots_cles[mot_cle] is not None :
+              aux = self.mots_cles[mot_cle]*d_aux[mot_cle][1]
+              self.critere_raffinement = (d_aux[mot_cle][0], aux)
+#gn          print "... self.critere_raffinement = ", self.critere_raffinement
+#
+#     7.3. L'éventuel seuil de déraffinement
+#
+        if self.TypeDera == "libre" :
+          d_aux = {}
+          d_aux["CRIT_DERA_ABS"] = ("SeuilBas",   1)
+          d_aux["CRIT_DERA_REL"] = ("SeuilBRe", 100)
+          d_aux["CRIT_DERA_PE" ] = ("SeuilBPE", 100)
+          l_aux = d_aux.keys()
+          for mot_cle in l_aux :
+            if self.mots_cles[mot_cle] is not None :
+              aux = self.mots_cles[mot_cle]*d_aux[mot_cle][1]
+              self.critere_deraffinement = (d_aux[mot_cle][0], aux)
+#gn          print "... self.critere_deraffinement = ", self.critere_deraffinement
+#
+#     7.4. Les niveaux extremes
+#
+        for mot_cle in [ "NIVE_MIN", "NIVE_MAX" ] :
+          if self.mots_cles.has_key(mot_cle) :
+            if self.mots_cles[mot_cle] is not None :
+              if mot_cle == "NIVE_MIN" :
+                aux = "NiveauMi"
+              else :
+                aux = "NiveauMa"
+              self.niveau.append((aux, self.mots_cles[mot_cle]))
+        if len(self.niveau) == 2 :
+#gn          print self.mots_cles["NIVE_MIN"]
+#gn          print self.mots_cles["NIVE_MAX"]
+          if self.mots_cles["NIVE_MIN"] >= self.mots_cles["NIVE_MAX"] :
+            message_erreur = "Le niveau mini ,"+str(self.mots_cles["NIVE_MIN"])+\
+                             ", doit etre < au niveau maxi, "+str(self.mots_cles["NIVE_MAX"])+"."
+            break
+#
+#     7.5. Les éventuelles zones de raffinement
+#
+        if self.dico_configuration.has_key("Zones_raffinement") :
+          iaux = 0
+          for zone in self.dico_configuration["Zones_raffinement"] :
+            iaux = iaux + 1
+            s_aux_1 = "Zone numero "+str(iaux)+" : "
+            s_aux_2 = ", doit etre < au "
+            if zone.has_key("X_MINI") :
+              if zone["X_MINI"] > zone["X_MAXI"] :
+                message_erreur = s_aux_1+"X mini ,"+str(zone["X_MINI"])+s_aux_2+"X maxi, "+str(zone["X_MAXI"])+"."
+              if zone["Y_MINI"] > zone["Y_MAXI"] :
+                message_erreur = s_aux_1+"Y mini ,"+str(zone["Y_MINI"])+s_aux_2+"Y maxi, "+str(zone["Y_MAXI"])+"."
+            if zone.has_key("Z_MINI") :
+              if zone["Z_MINI"] > zone["Z_MAXI"] :
+                message_erreur = s_aux_1+"Z mini ,"+str(zone["Z_MINI"])+s_aux_2+"Z maxi, "+str(zone["Z_MAXI"])+"."
+#
+#     8. Le pilotage de la modification
+#
+      if self.ModeHOMA == 3 :
+        mot_cle = "DEGRE"
+        if self.mots_cles.has_key(mot_cle) :
+          if self.mots_cles[mot_cle] is not None :
+            self.ModDegre = self.mots_cles[mot_cle]
+#
+        mot_cle = "JOINT"
+        if self.mots_cles.has_key(mot_cle) :
+          if self.mots_cles[mot_cle] is not None :
+            self.CreJoint = self.mots_cles[mot_cle]
+#gn        print self.ModDegre, self.CreJoint
+#
+#     9. Options annexes
+#
+      info = self.dico_configuration["INFO"]
+      if ( info == 2 ) :
+        self.MessInfo = 2
+      elif ( info > 2 ) :
+        self.MessInfo = 30
+      else :
+        self.MessInfo = None
+
+#
+      break
+#
+    if message_erreur is not None :
+      UTMESS("F", 'HOMARD0_2', valk=message_erreur)
+#
+    return self.fic_homard_niter, self.fic_homard_niterp1
+# ------------------------------------------------------------------------------
+  def ouvre_fichier (self, nomfic_local) :
+    """Ouvre en écriture un fichier aprés l'avoir éventuellement détruit
+    """
+    codret_partiel = [0]
+###    print nomfic_local
+    Rep_Calc_HOMARD_global = self.dico_configuration["Rep_Calc_HOMARD_global"]
+    nomfic = os.path.join ( Rep_Calc_HOMARD_global , nomfic_local )
+#
+    if os.path.isfile (nomfic) :
+      try :
+        os.remove (nomfic)
+      except os.error, codret_partiel :
+        print "Probleme au remove, erreur numéro ", codret_partiel[0], ":", codret_partiel[1]
+        UTMESS("F", 'HOMARD0_3', valk=nomfic)
+#
+    fichier = open (nomfic,"w")
+    self.fichier = fichier
+#
+    return fichier, nomfic
+# ------------------------------------------------------------------------------
+  def ecrire_ligne_configuration_0 (self, commentaire) :
+    """Ecrit une ligne de commentaires du fichier de configuration
+   Arguments :
+      . commentaire : le commentaire é écrire
+    """
+#
+    ligne = "#\n"
+    ligne = ligne + "# " + commentaire + "\n"
+    ligne = ligne + "#\n"
+    self.fichier.write(ligne)
+#
+    return
+# ------------------------------------------------------------------------------
+  def ecrire_ligne_configuration_1 (self, texte) :
+    """Ecrit une ligne brute du fichier de configuration
+   Arguments :
+      . texte : le texte a ecrire
+    """
+#
+#    print texte
+#    ligne = texte + "\n"
+    ligne = texte
+#    print "==> ",ligne
+    self.fichier.write(ligne)
+#
+    return
+# ------------------------------------------------------------------------------
+  def ecrire_ligne_configuration_2 (self, motcle, valeur) :
+    """Ecrit une ligne du fichier de configuration dans le cas : motcle + valeur
+   Arguments :
+      . motcle : le mot-cle HOMARD a ecrire
+      . valeur : la valeur associee
+    """
+#
+    ligne = motcle + " " + str(valeur) + "\n"
+    self.fichier.write(ligne)
+#
+    return
+# ------------------------------------------------------------------------------
+  def ecrire_ligne_configuration_3 (self, motcle, valeur1, valeur2) :
+    """Ecrit une ligne du fichier de configuration dans le cas : motcle + valeur1 + valeur2
+   Arguments :
+      . motcle : le mot-cle HOMARD a ecrire
+      . valeur : la valeur associee
+    """
+#
+    ligne = motcle + " " + str(valeur1) + " " + str(valeur2) + "\n"
+    self.fichier.write(ligne)
+#
+    return
+# ------------------------------------------------------------------------------
+  def ecrire_fichier_configuration (self) :
+    """Ecrit le fichier de configuration
+    """
+    message_erreur = None
+#
+    while message_erreur is None :
+#
+#     1. Ouverture du fichier
+#
+      fichier, nomfic_global = self.ouvre_fichier(self.Nom_Fichier_Configuration)
+#
+#     2. Généralités
+#
+      self.ecrire_ligne_configuration_0("Generalites")
+      self.ecrire_ligne_configuration_2("ModeHOMA", self.ModeHOMA)
+      self.ecrire_ligne_configuration_2("Action", self.Action)
+      self.ecrire_ligne_configuration_2("ListeStd", self.ListeStd)
+      self.ecrire_ligne_configuration_2("TypeBila", self.TypeBila)
+      self.ecrire_ligne_configuration_2("CCAssoci", "MED")
+      self.ecrire_ligne_configuration_2("NumeIter", self.dico_configuration["niter"])
+#
+#     3. Les fichiers externes
+#
+      self.ecrire_ligne_configuration_0("Les fichiers de Code_Aster, au format MED")
+      self.ecrire_ligne_configuration_2("CCNoMN__", self.CCNoMN__)
+      self.ecrire_ligne_configuration_2("CCMaiN__", self.dico_configuration["Fichier_ASTER_vers_HOMARD"])
+      if self.mode_homard == "ADAP" :
+        self.ecrire_ligne_configuration_2("CCNoMNP1", self.CCNoMNP1)
+        self.ecrire_ligne_configuration_2("CCMaiNP1", self.dico_configuration["Fichier_HOMARD_vers_ASTER"])
+#
+      self.ecrire_ligne_configuration_0("Le répertoire des fichiers de bilan")
+      self.ecrire_ligne_configuration_2("RepeInfo", self.dico_configuration["Rep_Calc_HOMARD_global"])
+#
+#     4. Les fichiers HOMARD
+#
+      self.ecrire_ligne_configuration_0("Les fichiers de HOMARD, au format MED")
+      if self.mode_homard == "ADAP" :
+        self.ecrire_ligne_configuration_3("HOMaiN__", "M_"+self.str_niter  , self.fic_homard_niter )
+        self.ecrire_ligne_configuration_3("HOMaiNP1", "M_"+self.str_niterp1, self.fic_homard_niterp1)
+        aux = "oui"
+      else :
+        aux = "non"
+      self.ecrire_ligne_configuration_2("EcriFiHO", aux)
+#
+#     5. Le pilotage de l'adaptation
+#
+      if self.mode_homard == "ADAP" :
+#
+        self.ecrire_ligne_configuration_0("Le pilotage de l'adaptation")
+#
+#     5.1. Type d'adaptation
+#
+        self.ecrire_ligne_configuration_2("TypeRaff", self.TypeRaff)
+        if self.critere_raffinement is not None :
+          self.ecrire_ligne_configuration_2(self.critere_raffinement[0], self.critere_raffinement[1])
+        self.ecrire_ligne_configuration_2("TypeDera", self.TypeDera)
+        if self.critere_deraffinement is not None :
+          self.ecrire_ligne_configuration_2(self.critere_deraffinement[0], self.critere_deraffinement[1])
+#
+#     5.2. L'eventuel indicateur d'erreur
+#
+        if self.dico_configuration.has_key("Indicateur") :
+#
+          self.ecrire_ligne_configuration_0("L'indicateur d'erreur")
+          self.ecrire_ligne_configuration_2("CCIndica", self.dico_configuration["Fichier_ASTER_vers_HOMARD"])
+          self.ecrire_ligne_configuration_2("CCNoChaI", self.dico_configuration["Indicateur"]["NOM_MED"])
+          for saux in self.dico_configuration["Indicateur"]["COMPOSANTE"] :
+            self.ecrire_ligne_configuration_2("CCCoChaI", saux)
+          if self.dico_configuration["Indicateur"].has_key("NUME_ORDRE") :
+            self.ecrire_ligne_configuration_2("CCNumOrI", self.dico_configuration["Indicateur"]["NUME_ORDRE"])
+            self.ecrire_ligne_configuration_2("CCNumPTI", self.dico_configuration["Indicateur"]["NUME_ORDRE"])
+          if self.mots_cles.has_key("TYPE_VALEUR_INDICA") :
+            self.ecrire_ligne_configuration_2("CCUsCmpI", self.mots_cles["TYPE_VALEUR_INDICA"])
+#
+#     5.3. Les éventuelles zones de raffinement
+#
+        if self.dico_configuration.has_key("Zones_raffinement") :
+          dico_zone = {}
+          dico_zone["X_MINI"] = "ZoRaXmin"
+          dico_zone["X_MAXI"] = "ZoRaXmax"
+          dico_zone["Y_MINI"] = "ZoRaYmin"
+          dico_zone["Y_MAXI"] = "ZoRaYmax"
+          dico_zone["Z_MINI"] = "ZoRaZmin"
+          dico_zone["Z_MAXI"] = "ZoRaZmax"
+          dico_zone["X_CENTRE"] = "ZoRaXCen"
+          dico_zone["Y_CENTRE"] = "ZoRaYCen"
+          dico_zone["Z_CENTRE"] = "ZoRaZCen"
+          dico_zone["RAYON"] = "ZoRaRayo"
+          dico_zone["RAYON_INT"] = "ZoRaRayI"
+          dico_zone["RAYON_EXT"] = "ZoRaRayE"
+          dico_zone["X_AXE"] = "ZoRaXAxe"
+          dico_zone["Y_AXE"] = "ZoRaYAxe"
+          dico_zone["Z_AXE"] = "ZoRaZAxe"
+          dico_zone["X_BASE"] = "ZoRaXBas"
+          dico_zone["Y_BASE"] = "ZoRaYBas"
+          dico_zone["Z_BASE"] = "ZoRaZBas"
+          dico_zone["HAUTEUR"] = "ZoRaHaut"
+          l_aux = dico_zone.keys()
+          dico_zone["TYPE"] = "ZoRaType"
+          dico_zone["RECTANGLE"] = 1
+          dico_zone["BOITE"] = 2
+          dico_zone["DISQUE"] = 3
+          dico_zone["SPHERE"] = 4
+          dico_zone["CYLINDRE"] = 5
+          dico_zone["DISQUE_PERCE"] = 6
+          dico_zone["TUYAU"] = 7
+          iaux = 0
+          for zone in self.dico_configuration["Zones_raffinement"] :
+            iaux = iaux + 1
+            self.ecrire_ligne_configuration_0("Zone de raffinement numéro "+str(iaux))
+            jaux = dico_zone[zone["TYPE"]]
+            self.ecrire_ligne_configuration_3(dico_zone["TYPE"], iaux, jaux)
+            for aux in l_aux :
+              if zone.has_key(aux) :
+                self.ecrire_ligne_configuration_3(dico_zone[aux], iaux, zone[aux])
+#
+#     5.4. Les niveaux extremes
+#
+        for aux in self.niveau :
+          self.ecrire_ligne_configuration_2(aux[0], aux[1])
+#
+#     5.5. L'usage de l'indicateur
+#
+        if self.mots_cles.has_key("TYPE_OPER_INDICA") :
+          if self.mots_cles["TYPE_OPER_INDICA"] is not None :
+            self.ecrire_ligne_configuration_2("CCModeFI", self.mots_cles["TYPE_OPER_INDICA"])
+#
+#     5.6. Les éventuels groupes de filtrage du raffinement/deraffinement
+#
+        for cle in ( "GROUP_MA", "GROUP_NO" ) :
+          if self.mots_cles.has_key(cle) :
+            if self.mots_cles[cle] is not None :
+              if not type(self.mots_cles[cle]) in EnumTypes :
+                self.ecrire_ligne_configuration_2("CCGroAda", self.mots_cles[cle])
+              else :
+                for group in self.mots_cles[cle] :
+                  self.ecrire_ligne_configuration_2("CCGroAda", group)
+#
+#     5.7. Les modifications
+#
+        if self.ModeHOMA == 3 :
+          self.ecrire_ligne_configuration_2("ModDegre", self.ModDegre)
+          self.ecrire_ligne_configuration_2("CreJoint", self.CreJoint)
+#
+#     5.8. L'éventuel maillage annexe
+#
+        if self.CCMaiAnn is not None :
+          self.ecrire_ligne_configuration_0("Maillage d'autre degré")
+          self.ecrire_ligne_configuration_2("ModDegre", "oui")
+          self.ecrire_ligne_configuration_2("CCNoMAnn", self.CCMaiAnn)
+          self.ecrire_ligne_configuration_2("CCMaiAnn", self.dico_configuration["Fichier_HOMARD_vers_ASTER"])
+#
+#     6. Les éventuels champs à mettre à jour
+#
+      if self.dico_configuration.has_key("Champs") :
+        self.ecrire_ligne_configuration_0("Champs à mettre à jour")
+        self.ecrire_ligne_configuration_2("CCSolN__", self.dico_configuration["Fichier_ASTER_vers_HOMARD"])
+        self.ecrire_ligne_configuration_2("CCSolNP1", self.dico_configuration["Fichier_HOMARD_vers_ASTER"])
+        iaux = 0
+        for maj_champ in self.dico_configuration["Champs"] :
+          iaux = iaux + 1
+          self.ecrire_ligne_configuration_0("Mise à jour du champ numéro "+str(iaux))
+          self.ecrire_ligne_configuration_3("CCChaNom", iaux, maj_champ["NOM_MED"])
+          if maj_champ.has_key("NUME_ORDRE") :
+            self.ecrire_ligne_configuration_3("CCChaNuO", iaux, maj_champ["NUME_ORDRE"])
+            self.ecrire_ligne_configuration_3("CCChaPdT", iaux, maj_champ["NUME_ORDRE"])
+          elif maj_champ.has_key("INST") :
+            self.ecrire_ligne_configuration_3("CCChaIns", iaux, maj_champ["INST"])
+#
+#     7. L'éventuel suivi de frontière
+#
+      SuivFron = 1
+#
+#     7.1. A partir d'un maillage de la frontière
+#
+      if self.dico_configuration.has_key("NOM_MED_MAILLAGE_FRONTIERE") :
+        SuivFron = SuivFron * 2
+        self.ecrire_ligne_configuration_0("Maillage de frontière")
+        self.ecrire_ligne_configuration_2("CCFronti", self.dico_configuration["Fichier_ASTER_vers_HOMARD"])
+        self.ecrire_ligne_configuration_2("CCNoMFro", self.dico_configuration["NOM_MED_MAILLAGE_FRONTIERE"])
+        if self.mots_cles.has_key("GROUP_MA_FRONT") :
+          if self.mots_cles["GROUP_MA_FRONT"] is not None :
+            if not type(self.mots_cles["GROUP_MA_FRONT"]) in EnumTypes :
+              self.ecrire_ligne_configuration_2("CCGroFro", self.mots_cles["GROUP_MA_FRONT"])
+            else :
+              for group_ma in self.mots_cles["GROUP_MA_FRONT"] :
+                self.ecrire_ligne_configuration_2("CCGroFro", group_ma)
+#
+#     7.2. A partir d'une definition analytique
+#
+      if self.dico_configuration.has_key("Frontiere_analytique") :
+        SuivFron = SuivFron * 3
+        dico_frontiere = {}
+        dico_frontiere["RAYON"] = "FARayon"
+        dico_frontiere["X_CENTRE"] = "FAXCen"
+        dico_frontiere["Y_CENTRE"] = "FAYCen"
+        dico_frontiere["Z_CENTRE"] = "FAZCen"
+        dico_frontiere["X_AXE"] = "FAXAxe"
+        dico_frontiere["Y_AXE"] = "FAYAxe"
+        dico_frontiere["Z_AXE"] = "FAZAxe"
+        l_aux = dico_frontiere.keys()
+        dico_frontiere["GROUP_MA"] = "FAGroupe"
+        dico_frontiere["TYPE"] = "FAType"
+        dico_frontiere["CYLINDRE"] = 1
+        dico_frontiere["SPHERE"] = 2
+        iaux = 0
+        for frontiere in self.dico_configuration["Frontiere_analytique"] :
+          if not type(frontiere["GROUP_MA"]) in EnumTypes :
+            lt_aux = [ frontiere["GROUP_MA"] ]
+          else :
+            lt_aux = frontiere["GROUP_MA"]
+          for group_ma in lt_aux :
+            iaux = iaux + 1
+            self.ecrire_ligne_configuration_0("Description de la frontiere analytique numero "+str(iaux))
+            jaux = dico_frontiere[frontiere["TYPE"]]
+            self.ecrire_ligne_configuration_3(dico_frontiere["TYPE"], iaux, jaux)
+            self.ecrire_ligne_configuration_3(dico_frontiere["GROUP_MA"], iaux, group_ma)
+            for aux in l_aux :
+              if frontiere.has_key(aux) :
+                self.ecrire_ligne_configuration_3(dico_frontiere[aux], iaux, frontiere[aux])
+#
+#     7.3. Activation de la fonction
+#
+      if ( self.dico_configuration.has_key("NOM_MED_MAILLAGE_FRONTIERE") or self.dico_configuration.has_key("Frontiere_analytique") ) :
+        self.ecrire_ligne_configuration_2("SuivFron", SuivFron)
+#
+#     8. Options particuliéres
+#
+      self.ecrire_ligne_configuration_0("Autres options")
+      if self.mots_cles.has_key("LANGUE") :
+        self.ecrire_ligne_configuration_2("Langue", self.mots_cles["LANGUE"])
+      if self.MessInfo is not None :
+        self.ecrire_ligne_configuration_2("MessInfo", self.MessInfo)
+      if self.dico_configuration["version_perso"] :
+        VERSION_HOMARD = self.dico_configuration["VERSION_HOMARD"]
+        self.ecrire_ligne_configuration_2("DicoOSGM", "$HOMARD_USER/"+VERSION_HOMARD+"/CONFIG/typobj.stu")
+#
+#     9. L'usage des mailles incompatibles avec HOMARD
+#
+      if self.mailles_incompatibles is not None :
+        self.ecrire_ligne_configuration_0("Les mailles incompatibles avec HOMARD")
+        self.ecrire_ligne_configuration_2("TypeElem", self.mailles_incompatibles)
+#
+#     10. L'éventuel complement
+#
+      if self.dico_configuration.has_key("fichier_conf_suppl") :
+        nomfic = self.dico_configuration["fichier_conf_suppl"]
+#        print nomfic
+        if os.path.isfile(nomfic) :
+          fichier_bis = open (nomfic, "r")
+          les_lignes = fichier_bis.readlines()
+          fichier_bis.close()
+#          print les_lignes
+          for ligne in les_lignes :
+            self.ecrire_ligne_configuration_1(ligne)
+#
+#     11. Fermeture du fichier
+#
+      fichier.close()
+      break
+#
+    if message_erreur is not None :
+      message_erreur = "Ecriture de "+nomfic_global+". "+message_erreur
+      UTMESS("F", 'HOMARD0_2', valk=message_erreur)
+#
+    return
+# ------------------------------------------------------------------------------
+  def ecrire_fichier_donnees (self) :
+    """Ecrit le fichier des donnees dans le cas d'une demande d'information
+    """
+    message_erreur = None
+#
+    while message_erreur is None :
+#
+#     1. Ouverture du fichier
+#
+      fichier, nomfic_global = self.ouvre_fichier(self.Nom_Fichier_Donnees)
+#
+#     2. On ne demande rien pour le moment
+#
+      fichier.write("0\n")
+      fichier.write("0\n")
+      fichier.write("0\n")
+      fichier.write("q\n")
+#
+#     n. Fermeture du fichier
+#
+      fichier.close()
+      break
+#
+    if message_erreur is not None :
+      UTMESS("F", 'HOMARD0_2', valk=message_erreur)
+#
+    return nomfic_global
diff --git a/Aster/Cata/cataSTA10/Macro/defi_cable_bp_ops.py b/Aster/Cata/cataSTA10/Macro/defi_cable_bp_ops.py
new file mode 100644 (file)
index 0000000..ae1cc57
--- /dev/null
@@ -0,0 +1,288 @@
+#@ MODIF defi_cable_bp_ops Macro  DATE 06/07/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+# ===========================================================================
+#           CORPS DE LA MACRO "DEFI_CABLE_BP"
+#           -------------------------------------
+# USAGE :
+# Entrée :
+#  - MODELE
+#  - CABLE
+#  - CHAM_MATER
+#  - CARA_ELEM
+#  - GROUP_MA_BETON
+#  - DEFI_CABLE
+#  - TYPE_ANCRAGE
+#  - TENSION_INIT
+#  - RECUL_ANCRAGE
+#  - RELAXATION
+#  - CONE
+#      RAYON
+#      LONGUEUR
+#      PRESENT          OUI ou NON deux fois
+#  - TITRE
+#  - INFO               1 / 2
+#
+# ===========================================================================
+
+
+
+def defi_cable_bp_ops(self,MODELE,CHAM_MATER,CARA_ELEM,GROUP_MA_BETON,
+                           DEFI_CABLE,TYPE_ANCRAGE,TENSION_INIT,RECUL_ANCRAGE,
+                           RELAXATION,CONE,TITRE,INFO,**args):
+
+  """
+     Ecriture de la macro DEFI_CABLE_BP
+  """
+  from Accas import _F
+  import aster,string, types
+  from Utilitai.Utmess import UTMESS
+  ier=0
+
+  # On importe les definitions des commandes a utiliser dans la macro
+  DEFI_GROUP      = self.get_cmd('DEFI_GROUP')
+  IMPR_RESU       = self.get_cmd('IMPR_RESU')
+  DEFI_CABLE_OP   = self.get_cmd('DEFI_CABLE_OP')
+
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  # Le concept sortant (de type char_meca) est nomme CHCABLE dans
+  # le contexte de la macro
+
+  self.DeclareOut('__DC',self.sd)
+
+  # ---------------------------------------------------------------------------- #
+  #                  Début de la Macro :
+
+  motscles={}
+
+  # RECUPERATION DES INFOS DONNEES PAR LE MOT-CLE "CONE"
+
+  if CONE:
+    dCONE=CONE[0].cree_dict_valeurs(CONE[0].mc_liste)
+    for i in dCONE.keys():
+      if dCONE[i]==None : del dCONE[i]
+
+    RAYON    = dCONE['RAYON']
+    LONGUEUR = dCONE['LONGUEUR']
+
+    motscles['CONE']=[]
+    motscles['CONE'].append( dCONE )
+
+    # RECUPERATION DU MAILLAGE A PARTIR DU MODELE
+    __MAIL = aster.getvectjev( string.ljust(MODELE.nom,8) + '.MODELE    .LGRF        ' )
+    __MAIL= __MAIL[0].strip()
+    MAILLAGE = self.get_sd_avant_etape(__MAIL,self)
+
+    # DEFINITION DU NOM DES GROUP_NO
+    __NOM = 'AN__'
+    __LGNO = MAILLAGE.LIST_GROUP_NO()
+    __LGN1 = []
+    for i in __LGNO :
+      __LGN1.append( i[0][:len(__NOM)] )
+
+    __NB  = __LGN1.count(__NOM)
+
+# FIN RECUPERATION DES INFOS DONNEES PAR LE MOT-CLE "CONE"
+
+
+  # RECUPERATION DES INFOS DONNEES PAR LE MOT-CLE "DEFI_CABLE"
+
+  dDEFI_CABLE=[]
+  for j in DEFI_CABLE :
+      dDEFI_CABLE.append(j.cree_dict_valeurs(j.mc_liste))
+      for i in dDEFI_CABLE[-1].keys():
+          if dDEFI_CABLE[-1][i]==None : del dDEFI_CABLE[-1][i]
+
+
+  # BOUCLE SUR LES FACTEURS DU MOT-CLE "DEFI_CABLE"
+
+  motscles['DEFI_CABLE']=[]
+
+  for i in dDEFI_CABLE:
+
+    # CAS OU L'ON A DEFINI LE MOT-CLE "CONE"
+    if CONE:
+
+      # CREATION DU PREMIER TUNNEL
+
+      if dCONE['PRESENT'][0] == 'OUI':
+        __NB = __NB + 1
+        __NOM1 = __NOM + str( int(__NB) )
+
+        motscle2={}
+        motscle2['CREA_GROUP_NO']=[]
+
+        if i.has_key('GROUP_MA') == 1:
+          __CAB = i['GROUP_MA']
+
+          if type(GROUP_MA_BETON) in [types.TupleType, types.ListType]: gma = list(GROUP_MA_BETON)
+          else:                                                         gma = [ GROUP_MA_BETON ]
+          gma.insert(0, __CAB)
+
+          motscle2= {'CREA_GROUP_NO': [{'LONGUEUR': LONGUEUR, 'RAYON': RAYON, 'OPTION': 'TUNNEL', 'GROUP_MA': gma, 'GROUP_MA_AXE': __CAB, 'NOM': __NOM1}]}
+        if i.has_key('MAILLE') == 1:
+          UTMESS('F','CABLE0_2')
+        if i.has_key('GROUP_NO_ANCRAGE') == 1:
+          __PC1 = i['GROUP_NO_ANCRAGE'][0]
+          motscle2['CREA_GROUP_NO'][0]['GROUP_NO_ORIG'] = __PC1
+        if i.has_key('NOEUD_ANCRAGE') == 1:
+          __PC1 = i['NOEUD_ANCRAGE'][0]
+          motscle2['CREA_GROUP_NO'][0]['NOEUD_ORIG'] = __PC1
+
+        DEFI_GROUP( reuse=MAILLAGE,
+                    MAILLAGE=MAILLAGE,
+                    INFO=INFO,
+                    ALARME='NON',
+                    **motscle2
+                   ) ;
+
+      # CREATION DU DEUXIEME TUNNEL
+
+      if dCONE['PRESENT'][1] == 'OUI':
+        __NB = __NB + 1
+        __NOM2 = __NOM + str( int(__NB) )
+
+        motscle2={}
+        motscle2['CREA_GROUP_NO']=[]
+
+        if i.has_key('GROUP_MA') == 1:
+          __CAB = i['GROUP_MA']
+
+          if type(GROUP_MA_BETON) in [types.TupleType, types.ListType]: gma = list(GROUP_MA_BETON)
+          else:                                                         gma = [ GROUP_MA_BETON ]
+          gma.insert(0, __CAB)
+
+          motscle2= {'CREA_GROUP_NO': [{'LONGUEUR': LONGUEUR, 'RAYON': RAYON, 'OPTION': 'TUNNEL', 'GROUP_MA': gma, 'GROUP_MA_AXE': __CAB, 'NOM': __NOM2}]}
+        if i.has_key('MAILLE') == 1:
+          UTMESS('F','CABLE0_2')
+        if i.has_key('GROUP_NO_ANCRAGE') == 1:
+          __PC1 = i['GROUP_NO_ANCRAGE'][1]
+          motscle2['CREA_GROUP_NO'][0]['GROUP_NO_ORIG'] = __PC1
+        if i.has_key('NOEUD_ANCRAGE') == 1:
+          __PC1 = i['NOEUD_ANCRAGE'][1]
+          motscle2['CREA_GROUP_NO'][0]['NOEUD_ORIG'] = __PC1
+
+        DEFI_GROUP( reuse=MAILLAGE,
+                    MAILLAGE=MAILLAGE,
+                    INFO=INFO,
+                    ALARME='NON',
+                    **motscle2
+                   ) ;
+
+
+      # CREATION DES NOUVEAUX FACTEURS DU MOT-CLE "DEFI_CABLE" POUR DEFI_CABLE_BP
+
+      if dCONE['PRESENT'][0] == 'OUI' and dCONE['PRESENT'][1] == 'OUI':
+        if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
+          motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+                                            GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'],
+                                            GROUP_NO_FUT=( __NOM1,__NOM2, ), ), )
+        if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
+          motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+                                            NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'],
+                                            GROUP_NO_FUT=( __NOM1,__NOM2, ), ), )
+
+      if dCONE['PRESENT'][0] == 'OUI' and dCONE['PRESENT'][1] == 'NON':
+        if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
+          motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+                                            GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'],
+                                            GROUP_NO_FUT=( __NOM1, ), ), )
+        if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
+          motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+                                            NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'],
+                                            GROUP_NO_FUT=( __NOM1, ), ), )
+
+      if dCONE['PRESENT'][0] == 'NON' and dCONE['PRESENT'][1] == 'OUI':
+        if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
+          motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+                                            GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'],
+                                            GROUP_NO_FUT=( __NOM2, ), ), )
+        if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
+          motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+                                            NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'],
+                                            GROUP_NO_FUT=( __NOM2, ), ), )
+
+      if dCONE['PRESENT'][0] == 'NON' and dCONE['PRESENT'][1] == 'NON':
+        if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
+          motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+                                            GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'], ), )
+        if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
+          motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+                                            NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'], ), )
+
+
+    # CAS OU L'ON A PAS DEFINI LE MOT-CLE "CONE"
+    else:
+      if i.has_key('GROUP_MA') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
+        motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+                                          GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'], ), )
+
+      if i.has_key('GROUP_MA') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
+        motscles['DEFI_CABLE'].append( _F(GROUP_MA=i['GROUP_MA'],
+                                          NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'], ), )
+
+      if i.has_key('MAILLE') == 1 and i.has_key('GROUP_NO_ANCRAGE') == 1:
+        motscles['DEFI_CABLE'].append( _F(MAILLE=i['MAILLE'],
+                                          GROUP_NO_ANCRAGE=i['GROUP_NO_ANCRAGE'], ), )
+
+      if i.has_key('MAILLE') == 1 and i.has_key('NOEUD_ANCRAGE') == 1:
+        motscles['DEFI_CABLE'].append( _F(MAILLE=i['MAILLE'],
+                                          NOEUD_ANCRAGE=i['NOEUD_ANCRAGE'], ), )
+
+
+# FIN BOUCLE sur i in DEFI_CABLE
+
+
+  # LANCEMENT DE DEFI_CABLE_BP
+
+  if RELAXATION:
+    dRelaxation=RELAXATION[0].cree_dict_valeurs(RELAXATION[0].mc_liste)
+    for i in dRelaxation.keys():
+      if dRelaxation[i]==None : del dRelaxation[i]
+
+    __DC=DEFI_CABLE_OP(MODELE=MODELE,
+                       CHAM_MATER=CHAM_MATER,
+                       CARA_ELEM=CARA_ELEM,
+                       GROUP_MA_BETON=GROUP_MA_BETON,
+                       TYPE_ANCRAGE=TYPE_ANCRAGE,
+                       TENSION_INIT=TENSION_INIT,
+                       RECUL_ANCRAGE=RECUL_ANCRAGE,
+                       RELAXATION=dRelaxation,
+                       INFO=INFO,
+                       **motscles
+                       );
+
+  else:
+
+    __DC=DEFI_CABLE_OP(MODELE=MODELE,
+                       CHAM_MATER=CHAM_MATER,
+                       CARA_ELEM=CARA_ELEM,
+                       GROUP_MA_BETON=GROUP_MA_BETON,
+                       TYPE_ANCRAGE=TYPE_ANCRAGE,
+                       TENSION_INIT=TENSION_INIT,
+                       RECUL_ANCRAGE=RECUL_ANCRAGE,
+                       INFO=INFO,
+                       **motscles
+                       );
+
+  return ier
diff --git a/Aster/Cata/cataSTA10/Macro/defi_fonc_elec_ops.py b/Aster/Cata/cataSTA10/Macro/defi_fonc_elec_ops.py
new file mode 100644 (file)
index 0000000..0560d32
--- /dev/null
@@ -0,0 +1,192 @@
+#@ MODIF defi_fonc_elec_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from math import cos,exp,pi
+
+def FcompletGR1(T,I1,I2,FR,TR,PHI1,PHI2,TAU1,TAU2) :
+    fxt= 4.E-7 * I1 * I2
+    fxt= fxt * (cos(2*pi*FR*(T-TR)+PHI1*pi/180.)-exp(-(T-TR)/TAU1)*cos(PHI1*pi/180.))
+    fxt= fxt * (cos(2*pi*FR*(T-TR)+PHI2*pi/180.)-exp(-(T-TR)/TAU2)*cos(PHI2*pi/180.))
+    return fxt
+
+def FcontinuGR1(T,I1,I2,TR,PHI1,PHI2,TAU1,TAU2) :
+    ft1= exp(-(T-TR)*(1./TAU1+1./TAU2))
+    ft1= ft1*cos(PHI1*pi/180.)*cos(PHI2*pi/180.)
+    ft1= ft1+0.5*cos(PHI2*pi/180.-PHI1*pi/180.)
+    fxt= 4.E-7 * I1 * I2 * ft1
+    return fxt
+
+def FcompletGR2(T,I1,I2,FR,TR,PHI1,PHI2,TAU1,TAU2,D) :
+    fxt= 4.E-7 * I1 * I2 / D
+    fxt= fxt * (cos(2*pi*FR*(T-TR)+PHI1*pi/180.)-exp(-(T-TR)/TAU1)*cos(PHI1*pi/180.))
+    fxt= fxt * (cos(2*pi*FR*(T-TR)+PHI2*pi/180.)-exp(-(T-TR)/TAU2)*cos(PHI2*pi/180.))
+    return fxt
+
+def FcontinuGR2(T,I1,I2,TR,PHI1,PHI2,TAU1,TAU2,D) :
+    ft1= exp(-(T-TR)*(1./TAU1+1./TAU2))
+    ft1= ft1*cos(PHI1*pi/180.)*cos(PHI2*pi/180.)
+    ft1= ft1+0.5*cos(PHI2*pi/180.-PHI1*pi/180.)
+    fxt= 4.E-7 * I1 * I2 * ft1 / D
+    return fxt
+
+## fonction post réenclenchement, valable entre l'instant de réenclenchement et l'instant de fin de réenclenchement. Sinon 0.
+def FcompletGR2R(T,I1R,I2R,FR,TRR,PHIR1,PHI2R,TAU1R,TAU2R,D) :
+    fxt= 4.E-7 * I1R * I2R / D
+    fxt= fxt * (cos(2*pi*FR*(T-TRR)+PHI1R*pi/180.)-exp(-(T-TRR)/TAU1R)*cos(PHI1R*pi/180.))
+    fxt= fxt * (cos(2*pi*FR*(T-TRR)+PHI2R*pi/180.)-exp(-(T-TRR)/TAU2R)*cos(PHI2R*pi/180.))
+    return fxt
+
+## fonction post réenclenchement, valable entre l'instant de réenclenchement et l'instant de fin de réenclenchement. Sinon 0.
+def FcontinuGR2R(T,I1R,I2R,TRR,PHI1R,PHI2R,TAU1R,TAU2R,D) :
+    ft1= exp(-(T-TRR)*(1./TAU1R+1./TAU2R))
+    ft1= ft1*cos(PHI1R*pi/180.)*cos(PHI2R*pi/180.)
+    ft1= ft1+0.5*cos(PHI2R*pi/180.-PHI1R*pi/180.)
+    fxt= 4.E-7 * I1R * I2R * ft1 / D
+    return fxt
+
+
+
+def defi_fonc_elec_ops(self,FREQ,SIGNAL,COUR,COUR_PRIN,COUR_SECO,**args):
+        ier=0
+        from Utilitai.Utmess     import  UTMESS
+        import numpy
+
+        # On importe les definitions des commandes a utiliser dans la macro
+        # Le nom de la variable doit etre obligatoirement le nom de la commande
+        DEFI_FONCTION     =self.get_cmd('DEFI_FONCTION')
+        FORMULE           =self.get_cmd('FORMULE')
+        CALC_FONC_INTERP  =self.get_cmd('CALC_FONC_INTERP')
+
+        ### Comptage commandes + déclaration concept sortant
+        self.set_icmd(1)
+        self.DeclareOut('C_out',self.sd)
+#
+        if COUR : 
+                TINI =COUR[ 0]['INST_CC_INIT']
+                TFIN =COUR[-1]['INST_CC_FIN']
+                pas_t=1./(40.*FREQ)
+#
+                temps   = []
+                fff     = []
+#
+                T2moins = COUR[0]['INST_CC_FIN']
+                TR      = COUR[0]['INST_CC_INIT']
+                premier = 1
+                for k_cour in COUR :
+                        I1   = k_cour['INTE_CC_1']
+                        I2   = k_cour['INTE_CC_2']
+                        PHI1 = k_cour['PHI_CC_1']
+                        PHI2 = k_cour['PHI_CC_2']
+                        TAU1 = k_cour['TAU_CC_1']
+                        TAU2 = k_cour['TAU_CC_2']
+                        T1   = k_cour['INST_CC_INIT']
+                        T2   = k_cour['INST_CC_FIN']
+                        if (abs(T1-T2moins)<1.E-7) : pass
+                        elif (premier==1)          : pass
+                        else :
+                                TR=T1
+                                temps.append(T2moins)
+                                fff.append(0.)
+                                T2moins=T2
+                        premier=0
+                        t_k_cour=numpy.arange((T2-T1)/pas_t)
+                        t_k_cour=t_k_cour*pas_t
+                        t_k_cour=t_k_cour+T1
+                        t_k_cour=t_k_cour.tolist()
+                        print T1,T2,FREQ
+                        temps=temps+t_k_cour
+                        if   SIGNAL=='CONTINU' :
+                                for t in t_k_cour :
+                                  fff.append( FcontinuGR1(t,I1,I2,TR,PHI1,PHI2,TAU1,TAU2) )
+                        elif SIGNAL=='COMPLET' :
+                                for t in t_k_cour :
+                                  fff.append(FcompletGR1(t,I1,I2,FREQ,TR,PHI1,PHI2,TAU1,TAU2))
+#
+        elif COUR_PRIN :
+                TINI =COUR_PRIN[0]['INST_CC_INIT']
+                TFIN =COUR_PRIN[0]['INST_CC_FIN']
+#
+                TINIR = COUR_PRIN[0]['INST_RENC_INIT']
+                TFINR = COUR_PRIN[0]['INST_RENC_FIN']
+#
+                pas_t=1./(40.*FREQ)
+#
+                temps   = []
+                fff     = []
+                T2moins = max(TFIN,TFINR)
+                TR      = COUR_PRIN[0]['INST_CC_INIT']
+                TRR     = COUR_PRIN[0]['INST_RENC_INIT']
+                I1      = COUR_PRIN[0]['INTE_CC_1']
+                I1R     = COUR_PRIN[0]['INTE_RENC_1']
+                PHI1    = COUR_PRIN[0]['PHI_CC_1']
+                PHI1R   = COUR_PRIN[0]['PHI_RENC_1']
+                TAU1    = COUR_PRIN[0]['TAU_CC_1']
+                TAU1R   = COUR_PRIN[0]['TAU_RENC_1']
+#
+                fff.append(0.)
+#
+                if (abs(TR-T2moins)<1.E-7) : pass
+                else :
+                        temps.append(0)
+                        t_k_cour=numpy.arange((T2moins-TR)/pas_t)
+                        t_k_cour=t_k_cour*pas_t
+                        t_k_cour=t_k_cour+TR
+                        t_k_cour=t_k_cour.tolist()
+                        temps=temps+t_k_cour
+#
+                for k_cour in COUR_SECO :
+                        I2    = k_cour['INTE_CC_2']
+                        PHI2  = k_cour['PHI_CC_2']
+                        TAU2  = k_cour['TAU_CC_2']
+                        I2R   = k_cour['INTE_RENC_2']
+                        PHI2R = k_cour['PHI_RENC_2']
+                        TAU2R = k_cour['TAU_RENC_2']
+                        DIST  = k_cour['DIST']
+#
+                        if SIGNAL=='CONTINU' :
+                           for i in range(len(temps)) :
+                               if temps[i]>TINI :
+                                  if temps[i]<TFIN :
+                                     fff[i]=fff[i]+FcontinuGR2(temps[i],I1,I2,TR,PHI1,PHI2,TAU1,TAU2,DIST)
+                               if temps[i]>TINIR :
+                                  if temps[i]<TFINR : 
+                                     fff[i]=fff[i]+FcontinuGR2R(temps[i],I1R,I2R,TRR,PHI1R,PHI2R,TAU1R,TAU2R,DIST)
+#
+                        if SIGNAL=='COMPLET' :
+                           for i in range(len(temps)) :
+                               if temps[i]>TINI :
+                                  if temps[i]<TFIN :
+                                     fff[i]=fff[i]+FcompletGR2(temps[i],I1,I2,TR,PHI1,PHI2,TAU1,TAU2,DIST)
+                               if temps[i]>TINIR :
+                                  if temps[i]<TFINR : 
+                                     fff[i]=fff[i]+FcompletGR2R(temps[i],I1R,I2R,TRR,PHI1R,PHI2R,TAU1R,TAU2R,DIST)
+#
+        vale=[]
+        for i in range(len(temps)) :
+              vale.append(temps[i])
+              vale.append(fff[i])
+        vale.append(temps[-1]+2*pas_t)
+        vale.append(0.)
+#
+        C_out=DEFI_FONCTION(NOM_PARA='INST',NOM_RESU='ELEC',
+                            VALE=vale,
+                            PROL_DROITE='CONSTANT',
+                            PROL_GAUCHE='CONSTANT',)
+        return ier
diff --git a/Aster/Cata/cataSTA10/Macro/defi_inte_spec_ops.py b/Aster/Cata/cataSTA10/Macro/defi_inte_spec_ops.py
new file mode 100644 (file)
index 0000000..abbe244
--- /dev/null
@@ -0,0 +1,153 @@
+#@ MODIF defi_inte_spec_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import math
+
+def tocomplex(arg):
+    if arg[0]=='RI' : return complex(arg[1], arg[2])
+    if arg[0]=='MP' : return complex(arg[1]*math.cos(arg[2]), arg[1]*math.sin(arg[2]))
+
+
+def defi_inte_spec_ops(self,DIMENSION,PAR_FONCTION,KANAI_TAJIMI,
+                       CONSTANT,TITRE,INFO,**args):
+#  ------------------------------------------------------------------
+#  Définition d'une matrice interspectrale
+#  à partir de fonctions complexes
+
+   import aster
+   from types import ListType, TupleType
+   EnumTypes = (ListType, TupleType)
+   from Accas               import _F
+   from Utilitai.Utmess     import  UTMESS
+   import numpy
+   
+   commande='DEFI_INTE_SPEC'
+
+   ier = 0
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+
+   # Le concept sortant (de type table_sdaster ou dérivé) est tab
+   self.DeclareOut('tabout', self.sd)
+   
+   # On importe les definitions des commandes a utiliser dans la macro
+   # Le nom de la variable doit etre obligatoirement le nom de la commande
+   CREA_TABLE    = self.get_cmd('CREA_TABLE')
+   CALC_TABLE    = self.get_cmd('CALC_TABLE')
+   DEFI_FONCTION = self.get_cmd('DEFI_FONCTION')
+
+#--- Vérifications
+
+   if PAR_FONCTION==None : PAR_FONCTION=[]
+   if KANAI_TAJIMI==None : KANAI_TAJIMI=[]
+   if CONSTANT    ==None : CONSTANT    =[]
+
+   nfntot = len(PAR_FONCTION)+len(KANAI_TAJIMI)+len(CONSTANT)
+   dimh   = (DIMENSION*(DIMENSION+1))/2
+   if dimh!=nfntot :
+      UTMESS('F','SPECTRAL0_1')
+
+   l_f=[]
+   for occ in PAR_FONCTION : l_f.append(('PAR_FONCTION',occ))
+   for occ in KANAI_TAJIMI : l_f.append(('KANAI_TAJIMI',occ))
+   for occ in CONSTANT     : l_f.append(('CONSTANT'    ,occ))
+   for occ in l_f :
+      if occ[0]!='PAR_FONCTION' and occ[1]['FREQ_MAX']<occ[1]['FREQ_MIN'] :
+          UTMESS('F','SPECTRAL0_2',valk=occ[0])
+   l_is=[occ[1]['NUME_ORDRE_I'] for occ in l_f]
+   l_js=[occ[1]['NUME_ORDRE_J'] for occ in l_f]
+   iis=sum(l_is)
+   ijs=sum(l_js)
+
+#--- pour une matrice hermitienne ---
+   l_ih=[k*(DIMENSION-k+1) for k in range(1,DIMENSION+1)]
+   l_jh=[k*k               for k in range(1,DIMENSION+1)]
+   ih=sum(l_ih)
+   jh=sum(l_jh)
+   if ((iis!=ih) or (ijs!=jh)) :
+      UTMESS('F','SPECTRAL0_3')
+
+#--- Construction de la liste de fonctions complexes
+   l_fc=[]
+   for occ in l_f :
+
+#--- PAR_FONCTION
+
+       if occ[0]=='PAR_FONCTION' :
+              l_fc.append(occ[1]['FONCTION'].nom)
+
+#--- KANAI_TAJIMI et CONSTANT
+
+       if occ[0] in ('KANAI_TAJIMI','CONSTANT')     :
+              if occ[1]['VALE_R']!=None :
+                 valr=occ[1]['VALE_R']
+                 vali=0.
+              elif occ[1]['VALE_C']!=None :
+                 cmpl=tocomplex(occ[1]['VALE_C'])
+                 valr=cmpl.real
+                 vali=cmpl.imag
+              else :
+                 valr=1.
+                 vali=0.
+              x1=numpy.arange(occ[1]['FREQ_MIN'],occ[1]['FREQ_MAX'],occ[1]['PAS'])
+              x1=x1.tolist()+[occ[1]['FREQ_MAX'],]
+              valc=[]
+              for absc in x1 : valc=valc+[absc,valr,vali]
+
+#--- KANAI_TAJIMI
+
+       if occ[0]=='KANAI_TAJIMI'     :
+              amor   = occ[1]['AMOR_REDUIT']
+              frqmoy = occ[1]['FREQ_MOY']
+              x11  =numpy.array([4*(amor**2)*(frqmoy**2)*FREQ**2 \
+                                   for FREQ in x1 ])
+              xnum =x11+frqmoy**4
+              denom=numpy.array([ (frqmoy**2-FREQ**2)**2 \
+                                   for FREQ in x1 ])
+              denom=denom+x11
+              g0=numpy.array([valr]*len(denom))
+              g0=g0*xnum/denom
+              valc=[]
+              for i in range(len(x1)): valc=valc+[x1[i],g0[i],0.]
+       if occ[0] in ('KANAI_TAJIMI','CONSTANT')     :
+              _f=DEFI_FONCTION(PROL_GAUCHE=occ[1]['PROL_GAUCHE'],
+                               PROL_DROITE=occ[1]['PROL_DROITE'],
+                               INTERPOL   =occ[1]['INTERPOL'],
+                               VALE_C     =valc,
+                               NOM_PARA   ='FREQ',
+                               NOM_RESU   ='DSP' )
+              l_fc.append(_f.nom)
+
+   mcfact=[]
+   mcfact.append(_F(PARA='NOM_CHAM'  ,LISTE_K='DSP' ))
+   mcfact.append(_F(PARA='OPTION'    ,LISTE_K='TOUT' ))
+   mcfact.append(_F(PARA='DIMENSION' ,LISTE_I=(DIMENSION,) ))
+   tabout=CREA_TABLE(LISTE=mcfact, TITRE='',
+                     TYPE_TABLE='TABLE_FONCTION')
+   mcfact=[]
+   mcfact.append(_F(PARA='NUME_ORDRE_I'  ,LISTE_I=l_is ))
+   mcfact.append(_F(PARA='NUME_ORDRE_J'  ,LISTE_I=l_js ))
+   mcfact.append(_F(PARA='FONCTION_C'    ,LISTE_K=l_fc ,TYPE_K='K24' ))
+   __l_fonc=CREA_TABLE(LISTE=mcfact, TITRE='')
+   tabout=CALC_TABLE(reuse=tabout,TABLE=tabout,
+                     TITRE=self.sd.nom+' : interspectre obtenu par DEFI_INTE_SPEC',
+                     ACTION=_F(OPERATION='COMB',TABLE=__l_fonc,))
+
+   return ier
diff --git a/Aster/Cata/cataSTA10/Macro/defi_part_feti_ops.py b/Aster/Cata/cataSTA10/Macro/defi_part_feti_ops.py
new file mode 100644 (file)
index 0000000..2c1ab0c
--- /dev/null
@@ -0,0 +1,193 @@
+#@ MODIF defi_part_feti_ops Macro  DATE 06/07/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+
+# ===========================================================================
+#           CORPS DE LA MACRO "DEFI_PART_FETI"
+#           -------------------------------------
+# USAGE :
+#  MAILLAGE        maillage a partitionner
+#  MODELE          modele (facultatif)
+#  NB_PART         nb de sous-domaines
+#  EXCIT           liste des chargements
+#  METHODE         PMETIS, KMETIS ou AUTRE
+#  LOGICIEL        si AUTRE alors on attend un chemin complet vers executable
+#  NOM_GROUP_MA    Un nom de base pour les group_ma contenant les SD
+#  INFO            1,2
+#
+# ===========================================================================
+# script PYTHON : lancement de DEFI_PART_PA_OPS et de DEFI_PART_OPS
+
+
+def defi_part_feti_ops(self,NB_PART,METHODE,TRAITER_BORDS,NOM_GROUP_MA,CORRECTION_CONNEX,INFO,**args):
+
+  import aster, string, sys
+
+  from Accas import _F
+  from Noyau.N_utils import AsType
+  from Utilitai.Utmess import  UTMESS
+
+  from Utilitai import partition
+
+  # DEBUT DE LA MACRO
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+  ier=0
+
+  # On importe les definitions des commandes a utiliser dans la macro
+  DEFI_PART_OPS   = self.get_cmd('DEFI_PART_OPS')
+  INFO_EXEC_ASTER = self.get_cmd('INFO_EXEC_ASTER')
+  DEFI_FICHIER    = self.get_cmd('DEFI_FICHIER')
+  DEFI_PART_PA_OPS   = self.get_cmd('DEFI_PART_PA_OPS')
+
+  nompro='DEFI_PART_FETI'
+
+  # Maillage
+  if args.has_key('MODELE'):
+    if args['MODELE'] != None:
+      __MOD = string.ljust(args['MODELE'].nom,8)
+      __MOD =__MOD+'.MODELE    .LGRF        '
+      __LMAIL = aster.getvectjev(__MOD)
+      __MAIL  = string.strip(__LMAIL[0])
+      MAILLAGE=self.get_sd_avant_etape(__MAIL,self)
+    else:
+      MAILLAGE=args['MAILLAGE']
+
+  # Nom des GROUP_MA générés
+  NOM_GROUP_MA = string.strip(NOM_GROUP_MA)
+
+  # Test sur le nombre de caractères de NOM_GROUP_MA
+  if ( len(NOM_GROUP_MA)+len(str(NB_PART)) > 7 ):
+    ln=7-len(str(NB_PART))
+    UTMESS('F','FETI0_1',vali=ln)
+
+  # Verification que des GROUP_MA ne portent pas deja les memes noms
+  _lst = []
+  for i in MAILLAGE.LIST_GROUP_MA():
+    _lst.append( string.strip(i[0]) )
+  for i in range(NB_PART):
+    if ( NOM_GROUP_MA+str(i) in _lst ):
+      ngrma=NOM_GROUP_MA+str(i)
+      UTMESS('F','FETI0_2',valk=ngrma)
+    if args.has_key('NOM_GROUP_MA_BORD') :
+      if args['NOM_GROUP_MA_BORD'] != None :
+        if ( args['NOM_GROUP_MA_BORD']+str(i) in _lst ):
+          ngrma=args['NOM_GROUP_MA_BORD']+str(i)
+          UTMESS('F','FETI0_2',valk=ngrma)
+
+  # Le concept sortant dans le contexte de la macro
+  self.DeclareOut('_SDFETI',self.sd)
+
+  # Debut :
+
+  # Regeneration des mots-cles GROUPAGE passés en argument de la macro
+  motscle1= {}
+  if args.has_key('GROUPAGE'):
+    if args['GROUPAGE'] != None :
+      dGroup=[]
+      for j in args['GROUPAGE']:
+        dGroup.append(j.cree_dict_valeurs(j.mc_liste))
+        for i in dGroup[-1].keys():
+          if dGroup[-1][i]==None : del dGroup[-1][i]
+        motscle1['GROUPAGE']=dGroup
+
+  # Regeneration des mots-cles POIDS_MAILLES passés en argument de la macro
+  if args.has_key('POIDS_MAILLES'):
+    if args['POIDS_MAILLES'] != None :
+      dEval=[]
+      for j in args['POIDS_MAILLES']:
+        dEval.append(j.cree_dict_valeurs(j.mc_liste))
+        for i in dEval[-1].keys():
+          if dEval[-1][i]==None : del dEval[-1][i]
+        motscle1['POIDS_MAILLES']=dEval
+
+  # Y a t'il présence du mot clé : NOM_GROUP_MA_BORD
+  if args.has_key('GROUP_MA_BORD'):
+    if args['GROUP_MA_BORD'] != None :
+      motscle1['GROUP_MA_BORD']=args['GROUP_MA_BORD']
+
+  # Y a t'il présence du mot clé : LOGICIEL
+  if args.has_key('LOGICIEL'):
+    if args['LOGICIEL'] != None :
+      motscle1['LOGICIEL']=args['LOGICIEL']
+
+  # Y a t'il présence du mot clé : MODELE
+  if args.has_key('MODELE'):
+    if args['MODELE'] != None :
+      motscle1['MODELE']=args['MODELE']
+
+  # Partitionnement
+  DEFI_PART_PA_OPS(
+                   MAILLAGE=MAILLAGE,
+                   INFO=INFO,
+                   METHODE=METHODE,
+                   NB_PART=NB_PART,
+                   CORRECTION_CONNEX=CORRECTION_CONNEX,
+                   TRAITER_BORDS=TRAITER_BORDS,
+                   NOM_GROUP_MA=NOM_GROUP_MA,
+                   **motscle1
+                     );
+
+  # Liste des groupes de mailles du maillage
+  _LST_GMA = MAILLAGE.LIST_GROUP_MA()
+  _LST_GMA = map(lambda x: x[0], _LST_GMA)
+
+  # Creation de la SDFETI
+  if args.has_key('MODELE'):
+    if args['MODELE'] != None :
+      _tmp  = []
+      for i in range(NB_PART):
+        txt = { 'GROUP_MA': NOM_GROUP_MA + str(i) }
+        _tmp.append( txt )
+
+        if args.has_key('NOM_GROUP_MA_BORD') :
+          if args['NOM_GROUP_MA_BORD'] != None :
+            if ( args['NOM_GROUP_MA_BORD']+str(i) in _LST_GMA ):
+              txt['GROUP_MA_BORD'] = string.strip(args['NOM_GROUP_MA_BORD']) + str(i)
+            _tmp.append( txt )
+
+      motscle2= {'DEFI': _tmp }
+
+      # Regeneration des mots-cles EXCIT passés en argument de la macro
+      if args.has_key('EXCIT'):
+        if args['EXCIT'] != None :
+          dExcit=[]
+          for j in args['EXCIT']:
+            dExcit.append(j.cree_dict_valeurs(j.mc_liste))
+            for i in dExcit[-1].keys():
+              if dExcit[-1][i]==None : del dExcit[-1][i]
+          motscle2['EXCIT']=dExcit
+
+      _SDFETI=DEFI_PART_OPS(NOM='SDD',
+                            MODELE=args['MODELE'],
+                            INFO=1,
+                            **motscle2
+                            );
+    else:
+      _SDFETI=None
+
+  else:
+    _SDFETI=None
+
+
+  # Fin :
+
+  return ier
diff --git a/Aster/Cata/cataSTA10/Macro/defi_sol_miss_ops.py b/Aster/Cata/cataSTA10/Macro/defi_sol_miss_ops.py
new file mode 100644 (file)
index 0000000..3a5b8c7
--- /dev/null
@@ -0,0 +1,76 @@
+#@ AJOUT defi_sol_miss_ops Macro
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
+
+import os
+
+def defi_sol_miss_ops(self, MATERIAU, COUCHE, TITRE, INFO, **args):
+   """Macro DEFI_SOL_MISS :
+   définir les caractéristiques du sol pour un calcul MISS3D
+   """
+   import aster
+
+   from Accas              import _F
+   from Utilitai.Utmess    import UTMESS
+   from Utilitai.Table     import Table
+   CREA_TABLE    = self.get_cmd("CREA_TABLE")
+
+   ier = 0
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+
+   # Le concept sortant (de type table_sdaster) est tabout
+   self.DeclareOut("tabout", self.sd)
+
+   # 1. Création des dictionnaires des MATERIAUX
+   l_mate = []
+   for Mi in MATERIAU:
+      dM = Mi.cree_dict_valeurs(Mi.mc_liste)
+      l_mate.append(dM)
+   nb_mate = len(l_mate)
+
+   # 2. Création des dictionnaires des COUCHES
+   l_couche = []
+   n_substr = 0
+   for Ci in COUCHE:
+      dC = Ci.cree_dict_valeurs(Ci.mc_liste)
+      if dC.get("SUBSTRATUM") == "OUI":
+         n_substr += 1
+      l_couche.append(dC)
+   if n_substr != 1:
+      UTMESS("F", "MISS0_3")
+   nb_couche = len(l_couche)
+
+   # 3. définition de la table
+   # para/typ pré-trie les colonnes
+   tab = Table(para=["NUME_COUCHE", "EPAIS", "RHO", "E", "NU", "AMOR_HYST", "RECEPTEUR", "SOURCE", "NUME_MATE", "SUBSTRATUM"],
+               typ=["I", "R", "R", "R", "R", "R", "K8", "K8", "I", "K8"])
+   idc = 0
+   for couche in l_couche:
+      idc += 1
+      id_mate = couche["NUME_MATE"]
+      if id_mate > nb_mate:
+         UTMESS("F", "MISS0_4", vali=(idc, nb_mate, id_mate))
+      id_mate = id_mate - 1
+      couche["NUME_COUCHE"] = idc
+      couche.update(l_mate[id_mate])
+      if couche.get("SUBSTRATUM") is None:
+         del couche["SUBSTRATUM"]
+      if couche["EPAIS"] is None:
+         couche["EPAIS"] = 0.
+      tab.append(couche)
+
+   # 4. surcharge par le titre fourni
+   if TITRE != None:
+      if type(TITRE) not in (list, tuple):
+         TITRE = [TITRE]
+      tab.titr = os.linesep.join(TITRE)
+
+   if INFO == 2:
+      print tab
+
+   # 5. création de la table
+   dprod = tab.dict_CREA_TABLE()
+   tabout = CREA_TABLE(**dprod)
+
+
diff --git a/Aster/Cata/cataSTA10/Macro/dyna_iss_vari_ops.py b/Aster/Cata/cataSTA10/Macro/dyna_iss_vari_ops.py
new file mode 100644 (file)
index 0000000..c85a589
--- /dev/null
@@ -0,0 +1,355 @@
+#@ MODIF dyna_iss_vari_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+import os
+
+
+def dyna_iss_vari_ops(self, NOM_CMP, PRECISION, INTERF,MATR_COHE, FREQ_INIT,UNITE_RESU_FORC,
+                       NB_FREQ, PAS, UNITE_RESU_IMPE, TYPE, MATR_GENE , OPTION,INFO,
+                         **args):
+   """
+      Macro DYNA_ISS_VARI
+   """
+   ier=0
+   import numpy as NP
+   from numpy import linalg
+   import aster
+   from Accas import _F
+   from Utilitai.Table import Table
+   from Utilitai.Utmess import  UTMESS
+
+   def get_group_coord(group):
+      """Retourne les coordonnees des noeuds du groupe 'group'
+      """
+      l_ind = NP.array(coll_grno.get('%-8s' % group, [])) - 1
+      return NP.take(t_coordo, l_ind, axis=0)
+
+
+   # On importe les definitions des commandes a utiliser dans la macro
+
+   COMB_MATR_ASSE = self.get_cmd('COMB_MATR_ASSE')
+   LIRE_IMPE_MISS = self.get_cmd('LIRE_IMPE_MISS')
+   LIRE_FORC_MISS = self.get_cmd('LIRE_FORC_MISS')
+   COMB_MATR_ASSE = self.get_cmd('COMB_MATR_ASSE')   
+
+   CREA_CHAMP = self.get_cmd('CREA_CHAMP')   
+   DYNA_LINE_HARM = self.get_cmd('DYNA_LINE_HARM')   
+   DETRUIRE= self.get_cmd('DETRUIRE')   
+
+   DEFI_FONCTION  = self.get_cmd('DEFI_FONCTION')
+   CREA_TABLE     = self.get_cmd('CREA_TABLE')
+
+   # Comptage commandes + declaration concept sortant
+   self.set_icmd(1)
+   self.DeclareOut('tab_out', self.sd)
+   macro='DYNA_ISS_VARI'
+#--------------------------------------------------------
+   dgene = MATR_GENE[0].cree_dict_valeurs(MATR_GENE[0].mc_liste)
+   if dgene['MATR_AMOR'] != None:
+     aster.affiche('MESSAGE',' MATR_AMOR existe')
+     __ma_amort = MATR_GENE['MATR_AMOR']
+   else:         
+     __ma_amort=COMB_MATR_ASSE(CALC_AMOR_GENE=_F(MASS_GENE = MATR_GENE['MATR_MASS'] ,
+                                        RIGI_GENE = MATR_GENE['MATR_RIGI'] ,                                       
+                                        AMOR_REDUIT= (  0.0,),
+                                         ),                               
+                                  );
+     aster.affiche('MESSAGE',' MATR_AMOR pas donnee, on prend AMOR_REDUIT=0.0,')
+#   dint = INTERF[0].cree_dict_valeurs(INTERF[0].mc_liste)
+#   dcoh = MATR_COHE[0].cree_dict_valeurs(MATR_COHE[0].mc_liste)
+   
+   from SD.sd_maillage      import sd_maillage
+   from SD.sd_nume_ddl_gd   import sd_nume_ddl_gd    
+   from SD.sd_nume_ddl_gene import sd_nume_ddl_gene    
+   from SD.sd_mode_meca import sd_mode_meca 
+   from SD.sd_resultat import sd_resultat
+   from SD.sd_cham_gene import sd_cham_gene
+
+   v_refa_rigi = MATR_GENE['MATR_RIGI'].REFA.get()
+   v_refa_mass = MATR_GENE['MATR_MASS'].REFA.get()
+   # MAILLAGE
+   nom_bamo = v_refa_rigi[0]
+   nume_ddl = aster.getvectjev(nom_bamo[0:8] + '           .REFD        ' )[3]
+   nom_mail = aster.getvectjev( nume_ddl[0:19] + '.REFN        ' )[0] 
+   maillage = sd_maillage(nom_mail)
+   # MODELE, DDLGENE
+   nom_ddlgene = v_refa_rigi[1]  
+   nom_modele = aster.getvectjev( nume_ddl[0:19] + '.LILI        ' )[1]   
+   resultat = self.get_concept(nom_bamo)
+   nume_ddlgene = self.get_concept(nom_ddlgene)
+   modele = self.get_concept(nom_modele[0:8])
+
+   #TEST base modale
+   nom_bamo2 = v_refa_mass[0]
+   if nom_bamo.strip() != nom_bamo2.strip():
+      UTMESS('F','ALGORITH5_42')
+   
+   nbnot, nbl, nbma, nbsm, nbsmx, dime = maillage.DIME.get()
+
+   # coordonnees des noeuds
+   l_coordo = maillage.COORDO.VALE.get()
+   t_coordo = NP.array(l_coordo)
+   t_coordo.shape = nbnot, 3
+   # groupes de noeuds
+   coll_grno = maillage.GROUPENO.get()
+   GROUP_NO_INTER=INTERF['GROUP_NO_INTERF']
+   noe_interf = get_group_coord(GROUP_NO_INTER)
+   nbno, nbval = noe_interf.shape
+   if INFO==2:
+      aster.affiche('MESSAGE','NBNO INTERFACE : '+str(nbno))
+  # MODES
+   iret,nbmodt,kbid=aster.dismoi('F','NB_MODES_TOT',nom_bamo,'RESULTAT')
+   iret,nbmodd,kbid=aster.dismoi('F','NB_MODES_DYN',nom_bamo,'RESULTAT')
+   iret,nbmods,kbid=aster.dismoi('F','NB_MODES_STA',nom_bamo,'RESULTAT')
+
+   nbmodt2 = MATR_GENE['MATR_RIGI'].DESC.get()[1]
+   if nbmodt2 != nbmodt:
+       UTMESS('F','ALGORITH5_42')
+
+   if INFO==2:
+      texte = 'NOMBRE DE MODES: '+str(nbmodt)+'   MODES DYNAMIQUES: '+str(nbmodd)+'   MODES STATIQUES: '+str(nbmods)
+      aster.affiche('MESSAGE',texte)
+      aster.affiche('MESSAGE','COMPOSANTE '+NOM_CMP)
+   SPEC = NP.zeros((NB_FREQ,nbmodt,nbmodt)) + 1j
+#
+#---------------------------------------------------------------------
+  # BOUCLE SUR LES FREQUENCES
+   VITE_ONDE = MATR_COHE['VITE_ONDE']
+   alpha = MATR_COHE['PARA_ALPHA']
+   abscisse = [None]*NB_FREQ
+
+   for k in range(0,NB_FREQ):
+      freqk=FREQ_INIT+PAS*k
+      aster.affiche('MESSAGE','FREQUENCE DE CALCUL: '+str(freqk))
+
+      # Matrice de coherence                  
+      XX=noe_interf[:,0]
+      YY=noe_interf[:,1]
+
+      XN=NP.repeat(XX,nbno)
+      YN=NP.repeat(YY,nbno)
+      XR=NP.reshape(XN,(nbno,nbno))
+      YR=NP.reshape(YN,(nbno,nbno))
+      XRT=NP.transpose(XR)
+      YRT=NP.transpose(YR)
+      DX=XR-XRT
+      DY=YR-YRT
+      DIST=DX**2+DY**2
+      COHE=NP.exp(-(DIST*(alpha*freqk/VITE_ONDE)**2.))
+      
+      # On desactive temporairement les FPE qui pourraient etre generees (a tord!) par blas
+      aster.matfpe(-1)
+      eig, vec =linalg.eig(COHE)
+      vec = NP.transpose(vec)   # les vecteurs sont en colonne dans numpy
+      aster.matfpe(1)
+      eig=eig.real
+      vec=vec.real
+      # on rearrange selon un ordre decroissant
+      eig = NP.where(eig < 1.E-10, 0.0, eig)
+      order = (NP.argsort(eig)[::-1])
+      eig = NP.take(eig, order)
+      vec = NP.take(vec, order, 0)
+
+      #-----------------------
+      # Nombre de modes POD a retenir
+      etot=NP.sum(NP.diag(COHE))
+      ener=0.0
+      nbme=0
+      if INFO==2:
+         aster.affiche('MESSAGE','ETOT :'+str(etot))
+      while nbme < nbno:
+         ener= eig[nbme]+ener
+         prec=ener/etot
+         nbme=nbme+1
+         if INFO==2:
+            aster.affiche('MESSAGE','VALEUR PROPRE  '+str(nbme)+' : '+str(eig[nbme-1]))
+         if prec > PRECISION :
+            break
+
+      aster.affiche('MESSAGE','NOMBRE DE MODES POD RETENUS : '+str(nbme))
+      aster.affiche('MESSAGE','PRECISION (ENERGIE RETENUE) : '+str(prec))      
+
+      PVEC=NP.zeros((nbme,nbno))
+      for k1 in range(0,nbme):
+         PVEC[k1, 0:nbno]=NP.sqrt(eig[k1])*vec[k1]
+      # CALCUL DE FS variable-------------------------------
+      XO=NP.zeros((nbme,nbmods))
+      if NOM_CMP=='DX':
+         COMP = 1
+      elif NOM_CMP=='DY':
+         COMP = 2
+      elif NOM_CMP=='DZ': 
+         COMP = 3  
+
+   #---------MODES interface
+      # ----- boucle sur les modes statiques
+      for mods in range(0,nbmods):
+         nmo = nbmodd+mods+1
+         __CHAM=CREA_CHAMP( TYPE_CHAM='NOEU_DEPL_R',
+                OPERATION='EXTR',                  
+                NUME_ORDRE=nmo,
+                RESULTAT = resultat  ,
+                NOM_CHAM = 'DEPL'
+                      );
+         MCMP =__CHAM.EXTR_COMP(NOM_CMP,[GROUP_NO_INTER]).valeurs
+
+         NNO =__CHAM.EXTR_COMP(NOM_CMP,[GROUP_NO_INTER], topo=1).noeud
+
+
+         som=NP.sum(MCMP)
+         max1=NP.max(MCMP)
+         min1=NP.min(MCMP)
+         maxm=NP.max([NP.abs(max1), NP.abs(min1)])
+      #CALCUL DE XO
+#  on recupere la composante COMP (dx,dy,dz) des modes et on projete
+         #  CAS 1: MODES DE CORPS RIGIDE
+         if INTERF['MODE_INTERF'] =='CORP_RIGI':
+            for modp in range(0,nbme):
+               #modes de translation
+               if mods+1 <=3:
+                  if NP.abs(som)<10.E-6:
+                     XO[modp,mods]=0.0
+                  else :
+                     fact=1./som               
+                     XO[modp,mods]=fact*NP.inner(MCMP,PVEC[modp])
+               #modes de rotation
+               else:
+                  if maxm<10.E-6:
+                     if som<10.E-6:
+                        XO[modp,mods]=0.0 
+                     else :
+                        UTMESS('F','ALGORITH6_86')
+                  else :  
+                     fact = 1./(nbno)                   
+                     XO[modp,mods]=1./(maxm**2.)*fact*NP.inner(MCMP,PVEC[modp])
+
+         # CAS 2: MODES EF
+         if INTERF['MODE_INTERF'] =='TOUT':
+            for modp in range(0,nbme):
+               if NP.abs(som)<10.E-6:
+                  if maxm<10.E-6:
+                     XO[modp,mods]=0.0 
+                  else:
+                     UTMESS('F','UTILITAI5_89')                     
+               else:
+                  fact=1./som                  
+                  XO[modp,mods]=fact*NP.inner(MCMP,PVEC[modp])
+
+         DETRUIRE(CONCEPT=_F(NOM=(__CHAM)),INFO=1)
+
+   #----Impedances etc.----------------------------------------------------------------- 
+
+      if k>0:
+         DETRUIRE(CONCEPT=_F(NOM=(__impe,__fosi,__rito)),INFO=1) 
+
+      __impe = LIRE_IMPE_MISS(BASE=resultat,  
+                           TYPE=TYPE,
+                           NUME_DDL_GENE=nume_ddlgene,               
+                           UNITE_RESU_IMPE= UNITE_RESU_IMPE, 
+                           FREQ_EXTR=freqk, 
+                           );
+      __rito=COMB_MATR_ASSE(COMB_C=(
+                                _F(MATR_ASSE=__impe,
+                                 COEF_C=1.0+0.j,),
+                                _F(MATR_ASSE=MATR_GENE['MATR_RIGI'],
+                                 COEF_C=1.0+0.j,),
+                                 ),
+                                 SANS_CMP='LAGR',
+                                 );                                                                            
+      __fosi = LIRE_FORC_MISS(BASE=resultat,  
+                           NUME_DDL_GENE=nume_ddlgene,
+                           NOM_CMP=NOM_CMP,
+                           NOM_CHAM='DEPL',               
+                           UNITE_RESU_FORC = UNITE_RESU_FORC, 
+                           FREQ_EXTR=freqk,); 
+      # impedance
+      MIMPE=__impe.EXTR_MATR_GENE() 
+      #  extraction de la partie modes interface 
+      KRS = MIMPE[nbmodd:nbmodt,nbmodd:nbmodt]
+
+      # force sismique pour verif
+#      FS0=__fosi.EXTR_VECT_GENE_C()
+#      FSE=FS0[nbmodd:nbmodt][:]
+      SP=NP.zeros((nbmodt,nbmodt))
+      for k1 in range(0,nbme):
+         #  calcul de la force sismique mode POD par mode POD
+         FS = NP.dot(KRS,XO[k1]) 
+         Fzero=NP.zeros((1,nbmodd)) 
+         FS2=NP.concatenate((Fzero,NP.reshape(FS,(1,nbmods))),1)
+      #  Calcul harmonique
+         __fosi.RECU_VECT_GENE_C(FS2[0]) 
+         __dyge = DYNA_LINE_HARM(MODELE=modele,
+                          MATR_MASS = MATR_GENE['MATR_MASS'],
+                          MATR_RIGI = __rito, 
+                          FREQ = freqk,
+                          MATR_AMOR = __ma_amort,                          
+                          EXCIT =_F ( VECT_ASSE = __fosi,
+                                      COEF_MULT= 1.0,
+                                  ),
+                        );                              
+         #  recuperer le vecteur modal depl calcule par dyge                                                     
+         desc = __dyge.DESC.get()
+         assert desc[0].strip() == 'DEPL', 'Champ DEPL non trouvé'
+         nomcham = __dyge.TACH.get()[1][0].strip()
+         cham = sd_cham_gene(nomcham)
+         RS = NP.array(cham.VALE.get())
+         SP=SP+RS*NP.conj(RS[:,NP.newaxis])   
+         DETRUIRE(CONCEPT=_F(NOM=(__dyge)),INFO=1) 
+
+      SPEC[k]=SP
+
+      abscisse[k]= freqk
+##---------------------------------------------------------------------
+#  Ecriture des tables
+#--------------------------------------------------------------------- 
+#   ------ CREATION DE L OBJET TABLE 
+   tab = Table()
+   tab.append({'NOM_CHAM' : 'DSP', 'OPTION' : 'TOUT',  'DIMENSION' : nbmodt})
+   for k2 in range(nbmodt):
+      if OPTION =='DIAG' : # on ecrit uniquement les termes diagonaux (autospectres) de la matrice
+         foncc=[]
+         for k in range(NB_FREQ) :
+                foncc.append(abscisse[k])
+                foncc.append(SPEC[k][k2,k2].real)
+                foncc.append(SPEC[k][k2,k2].imag)      
+         _f = DEFI_FONCTION(NOM_PARA='FREQ',
+                      NOM_RESU='SPEC',
+                      VALE_C  = foncc )      
+         # Ajout d'une ligne dans la Table
+         tab.append({'NUME_ORDRE_I' : k2+1, 'NUME_ORDRE_J' : k2+1, 'FONCTION_C' : _f.nom})
+
+      else: # on ecrit tout
+         for k1 in range(k2+1):
+            foncc=[]
+            for k in range(NB_FREQ) :
+               foncc.append(abscisse[k])
+               foncc.append(SPEC[k][k1,k2].real)
+               foncc.append(SPEC[k][k1,k2].imag)      
+            _f = DEFI_FONCTION(NOM_PARA='FREQ',
+                      NOM_RESU='SPEC',
+                      VALE_C  = foncc )
+            # Ajout d'une ligne dans la Table
+            tab.append({'NUME_ORDRE_I' : k1+1, 'NUME_ORDRE_J' : k2+1, 'FONCTION_C' : _f.nom})
+
+   # Creation du concept en sortie
+   dict_keywords = tab.dict_CREA_TABLE()
+   tab_out = CREA_TABLE(TYPE_TABLE='TABLE_FONCTION',
+                        **dict_keywords)                       
+   return ier
diff --git a/Aster/Cata/cataSTA10/Macro/exec_logiciel_ops.py b/Aster/Cata/cataSTA10/Macro/exec_logiciel_ops.py
new file mode 100644 (file)
index 0000000..f22b755
--- /dev/null
@@ -0,0 +1,195 @@
+#@ MODIF exec_logiciel_ops Macro  DATE 15/03/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# RESPONSABLE COURTOIS M.COURTOIS
+
+import os
+import os.path as osp
+import traceback
+import shutil
+from types import ListType, TupleType
+EnumTypes = (ListType, TupleType)
+
+# ------------------------------------------------------------------------------
+def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO, **args):
+   """
+   Macro IMPR_FONCTION permettant d'imprimer dans un fichier des fonctions,
+   colonnes de table...
+   Erreurs<S> dans IMPR_FONCTION pour ne pas perdre la base.
+   """
+   macro='EXEC_LOGICIEL'
+   import aster
+   from Utilitai.Utmess     import  UTMESS
+   from Utilitai.System     import ExecCommand
+   from Utilitai.UniteAster import UniteAster
+   
+   PRE_GMSH      = self.get_cmd("PRE_GMSH")
+   PRE_GIBI      = self.get_cmd("PRE_GIBI")
+   LIRE_MAILLAGE = self.get_cmd("LIRE_MAILLAGE")
+   
+   ier=0
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+
+   #----------------------------------------------
+   # constantes des modes d'exécution
+   CMD_EXTERNE = 1
+   EXECFILE    = 2
+   mode_lancement = None
+
+   # paramètres nécessaires pour écrire la ligne de commande
+   # !! d_para['options'] est une liste !!
+   d_para = {'prog' : '', 'options' : ''}
+   
+   l_args = []
+   if ARGUMENT != None:
+      l_args = ARGUMENT[:]
+      if type(l_args) not in EnumTypes:
+         l_args = [l_args,]
+   
+   #----------------------------------------------
+   # 1. Préparation des données
+   # 1.1. EXEC_LOGICIEL standard
+   if MAILLAGE == None:
+      mode_lancement = CMD_EXTERNE
+      cmd = '%(prog)s %(options)s'
+   
+   # 1.2. Cas "lancement d'un mailleur"
+   else:
+      mcf = MAILLAGE[0]
+      dMCF = mcf.cree_dict_valeurs(mcf.mc_liste)
+      d_para['fichIN']  = 'fort.%d' % dMCF['UNITE_GEOM']
+      d_para['fichOUT'] = 'fort.%d' % dMCF['UNITE']
+      if osp.exists(d_para['fichOUT']):
+         os.remove(d_para['fichOUT'])
+      
+      if dMCF['FORMAT'] == 'GMSH':
+         mode_lancement = CMD_EXTERNE
+         cmd = '%(prog)s %(options)s -o %(fichOUT)s %(fichIN)s'
+         d_para['prog'] = osp.join(aster.repout(), 'gmsh')
+         d_para['options'] = ('-3',)
+      
+      elif dMCF['FORMAT'] == 'GIBI':
+         mode_lancement = CMD_EXTERNE
+         cmd = '%(prog)s %(options)s %(fichIN)s %(fichOUT)s'
+         d_para['prog'] = osp.join(aster.repout(), 'gibi')
+      
+      elif dMCF['FORMAT'] == 'SALOME':
+         mode_lancement = EXECFILE
+         if len(l_args) < 1:
+            UTMESS('F','EXECLOGICIEL0_1')
+         else:
+            d_para['fichMED'] = l_args[0]
+      
+      else:
+         UTMESS('F', 'EXECLOGICIEL0_2', valk=dMCF['FORMAT'])
+
+   
+   #----------------------------------------------
+   # 2. lecture des mots-clés
+   if LOGICIEL != None:
+      d_para['prog'] = LOGICIEL
+
+   if len(l_args) > 0:
+      d_para['options'] = l_args
+   d_para['options'] = ' '.join(d_para['options'])
+   
+   #----------------------------------------------
+   # 3. Exécution
+   # 3a. Lancement d'une commande externe
+   if mode_lancement == CMD_EXTERNE:
+      scmd = cmd % d_para
+      comment = "Lancement de la commande :\n%s" % scmd
+      iret, output, error = ExecCommand(scmd, alt_comment=comment, verbose=False, separated_stderr=True)
+      erreur = iret > CODE_RETOUR_MAXI
+      if CODE_RETOUR_MAXI == -1: erreur = False
+
+      # output
+      if INFO > 0 or erreur:
+         UTMESS('I', 'EXECLOGICIEL0_11', vali=(iret, CODE_RETOUR_MAXI))
+         UTMESS('I', 'EXECLOGICIEL0_9',  valk=output)
+      
+      # en cas d'erreur, on dump tout dans le .resu + .erre
+      if INFO == 2 or erreur:
+         UTMESS('I', 'EXECLOGICIEL0_8',  valk=scmd, print_as='E')
+         UTMESS('I', 'EXECLOGICIEL0_10', valk=error, print_as='E')
+      
+      if erreur:
+         UTMESS('F', 'EXECLOGICIEL0_3', vali=[CODE_RETOUR_MAXI, iret])
+   
+   #----------------------------------------------
+   # 3b. Exécution d'un fichier Python
+   elif mode_lancement == EXECFILE:
+      if d_para['prog'] != '':
+         UTMESS('A', 'EXECLOGICIEL0_4')
+      context={}
+      try:
+         execfile(d_para['fichIN'], context)
+      except:
+         traceback.print_exc()
+         txt = open(d_para['fichIN'], 'r').read()
+         UTMESS('F', 'EXECLOGICIEL0_5', valk=txt)
+      
+      if not osp.exists(d_para['fichMED']):
+         UTMESS('F', 'EXECLOGICIEL0_6', valk=d_para['fichMED'])
+      else:
+         # copie fichMED vers fichOUT pour pouvoir le récupérer
+         shutil.copyfile(d_para['fichMED'], d_para['fichOUT'])
+   
+   else:
+      UTMESS('F','EXECLOGICIEL0_7',valk=mode_lancement)
+   
+   #----------------------------------------------
+   # 4. Conversion du maillage
+   if MAILLAGE != None:
+      UL = UniteAster()
+      umail = UL.Libre(action='ASSOCIER',
+                       nom='exec_logiciel.%s2mail' % dMCF['FORMAT'].lower())
+      
+      if not osp.exists(d_para['fichOUT']):
+        UTMESS('F', 'EXECLOGICIEL0_13', valk=dMCF['FORMAT'])
+      
+      # déclaration du concept maillage en sortie
+      self.DeclareOut('mail', dMCF['MAILLAGE'])
+      
+      lire_mail_opts = {}
+      if dMCF['FORMAT'] == 'GMSH':
+         PRE_GMSH(UNITE_GMSH     = dMCF['UNITE'],
+                  UNITE_MAILLAGE = umail)
+
+      elif dMCF['FORMAT'] == 'GIBI':
+         PRE_GIBI(UNITE_GIBI     = dMCF['UNITE'],
+                  UNITE_MAILLAGE = umail)
+
+      elif dMCF['FORMAT'] == 'SALOME':
+         # ici l'unité en entrée de LIRE_MAILLAGE ne correspond pas au .mail
+         # mais au fichier MED en sortie du execfile.
+         umail = dMCF['UNITE']
+         etat = UL.Etat(umail, etat='O', TYPE='LIBRE', nom=d_para['fichMED'])
+         lire_mail_opts['FORMAT']   = 'MED'
+         lire_mail_opts['INFO_MED'] = INFO
+      
+      mail = LIRE_MAILLAGE(UNITE = umail,
+                           INFO  = INFO,
+                           **lire_mail_opts)
+
+      UL.EtatInit()
+   return ier
+
diff --git a/Aster/Cata/cataSTA10/Macro/externe_mess.py b/Aster/Cata/cataSTA10/Macro/externe_mess.py
new file mode 100644 (file)
index 0000000..718900f
--- /dev/null
@@ -0,0 +1,27 @@
+#@ MODIF externe_mess Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+import sys
+"""
+Définition de la méthode UTMESS pour reca_xxxx.py, Graph.py, Table.py
+"""
+def UTMESS(code,sprg,texte):
+   fmt='\n <%s> <%s> %s\n\n'
+   print fmt % (code,sprg,texte)
+   if code=='F': sys.exit()
diff --git a/Aster/Cata/cataSTA10/Macro/fiabilite_fichier.py b/Aster/Cata/cataSTA10/Macro/fiabilite_fichier.py
new file mode 100644 (file)
index 0000000..1462a5e
--- /dev/null
@@ -0,0 +1,335 @@
+#@ MODIF fiabilite_fichier Macro  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+#
+class fiabilite_fichier :
+#
+  """ Classe des fichiers de données des logiciels fiabilistes
+      Cette classe a été mise au point pour le couplage entre
+      Code_ASTER et MEFISTO, mais pourrait servir ailleurs.
+  """
+#
+#
+#====
+# 1. Le constructeur
+#====
+#
+#
+  def __init__ ( self, jdc, Rep_Calc_LOGICIEL_global, nomfic, info = 1 ) :
+#
+#   jdc : le jeu de commandes en cours de traitement
+#
+    self.jdc = jdc
+#
+#   Rep_Calc_LOGICIEL_global : le répertoire d'exécution du logiciel de fiabilité
+#
+    self.Rep_Calc_LOGICIEL_global = Rep_Calc_LOGICIEL_global
+#
+#   nomfic : nom local du fichier à créer
+#
+    self.nomfic = nomfic
+#
+#   messages_erreur : messages d'erreur
+#
+    self.messages_erreur = { 0 : "Tout va bien",
+                             1 : "==> Ce fichier est inconnu.",
+                             2 : "==> Ce type d'ouverture est inconnu.",
+                            10 : "==> Problème à l'ouverture.",
+                            11 : "==> Problème à la fermeture.",
+                            20 : "==> Problème à l'impression." }
+#
+#   info : niveau d'information au sens ASTER
+#
+    self.info = info
+#
+#   ligne_sep : ligne de séparation
+#
+    self.ligne_sep = "========================================================="
+    self.ligne_commentaire = "#" + self.ligne_sep + "\n"
+#
+    if info >= 2 :
+      print "Création du fichier : "+self.nomfic
+#
+#====
+# 2. Ouverture du fichier
+#====
+#
+  def Ouvre_Fichier ( self, type_ouvr ) :
+#
+# 2.0. ==> Préalables
+#
+    """
+    Ouvre le fichier en lecture ou écriture.
+    0 : tout s'est bien passé
+    1 : on veut ouvrir en lecture un fichier qui n'existe pas
+    2 : le mode d'ouverture est inconnu
+   10 : impossible d'ouvrir
+    """
+#
+    import os
+#
+# 2.1. ==> Le nom global du fichier
+#
+    self.nomfic_global = os.path.join(self.Rep_Calc_LOGICIEL_global,self.nomfic)
+#
+# 2.2. ==> Controles
+#
+    erreur = 0
+#
+    if ( type_ouvr == "w" or type_ouvr == "r" ) :
+#
+      if ( type_ouvr == "r" ) :
+        if not os.path.isfile(self.nomfic_global) :
+          erreur = 1          
+
+    else :
+#
+      self.jdc.cr.warn("Type d'ouverture : "+type_ouvr)
+      erreur = 2
+#
+# 2.3. ==> Ouverture vraie
+#
+    if not erreur :
+#
+      erreur_partiel = [0]
+      try :
+        self.fic = open( self.nomfic_global, type_ouvr )
+      except os.error,erreur_partiel :
+        self.jdc.cr.warn("Code d'erreur de open : " + str(erreur_partiel[0]) + " : " + erreur_partiel[1])
+        erreur = 10
+#
+# 2.4. ==> C'est fini
+#
+    if erreur :
+      self.jdc.cr.warn("Fichier : "+self.nomfic)
+      self.jdc.cr.warn(self.messages_erreur[erreur])
+#
+    return erreur
+#
+#====
+# 3. Fermeture du fichier
+#====
+#
+  def Ferme_Fichier ( self ) :
+#
+# 3.0. ==> Préalables
+#
+    """
+    Ferme le fichier.
+    0 : tout s'est bien passé
+   20 : impossible d'imprimer
+    """
+#
+    import os
+#
+# 3.1. ==> Controles
+#
+    erreur = 0
+#
+    if not os.path.isfile(self.nomfic_global) :
+      erreur = 1          
+#
+# 3.2. ==> Fermeture vraie
+#
+    if not erreur :
+#
+      erreur_partiel = [0]
+      try :
+        self.fic.close( )
+      except os.error,erreur_partiel :
+        self.jdc.cr.warn("Code d'erreur de close : " + str(erreur_partiel[0]) + " : " + erreur_partiel[1])
+        erreur = 11
+#
+# 3.3. ==> C'est fini
+#
+    if erreur :
+      self.jdc.cr.warn("Fichier : "+self.nomfic)
+      self.jdc.cr.warn(self.messages_erreur[erreur])
+#
+    return erreur
+#
+#====
+# 4. Impression du contenu du fichier
+#====
+#
+  def Imprime_Fichier ( self ) :
+#
+# 4.0. ==> Préalables
+#
+    """
+    Imprime le fichier.
+    0 : tout s'est bien passé
+   20 : impossible d'imprimer
+    """
+#
+# 4.1. ==> Lecture
+#
+    erreur = self.Ouvre_Fichier ( "r" )         
+    if not erreur :
+      les_lignes = self.fic.readlines()
+      erreur = self.Ferme_Fichier ( )         
+#
+# 4.2. ==> Impression
+#
+    if not erreur :
+#
+      print "\n"+self.ligne_sep
+      print "Contenu du fichier " + self.nomfic," :"
+      for ligne in les_lignes :
+        print ligne[:-1]
+      print self.ligne_sep+"\n"
+#
+# 4.4. ==> C'est fini
+#
+    if erreur :
+      erreur = 20
+      self.jdc.cr.warn("Fichier : "+self.nomfic)
+      self.jdc.cr.warn(self.messages_erreur[erreur])
+#
+    return erreur
+#
+#====
+# 5. Ecriture de lignes de commentaires
+#====
+#
+  def Ecrit_Commentaires ( self, comm ) :
+#
+    """
+    Liste = commentaires à écrire
+    Soit c'est une chaine qu'on écrit sur une ligne ;
+    Soit c'est une liste, qu'on écrit à raison de une par ligne.
+    Remarque : cela suppose que le fichier est ouvert en écriture
+    """
+#
+    if type(comm) == type([ ]) :
+      Liste = comm
+    else :
+      Liste = [comm]
+#
+    for ligne in Liste :
+      self.fic.write("# "+str(ligne)+"\n")
+#
+#====
+# 6. Ecriture de lignes de titres
+#====
+#
+  def Ecrit_Titre ( self, comm ) :
+#
+    """
+    Liste = commentaires à écrire, encadrés par des séparateurs
+    Soit c'est une chaine qu'on écrit sur une ligne ;
+    Soit c'est une liste, qu'on écrit à raison de une par ligne.
+    Remarque : cela suppose que le fichier est ouvert en écriture
+    """
+#
+    self.fic.write(self.ligne_commentaire)
+    self.Ecrit_Commentaires(comm)
+    self.fic.write(self.ligne_commentaire)
+#
+#====
+# 7. Ecriture d'une ligne de valeurs
+#====
+#
+  def Ecrit_Valeurs ( self, val ) :
+#
+    """
+    Liste = liste des valeurs à écrire, représenatn une ligne
+    Remarque : cela suppose que le fichier est ouvert en écriture
+    """
+#
+    if type(val) == type([ ]) :
+      ligne = " "
+      for aux in val :
+        ligne = ligne + " " + str(aux)
+    else :
+      ligne = str(val)
+#
+    self.fic.write(ligne+"\n")
+#
+#
+#=======================================================================================
+#=======================================================================================
+
+
+#
+#
+if __name__ == "__main__" :
+#
+  import os
+  import sys
+  import tempfile
+#
+# 1. ==> Préalable
+#
+  Rep_Calc_LOGICIEL_global = tempfile.mktemp()
+  os.mkdir(Rep_Calc_LOGICIEL_global)
+#
+  jdc = None
+#
+# 2. ==> Création de la classe
+#
+  nomfic = "dataGrad"
+  fic = fiabilite_fichier ( jdc, Rep_Calc_LOGICIEL_global , nomfic )
+#
+# 3. ==> Ouverture du fichier
+#
+  erreur = fic.Ouvre_Fichier ( "w" )
+#
+# 4. ==> Remplissage du fichier
+#
+  if not erreur :
+    aux = ["Titre 1", "Titre 2"]
+    fic.Ecrit_Titre (aux)
+    aux = ["Ligne 1", "Ligne 2"]
+    fic.Ecrit_Commentaires (aux)
+    aux = "Ligne en forme de chaine"
+    fic.Ecrit_Commentaires (aux)
+    aux = 1789.1792
+    fic.Ecrit_Commentaires (aux)
+    aux = [1, 0.0]
+    fic.Ecrit_Valeurs (aux)
+    aux = 1958.
+    fic.Ecrit_Valeurs (aux)
+#
+# 5. ==> Fermeture du fichier
+#
+  if not erreur :
+    erreur = fic.Ferme_Fichier ( )
+#
+# 4. ==> Impression du fichier
+#
+  if not erreur :
+    erreur = fic.Imprime_Fichier ( )
+#
+# 4. ==> La fin
+#
+  Liste = os.listdir(Rep_Calc_LOGICIEL_global)
+#
+  for nomfic in Liste :
+    fic_total = os.path.join(Rep_Calc_LOGICIEL_global,nomfic)
+    os.chmod  (fic_total,0755)
+    os.remove (fic_total)
+  os.rmdir (Rep_Calc_LOGICIEL_global)
+#
+  if erreur :
+    mess = "Erreur " + str(erreur)
+  else :
+    mess = "Fin normale."
+  sys.exit(mess)
diff --git a/Aster/Cata/cataSTA10/Macro/fiabilite_mefisto.py b/Aster/Cata/cataSTA10/Macro/fiabilite_mefisto.py
new file mode 100644 (file)
index 0000000..7ec2776
--- /dev/null
@@ -0,0 +1,460 @@
+#@ MODIF fiabilite_mefisto Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+
+import os
+
+
+def fiabilite_mefisto ( self, Rep_Calc_LOGICIEL_global,
+                        INFO, VERSION,
+                        SEUIL, SEUIL_TYPE,
+                        VARIABLE,
+                        valeurs_lois,
+                        **args ) :
+#
+#    valeurs_lois est un dictionnaire indexé sur les variables.
+#    Chaque case, valeurs_lois[m], est un dictionnaire contenant :
+#    d["v_moy_physique"] = valeur moyenne physique
+#    d["v_moy_loi"] = valeur moyenne de la loi
+#    d["v_min_loi"] = valeur minimale de la loi
+#    d["v_max_loi"] = valeur maximale de la loi
+#    d["sigma_loi"] = ecart type de la loi
+#
+#    args est le dictionnaire des arguments optionnels
+#    args.keys() est la liste des mots-clés
+#    args.keys()[0] est la premiere valeur de cette liste
+#    args.keys()[1:] est la liste des valeurs suivantes dans cette liste
+#    args.keys(mot_cle) représente le contenu de la variable mot_cle dans la macro appelante.
+#
+  """ Ecriture des données spécifiques à MEFISTO. """
+#
+  import numpy
+  from Macro import fiabilite_fichier
+  from Utilitai.Utmess import  UTMESS
+#
+#____________________________________________________________________
+#
+# 1. Préalables
+#____________________________________________________________________
+#
+#
+  messages_erreur = { 0 : "Tout va bien",
+                      1 : "Fichier inconnu.",
+                      2 : "Problème d'ouverture de fichier.",
+                     10 : "Problème d'ouverture de fichier.",
+                     11 : "Problème de fermeture de fichier.",
+                     20 : "Problème d'impression de fichier.",
+                     50 : "Donnée inacceptable.",
+                    100 : "Erreur." }
+#
+  trad_oui_non = { "OUI" : 1,
+                   "NON" : 0 }
+#
+  erreur = 0
+#
+  while not erreur :
+#
+#____________________________________________________________________
+#
+# 2. Les fichiers pour le logiciel de fiabilité
+#    Ils sont créés dans le répertoire d'exécution du logiciel de fiabilité, avec leurs noms officiels
+#____________________________________________________________________
+#
+#
+    fic_dataMenu  = "dataMenu"
+    fic_dataStoch = "dataStoch"
+    fic_dataNum   = "dataNum"
+    fic_dataGrad  = "dataGrad"
+#
+#____________________________________________________________________
+#
+# 3. Construction du fichier 'dataMenu'
+#____________________________________________________________________
+#
+# 3.1 ==> Ouverture du fichier
+#
+    f_menu = fiabilite_fichier.fiabilite_fichier ( self, Rep_Calc_LOGICIEL_global, fic_dataMenu, INFO )
+    erreur = f_menu.Ouvre_Fichier ( "w" )
+    if erreur :
+      break
+#
+# 3.2 ==> Ecriture des données nécessaires
+#
+    f_menu.Ecrit_Titre ("MENU DU PROGRAMME MEFISTO")
+    f_menu.Ecrit_Titre ("1 <=> OUI et 0 <=> NON (entiers)")
+#
+    f_menu.Ecrit_Titre ("Recherche du point de conception")
+    aux = trad_oui_non[args["RECH_PT_CONCEPT"]]
+    f_menu.Ecrit_Valeurs (aux)
+#
+    f_menu.Ecrit_Titre ("First Order Reliability Analyses")
+    aux = trad_oui_non[args["METHODE_FORM"]]
+    f_menu.Ecrit_Valeurs (aux)
+#
+    f_menu.Ecrit_Titre ("Second Order Reliability Analyses")
+    aux = trad_oui_non[args["METHODE_SORM"]]
+    f_menu.Ecrit_Valeurs (aux)
+#
+    f_menu.Ecrit_Titre ("Importance Sampling Analyses")
+    aux = trad_oui_non[args["TIRAGE_IMPORTANCE"]]
+    f_menu.Ecrit_Valeurs (aux)
+#
+    f_menu.Ecrit_Titre ("Optimality Test (1) : Hessian Test")
+    aux = trad_oui_non[args["T_HESSIEN"]]
+    f_menu.Ecrit_Valeurs (aux)
+#
+    f_menu.Ecrit_Titre ("Optimality Test (2) : Sphere Test")
+    aux = trad_oui_non[args["T_SPHERE"]]
+    f_menu.Ecrit_Valeurs (aux)
+#
+    f_menu.Ecrit_Titre ("Optimality Test (3) : Strong Max Test")
+    aux = trad_oui_non[args["T_MAXIMUM_FORT"]]
+    f_menu.Ecrit_Valeurs (aux)
+#
+    f_menu.Ecrit_Titre ("Experiment Plan")
+    aux = trad_oui_non[args["PLAN_EXPERIENCE"]]
+    f_menu.Ecrit_Valeurs (aux)
+#
+    f_menu.Ecrit_Titre ("Polynomial Taylor Approximation (order 2)")
+    aux = trad_oui_non[args["POLYNOME_TAYLOR"]]
+    f_menu.Ecrit_Valeurs (aux)
+#
+# 3.3 ==> Fermeture du fichier
+#
+    erreur = f_menu.Ferme_Fichier ( )
+    if erreur :
+      break
+#
+    if INFO >= 2 :
+      erreur = f_menu.Imprime_Fichier ( )
+      if erreur :
+        break
+#
+#____________________________________________________________________
+#
+# 4. Construction du fichier "dataStoch"
+#____________________________________________________________________
+#
+# 4.1 ==> Ouverture du fichier
+#
+    f_stoch = fiabilite_fichier.fiabilite_fichier ( self, Rep_Calc_LOGICIEL_global, fic_dataStoch, INFO )
+    erreur = f_stoch.Ouvre_Fichier ( "w" )
+    if erreur :
+      break
+#
+# 4.2 ==> Nombre d'occurence de VARIABLE
+#
+    nb_occu_variable = len(VARIABLE)
+#
+# 4.3 ==> Ecriture des données nécessaires
+#
+    f_stoch.Ecrit_Titre ("Code name")
+    aux=VERSION.replace("_",".")
+    aux=aux.replace("N","n")
+    aux=aux.replace("V","v")
+    f_stoch.Ecrit_Valeurs ( "aster_" + aux )
+#
+    aux = [ "Gradients evaluated by the code" ]
+    aux.append("1 : Au moins 1 ; 0 : aucun")
+    f_stoch.Ecrit_Titre (aux)
+    gradient = 0
+    for m in VARIABLE :
+      if m["GRADIENT"] == "OUI" : gradient = 1
+    f_stoch.Ecrit_Valeurs (gradient)
+#
+    f_stoch.Ecrit_Titre ("Variates number")
+    f_stoch.Ecrit_Valeurs ( nb_occu_variable )
+#
+    aux = [ "Stochastic Variates" ]
+    aux.append("1: Uniforme (min, max)")
+    aux.append("2: Normal (mean, std dev)")
+    aux.append("3: LogNormal (mean, std dev, min)")
+    aux.append("4: Normal Truncated (mean, std dev, min, max)")
+    f_stoch.Ecrit_Titre (aux)
+#
+    for m in VARIABLE :
+#
+      d = valeurs_lois[m]
+      if m["LOI"] == "UNIFORME" :
+        f_stoch.Ecrit_Valeurs ( [ m["NOM"],  1 , d["v_min_loi"] , d["v_max_loi"] ] )
+      elif m["LOI"] == "NORMALE" :
+        f_stoch.Ecrit_Valeurs ( [ m["NOM"],  2 , d["v_moy_loi"] , d["sigma_loi"] ] )
+      elif m["LOI"] == "LOGNORMALE" :
+        f_stoch.Ecrit_Valeurs ( [ m["NOM"],  3 , d["v_moy_loi"] , d["sigma_loi"] , d["v_min_loi"] ] )
+      elif m["LOI"] == "NORMALE_TRONQUEE" :
+        f_stoch.Ecrit_Valeurs ( [ m["NOM"],  4 , d["v_moy_loi"] , d["sigma_loi"] , d["v_min_loi"] , d["v_max_loi"] ] )
+      else :
+        erreur = 50
+#
+    if erreur :
+      break
+#
+    f_stoch.Ecrit_Titre ("Initial Points")
+    for m in VARIABLE :
+      if m["POINT_INI"] is None :
+        aux = valeurs_lois[m]["v_moy_physique"]
+      else :
+        aux = m["POINT_INI"]
+      f_stoch.Ecrit_Valeurs ( aux )
+#
+    f_stoch.Ecrit_Titre ("Reference Points")
+    for m in VARIABLE :
+      if m["POINT_REF"] is None :
+        aux = valeurs_lois[m]["v_moy_physique"]
+      else :
+        aux = m["POINT_REF"]
+      f_stoch.Ecrit_Valeurs ( aux )
+#
+    f_stoch.Ecrit_Titre ("Design Points")
+    for m in VARIABLE :
+      if args["RECH_PT_CONCEPT"] == "OUI" :
+        aux = 1792.
+      elif m["POINT_CONCEPT"] is None :
+        aux = valeurs_lois[m]["v_moy_physique"]
+      else :
+        aux = m["POINT_CONCEPT"]
+      f_stoch.Ecrit_Valeurs ( aux )
+#
+    f_stoch.Ecrit_Titre ("Correlation matrix fictive")
+#    if args.has_key('MATRICE'):
+    if args["MATRICE"] != None:
+      if len(args["MATRICE"]) != nb_occu_variable**2:
+#        +' DU MOT CLE MATRICE DOIT ETRE EGAL A : '
+#        +str(nb_occu_variable**2))
+        UTMESS('F','FIABILITE0_1',vali=nb_occu_variable**2)
+      for m in range(nb_occu_variable) :
+        aux = [ ]
+        for n in range(nb_occu_variable) :
+          aux.append(args["MATRICE"][n + m*nb_occu_variable])
+        f_stoch.Ecrit_Valeurs ( aux )
+    else:
+        aux=numpy.identity(nb_occu_variable)
+        aux=numpy.concatenate(aux)
+        aux=aux.tolist()
+        f_stoch.Ecrit_Valeurs ( aux )
+#
+    f_stoch.Ecrit_Titre ("Parameter threshold value")
+    if SEUIL_TYPE == "MAXIMUM" :
+      aux = SEUIL
+    else :
+      aux = -SEUIL
+    f_stoch.Ecrit_Valeurs ( aux )
+#
+# 4.4 ==> Fermeture du fichier
+#
+    erreur = f_stoch.Ferme_Fichier ( )
+    if erreur :
+      break
+#
+    if INFO >= 2 :
+      erreur = f_stoch.Imprime_Fichier ( )
+      if erreur :
+        break
+#
+#____________________________________________________________________
+#
+# 5. Construction du fichier 'dataNum'
+#____________________________________________________________________
+#
+# 5.1 ==> Ouverture du fichier
+#
+    f_num = fiabilite_fichier.fiabilite_fichier ( self, Rep_Calc_LOGICIEL_global, fic_dataNum, INFO )
+    erreur = f_num.Ouvre_Fichier ( "w" )
+    if erreur :
+      break
+#
+# 5.2 ==> Ecriture des données nécessaires
+#
+    f_num.Ecrit_Titre ("Parameters : EpsU, EpsG, Tau, Omega, iterMax")
+    if args["RECH_PT_CONCEPT"] == "OUI" :
+      f_num.Ecrit_Valeurs (args["EPSILON_U"])
+      f_num.Ecrit_Valeurs (args["EPSILON_G"])
+      f_num.Ecrit_Valeurs (args["TAU"])
+      f_num.Ecrit_Valeurs (args["OMEGA"])
+      f_num.Ecrit_Valeurs (args["ITER_MAX"])
+    else :
+      aux = 0.1848
+      for k in range(5) :
+        f_num.Ecrit_Valeurs (aux)
+#
+    f_num.Ecrit_Titre ("Parameters : hgrad, hhess")
+    f_num.Ecrit_Valeurs (args["HGRAD"])
+    f_num.Ecrit_Valeurs (args["HHESS"])
+#
+    aux = [ "Parameter Optimality Test(sphere)" ]
+    aux.append("1: Parametric Method (Point Number in each direction)")
+    aux.append("2: Gaussian Method (Total Point Number)")
+    aux.append("3: Rejection Method (Total Point Number)")
+    f_num.Ecrit_Titre (aux)
+#
+    if args["T_SPHERE"] == "OUI" :
+#
+      if args["METHODE_TEST"] == "PARAMETRIQUE" :
+        aux1 = 1
+      elif args["METHODE_TEST"] == "GAUSSIENNE" :
+        aux1 = 2
+      elif args["METHODE_TEST"] == "REJECTION" :
+        aux1 = 3
+      else :
+        self.cr.warn("METHODE DE TEST : "+args["METHODE_TEST"])
+        erreur = 50
+        break
+#
+      aux2 = args["NB_POINT"]
+#
+    else :
+#
+#     remarque : il faut mettre une valeur plausible en aux1, sinon plantage violent ...
+      aux1 = 1
+      aux2 = 1789
+#
+    f_num.Ecrit_Valeurs ( [ aux1 , aux2 ] )
+#
+    aux = [ "Parameters : alpha, beta" ]
+    aux.append("alpha: common net")
+    aux.append("beta: extreme net")
+    f_num.Ecrit_Titre (aux)
+    if args["PLAN_EXPERIENCE"] == "OUI" :
+      aux1 = args["ALPHA"]
+      aux2 = args["BETA"]
+    else :
+      aux1 = 1789.0
+      aux2 = 1789.0
+    f_num.Ecrit_Valeurs ( aux1 )
+    f_num.Ecrit_Valeurs ( aux2 )
+#
+    f_num.Ecrit_Titre ("Parameters Strong Max Test : cosLim, dProb")
+    if args["T_MAXIMUM_FORT"] == "OUI" :
+      aux1 = args["COS_LIM"]
+      aux2 = args["DPROB"]
+    else :
+      aux1 = 0.1789
+      aux2 = 0.1789
+    f_num.Ecrit_Valeurs ( aux1 )
+    f_num.Ecrit_Valeurs ( aux2 )
+#
+    f_num.Ecrit_Titre ("Parameter Importance Samplings : Simulation Number")
+    if args["TIRAGE_IMPORTANCE"] == "OUI" :
+      aux = args["NB_SIMULATION"]
+    else :
+      aux = 1945
+    f_num.Ecrit_Valeurs ( aux )
+#
+# 5.3 ==> Fermeture du fichier
+#
+    erreur = f_num.Ferme_Fichier ( )
+    if erreur :
+      break
+#
+    if INFO >= 2 :
+      erreur = f_num.Imprime_Fichier ( )
+      if erreur :
+        break
+#
+#____________________________________________________________________
+#
+# 6. Construction du fichier 'dataGrad'
+#____________________________________________________________________
+#
+# 6.1 ==> Création du fichier
+#
+    f_grad = fiabilite_fichier.fiabilite_fichier ( self, Rep_Calc_LOGICIEL_global, fic_dataGrad, INFO )
+    erreur = f_grad.Ouvre_Fichier ( "w" )
+    if erreur :
+      break
+#
+# 6.2 ==> Ecriture des données nécessaires
+#
+    f_grad.Ecrit_Titre ("Commentaires")
+#
+    for m in VARIABLE :
+      f_grad.Ecrit_Commentaires (m["NOM"])
+      if m["GRADIENT"] == "OUI" :
+        gradient = 1
+        increment = 0.0
+      else :
+        gradient = 0
+        increment = m["INCREMENT"]
+      aux = [gradient,increment]
+      f_grad.Ecrit_Valeurs (aux)
+#
+# 6.3 ==> Fermeture du fichier
+#
+    erreur = f_grad.Ferme_Fichier ( )
+    if erreur :
+      break
+#
+    if INFO >= 2 :
+      erreur = f_grad.Imprime_Fichier ( )
+      if erreur :
+        break
+#
+#____________________________________________________________________
+#
+# 7. C'est fini !
+#____________________________________________________________________
+#
+    break
+#
+  if erreur :
+    if not messages_erreur.has_key(erreur) :
+      erreur = 100
+    self.cr.warn(messages_erreur[erreur])
+    erreur = 11
+#
+  return erreur
+#
+##########################  Fin de la fonction##################################
+#
+##########################   Auto-test##################################
+#
+if __name__ == "__main__" :
+#
+  import os
+  import sys
+  import tempfile
+#
+  Rep_Calc_LOGICIEL_global = tempfile.mktemp()
+  os.mkdir(Rep_Calc_LOGICIEL_global)
+#
+  INFO = 2
+  VERSION = "V3_2"
+  SEUIL = 1789.
+  SEUIL_TYPE = "MAXIMUM"
+  VARIABLE = []
+  args = {}
+  valeurs = {}
+#
+  erreur = fiabilite_mefisto ( None, Rep_Calc_LOGICIEL_global,
+                        INFO, VERSION,
+                        SEUIL, SEUIL_TYPE,
+                        VARIABLE,
+                        valeurs,
+                        **args )
+###  print "Erreur = ", erreur
+  Liste = os.listdir(Rep_Calc_LOGICIEL_global)
+#
+  for nomfic in Liste :
+    fic_total = os.path.join(Rep_Calc_LOGICIEL_global,nomfic)
+    os.chmod  (fic_total,0755)
+    os.remove (fic_total)
+  os.rmdir (Rep_Calc_LOGICIEL_global)
+#
+  sys.exit("blabla")
diff --git a/Aster/Cata/cataSTA10/Macro/gene_vari_alea_ops.py b/Aster/Cata/cataSTA10/Macro/gene_vari_alea_ops.py
new file mode 100644 (file)
index 0000000..4c1ade8
--- /dev/null
@@ -0,0 +1,90 @@
+#@ MODIF gene_vari_alea_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from math import sqrt,log,exp,pi,atan2,tan
+
+def gene_vari_alea_ops(self,**args):
+  self.set_icmd(1)
+  return 0
+
+def gene_vari_alea_init(self,d):
+  from Utilitai.Utmess import  UTMESS
+  a     =self.etape['BORNE_INF']
+  moyen =self.etape['VALE_MOY' ]
+  TYPE  =self.etape['TYPE']
+  if self['INIT_ALEA']!=None :
+     jump =self.etape['INIT_ALEA' ]
+     self.iniran(jump)
+  if   TYPE=='EXP_TRONQUEE' :
+     b     =self.etape['BORNE_SUP']
+     if (a>=b) :
+         UTMESS('F','PROBA0_1',valr=[a,b])
+     elif (moyen<=a)or(moyen>=b) :
+         UTMESS('F','PROBA0_2',valr=[a,moyen,b])
+     k=1./(moyen-a)
+     if (exp(-b*k)<1.E-12) :
+         UTMESS('F','PROBA0_3')
+     # résolution par point fixe
+     eps   =1.E-4
+     nitmax=100000
+     test  =0.
+     while abs((test-k)/k)>eps :
+         test = k
+         k    = 1./(moyen-(a*exp(-a*k) - b*exp(-b*k))/(exp(-a*k) - exp(-b*k)))
+     # génération de la variable aléatoire
+     alpha = exp(-a*k) - exp(-b*k)
+     self.sd.valeur=-( log(exp(-a*k)-alpha*self.getran()[0] ) ) /k
+  elif TYPE=='EXPONENTIELLE' :
+     if (moyen<=a) :
+        UTMESS('F','PROBA0_4',valr=[moyen,a])
+     v = moyen-a
+     u=self.getran()[0]
+     x = -log(1-u)
+     self.sd.valeur=a + v*x
+  elif TYPE=='GAMMA'         :
+     delta =self.etape['COEF_VAR' ]
+     if (moyen<=a) :
+        UTMESS('F','PROBA0_4',valr=[moyen,a])
+     v = moyen-a
+     alpha = 1./(delta**2)
+     if (alpha<=1.) :
+        UTMESS('F','PROBA0_5')
+     gamma2 = alpha-1.
+     gamm1  = 1./gamma2
+     beta   = sqrt(2.*alpha-1.)
+     beta2  = 1./(beta**2)
+     f0     = 0.5+(1./pi)*atan2(-gamma2/beta,1.)
+     c1     = 1.-f0
+     c2     = f0-0.5
+     vref   = 0.
+     vv     = -1.
+#
+     while (-vv>vref) :
+        u=self.getran()[0]
+        gamdev = beta*tan(pi*(u*c1+c2))+gamma2
+        unif=self.getran()[0]
+        if unif<0. :
+           UTMESS('F','PROBA0_6')
+        vv= -log(unif)
+        vref = log(1+beta2*((gamdev-gamma2)**2))+gamma2*log(gamdev*gamm1)-gamdev+gamma2
+#
+     if vv<=0. :
+        UTMESS('F','PROBA0_7')
+     self.sd.valeur = a + v*(delta**2)*gamdev
diff --git a/Aster/Cata/cataSTA10/Macro/impr_diag_campbell_ops.py b/Aster/Cata/cataSTA10/Macro/impr_diag_campbell_ops.py
new file mode 100644 (file)
index 0000000..4767042
--- /dev/null
@@ -0,0 +1,1212 @@
+#@ MODIF impr_diag_campbell_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE Mohamed TORKHANI
+
+
+
+def impr_diag_campbell_ops(self, MAILLAGE, MODES, NFREQ_camp, TYP_PREC, TYP_TRI,
+                           UNIT_FLE, UNIT_TOR, UNIT_LON, UNIT_TOT, UNIT_INT,L_S, **args) :
+# Macro permettant de tracer le diagramme de Campbell suivant 
+# le type de suivi des modes et le type de calcul de la precession
+#Type de suivi, 0 SANS_TRI, 1 TRI_PREC, 2 TRI_FORM_MOD
+#Type de precession, 1 somme, 2 grande orbite
+
+    import numpy
+    from math import pi
+    import aster
+    from Accas import _F
+    from Noyau.N_types import is_float
+
+    from Macro.impr_diag_campbell_utils import (
+        CLASS_MODES, EXTR_FREQ, TRI_MODE_MACf, TRI_MODE_MACt, TRI_MODE_MACl, CALC_MACf,
+        CALC_MACt, CALC_MACl, CALC_PREC, TRI_MODE_PREC_DI, affiche_tab, affiche_tabint,
+        calc_pas, color_camp, sup_redon_list, sup_redon_listv, save_intersec
+    )
+
+
+    # On importe les definitions des commandes a utiliser dans la macro
+    
+    POST_RELEVE_T     =self.get_cmd('POST_RELEVE_T')
+    EXTR_MODE         =self.get_cmd('EXTR_MODE')
+    NORM_MODE         =self.get_cmd('NORM_MODE')
+    RECU_TABLE        =self.get_cmd('RECU_TABLE')
+    MAC_MODES         =self.get_cmd('MAC_MODES')
+    DEFI_LIST_REEL    =self.get_cmd('DEFI_LIST_REEL')
+    DEFI_FONCTION     =self.get_cmd('DEFI_FONCTION')
+    EXTR_TABLE        =self.get_cmd('EXTR_TABLE')
+    IMPR_FONCTION     =self.get_cmd('IMPR_FONCTION')
+    IMPR_RESU         =self.get_cmd('IMPR_RESU')
+    IMPR_TABLE        =self.get_cmd('IMPR_TABLE')
+    DEFI_FICHIER      =self.get_cmd('DEFI_FICHIER')
+    DETRUIRE          =self.get_cmd('DETRUIRE')
+    
+
+    # La macro compte pour 1 dans la numerotation des commandes
+    self.set_icmd(1)
+
+    
+    lvit=[None]
+    # Extraire les vitesses de rotation  
+    nb_temp=0
+    while 1 :
+        try:
+            print 'nb_temp', nb_temp
+            lvit[nb_temp]         = MODES['VITE_ROTA' ,nb_temp+1];     
+            nb_temp=nb_temp+1;
+            lvit.append([None]);
+        except KeyError:
+            break
+    
+    VITE_ROTA = lvit[0:nb_temp];
+    num_vit_tri=sup_redon_listv(VITE_ROTA);
+    # Recupere les modes suivant l'ordre de la liste des vitesses de rotation
+    nbV1=len(VITE_ROTA);
+    lmo=[None]*nbV1
+    for ii in range(0,nbV1):
+        itri = num_vit_tri[ii];
+        lmo[ii]=EXTR_TABLE(TYPE_RESU='MODE_MECA',
+                       TABLE=MODES,
+                       NOM_PARA='NOM_SD',
+                       FILTRE=_F(NOM_PARA='NUME_VITE',VALE_I=itri),);
+   
+    L_VIT1=[];  
+     
+    if type(VITE_ROTA)==list:
+        L_VIT1=VITE_ROTA;
+    elif type(VITE_ROTA)==tuple:
+        L_VIT1=list(VITE_ROTA);
+    elif is_float(VITE_ROTA):           
+        L_VIT1.append(VITE_ROTA);
+    
+
+    nbV=len(L_VIT1);
+
+    chaine='\n'
+    aster.affiche('RESULTAT', chaine)
+    chaine='Liste triee des vitesses en rad/s'
+    aster.affiche('RESULTAT', chaine)
+    for ii in range(nbV):
+        chaine= '%15.5E' %L_VIT1[ii];
+        aster.affiche('RESULTAT', chaine)
+
+    #-------------------------------------------------------------------------
+    # Tester le nombre de frequences calculees pour chaque vitesse de rotation
+    #-------------------------------------------------------------------------
+    
+    nb_FREQ=[];
+    for ii in range(nbV):
+        # frequences totales
+        tabfreq = RECU_TABLE(CO= lmo[ii],NOM_PARA='FREQ',);
+        tab2=tabfreq.EXTR_TABLE();
+        tabf=tab2.FREQ;       
+        nb_FREQ_prec=nb_FREQ;
+        nb_FREQ.append(len(tabf));
+        
+        DETRUIRE(CONCEPT=_F(NOM=(tabfreq)),INFO=1)
+        
+    nbf_max=max(nb_FREQ);
+    nbf_min=min(nb_FREQ);
+    NFREQ =nbf_min;
+    if nbf_max!=nbf_min:
+         chaine='\n'
+         aster.affiche('RESULTAT', chaine)
+         chaine='Les nombres de frequences sont differents pour les vitesses de rotation.'
+         aster.affiche('RESULTAT', chaine)
+         chaine='Pour poursuivre le calcul, NFREQ = %d' %NFREQ
+         aster.affiche('RESULTAT', chaine)
+    else:
+        chaine='\n'
+        aster.affiche('RESULTAT', chaine)
+        chaine='Nombre de valeurs propres detectees est %d' %NFREQ
+        aster.affiche('RESULTAT', chaine)
+    if NFREQ_camp > NFREQ:
+            chaine='Nombre de frequences demandees pour le trace  %d' %NFREQ_camp
+            aster.affiche('RESULTAT', chaine)
+            NFREQ_camp = NFREQ-4;
+            chaine='Nombre de frequences pour le trace  %d' %NFREQ_camp
+            aster.affiche('RESULTAT', chaine)
+    else: 
+           chaine='Nombre de frequences demandees pour le trace  %d' %NFREQ_camp
+           aster.affiche('RESULTAT', chaine)
+    if NFREQ_camp <=0 :      
+        chaine='Le trace du diagramme de Campbell s''arrete !.'
+        aster.affiche('RESULTAT', chaine)
+       
+  
+    if NFREQ_camp>0:
+    
+# ------------------------------------------------------------------
+# Classe les modes en flexion, en torsion , en traction/ compression
+# ------------------------------------------------------------------
+        Mf=[];
+        Mt=[];
+        Ml=[];
+    
+  
+        # Recuperer les noeuds du maillage
+        # construction des vecteurs jeveux
+        nom_mail=MAILLAGE.nom
+        lenm=len(nom_mail)
+        nom_mail=nom_mail+' '*(8-lenm)
+        vectnoeu=nom_mail+'.NOMNOE'
+        L_GR_NOEUD=aster.getvectjev(vectnoeu)
+    
+    
+        NOEU=len(L_GR_NOEUD);
+        C_MODES=CLASS_MODES(self,lmo,NFREQ,NFREQ_camp,L_GR_NOEUD,L_VIT1);
+
+        NFREQ_f=C_MODES[0];
+        NFREQ_t=C_MODES[1];
+        NFREQ_l=C_MODES[2];
+        Mf=C_MODES[3];
+        Mt=C_MODES[4];
+        Ml=C_MODES[5];
+    
+        # Initialisation des tableaux de connexion apres classement
+        # en gardant la numerotation globale des modes         
+        NVT=C_MODES[6];
+        NVTf_int=C_MODES[7];
+        NVTt_int=C_MODES[8];
+        NVTl_int=C_MODES[9];
+        NFREQ_fc=C_MODES[10];
+        NFREQ_tc=C_MODES[11];
+        NFREQ_lc=C_MODES[12];
+
+        chaine='\n'
+        aster.affiche('RESULTAT', chaine)
+        chaine='Nombre de frequences totale :' + str(NFREQ)
+        aster.affiche('RESULTAT', chaine)
+        chaine='Nombre de frequences en flexion :' + str(NFREQ_f) + ' ' + str(NFREQ_fc)
+        aster.affiche('RESULTAT', chaine)
+        chaine='Nombre de frequences torsion :' + str(NFREQ_t) + ' ' + str(NFREQ_tc)
+        aster.affiche('RESULTAT', chaine)
+        chaine='Nombre de frequences traction/compression :' + str(NFREQ_l) + ' ' + str(NFREQ_lc)
+        aster.affiche('RESULTAT', chaine)
+
+        chaine='\n'
+        aster.affiche('RESULTAT', chaine)
+        chaine='Initialisation des tableaux de connexion'
+        aster.affiche('RESULTAT', chaine)
+        chaine='Modes non classes'
+        aster.affiche('RESULTAT', chaine)
+        affiche_tabint(NVT,NFREQ, nbV);
+        if NFREQ_f>0:
+            chaine='Modes de flexion'
+            aster.affiche('RESULTAT', chaine)        
+            affiche_tabint(NVTf_int,NFREQ_f, nbV);
+        if NFREQ_t>0:
+            chaine='Modes de torsion'
+            aster.affiche('RESULTAT', chaine)        
+            affiche_tabint(NVTt_int,NFREQ_t, nbV);
+        if NFREQ_l>0:
+            chaine='Modes de traction/compression'
+            aster.affiche('RESULTAT', chaine)        
+            affiche_tabint(NVTl_int,NFREQ_l, nbV);
+
+    #-----------------------
+    #Extraire les frequences
+    #-----------------------
+        FREQ=EXTR_FREQ(self,lmo,Mf,Mt,Ml, NFREQ, NFREQ_f, NFREQ_t, NFREQ_l);
+        FRQ=FREQ[0]
+        FRQf=FREQ[1]
+        FRQt=FREQ[2]
+        FRQl=FREQ[3]
+        FRQ_max=FREQ[4]
+        AMOf=FREQ[5]
+    
+        chaine='\n'
+        aster.affiche('RESULTAT', chaine)
+        chaine='Frequences totales'
+        aster.affiche('RESULTAT', chaine)
+        affiche_tab(FRQ,NFREQ, nbV);
+        if NFREQ_f>0:
+            chaine='\n'
+            aster.affiche('RESULTAT', chaine)
+            chaine='Frequences en flexion'
+            aster.affiche('RESULTAT', chaine)
+            affiche_tab(FRQf,NFREQ_f, nbV);
+            chaine='\n'
+            aster.affiche('RESULTAT', chaine)
+            chaine='Amortissement reduit'
+            aster.affiche('RESULTAT', chaine)
+            affiche_tab(AMOf,NFREQ_f, nbV);
+            chaine='\n'
+            aster.affiche('RESULTAT', chaine)
+        if NFREQ_t>0:
+            chaine='Frequences en torsion'
+            aster.affiche('RESULTAT', chaine)
+            affiche_tab(FRQt,NFREQ_t, nbV);
+            chaine='\n'
+            aster.affiche('RESULTAT', chaine)
+        if NFREQ_l>0:
+            chaine='Frequences en traction/compression'
+            aster.affiche('RESULTAT', chaine)
+            affiche_tab(FRQl,NFREQ_l, nbV);
+
+    # Initialisation des tableaux de connexion 
+    # nouveau numerotation de modes par type de mode 
+    # Sans tri
+        if NFREQ_f>0 :
+            NVTf =numpy.zeros((NFREQ_f, nbV), int); 
+            for ii in range(nbV):
+                for jj in range(NFREQ_f):
+                    NVTf[jj][ii]=jj+1;
+            chaine='\n'
+            aster.affiche('RESULTAT', chaine)
+            chaine='Tableau de connexion initial en flexion'
+            aster.affiche('RESULTAT', chaine)        
+            affiche_tabint(NVTf,NFREQ_f, nbV);
+
+        if NFREQ_t>0 :    
+            NVTt =numpy.zeros((NFREQ_t, nbV), int); 
+            for ii in range(nbV):
+                for jj in range(NFREQ_t):
+                    NVTt[jj][ii]=jj+1;
+            chaine='\n'
+            aster.affiche('RESULTAT', chaine)
+            chaine='Tableau de connexion initial en torsion'
+            aster.affiche('RESULTAT', chaine)        
+            affiche_tabint(NVTt,NFREQ_t, nbV);
+
+        if NFREQ_l>0 :     
+            NVTl =numpy.zeros((NFREQ_l, nbV), int); 
+            for ii in range(nbV):
+                for jj in range(NFREQ_l):
+                    NVTl[jj][ii]=jj+1;
+            chaine='\n'
+            aster.affiche('RESULTAT', chaine)
+            chaine='Tableau de connexion initial en traction/compression'
+            aster.affiche('RESULTAT', chaine)        
+            affiche_tabint(NVTl,NFREQ_l, nbV);
+
+    # ------------------------------------------------------------------
+    # Tri par forme des modes
+    # Tri des frequences par calcul des coefficients MAC
+    # Remplissage du tableau de connexion
+    # ------------------------------------------------------------------
+        if TYP_TRI==2 :
+            # ------------------------------------------------------------------
+            # Calcul de la matrice MAC entre les bases successives en flexion
+            # ------------------------------------------------------------------
+            if NFREQ_f>0:
+                LMACf=CALC_MACf(self, Mf, NFREQ_f) ;
+                chaine='\n'
+                aster.affiche('RESULTAT', chaine) 
+                chaine=' Tri par forme des modes TRI_FORM_MOD'
+                aster.affiche('RESULTAT', chaine)
+                              
+                for ii in range(nbV-1):
+                    chaine='\n'
+                    aster.affiche('RESULTAT', chaine)                    
+                    iv=nbV-ii-2
+                    NVTf_mac=TRI_MODE_MACf(self, LMACf[iv],NFREQ_f, NVTf, iv);
+
+                OMIN = L_VIT1[0];
+                if(OMIN==0) :
+                    for ii in range(NFREQ_f):
+                        NVTf_mac[ii][0]=NVTf_mac[ii][1] ;
+
+                chaine='\n'
+                aster.affiche('RESULTAT', chaine)
+                chaine='Tableau de connexion en flexion'
+                aster.affiche('RESULTAT', chaine)        
+                affiche_tabint(NVTf_mac,NFREQ_f, nbV);   
+
+            # ------------------------------------------------------------------
+            # Calcul de la matrice MAC entre les bases successives en torsion
+            # ------------------------------------------------------------------
+            if NFREQ_t>0:
+                LMACt=CALC_MACt(self, Mt, NFREQ_t) ;
+
+                for ii in range(nbV-1):
+                    chaine='\n'
+                    aster.affiche('RESULTAT', chaine)                    
+                    iv=nbV-ii-2                
+                    NVTt=TRI_MODE_MACt(self, LMACt[iv],NFREQ_t, NVTt, iv);
+                chaine='\n'
+                aster.affiche('RESULTAT', chaine)
+                chaine='Tableau de connexion en torsion'
+                aster.affiche('RESULTAT', chaine)        
+                affiche_tabint(NVTt,NFREQ_t, nbV);   
+
+            # ----------------------------------------------------------------------------
+            # Calcul de la matrice MAC entre les bases successives en traction/compression
+            # ----------------------------------------------------------------------------
+            if NFREQ_l>0:
+                LMACl=CALC_MACl(self, Ml, NFREQ_l) ;
+
+                for ii in range(nbV-1):
+                    chaine='\n'
+                    aster.affiche('RESULTAT', chaine) 
+                    iv=nbV-ii-2                   
+                    NVTl=TRI_MODE_MACl(self, LMACl[iv],NFREQ_l, NVTl, iv);
+                chaine='\n'
+                aster.affiche('RESULTAT', chaine)
+                chaine='Tableau de connexion en traction/compression'
+                aster.affiche('RESULTAT', chaine)        
+                affiche_tabint(NVTl,NFREQ_l, nbV);   
+    
+    
+        #--------------------------------------------------------------------------
+        # Calcul le sens de precession pour les modes en flexion a une vitesse de rotation donnee
+        #--------------------------------------------------------------------------
+        if NFREQ_f>0:
+            SENS=CALC_PREC(self, Mf,NFREQ_f,L_GR_NOEUD, TYP_PREC);        
+
+            chaine='\n'
+            aster.affiche('RESULTAT', chaine)
+            chaine='Sens de precession pour les modes en flexion'
+            aster.affiche('RESULTAT', chaine)
+            affiche_tab(SENS,NFREQ_f, nbV);
+        # ------------------------------------------------------------------
+        # Tri des modes en flexion par une methode de proche en proche 
+        # avec verification du sens de precession
+        # Remplissage du tableau de connexion
+        # ------------------------------------------------------------------
+        if TYP_TRI==1 :
+            if NFREQ_f>0:
+                OMIN = L_VIT1[0]
+                PREC_DI=TRI_MODE_PREC_DI (SENS,NFREQ_f, NVTf, nbV, OMIN);
+                nb_prec_dir=PREC_DI[0];
+                nb_prec_inv=PREC_DI[1];
+                NVTf_prec=PREC_DI[2];
+
+   
+   
+        # --------------------------------
+        # Trace du diagramme de campbell        
+        # --------------------------------
+        chaine='Trace du diagramme de campbell'
+        aster.affiche('RESULTAT', chaine)
+
+        #Conversion de la vitesse de rotation en tr/mn pour l'affichage
+        OM = L_VIT1;  
+        for ii in range(nbV):
+            OM[ii] = OM[ii]*30./pi;
+   
+        Vitesse_min = min(OM);
+        Vitesse_max = max(OM);
+
+        OM_int=[OM[ii] for ii in range(len(OM))]; # pour le calcul des points d'intersection
+
+        legende_x= 'Vitesse (tr/mn)';
+        if  Vitesse_min<0:
+            if abs(Vitesse_min) > abs(Vitesse_max):
+                legende_x= 'Vitesse negative, en abscisse la valeur absolue de la vitesse (tr/mn)';
+                for ii in range(nbV):
+                    OM[ii] = abs(OM[ii]);
+
+        __FX=DEFI_LIST_REEL(VALE=OM);
+    
+        # Mise en page graphique
+        Vmin=min(OM);
+        Vmax=max(OM);
+    
+
+    
+        # Determination de la frequence maximale
+        Fmax=0.0;
+        for jf in range(NFREQ_fc):
+            for iv in range(nbV):
+                if TYP_TRI==0:
+                    jf1=NVTf[jf][iv]-1; 
+                if TYP_TRI==1: 
+                    jf1=NVTf_prec[jf][iv]-1; 
+                if TYP_TRI==2:
+                    jf1=NVTf_mac[jf][iv]-1;
+                F1=FRQf[jf1][iv];
+                if Fmax<F1:
+                    Fmax=F1;
+    
+        for jf in range(NFREQ_tc):
+            for iv in range(nbV):
+                jf1=NVTt[jf][iv]-1;                            
+                F1=FRQt[jf1][iv];
+                if Fmax<F1:
+                    Fmax=F1;
+   
+        for jf in range(NFREQ_lc):
+            for iv in range(nbV):
+                jf1=NVTl[jf][iv]-1;                            
+                F1=FRQl[jf1][iv];
+                if Fmax<F1:
+                    Fmax=F1;
+
+        Fmin=0.0;
+        Fmax=Fmax*1.1;
+
+        # Calcul des bornes et pas de la grille pour les vitesses de rotation
+        BV    = calc_pas(Vmin, Vmax);
+        BVmin = BV[0];
+        BVmax = BV[1];
+        pasV  = BV[2];
+    
+        print 'BVmin, BVmax, pasV', BVmin, BVmax, pasV  
+        # Calcul des bornes et pas de la grille pour les frequences
+        BF    = calc_pas(Fmin, Fmax);
+        BFmin = BF[0];
+        BFmax = BF[1];
+        pasF  = BF[2];
+    
+        chaine='\n'
+        aster.affiche('RESULTAT', chaine)   
+        chaine='Fmax ' + str(Fmax) + ' BFmax ' + str(BFmax)
+        aster.affiche('RESULTAT', chaine)
+    
+        TITRE1 = 'Diagramme de Campbell';
+        TITRE2 = 'Modes en flexion'
+    
+        DEFI_FICHIER ( ACTION='ASSOCIER', UNITE=UNIT_FLE,)
+        DEFI_FICHIER ( ACTION='ASSOCIER', UNITE=UNIT_TOR,)
+        DEFI_FICHIER ( ACTION='ASSOCIER', UNITE=UNIT_LON,)
+        DEFI_FICHIER ( ACTION='ASSOCIER', UNITE=UNIT_TOT,)
+        # ---------------------------------------------------
+        # Trace du diagramme de campbell des modes en flexion        
+        # ---------------------------------------------------
+        EPSI=1.E-7
+        LFONC =[];
+        FON1  =[];
+        mfac1 ={};
+        ll    =0;
+        if NFREQ_fc>0: 
+            for jf in range(NFREQ_fc):
+                for iv in range(nbV-1):
+                    OM3 = -1.    # OM3 different de -1, Changement de precession
+                    OM4 = -1.    # OM4 different de -1, Changement de stabilite
+                    if TYP_TRI==0:
+                        jf1=NVTf[jf][iv]-1;
+                        jf2=NVTf[jf][iv+1]-1;
+                    if TYP_TRI==1:
+                        jf1=NVTf_prec[jf][iv]-1;
+                        jf2=NVTf_prec[jf][iv+1]-1; 
+                    if TYP_TRI==2:
+                        jf1=NVTf_mac[jf][iv]-1;
+                        jf2=NVTf_mac[jf][iv+1]-1;
+
+                    # Frequences
+                    if jf1>=0 and jf2>=0:
+                        F1=FRQf[jf1][iv];
+                        F2=FRQf[jf2][iv+1];
+                        A1=AMOf[jf1][iv];
+                        A2=AMOf[jf2][iv+1];
+    
+                        # Vitesses
+                        OM1=OM[iv];
+                        OM2=OM[iv+1];
+                        S1=SENS[jf1][iv];
+                        S2=SENS[jf2][iv+1];
+  
+                        if OM1==0.0 :
+                            S1=S2;
+                        if S1*S2<0 :  # Changement de precession
+                            OM3=(OM1+OM2)/2;
+                            F3 =(F1+F2)/2;
+                        
+                        A0 = abs(EPSI*(F1+F2)/2)
+                        if ((A1-A0)*(A2-A0) <0):   # Changement de stabilite
+                            OM4 = (A2*OM1 - A1*OM2) / (A2 -A1)
+                            aa = (F2 - F1) / (OM2 -OM1)
+                            bb = (F2*OM1 - F1*OM2) / (OM1 -OM2)
+                            F4 = aa* OM4 + bb
+
+                        # OM4 en dehors de OM1, OM2
+                        if OM4 >=OM2:
+                            OM4=-1;                    
+
+                        if OM4 <=OM1:
+                            OM4=-1;                    
+        
+                        if (A1 <0) and (abs(A1) < A0):
+                            A1 = 0.0
+                        if (A2 <0) and (abs(A2) < A0):
+                            A2 = 0.0
+
+                        # Tracer le segment pour chaque intervalle avec le code de couleur et
+                        # de style adequats 
+               
+                        # 1 cas, Pas de changement sur la plage de vitesse
+                        if ((OM3 == -1) and (OM4 == -1)):
+                            FX1=DEFI_LIST_REEL(VALE=[OM1,OM2]);
+                            FY1=DEFI_LIST_REEL(VALE=[F1,F2]);
+                            CS2=color_camp(S2,A1);
+                            ICS2=CS2[0];
+                            IST2=CS2[1];
+                            IMA2=CS2[2];
+                    
+                            FON1.append([]);
+                            ll=len(FON1)-1;
+                            FON1[ll]=DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX1,VALE_FONC=FY1);
+                    
+                            DICO={};
+                            DICO["FONCTION"]=FON1[ll];
+                            DICO["COULEUR"] =ICS2;
+                            DICO["STYLE"]   =IST2;
+                            DICO["MARQUEUR"]=IMA2;
+                            DICO["LEGENDE"] ='';
+                            LFONC.append(DICO);
+                            DETRUIRE(CONCEPT=_F(NOM=(FX1, FY1)),INFO=1);
+                
+                        # 2 cas, Changement de sens de precession
+                        elif (OM3 >=0) and (OM4 == -1):
+                            FX1=DEFI_LIST_REEL(VALE=[OM1,OM3]); # Premiere partie
+                            FY1=DEFI_LIST_REEL(VALE=[F1,F3]);
+                            FX2=DEFI_LIST_REEL(VALE=[OM3,OM2]); # Deuxieme partie
+                            FY2=DEFI_LIST_REEL(VALE=[F3,F2]);
+                            CS1=color_camp(S1,A1);
+                            ICS1=CS1[0];
+                            IST1=CS1[1];
+                            IMA1=CS1[2];
+                            CS2=color_camp(S2,A1);
+                            ICS2=CS2[0];
+                            IST2=CS2[1];
+                            IMA2=CS2[2];
+                    
+                            FON1.append([]);
+                            ll=len(FON1)-1;
+                            FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX1,VALE_FONC=FY1);
+                                     
+                            DICO={};
+                            DICO["FONCTION"]=FON1[ll];
+                            DICO["COULEUR"] =ICS1;
+                            DICO["STYLE"]   =IST1;
+                            DICO["MARQUEUR"]=IMA1;
+                            DICO["LEGENDE"] ='';
+                            LFONC.append(DICO);
+  
+                            FON1.append([]);
+                            ll=len(FON1)-1;
+                            FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX2,VALE_FONC=FY2);
+
+                            DICO={};
+                            DICO["FONCTION"]=FON1[ll];
+                            DICO["COULEUR"] =ICS2;
+                            DICO["STYLE"]   =IST2;
+                            DICO["MARQUEUR"]=IMA2;
+                            DICO["LEGENDE"] ='';
+                            LFONC.append(DICO);
+                    
+                            DETRUIRE(CONCEPT=_F(NOM=(FX1, FY1, FX2, FY2)),INFO=1);
+                       
+                        # 3 cas, de changement de stabilite
+                        elif (OM3 == -1) and (OM4 >= 0):
+
+                            FX1=DEFI_LIST_REEL(VALE=[OM1,OM4]); # Premiere partie
+                            FY1=DEFI_LIST_REEL(VALE=[F1,F4]);
+                            FX2=DEFI_LIST_REEL(VALE=[OM4,OM2]); # Deuxieme partie
+                            FY2=DEFI_LIST_REEL(VALE=[F4,F2]);
+                            CS1=color_camp(S2,A1);
+                            ICS1=CS1[0];
+                            IST1=CS1[1];
+                            IMA1=CS1[2];
+                            CS2=color_camp(S2,A2);
+                            ICS2=CS2[0];
+                            IST2=CS2[1];
+                            IMA2=CS2[2];
+                    
+                            FON1.append([]);
+                            ll=len(FON1)-1;
+                            FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX1,VALE_FONC=FY1);
+                                     
+                            DICO={};
+                            DICO["FONCTION"]=FON1[ll];
+                            DICO["COULEUR"] =ICS1;
+                            DICO["STYLE"]   =IST1;
+                            DICO["MARQUEUR"]=IMA1;
+                            DICO["LEGENDE"] ='';
+                            LFONC.append(DICO);
+  
+                            FON1.append([]);
+                            ll=len(FON1)-1;
+                            FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX2,VALE_FONC=FY2);
+
+                            DICO={};
+                            DICO["FONCTION"]=FON1[ll];
+                            DICO["COULEUR"] =ICS2;
+                            DICO["STYLE"]   =IST2;
+                            DICO["MARQUEUR"]=IMA2;
+                            DICO["LEGENDE"] ='';
+                            LFONC.append(DICO);
+                    
+                            DETRUIRE(CONCEPT=_F(NOM=(FX1, FY1, FX2, FY2)),INFO=1);
+
+                        # 4 et 5 cas de changement de sens de precession et de stabilite
+                        elif (OM3 >= 0) and (OM4 >= 0):
+                            # 4 eme cas
+                            if (OM4 < OM3):
+                                FX1=DEFI_LIST_REEL(VALE=[OM1,OM4]); # Premiere partie
+                                FY1=DEFI_LIST_REEL(VALE=[F1,F4]);
+                                FX2=DEFI_LIST_REEL(VALE=[OM4,OM3]); # Deuxieme partie
+                                FY2=DEFI_LIST_REEL(VALE=[F4,F3]);
+                                FX3=DEFI_LIST_REEL(VALE=[OM3,OM2]); # Troisieme partie
+                                FY3=DEFI_LIST_REEL(VALE=[F3,F2]);
+                                CS1=color_camp(S1,A1);
+                                ICS1=CS1[0];
+                                IST1=CS1[1];
+                                IMA1=CS1[2];
+                                CS2=color_camp(S1,A2);
+                                ICS2=CS2[0];
+                                IST2=CS2[1];
+                                IMA2=CS2[2];
+                                CS3=color_camp(S2,A2);
+                                ICS3=CS3[0];
+                                IST3=CS3[1];
+                                IMA3=CS3[2];
+                    
+                                FON1.append([]);
+                                ll=len(FON1)-1;
+                                FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX1,VALE_FONC=FY1);
+                                     
+                                DICO={};
+                                DICO["FONCTION"]=FON1[ll];
+                                DICO["COULEUR"] =ICS1;
+                                DICO["STYLE"]   =IST1;
+                                DICO["MARQUEUR"]=IMA1;
+                                DICO["LEGENDE"] ='';
+                                LFONC.append(DICO);
+  
+                                FON1.append([]);
+                                ll=len(FON1)-1;
+                                FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX2,VALE_FONC=FY2);
+
+                                DICO={};
+                                DICO["FONCTION"]=FON1[ll];
+                                DICO["COULEUR"] =ICS2;
+                                DICO["STYLE"]   =IST2;
+                                DICO["MARQUEUR"]=IMA2;
+                                DICO["LEGENDE"] ='';
+                                LFONC.append(DICO);
+                                
+                                FON1.append([]);
+                                ll=len(FON1)-1;
+                                FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX3,VALE_FONC=FY3);
+
+                                DICO={};
+                                DICO["FONCTION"]=FON1[ll];
+                                DICO["COULEUR"] =ICS3;
+                                DICO["STYLE"]   =IST3;
+                                DICO["MARQUEUR"]=IMA3;
+                                DICO["LEGENDE"] ='';
+                                LFONC.append(DICO);
+                    
+                                DETRUIRE(CONCEPT=_F(NOM=(FX1, FY1, FX2, FY2, FX3,FY3)),INFO=1);
+
+                            # 5 eme cas
+                            else:
+                                FX1=DEFI_LIST_REEL(VALE=[OM1,OM3]); # Premiere partie
+                                FY1=DEFI_LIST_REEL(VALE=[F1,F3]);
+                                FX2=DEFI_LIST_REEL(VALE=[OM3,OM4]); # Deuxieme partie
+                                FY2=DEFI_LIST_REEL(VALE=[F3,F4]);
+                                FX3=DEFI_LIST_REEL(VALE=[OM4,OM2]); # Troisieme partie
+                                FY3=DEFI_LIST_REEL(VALE=[F4,F2]);
+                                CS1=color_camp(S1,A1);
+                                ICS1=CS1[0];
+                                IST1=CS1[1];
+                                IMA1=CS1[2];
+                                CS2=color_camp(S2,A1);
+                                ICS2=CS2[0];
+                                IST2=CS2[1];
+                                IMA2=CS2[2];
+                                CS3=color_camp(S2,A2);
+                                ICS3=CS3[0];
+                                IST3=CS3[1];
+                                IMA3=CS3[2];
+                    
+                                FON1.append([]);
+                                ll=len(FON1)-1;
+                                FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX1,VALE_FONC=FY1);
+                                     
+                                DICO={};
+                                DICO["FONCTION"]=FON1[ll];
+                                DICO["COULEUR"] =ICS1;
+                                DICO["STYLE"]   =IST1;
+                                DICO["MARQUEUR"]=IMA1;
+                                DICO["LEGENDE"] ='';
+                                LFONC.append(DICO);
+  
+                                FON1.append([]);
+                                ll=len(FON1)-1;
+                                FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX2,VALE_FONC=FY2);
+
+                                DICO={};
+                                DICO["FONCTION"]=FON1[ll];
+                                DICO["COULEUR"] =ICS2;
+                                DICO["STYLE"]   =IST2;
+                                DICO["MARQUEUR"]=IMA2;
+                                DICO["LEGENDE"] ='';
+                                LFONC.append(DICO);
+                                
+                                FON1.append([]);
+                                ll=len(FON1)-1;
+                                FON1[ll]= DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX3,VALE_FONC=FY3);
+                                DICO={};
+                                DICO["FONCTION"]=FON1[ll];
+                                DICO["COULEUR"] =ICS3;
+                                DICO["STYLE"]   =IST3;
+                                DICO["MARQUEUR"]=IMA3;
+                                DICO["LEGENDE"] ='';
+                                LFONC.append(DICO);
+                    
+                                DETRUIRE(CONCEPT=_F(NOM=(FX1, FY1, FX2, FY2, FX3, FY3)),INFO=1);    
+
+
+            
+            mfac1["COURBE"]=LFONC; 
+                
+            IMPR_FONCTION(
+                        UNITE   = UNIT_FLE,
+                        FORMAT  = 'XMGRACE',
+                        BORNE_X = (BVmin,BVmax),
+                        BORNE_Y = (BFmin,BFmax),
+                        TITRE   = TITRE1,
+                        SOUS_TITRE   = TITRE2,
+                        GRILLE_X = pasV,
+                        GRILLE_Y = pasF, 
+                        LEGENDE_X = legende_x,
+                        LEGENDE_Y = 'FREQ (Hz)',
+                            **mfac1);
+
+            IMPR_FONCTION(
+                        UNITE   = UNIT_TOT,
+                        FORMAT  = 'XMGRACE',
+                        BORNE_X = (BVmin,BVmax),
+                        BORNE_Y = (BFmin,BFmax),
+                        TITRE   = TITRE1,
+                        SOUS_TITRE   = TITRE2,
+                        GRILLE_X = pasV,
+                        GRILLE_Y = pasF, 
+                        LEGENDE_X = legende_x,
+                        LEGENDE_Y = 'FREQ (Hz)',
+                            **mfac1);
+            nbll = len(FON1) 
+            for ii in range(nbll):    
+                DETRUIRE(CONCEPT=_F(NOM=(FON1[ii])),INFO=1);
+            del(LFONC)
+            del(mfac1, DICO)
+
+   
+          
+        # ---------------------------------------------------
+        # Trace du diagramme de campbell des modes en torsion        
+        # ---------------------------------------------------
+        TITRE2 = 'Modes en Torsion'
+        if NFREQ_tc>0:
+            LFONC =[];
+            FON1 =[0]*NFREQ_tc;
+            mfac1={};
+            for jj in range(NFREQ_tc):
+       
+               FY1=DEFI_LIST_REEL(VALE=[FRQt[int(NVTt[jj][ii]-1)][ii] for ii in range(nbV)]);
+               FON1[jj]=DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=__FX,VALE_FONC=FY1);
+            
+            
+               DICO={};
+               DICO["FONCTION"]=FON1[jj];
+               DICO["COULEUR"] =1;
+               DICO["STYLE"]   =6;
+               DICO["MARQUEUR"]=0;
+               DICO["LEGENDE"] ='';
+               LFONC.append(DICO);
+            
+               DETRUIRE(CONCEPT=_F(NOM=(FY1)),INFO=1);
+        
+            mfac1["COURBE"]=LFONC; 
+            IMPR_FONCTION(
+                  UNITE    = UNIT_TOR,
+                  FORMAT   ='XMGRACE',
+                  BORNE_X  =(BVmin,BVmax),
+                  BORNE_Y  =(BFmin,BFmax),
+                  TITRE   = TITRE1,
+                  SOUS_TITRE = TITRE2,
+                  GRILLE_X = pasV,
+                  GRILLE_Y = pasF,
+                  LEGENDE_X = legende_x,
+                  LEGENDE_Y = 'FREQ (Hz)',
+                  **mfac1);  
+
+            IMPR_FONCTION(
+                  UNITE    = UNIT_TOT,
+                  FORMAT   ='XMGRACE',
+                  BORNE_X  =(BVmin,BVmax),
+                  BORNE_Y  =(BFmin,BFmax),
+                  TITRE   = TITRE1,
+                  GRILLE_X = pasV,
+                  GRILLE_Y = pasF,
+                  LEGENDE_X = legende_x,
+                  LEGENDE_Y = 'FREQ (Hz)',
+                  **mfac1);  
+                    
+        
+        
+            for ii in range(NFREQ_tc):    
+                DETRUIRE(CONCEPT=_F(NOM=(FON1[ii])),INFO=1);
+            del(LFONC)
+            del(mfac1, DICO)
+
+                     
+        # ----------------------------------------------------------------
+        # Trace du diagramme de campbell des modes en traction/compression        
+        # ----------------------------------------------------------------
+        TITRE2 = 'Modes en traction/compression'
+        if NFREQ_lc>0:
+            LFONC =[];
+            FON1 =[0]*NFREQ_lc;
+            mfac1={};
+            for jj in range(NFREQ_lc):
+       
+                FY1=DEFI_LIST_REEL(VALE=[FRQl[int(NVTl[jj][ii]-1)][ii] for ii in range(nbV)]);
+                FON1[jj]=DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=__FX,VALE_FONC=FY1);
+
+                DICO={};
+                DICO["FONCTION"]=FON1[jj];
+                DICO["COULEUR"] =8;
+                DICO["STYLE"]   =8;
+                DICO["MARQUEUR"]=0;
+                DICO["LEGENDE"] ='';
+                LFONC.append(DICO);
+            
+                DETRUIRE(CONCEPT=_F(NOM=(FY1)),INFO=1);
+   
+            mfac1["COURBE"]=LFONC;
+            IMPR_FONCTION(
+                  UNITE    = UNIT_LON,
+                  FORMAT   ='XMGRACE',
+                  BORNE_X  =(BVmin,BVmax),
+                  BORNE_Y  =(BFmin,BFmax),
+                  TITRE   = TITRE1,
+                  SOUS_TITRE = TITRE2,
+                  GRILLE_X = pasV,
+                  GRILLE_Y = pasF,
+                  LEGENDE_X = legende_x,
+                  LEGENDE_Y = 'FREQ (Hz)',
+                      **mfac1);              
+            IMPR_FONCTION(
+                  UNITE    = UNIT_TOT,
+                  FORMAT   ='XMGRACE',
+                  BORNE_X  =(BVmin,BVmax),
+                  BORNE_Y  =(BFmin,BFmax),
+                  TITRE   = TITRE1,
+                  GRILLE_X = pasV,
+                  GRILLE_Y = pasF,
+                  LEGENDE_X = legende_x,
+                  LEGENDE_Y = 'FREQ (Hz)',
+                      **mfac1);
+     
+        
+  
+            for ii in range(NFREQ_lc):    
+                DETRUIRE(CONCEPT=_F(NOM=(FON1[ii])),INFO=1);
+            del(LFONC)
+            del(mfac1, DICO);
+
+        if NFREQ_f>0:
+            for jj in range(nbV):        
+                DETRUIRE(CONCEPT=_F(NOM=(Mf[jj])),INFO=1)
+        if NFREQ_t>0:
+            for jj in range(nbV):        
+                DETRUIRE(CONCEPT=_F(NOM=(Mt[jj])),INFO=1)
+        if NFREQ_l>0:
+            for jj in range(nbV):        
+                DETRUIRE(CONCEPT=_F(NOM=(Ml[jj])),INFO=1)
+    
+
+
+#------------------------------------------------------------------------------------
+
+        # -----------------------------
+        # Trace des droites de pentes S        
+        # -----------------------------
+        
+        # Pour S=1, on le trace automatiquement
+        S=1.0;
+        L_S1=[];
+        
+        if type(L_S)==list:
+            L_S1=L_S;
+        elif type(L_S)==tuple:
+            L_S1=list(L_S);
+        elif is_float(L_S):           
+            L_S1.append(L_S);
+        L_S1.append(S);
+    
+        # Supprimer la redondance dans la liste
+        sup_redon_list(L_S1);
+        
+        
+        # Faire une dictionnaire de courbe
+        # Constituer de liste de dictionnaire de fonctions
+        LFONC =[];
+        FON1 =[0]*len(L_S1);
+        mfac1={};
+        for ii in range(len(L_S1)):
+            F1 =BVmin*L_S1[ii]/60.
+            F2 =BVmax*L_S1[ii]/60. 
+            FX1=DEFI_LIST_REEL(VALE=[BVmin,BVmax]);
+            FY1=DEFI_LIST_REEL(VALE=[F1,F2]);
+      
+            FON1[ii]=DEFI_FONCTION(NOM_PARA='VITE',VALE_PARA=FX1,VALE_FONC=FY1);
+
+            DICO={};
+            DICO["FONCTION"]=FON1[ii];
+            DICO["COULEUR"] =1;
+            DICO["STYLE"]   =1;
+            DICO["MARQUEUR"]=0;
+            DICO["LEGENDE"] ='';
+            LFONC.append(DICO);
+       
+            DETRUIRE(CONCEPT=_F(NOM=(FX1, FY1)),INFO=1);
+
+        mfac1["COURBE"]=LFONC;
+        if NFREQ_fc>0: 
+            TITRE2 = 'Modes en flexion'
+            IMPR_FONCTION(
+                        UNITE   = UNIT_FLE,
+                        FORMAT  = 'XMGRACE',
+                        BORNE_X = (BVmin,BVmax),
+                        BORNE_Y = (BFmin,BFmax),
+                        TITRE   = TITRE1,
+                        SOUS_TITRE   = TITRE2,
+                        GRILLE_X = pasV,
+                        GRILLE_Y = pasF, 
+                        LEGENDE_X = legende_x,
+                        LEGENDE_Y = 'FREQ (Hz)',
+                        **mfac1);
+                                                
+        if NFREQ_tc>0:                 
+            TITRE2 = 'Modes en Torsion'
+            IMPR_FONCTION(
+                        UNITE   = UNIT_TOR,
+                        FORMAT  = 'XMGRACE',
+                        BORNE_X = (BVmin,BVmax),
+                        BORNE_Y = (BFmin,BFmax),
+                        TITRE   = TITRE1,
+                        SOUS_TITRE   = TITRE2,
+                        GRILLE_X = pasV,
+                        GRILLE_Y = pasF, 
+                        LEGENDE_X = legende_x,
+                        LEGENDE_Y = 'FREQ (Hz)',
+                            **mfac1);
+        if NFREQ_lc>0: 
+            TITRE2 = 'Modes en traction/compression'       
+            IMPR_FONCTION(
+                        UNITE   = UNIT_LON,
+                        FORMAT  = 'XMGRACE',
+                        BORNE_X = (BVmin,BVmax),
+                        BORNE_Y = (BFmin,BFmax),
+                        TITRE   = TITRE1,
+                        SOUS_TITRE   = TITRE2,
+                        GRILLE_X = pasV,
+                        GRILLE_Y = pasF, 
+                        LEGENDE_X = legende_x,
+                        LEGENDE_Y = 'FREQ (Hz)',
+                            **mfac1);
+  
+        IMPR_FONCTION(
+                        UNITE   = UNIT_TOT,
+                        FORMAT  = 'XMGRACE',
+                        BORNE_X = (BVmin,BVmax),
+                        BORNE_Y = (BFmin,BFmax),
+                        TITRE   = TITRE1,
+                        GRILLE_X = pasV,
+                        GRILLE_Y = pasF, 
+                        LEGENDE_X = legende_x,
+                        LEGENDE_Y = 'FREQ (Hz)',
+                            **mfac1);
+        
+        for ii in range(len(L_S1)):    
+            DETRUIRE(CONCEPT=_F(NOM=(FON1[ii])),INFO=1);
+        
+        del(LFONC)
+        del(mfac1, DICO)
+        
+        DEFI_FICHIER ( ACTION='LIBERER', UNITE=UNIT_FLE,)
+        DEFI_FICHIER ( ACTION='LIBERER', UNITE=UNIT_TOR,)
+        DEFI_FICHIER ( ACTION='LIBERER', UNITE=UNIT_LON,)
+        DEFI_FICHIER ( ACTION='LIBERER', UNITE=UNIT_TOT,)
+
+#------------------------------------------------------------------------------------
+
+        # --------------------------------------------------------------
+        # Determination des points d'intersection avec les droites Y=AX
+        # Calcul des coordonnees des points
+        # --------------------------------------------------------------
+
+        
+        # Ecrire dans un fichier texte en sortie
+        DEFI_FICHIER(TYPE='ASCII', UNITE=UNIT_INT,);
+        nomfic='fort.'+str(UNIT_INT);
+        FINT1=open(nomfic, 'w')
+
+        INTERSEC =[];
+        # Modes en flexion
+
+        for ii in range(len(L_S1)):
+            DICO={};
+            DICO["pente"]=L_S1[ii];
+            ll=0; 
+            XY=[[None]*2];          
+            for jf in range(NFREQ_fc):
+                for iv in range(nbV-1):
+                    if TYP_TRI==0:
+                        jf1=NVTf[jf][iv]-1; 
+                        jf2=NVTf[jf][iv+1]-1; 
+                    if TYP_TRI==1: 
+                        jf1=NVTf_prec[jf][iv]-1;
+                        jf2=NVTf_prec[jf][iv+1]-1; 
+                    if TYP_TRI==2:
+                        jf1=NVTf_mac[jf][iv]-1;
+                        jf2=NVTf_mac[jf][iv+1]-1;
+                    if jf1>=0 and jf2>=0:
+                        X1 = OM[iv];
+                        Y1 = FRQf[jf1][iv];
+                        X2 = OM[iv+1];
+                        Y2 = FRQf[jf2][iv+1];
+                        A  = (Y1-Y2)/(X1-X2);
+                        B  = Y1-(A*X1);
+                        pente = L_S1[ii];
+                        P1 = B*60./(pente-A*60.);
+                        P2 = P1*pente/60.;
+                
+                        if P1 >=X1 and P1<=X2:
+                            if P2 >= Fmin and P2<=Fmax :
+                                if OM_int[iv]<=0 and  OM_int[iv+1]<0 :       # Vitesse negative
+                                    P1=-P1;
+                                XY[ll][0]=P1;
+                                XY[ll][1]=P2;
+                                # On ajoute une ligne supplementaire
+                                XY.append([None]*2);
+                                ll=ll+1;
+                            
+                           
+            L_XY=XY[0:ll];               
+            DICO["point"]=L_XY;
+            INTERSEC.append(DICO);
+              
+        # Sauvegarde des points d'intersection
+        FINT1.write('\n')  
+        chaine = 'Mode en flexion' 
+        FINT1.write(chaine) 
+        save_intersec(INTERSEC, FINT1);
+
+        del(XY, L_XY)
+        del(INTERSEC, DICO)
+         
+        INTERSEC =[];
+        # Modes en torsion
+        for ii in range(len(L_S1)):
+            DICO={};
+            DICO["pente"]=L_S1[ii];
+            ll=0; 
+            XY=[[None]*2];   
+            for jf in range(NFREQ_tc):
+                for iv in range(nbV-1):
+                    jf1=NVTt[jf][iv]-1; 
+                    jf2=NVTt[jf][iv+1]-1; 
+                    if jf1>=0 and jf2>=0:
+                        X1 = OM[iv];
+                        Y1 = FRQt[jf1][iv];
+                        X2 = OM[iv+1];
+                        Y2 = FRQt[jf2][iv+1];
+                        A  = (Y1-Y2)/(X1-X2);
+                        B  = Y1-(A*X1);
+                        pente = L_S1[ii];
+                        P1 = B*60./(pente-A*60.);
+                        P2 = P1*pente/60.;
+                
+                        if P1 >=X1 and P1<=X2:
+                            if P2 >= Fmin and P2<=Fmax :
+                                if OM_int[iv]<=0 and  OM_int[iv+1]<0 :       # Vitesse negative
+                                    P1=-P1;
+                                XY[ll][0]=P1;
+                                XY[ll][1]=P2;
+                                # On ajoute une ligne supplementaire
+                                XY.append([None]*2);
+                                ll=ll+1;                     
+                           
+            L_XY=XY[0:ll];               
+            DICO["point"]=L_XY;
+            INTERSEC.append(DICO);
+            
+        # Sauvegarde des points d'intersection
+        FINT1.write('\n')   
+        FINT1.write('\n')   
+        chaine = 'Mode en Torsion' 
+        FINT1.write(chaine) 
+        save_intersec(INTERSEC, FINT1);
+
+        del(XY, L_XY)
+        del(INTERSEC, DICO)
+
+
+#------------------------------------------------------------------------------------
+
+        INTERSEC =[];
+        # Modes en traction / compression
+        for ii in range(len(L_S1)):
+            DICO={};
+            DICO["pente"]=L_S1[ii];
+            ll=0; 
+            XY=[[None]*2];   
+            for jf in range(NFREQ_lc):
+                for iv in range(nbV-1):
+                    jf1=NVTl[jf][iv]-1; 
+                    jf2=NVTl[jf][iv+1]-1; 
+                    if jf1>=0 and jf2>=0:
+                        X1 = OM[iv];
+                        Y1 = FRQl[jf1][iv];
+                        X2 = OM[iv+1];
+                        Y2 = FRQl[jf2][iv+1];
+                        A  = (Y1-Y2)/(X1-X2);
+                        B  = Y1-(A*X1);
+                        pente = L_S1[ii];
+                        P1 = B*60./(pente-A*60.);
+                        P2 = P1*pente/60.;
+                
+                        if P1 >=X1 and P1<=X2:
+                            if P2 >= Fmin and P2<=Fmax :
+                                if OM_int[iv]<=0 and  OM_int[iv+1]<0 :       # Vitesse negative
+                                    P1=-P1;
+                                XY[ll][0]=P1;
+                                XY[ll][1]=P2;
+                                # On ajoute une ligne supplementaire
+                                XY.append([None]*2);
+                                ll=ll+1;                     
+                           
+            L_XY=XY[0:ll];               
+            DICO["point"]=L_XY;
+            INTERSEC.append(DICO);
+            
+        # Sauvegarde des points d'intersection
+        FINT1.write('\n') 
+        FINT1.write('\n')    
+        chaine = 'Mode en traction / compression' 
+        FINT1.write(chaine) 
+        save_intersec(INTERSEC, FINT1);
+
+        del(XY, L_XY)
+        del(INTERSEC, DICO)
+        nbl=len(L_S1)
+        for ii in range(nbl):
+            il =nbl-ii-1;
+            del L_S1[il];
+        FINT1.close()
+
diff --git a/Aster/Cata/cataSTA10/Macro/impr_diag_campbell_utils.py b/Aster/Cata/cataSTA10/Macro/impr_diag_campbell_utils.py
new file mode 100644 (file)
index 0000000..49087ab
--- /dev/null
@@ -0,0 +1,823 @@
+#@ MODIF impr_diag_campbell_utils Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# RESPONSABLE TORKHANI M.TORKHANI
+
+import numpy
+import aster
+from Accas import _F
+
+# "self" est l'objet MACRO
+
+
+def CLASS_MODES(self,L_MODES, NFREQ, NFREQ_camp, L_GR_NOEUD, VITE_ROTA) :
+    """Classification des modes en flexion, en torsion et en traction/compression"""
+    
+    POST_RELEVE_T     =self.get_cmd('POST_RELEVE_T') 
+    EXTR_MODE         =self.get_cmd('EXTR_MODE')
+    NORM_MODE         =self.get_cmd('NORM_MODE')
+    DETRUIRE          =self.get_cmd('DETRUIRE')
+    IMPR_TABLE        =self.get_cmd('IMPR_TABLE')
+    
+    NFREQ_f=0;
+    NFREQ_t=0;
+    NFREQ_l=0;
+
+    nbF_f=[];
+    nbF_t=[];
+    nbF_l=[];
+    lflex={};
+    ltors={};
+    llong={};
+
+    NBV=len(L_MODES);
+
+    Ntot =numpy.zeros((NFREQ));
+    Nflex=numpy.zeros((NFREQ));
+    Ntors=numpy.zeros((NFREQ));
+    Nlong=numpy.zeros((NFREQ));
+
+    RESULT=[];
+
+    NBV=len(L_MODES);
+    NOEU=len(L_GR_NOEUD);
+    Mf=[0]*NBV ;
+    Mt=[0]*NBV ;
+    Ml=[0]*NBV ;
+    NVT =numpy.zeros((NFREQ, NBV));
+    
+    NVT_f=0
+    NVT_l=0
+    NVT_t=0
+    
+    for ii in range(NBV):
+        # -------------------------------------------------------------------
+        # Extraire les modes en module, definir les differents types de modes
+        # -------------------------------------------------------------------
+        
+        tabmoN=POST_RELEVE_T(ACTION=_F(INTITULE='MODES_MODULE',
+                                NOEUD=L_GR_NOEUD,
+                                RESULTAT=L_MODES[ii],
+                                NOM_CHAM='DEPL',
+                                TOUT_ORDRE='OUI',
+                                NOM_CMP=('DX','DY','DZ', 'DRX', 'DRY', 'DRZ'),
+                                FORMAT_C='MODULE',
+                                OPERATION='EXTRACTION',),);
+        jj =0;
+        for jj in range(NFREQ):
+            Ntot[jj]  =0.0
+            Nflex[jj] =0.0
+            Ntors[jj] =0.0
+            Nlong[jj] =0.0
+            for ll in range(NOEU):
+                nmod=NOEU*jj+ll
+                dx  = tabmoN['DX' ,nmod+1]
+                dy  = tabmoN['DY' ,nmod+1]
+                dz  = tabmoN['DZ' ,nmod+1]
+                drx = tabmoN['DRX',nmod+1]
+                dry = tabmoN['DRY',nmod+1]
+                drz = tabmoN['DRZ',nmod+1]
+                Ntot1  = dx**2+dy**2+dz**2+drx**2+dry**2+drz**2
+                Nflex1 = dy**2+dz**2+dry**2+drz**2
+                Ntors1 = drx**2            
+                Nlong1 = dx**2
+                Ntot[jj]  = Ntot[jj]  + Ntot1
+                Nflex[jj] = Nflex[jj] + Nflex1
+                Ntors[jj] = Ntors[jj] + Ntors1
+                Nlong[jj] = Nlong[jj] + Nlong1
+  
+            Ntot[jj]  = numpy.sqrt(Ntot[jj])
+            if  Ntot[jj] > 0:          
+                Nflex[jj] = numpy.sqrt(Nflex[jj])/ Ntot[jj]
+                Ntors[jj] = numpy.sqrt(Ntors[jj])/ Ntot[jj]
+                Nlong[jj] = numpy.sqrt(Nlong[jj])/ Ntot[jj]
+    
+        
+        DETRUIRE(CONCEPT=_F(NOM=(tabmoN)),INFO=1)
+
+        jf=0;
+        jt=0;
+        jl=0;
+
+        for jj in range(NFREQ):
+            NVT[jj][ii]=jj+1;  
+            if (Nflex[jj]> Ntors[jj]) and (Nflex[jj]> Nlong[jj]):
+                lflex[(ii,jf)]=jj+1;
+                jf=jf+1; 
+                 
+            
+            elif (Ntors[jj]> Nflex[jj]) and (Ntors[jj]> Nlong[jj]):
+                ltors[(ii,jt)]=jj+1;
+                jt=jt+1; 
+                     
+            
+            elif (Nlong[jj]> Nflex[jj]) and (Nlong[jj]> Ntors[jj]):
+                llong[(ii,jl)]=jj+1;
+                jl=jl+1; 
+    
+        nbF_f.append(jf);
+        nbF_t.append(jt);
+        nbF_l.append(jl);  
+                
+    NFREQ_f = min(nbF_f)
+    NFREQ_t = min(nbF_t)
+    NFREQ_l = min(nbF_l)
+    
+    if NFREQ_f>0:
+        NVT_f =numpy.zeros((NFREQ_f, NBV), int); 
+        l_f   =numpy.zeros((NBV, NFREQ_f), int);  
+    if NFREQ_t>0:
+       NVT_t  =numpy.zeros((NFREQ_t, NBV), int);
+       l_t    =numpy.zeros((NBV, NFREQ_t), int); 
+    if NFREQ_l>0:
+       NVT_l  =numpy.zeros((NFREQ_l, NBV), int);
+       l_l    =numpy.zeros((NBV, NFREQ_l), int);   
+    else:
+       NVT_l  = 0;
+        
+    for ii in range(NBV):  
+        for jj in range(NFREQ_f): 
+            NVT_f[jj][ii]=lflex[ii,jj]; 
+            l_f[ii][jj]  =lflex[ii,jj]; 
+        
+        for jj in range(NFREQ_t): 
+            NVT_t[jj][ii]=ltors[ii,jj]; 
+            l_t[ii][jj]  =ltors[ii,jj];    
+        
+        for jj in range(NFREQ_l): 
+            NVT_l[jj][ii]=llong[ii,jj];
+            l_l[ii][jj]  =llong[ii,jj]; 
+    
+    for ii in range(NBV):   
+        # ----------------------------------------------
+        # Extraire la base des modes en flexion
+        # ----------------------------------------------
+        if NFREQ_f >0:
+            lmodef =list(l_f[ii]);
+            Mf[ii] = EXTR_MODE ( FILTRE_MODE = _F ( MODE = L_MODES[ii], 
+                                                        NUME_MODE = lmodef)
+                                );      
+            
+            Mf[ii]= NORM_MODE (MODE=Mf[ii],
+                             reuse = Mf[ii],                       
+                             NORME='TRAN',
+                             );
+        # ----------------------------------------------
+        # Extraire la base des modes en torsion
+        # ----------------------------------------------
+        if NFREQ_t >0:
+            lmodet =list(l_t[ii]);
+            Mt[ii] = EXTR_MODE ( FILTRE_MODE = _F ( MODE = L_MODES[ii], 
+                                                        NUME_MODE = lmodet)
+                                );
+            Mt[ii]= NORM_MODE (MODE=Mt[ii],
+                             reuse = Mt[ii],                       
+                             AVEC_CMP=('DRX','DRY', 'DRZ'),
+                             );    
+        # ----------------------------------------------
+        # Extraire la base des modes en longi
+        # ----------------------------------------------
+        if NFREQ_l >0:
+            lmodel =list(l_l[ii]);
+            Ml[ii] = EXTR_MODE ( FILTRE_MODE = _F ( MODE = L_MODES[ii], 
+                                                        NUME_MODE = lmodel)
+                                );
+            
+            Ml[ii]= NORM_MODE (MODE=Ml[ii],
+                             reuse = Ml[ii],                       
+                             NORME='TRAN',
+                             );
+        
+    # -----------------------------------------------------------
+    # Nombre de frequences par type pour le diagramme de Campbell 
+    # -----------------------------------------------------------
+    NFREQ_fc=0;
+    for jj in range(NFREQ_f): 
+        if NVT_f[jj][NBV-1]<= NFREQ_camp: 
+            NFREQ_fc=NFREQ_fc+1;
+   
+    NFREQ_tc=0;
+    for jj in range(NFREQ_t): 
+        if NVT_t[jj][NBV-1]<= NFREQ_camp: 
+            NFREQ_tc=NFREQ_tc+1;
+    NFREQ_lc=0;
+    for jj in range(NFREQ_l): 
+        if NVT_l[jj][NBV-1]<= NFREQ_camp: 
+            NFREQ_lc=NFREQ_lc+1;
+      
+    RESULT =[NFREQ_f,NFREQ_t,NFREQ_l,Mf,Mt,Ml,NVT,NVT_f,NVT_t,NVT_l,NFREQ_fc,NFREQ_tc,NFREQ_lc]
+    
+    return RESULT
+
+
+#------------------------------------------------------------------------------------------------
+def EXTR_FREQ(self,L_MODES, L_MODEf,L_MODEt,L_MODEl, NFREQ, NFREQ_f, NFREQ_t, NFREQ_l) :
+    """Extraire les frequences"""
+    RECU_TABLE        =self.get_cmd('RECU_TABLE') 
+    IMPR_TABLE        =self.get_cmd('IMPR_TABLE') 
+    DETRUIRE          =self.get_cmd('DETRUIRE')        
+    
+    RESULT=[];
+      
+    NBV   =len(L_MODES); 
+    FRQ   =numpy.zeros((NFREQ,NBV)); 
+    FRQ_f =numpy.zeros((NFREQ_f,NBV)); 
+    FRQ_t =numpy.zeros((NFREQ_t,NBV));
+    FRQ_l =numpy.zeros((NFREQ_l,NBV)); 
+    AMO_f =numpy.zeros((NFREQ_f,NBV)); 
+    FRQ_max = 0.0;  
+    EPSI    =1.E-10;
+    for ii in range(NBV):
+            
+        # frequences totales
+        tabfreq = RECU_TABLE(CO=L_MODES[ii],NOM_PARA=('NUME_MODE','FREQ','AMOR_REDUIT'),);
+        
+        for jj in range(NFREQ):
+            FRQ[jj][ii]=tabfreq['FREQ',jj+1]
+            if FRQ_max < FRQ[jj][ii]:
+                FRQ_max=FRQ[jj][ii];
+        
+        if NFREQ_f>0:
+            # frequences des modes en flexion
+            tabfr_f = RECU_TABLE(CO=L_MODEf[ii],NOM_PARA=('FREQ','AMOR_REDUIT'),)
+            for jj in range(NFREQ_f):
+                FRQ_f[jj][ii]=tabfr_f['FREQ',jj+1];
+                AMO_f[jj][ii]=tabfr_f['AMOR_REDUIT',jj+1];
+                if abs(AMO_f[jj][ii])<EPSI:
+                    AMO_f[jj][ii]=0.0;
+            DETRUIRE(CONCEPT=_F(NOM=(tabfr_f)),INFO=1)
+        
+        if NFREQ_t>0:
+            # frequences des modes en torsion
+            tabfr_t = RECU_TABLE(CO=L_MODEt[ii],NOM_PARA='FREQ',)
+            for jj in range(NFREQ_t):
+                FRQ_t[jj][ii]=tabfr_t['FREQ',jj+1]
+            
+            DETRUIRE(CONCEPT=_F(NOM=(tabfr_t)),INFO=1)
+                              
+        if NFREQ_l>0:                 
+            # frequences des modes en traction / compression
+            tabfr_l = RECU_TABLE(CO=L_MODEl[ii],NOM_PARA='FREQ',)
+            
+            for jj in range(NFREQ_l):
+                FRQ_l[jj][ii]=tabfr_l['FREQ',jj+1]
+            
+            DETRUIRE(CONCEPT=_F(NOM=(tabfr_l)),INFO=1)
+        
+        DETRUIRE(CONCEPT=_F(NOM=(tabfreq)),INFO=1)
+
+    RESULT = [FRQ,FRQ_f,FRQ_t, FRQ_l, FRQ_max, AMO_f];
+    return RESULT
+
+
+#------------------------------------------------------------------------------------------------
+
+def TRI_MODE_MACf(self, MACf,NFREQ_f, NVT_f, IV) :
+    """Tri des frequences par calcul des coefficients MAC"""
+
+    
+    DETRUIRE          =self.get_cmd('DETRUIRE')
+    
+    # base mode 1
+    tmacf =numpy.zeros((NFREQ_f,NFREQ_f));
+
+    for jj in range(NFREQ_f):
+        # base mode 2
+        for ll in range(NFREQ_f):
+            nmac= NFREQ_f*jj+ll
+            tmacf[jj][ll]=MACf['MAC',nmac+1] 
+    chaine='MAC Modes de flexion'
+    aster.affiche('RESULTAT', chaine)
+    affiche_tab(tmacf,NFREQ_f, NFREQ_f);  
+
+    for j2 in range(NFREQ_f):
+        XMAX=0.0
+        JREC=int(NVT_f[j2][IV+1]-1);        
+        for j1 in range(NFREQ_f):
+
+            if tmacf[j1][JREC] > XMAX:
+                XMAX=tmacf[j1][JREC]
+                I1B=j1+1
+        # test d'existance de I1B dans le tableau de connexion
+        I1B_exist =0;
+        for jj in range(j2):
+            if I1B == NVT_f[jj][IV]:
+                I1B_exist =1;
+        if I1B_exist ==0:     # IB1 n'existe pas
+            NVT_f[j2][IV]= I1B;
+        else:
+            NVT_f[j2][IV]=0;
+    
+    DETRUIRE(CONCEPT=_F(NOM=(MACf)),INFO=1);
+
+    return NVT_f           
+
+#------------------------------------------------------------------------------------------------
+
+def TRI_MODE_MACt(self, MACt,NFREQ_t, NVT_t, IV) :
+    """Tri des frequences par calcul des coefficients MAC"""
+
+    
+    DETRUIRE          =self.get_cmd('DETRUIRE')
+    
+    # base mode 1
+    tmact =numpy.zeros((NFREQ_t,NFREQ_t));
+
+    for jj in range(NFREQ_t):
+        # base mode 2
+        for ll in range(NFREQ_t):
+            nmac= NFREQ_t*jj+ll
+            tmact[jj][ll]=MACt['MAC',nmac+1] 
+    chaine='MAC Modes en torsion'
+    aster.affiche('RESULTAT', chaine)
+    affiche_tab(tmact,NFREQ_t, NFREQ_t);  
+
+    for j2 in range(NFREQ_t):
+        XMAX=0.0
+        JREC=int(NVT_t[j2][IV+1]-1);        
+        for j1 in range(NFREQ_t):
+
+            if tmact[j1][JREC] > XMAX:
+                XMAX=tmact[j1][JREC]
+                I1B=j1+1
+        # test d'existance de I1B dans le tableau de connexion
+        I1B_exist =0;
+        for jj in range(j2):
+            if I1B == NVT_t[jj][IV]:
+                I1B_exist =1; # IB1 existe deja
+        if I1B_exist ==0:     # IB1 n'existe pas
+            NVT_t[j2][IV]= I1B;
+        else:
+            NVT_t[j2][IV]=0;
+     
+    DETRUIRE(CONCEPT=_F(NOM=(MACt)),INFO=1);
+
+    return NVT_t           
+
+#------------------------------------------------------------------------------------------------
+def TRI_MODE_MACl(self, MACl,NFREQ_l, NVT_l, IV) :
+    """Tri des frequences par calcul des coefficients MAC"""
+    
+    DETRUIRE          =self.get_cmd('DETRUIRE')
+    
+    # base mode 1
+    tmacl =numpy.zeros((NFREQ_l,NFREQ_l));
+
+    for jj in range(NFREQ_l):
+        # base mode 2
+        for ll in range(NFREQ_l):
+            nmac= NFREQ_l*jj+ll
+            tmacl[jj][ll]=MACl['MAC',nmac+1] 
+    chaine='MAC Modes en traction/compression'
+    aster.affiche('RESULTAT', chaine)
+    affiche_tab(tmacl,NFREQ_l, NFREQ_l);  
+
+    for j2 in range(NFREQ_l):
+        XMAX=0.0
+        JREC=int(NVT_l[j2][IV+1]-1);        
+        for j1 in range(NFREQ_l):
+
+            if tmacl[j1][JREC] > XMAX:
+                XMAX=tmacl[j1][JREC]
+                I1B=j1+1
+        # test d'existance de I1B dans le tableau de connexion
+        I1B_exist =0;
+        for jj in range(j2):
+            if I1B == NVT_l[jj][IV]:
+                I1B_exist =1; # IB1 existe deja
+        if I1B_exist ==0:     # IB1 n'existe pas
+            NVT_l[j2][IV]= I1B;
+        else:
+            NVT_l[j2][IV]=0;
+     
+    DETRUIRE(CONCEPT=_F(NOM=(MACl)),INFO=1);
+
+    return NVT_l           
+
+
+#------------------------------------------------------------------------------------------------
+def CALC_MACf(self, L_MODEf, NFREQ_f) :
+    """Calcul de la matrice MAC entre les deux bases successives"""
+
+    MAC_MODES         =self.get_cmd('MAC_MODES')
+    
+    NBV=len(L_MODEf);
+    tmacf =numpy.zeros((NFREQ_f,NFREQ_f));
+    MACf=[0]*NBV
+
+    for ii in range(NBV-1):
+        if NFREQ_f>0:
+             MACf[ii]=MAC_MODES(BASE_1=L_MODEf[ii],
+                   BASE_2=L_MODEf[ii+1],
+                   INFO  =2,
+                   );
+    return MACf
+
+
+#------------------------------------------------------------------------------------------------
+def CALC_MACt(self, L_MODEt, NFREQ_t) :
+    """Calcul de la matrice MAC entre les deux bases successives"""
+
+    MAC_MODES         =self.get_cmd('MAC_MODES')
+
+    NBV=len(L_MODEt);
+    tmact =numpy.zeros((NFREQ_t,NFREQ_t));
+    MACt=[0]*NBV
+
+    for ii in range(NBV-1):
+        if NFREQ_t>0:
+             MACt[ii]=MAC_MODES(BASE_1=L_MODEt[ii],
+                   BASE_2=L_MODEt[ii+1],
+                   INFO  =1,
+                   );
+    return MACt
+        
+#-----------------------------------------------------------------------------------------------
+def CALC_MACl(self, L_MODEl, NFREQ_l) :
+    """Calcul de la matrice MAC entre les deux bases successives """
+
+    MAC_MODES         =self.get_cmd('MAC_MODES')
+
+    NBV=len(L_MODEl);
+    tmacl =numpy.zeros((NFREQ_l,NFREQ_l));
+    MACl=[0]*NBV
+
+    for ii in range(NBV-1):
+        if NFREQ_l>0:
+             MACl[ii]=MAC_MODES(BASE_1=L_MODEl[ii],
+                   BASE_2=L_MODEl[ii+1],
+                   INFO  =1,
+                   );
+    return MACl
+        
+#-----------------------------------------------------------------------------------------------
+def CALC_PREC(self,Mf,NFREQ_f,L_GR_NOEUD, typ_prec) :        
+    """Calcul le sens de precession pour un mode a une vitesse de rotation donnee
+    Type de precession, 1 somme, 2 grande orbite"""
+    
+    POST_RELEVE_T     =self.get_cmd('POST_RELEVE_T')  
+    DETRUIRE          =self.get_cmd('DETRUIRE')
+    IMPR_TABLE        =self.get_cmd('IMPR_TABLE')
+
+    XSMIN=1e-2;
+    NBV=len(Mf);
+    NOEU=len(L_GR_NOEUD);
+    SENS=numpy.zeros((NFREQ_f, NBV)); 
+    for ii in range(NBV):
+        # -------------------------------------------------------------------------
+        # Extraire les parties reelles, imaginaires et modules des modes en flexion        
+        # -------------------------------------------------------------------------
+        
+        tabmoR_f=POST_RELEVE_T(ACTION=_F(INTITULE='MODES_REEL',
+                                NOEUD=L_GR_NOEUD,
+                                RESULTAT=Mf[ii],
+                                NOM_CHAM='DEPL',
+                                TOUT_ORDRE='OUI',
+                                NOM_CMP=('DX','DY','DZ'),
+                                FORMAT_C='REEL',
+                                OPERATION='EXTRACTION',),);
+        tabmoI_f=POST_RELEVE_T(ACTION=_F(INTITULE='MODES_IMAG',
+                                NOEUD=L_GR_NOEUD,
+                                RESULTAT=Mf[ii],
+                                NOM_CHAM='DEPL',
+                                TOUT_ORDRE='OUI',
+                                NOM_CMP=('DX','DY','DZ'),
+                                FORMAT_C='IMAG',
+                                OPERATION='EXTRACTION',),);
+        tabmoN_f=POST_RELEVE_T(ACTION=_F(INTITULE='MODES_MODULE',
+                                NOEUD=L_GR_NOEUD,
+                                RESULTAT=Mf[ii],
+                                NOM_CHAM='DEPL',
+                                TOUT_ORDRE='OUI',
+                                NOM_CMP=('DX','DY','DZ'),
+                                FORMAT_C='MODULE',
+                                OPERATION='EXTRACTION',),);
+                                
+        
+        for jj in range(NFREQ_f):
+            #Sens de precesion pour un mode a une vitesse donne
+            modul1  =0.0;
+            sens1   =0.0;
+            for ll in range(NOEU):
+                nmod=NOEU*jj+ll
+                dy_r  = tabmoR_f['DY' ,nmod+1];
+                dz_r  = tabmoR_f['DZ' ,nmod+1];
+                dy_i  = tabmoI_f['DY' ,nmod+1];
+                dz_i  = tabmoI_f['DZ' ,nmod+1];
+                dy_m  = tabmoN_f['DY' ,nmod+1];
+                dz_m  = tabmoN_f['DZ' ,nmod+1];
+                
+                if typ_prec == 1 : 
+                    #Sens parcours pour un noeud
+                    preces  = dy_r*dz_i-dy_i*dz_r ;
+                    #Sens de precession dominant dans une mode
+                    if preces >0:
+                        sens1=sens1+ dy_m + dz_m;
+                    elif preces <0:
+                        sens1=sens1- dy_m - dz_m;
+                else:
+                    #Sens de precession associe au plus grand orbite
+                    lk= numpy.sqrt(dy_m*dy_m + dz_m*dz_m);
+                    if lk > modul1:
+                        # demi diagonale
+                        modul1=lk
+                        preces  = dy_r*dz_i-dy_i*dz_r ; 
+                        if preces >0:
+                            sens1=modul1;
+                        elif preces <0:             
+                            sens1=-modul1;
+            
+            XS=abs(sens1);
+            if XS>XSMIN:
+                SENS[jj][ii]=sens1/XS; 
+            else:  
+                SENS[jj][ii]=0.0;  
+            
+        DETRUIRE(CONCEPT=_F(NOM=(tabmoR_f, tabmoI_f, tabmoN_f)),INFO=1) 
+        
+    return SENS        
+
+#------------------------------------------------------------------------------------------------
+def TRI_MODE_PREC_DI (SENS,NFREQ_f, NVT_f, NBV, OMIN) :
+    """Tri des modes par une methode de proche en proche avec verification du sens de precession"""
+    # base mode 1
+    chaine='TRI_MODE_PREC_DI'
+    aster.affiche('RESULTAT', chaine)
+   
+    NVT_fdir =numpy.zeros((NFREQ_f, NBV)); 
+    NVT_finv =numpy.zeros((NFREQ_f, NBV));   
+    nb_prec_dir =NFREQ_f;
+    nb_prec_inv =NFREQ_f;
+    for nb in range(NBV):
+        nbv1=NBV-nb-1;
+        jd=0;
+        ji=0;  
+        for jj in range(NFREQ_f):
+            if SENS[jj][nbv1]>=0.:
+                NVT_fdir[jd][nbv1]=jj+1;
+                jd=jd+1;
+            elif SENS[jj][nbv1]<0.:
+                NVT_finv[ji][nbv1]=jj+1;
+                ji=ji+1;
+        # Calcul de nombre minimum de precession directe pour les vitesses
+        # Calcul de nombre minimum de precession inverse pour les vitesses
+        
+        if jd>0:
+            if nb_prec_dir >jd:
+                nb_prec_dir =jd; 
+        if ji>0: 
+            if nb_prec_inv >ji:
+                nb_prec_inv= ji; 
+    
+    if(OMIN==0.0) :
+        for ii in range(NFREQ_f):
+            NVT_fdir[ii][0]=NVT_fdir[ii][1] 
+            NVT_finv[ii][0]=NVT_finv[ii][1]   
+    
+    chaine='nb_prev_dir ' + str(nb_prec_dir);
+    aster.affiche('RESULTAT', chaine)
+    chaine='Tableau de connexion des Modes de flexion precession directe'
+    aster.affiche('RESULTAT', chaine)
+    affiche_tabint(NVT_fdir,NFREQ_f, NBV); 
+
+    chaine='nb_prev_inv ' + str(nb_prec_inv);
+    aster.affiche('RESULTAT', chaine)
+    chaine='Tableau de connexion des Modes de flexion precession inverse'
+    aster.affiche('RESULTAT', chaine)
+    affiche_tabint(NVT_finv,NFREQ_f, NBV); 
+
+    # Rassembler les tableaux de connexion
+    NVTf_prec =numpy.zeros((NFREQ_f, NBV), int); 
+    for jj in range(NFREQ_f):
+        jf=0;
+        jf=int(NVT_fdir[jj][NBV-1]);
+        if jf>0:
+            for iv in range(NBV):
+                NVTf_prec[jf-1][iv]= NVT_fdir[jj][iv];  
+        jf=0;
+        jf=int(NVT_finv[jj][NBV-1]);
+        if jf>0:
+            for iv in range(NBV):
+                NVTf_prec[jf-1][iv]= NVT_finv[jj][iv]; 
+            
+    chaine='\n'
+    aster.affiche('RESULTAT', chaine)   
+    chaine='Tableau de connexion des Modes de flexion'
+    aster.affiche('RESULTAT', chaine)
+    affiche_tabint(NVTf_prec,NFREQ_f, NBV); 
+    
+    RESULT = [nb_prec_dir,nb_prec_inv, NVTf_prec];
+    
+    return RESULT
+    
+
+#----------------------------------------------------------------------------------------
+def affiche_tab(tab1,nbligne, nbcol) :
+    """affiche un taleau tab1 de nbligne lignes et nbcol colonnes"""
+    for jj in range(nbligne):
+        chaine=''
+        for ii in range(nbcol):
+            str1 = '%15.5E' %tab1[jj][ii]
+            chaine=chaine + ' '+ str1
+        aster.affiche('RESULTAT', chaine)
+
+
+#----------------------------------------------------------------------------------------            
+def affiche_tabint(tab1,nbligne, nbcol) :
+    """affiche un taleau tab1 de nbligne lignes et nbcol colonnes"""
+    for jj in range(nbligne):
+        chaine=''
+        for ii in range(nbcol):
+            str1 = '%5d' %tab1[jj][ii]
+            chaine=chaine + ' '+ str1
+        aster.affiche('RESULTAT', chaine)
+
+
+#----------------------------------------------------------------------------------------        
+def calc_pas(xmin, xmax) :
+    """calcul de l'echelle valeurs mini-maxi et le pas
+    On impose entre 5 et 10 intervalles
+    En entree xmin, xmax valeurs mini-maxi, xmin et xmax superieurs ou egaux a zero
+    En sortie VAL1, VAL2 et PAS valeurs mini-maxi de l'echelle et le pas
+    """
+    diff=xmax-xmin;
+    PAS=1.;
+    VAL1=0.;
+    C10=10.;
+    
+    # diff < 5.
+    while diff<5.:
+        diff=diff*C10;
+        PAS = PAS/C10;
+    
+    # diff > 50.
+    while diff<50.:
+        diff=diff/C10;
+        PAS = PAS*C10;
+    
+    # 5 <= diff <= 50.
+    N=int(diff);
+    if N>=11 and N<=20 :
+        N=N/2;
+        PAS=PAS*2.;
+    elif N>=21 and N<=30 :
+        N=N/3;
+        PAS=PAS*3.;
+    elif N>=31 and N<=40 :
+        N=N/4;
+        PAS=PAS*4.;
+    elif N>=41 and N<=50 :
+        N=N/5;
+        PAS=PAS*5.;
+    
+    # Calcul des valeurs mini-maxi de l'echelle
+    while abs(xmin-VAL1)>PAS:
+        VAL1=VAL1 + PAS;
+    
+    VAL2=VAL1 + (N*PAS);
+    while VAL2 <= xmax:
+        VAL2=VAL2 + PAS;
+    
+    RESULT=[VAL1, VAL2, PAS];
+    
+    return RESULT
+   
+#----------------------------------------------------------------------------------------            
+def color_camp(sens, amortis) :
+    """determine la couleur et le style du trait
+    en entree le sens de precession
+    en sortir la couleur, le style du trait ICS IST et le marqueur
+          DIRECTE,STABLE       vert
+          DIRECTE,INSTABLE     rouge
+          INDIRECTE,STABLE     bleu
+          INDIRECTE,INSTABLE   magenta
+    """
+
+    if sens<0:   # precession inverse
+        if amortis<0.0:   # instable
+            ICS = 10; # magenta
+            IST = 4;  # tiret
+            IMA = 9;  # croix
+        else:           # stable
+            ICS = 4;  # bleu
+            IST = 4;  # tiret
+            IMA = 0; 
+    else:       # precession directe
+        if amortis<0.0:   # instable
+            ICS = 2;  # rouge
+            IST = 1;  # trait continu
+            IMA = 8;  # plus
+        else:           # stable
+            ICS = 3;  # vert
+            IST = 1;  # trait continu
+            IMA = 0; 
+    RESULT= [ICS,IST,IMA];
+    
+    return RESULT
+    
+#----------------------------------------------------------------------------------------
+def sup_redon_list(LS):
+    """Supprimer la redondace dans une liste de reel"""
+    LS.sort();
+    LS_min=min(LS);
+    LS_max=max(LS);
+    if  LS_min<0:
+        if abs(LS_min) > abs(LS_max):
+            LS.reverse();
+    ii=0
+    len_list=len(LS);
+    while ii < len_list-1:
+        icount = LS.count(LS[ii]);
+        if icount >1:
+            for jj in range(ii+icount-1, ii,-1):
+                LS.pop(jj);
+        ii=ii+1
+        len_list=len(LS);
+
+
+#----------------------------------------------------------------------------------------
+def sup_redon_listv(LS):
+    """Supprimer la redondace dans une liste de vitesses"""
+    
+    LS_init=[LS[ii] for ii in range(len(LS))]; # Liste de vitesses initiale sans rangement
+    LS.sort();
+    LS_min=min(LS);
+    LS_max=max(LS);
+    if  LS_min<0:
+        if abs(LS_min) > abs(LS_max):
+            LS.reverse();
+   
+    ii=0
+    len_list=len(LS);
+    while ii < len_list-1:
+        icount = LS.count(LS[ii]);
+        if icount >1:
+            for jj in range(ii+icount-1, ii,-1):
+                LS.pop(jj);
+        ii=ii+1
+        len_list=len(LS);
+
+
+    nbV1=len_list;
+    num_vit_tri =numpy.zeros((nbV1), int);
+    for ii in range(0,nbV1):
+        vit = LS[ii];
+        num_vit_tri[ii] = LS_init.index(vit);
+      
+    print 'LS', LS
+    print 'LS_init', LS_init    
+    return num_vit_tri
+
+
+#----------------------------------------------------------------------------------------
+def save_intersec(L_INTER, FINT):
+    """Sauvegarde dans un fichier les points d'intersection des courbes du diagramme de Campbell
+    avec les droites de pente S
+    """
+    chaine='\n'
+    FINT.write(chaine)   
+    chaine='Points d'' intersection avec les droites Y=SX'
+    FINT.write(chaine)
+    for ii in range(len(L_INTER)):
+        chaine='\n'
+        FINT.write(chaine)   
+        chaine = 'S = %10.2F' %L_INTER[ii]["pente"]
+        FINT.write(chaine) 
+        chaine='\n'
+        FINT.write(chaine)   
+        L_POINT = L_INTER[ii]["point"]
+        for jj in range(len(L_POINT)):
+            chaine = 'Vitesse   = %10.2F tr/mn' %L_POINT[jj][0]
+            FINT.write(chaine) 
+            FINT.write('\n') 
+            chaine = 'Frequence = %10.2F HZ' %L_POINT[jj][1]
+            FINT.write(chaine) 
+            FINT.write('\n')   
+
+        chaine='----------------------------'
+        FINT.write(chaine) 
+        chaine='\n' 
+        chaine=' '
+
diff --git a/Aster/Cata/cataSTA10/Macro/impr_fonction_ops.py b/Aster/Cata/cataSTA10/Macro/impr_fonction_ops.py
new file mode 100644 (file)
index 0000000..1d7a334
--- /dev/null
@@ -0,0 +1,407 @@
+#@ MODIF impr_fonction_ops Macro  DATE 06/07/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# RESPONSABLE MCOURTOI M.COURTOIS
+
+import os.path
+
+# ------------------------------------------------------------------------------
+def impr_fonction_ops(self, FORMAT, COURBE, INFO, **args):
+   """
+   Macro IMPR_FONCTION permettant d'imprimer dans un fichier des fonctions,
+   colonnes de table...
+   Erreurs<S> dans IMPR_FONCTION pour ne pas perdre la base.
+   """
+   macro='IMPR_FONCTION'
+   import pprint
+   import aster
+   from Accas               import _F
+   from Cata.cata           import nappe_sdaster, fonction_c, formule, formule_c
+   from Utilitai            import Graph
+   from Utilitai.Utmess     import UTMESS
+   from Utilitai.UniteAster import UniteAster
+   
+   ier=0
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+
+   # On importe les definitions des commandes a utiliser dans la macro
+   # Le nom de la variable doit etre obligatoirement le nom de la commande
+   CALC_FONC_INTERP = self.get_cmd('CALC_FONC_INTERP')
+   DEFI_LIST_REEL   = self.get_cmd('DEFI_LIST_REEL')
+   DETRUIRE         = self.get_cmd('DETRUIRE')
+
+   #----------------------------------------------
+   # 0. Traitement des arguments, initialisations
+   # unité logique des fichiers réservés
+   ul_reserve=(8,)
+   UL = UniteAster()
+
+   # 0.1. Fichier
+   nomfich=None
+   if args['UNITE'] and args['UNITE']!=6:
+      nomfich=UL.Nom(args['UNITE'])
+      if INFO==2:
+         aster.affiche('MESSAGE', ' Nom du fichier :'+nomfich)
+   if nomfich and os.path.exists(nomfich) and os.stat(nomfich).st_size!=0:
+      if FORMAT=='XMGRACE':
+         niv='A'
+      else:
+         niv='I'
+      UTMESS(niv, 'FONCT0_1', valk=nomfich)
+
+   # 0.2. Récupération des valeurs sous COURBE
+   unparmi=('FONCTION','LIST_RESU','FONC_X','ABSCISSE')
+
+   # i0 : indice du mot-clé facteur qui contient LIST_PARA, sinon i0=0
+   i0=0
+   Courbe=[]
+   iocc=-1
+   for Ci in COURBE:
+      iocc+=1
+      dC = Ci.cree_dict_valeurs(Ci.mc_liste)
+      if dC.has_key('LIST_PARA') and dC['LIST_PARA']!=None and i0==0:
+         i0=iocc
+      for mc in dC.keys():
+         if dC[mc]==None: del dC[mc]
+      Courbe.append(dC)
+   if INFO==2:
+      aster.affiche('MESSAGE',' Nombre de fonctions à analyser : '+str(len(Courbe)))
+
+   # 0.3. Devra-t-on interpoler globalement ?
+   #      Dans ce cas, linter__ est le LIST_PARA
+   #      ou, à défaut, les abscisses de la première courbe
+   interp=False
+   if FORMAT=='TABLEAU':
+      interp=True
+      dCi=Courbe[i0]
+      if dCi.has_key('LIST_PARA'):
+         linter__=dCi['LIST_PARA']
+      else:
+         obj=None
+         for typi in unparmi:
+            if dCi.has_key(typi):
+               obj=dCi[typi]
+               break
+         if obj==None:
+            UTMESS('S', 'SUPERVIS_56')
+         if typi=='FONCTION':
+            if isinstance(obj, nappe_sdaster):
+               lpar,lval=obj.Valeurs()
+               linterp=lval[0][0]
+            else:
+               linterp=obj.Valeurs()[0]
+         elif typi=='FONC_X':
+            lbid,linterp=obj.Valeurs()
+         elif typi=='ABSCISSE':
+            linterp=obj
+         linter__=DEFI_LIST_REEL(VALE=linterp)
+      if INFO==2:
+         aster.affiche('MESSAGE', ' Interpolation globale sur la liste :')
+         aster.affiche('MESSAGE', pprint.pformat(linter__.Valeurs()))
+
+
+   #----------------------------------------------
+   # 1. Récupération des valeurs des N courbes sous forme
+   #    d'une liste de N listes
+   #----------------------------------------------
+   graph=Graph.Graph()
+   iocc=-1
+   for dCi in Courbe:
+      iocc+=1
+
+      # 1.1. Type d'objet à traiter
+      obj=None
+      for typi in unparmi:
+         if dCi.has_key(typi):
+            obj=dCi[typi]
+            break
+      if not dCi.has_key('LEGENDE') and hasattr(obj,'get_name'):
+            dCi['LEGENDE']=obj.get_name()
+      if obj==None:
+         UTMESS('S', 'SUPERVIS_56')
+
+      # 1.2. Extraction des valeurs
+
+      # 1.2.1. Mot-clé FONCTION
+      if   typi=='FONCTION':
+         # formule à un paramètre seulement
+         if isinstance(obj, formule):
+            dpar = obj.Parametres()
+            if len(dpar['NOM_PARA']) != 1:
+               UTMESS('S', 'FONCT0_50', valk=obj.nom, vali=len(dpar['NOM_PARA']))
+         
+         if isinstance(obj, nappe_sdaster):
+            lpar,lval=obj.Valeurs()
+            dico,ldicf=obj.Parametres()
+            Leg=dCi['LEGENDE']
+            for i in range(len(lpar)):
+               p=lpar[i]
+               lx=lval[i][0]
+               ly=lval[i][1]
+               # sur quelle liste interpoler chaque fonction
+               if i==0:
+                  if interp:
+                     li__=linter__
+                  elif dCi.has_key('LIST_PARA'):
+                     li__=dCi['LIST_PARA']
+                  else:
+                     li__=DEFI_LIST_REEL(VALE=lx)
+               # compléter les paramètres d'interpolation
+               dic=dico.copy()
+               dic.update(ldicf[i])
+               
+               if (interp or dCi.has_key('LIST_PARA')) and i>0:
+                  ftmp__=CALC_FONC_INTERP(
+                     FONCTION=obj,
+                     VALE_PARA=p,
+                     LIST_PARA_FONC=li__,
+                     **dic
+                  )
+                  pv,lv2=ftmp__.Valeurs()
+                  lx=lv2[0][0]
+                  ly=lv2[0][1]
+               # on stocke les données dans le Graph
+               nomresu=dic['NOM_RESU'].strip()+'_'+str(len(graph.Legendes))
+               dicC={
+                  'Val' : [lx,ly],
+                  'Lab' : [dic['NOM_PARA_FONC'],nomresu]
+               }
+               # ajoute la valeur du paramètre
+               dCi['LEGENDE'] = '%s %s=%g' % (Leg,dic['NOM_PARA'].strip(),p)
+               Graph.AjoutParaCourbe(dicC, args=dCi)
+               graph.AjoutCourbe(**dicC)
+               DETRUIRE(OBJET=_F(CHAINE=('li__','ftmp__'),),ALARME='NON',INFO=1)
+         else:
+            ftmp__=obj
+            dpar=ftmp__.Parametres()
+            # pour les formules à un paramètre (test plus haut)
+            if type(dpar['NOM_PARA']) in (list, tuple):
+               dpar['NOM_PARA'] = dpar['NOM_PARA'][0]
+            if interp:
+               ftmp__=CALC_FONC_INTERP(
+                  FONCTION=obj,
+                  LIST_PARA=linter__,
+                  **dpar
+               )
+            elif dCi.has_key('LIST_PARA'):
+               ftmp__=CALC_FONC_INTERP(
+                  FONCTION=obj,
+                  LIST_PARA=dCi['LIST_PARA'],
+                  **dpar
+               )
+            lval=list(ftmp__.Valeurs())
+            lx=lval[0]
+            lr=lval[1]
+            if isinstance(obj, (fonction_c, formule_c)) and dCi.get('PARTIE') == 'IMAG':
+               lr=lval[2]
+            # on stocke les données dans le Graph
+            if isinstance(obj, (fonction_c, formule_c)) and not dCi.has_key('PARTIE'):
+               nomresu=dpar['NOM_RESU'].strip()+'_'+str(len(graph.Legendes))
+               dicC={
+                  'Val' : lval,
+                  'Lab' : [dpar['NOM_PARA'],nomresu+'_R',nomresu+'_I']
+               }
+            else:
+               nomresu=dpar['NOM_RESU'].strip()+'_'+str(len(graph.Legendes))
+               dicC={
+                  'Val' : [lx,lr],
+                  'Lab' : [dpar['NOM_PARA'],nomresu]
+               }
+            Graph.AjoutParaCourbe(dicC, args=dCi)
+            graph.AjoutCourbe(**dicC)
+
+      # 1.2.2. Mot-clé LIST_RESU
+      elif typi=='LIST_RESU':
+         if interp and iocc>0:
+            UTMESS('S', 'FONCT0_2')
+         lx=dCi['LIST_PARA'].Valeurs()
+         lr=obj.Valeurs()
+         if len(lx)!=len(lr):
+            UTMESS('S', 'FONCT0_3')
+         # on stocke les données dans le Graph
+         dicC={
+            'Val' : [lx,lr],
+            'Lab' : [dCi['LIST_PARA'].get_name(),obj.get_name()]
+         }
+         Graph.AjoutParaCourbe(dicC, args=dCi)
+         graph.AjoutCourbe(**dicC)
+
+      # 1.2.3. Mot-clé FONC_X
+      # exemple : obj(t)=sin(t), on imprime x=sin(t), y=cos(t)
+      #           ob2(t)=cos(t)
+      elif typi=='FONC_X':
+         ob2=dCi['FONC_Y']
+         # peut-on blinder au niveau du catalogue
+         if isinstance(obj, nappe_sdaster) or isinstance(ob2, nappe_sdaster):
+            UTMESS('S', 'FONCT0_4')
+         if interp and iocc>0:
+            UTMESS('S', 'FONCT0_5')
+         ftmp__=obj
+         dpar=ftmp__.Parametres()
+         ftm2__=ob2
+         dpa2=ftm2__.Parametres()
+         intloc=False
+         if interp and not dCi.has_key('LIST_PARA'):
+            # dans ce cas, linter__ contient les ordonnées de FONC_X
+            intloc=False
+            li__=linter__
+         elif dCi.has_key('LIST_PARA'):
+            intloc=True
+            li__=dCi['LIST_PARA']
+         if intloc:
+            ftmp__=CALC_FONC_INTERP(
+               FONCTION=obj,
+               LIST_PARA=li__,
+               **dpar
+            )
+            lt,lx=ftmp__.Valeurs()
+            ftm2__=CALC_FONC_INTERP(
+               FONCTION=ob2,
+               LIST_PARA=li__,
+               **dpa2
+            )
+         else:
+            lt,lx=ftmp__.Valeurs()
+            li__=DEFI_LIST_REEL(VALE=lt)
+            ftm2__=CALC_FONC_INTERP(
+               FONCTION=ob2,
+               LIST_PARA=li__,
+               **dpa2
+            )
+         
+         lbid,ly=ftm2__.Valeurs()
+         # on stocke les données dans le Graph
+         # on imprime la liste des paramètres seulement si LIST_PARA
+         if intloc:
+            nomresur=dpar['NOM_RESU'].strip()+'_'+str(len(graph.Legendes))
+            nomresu2=dpa2['NOM_RESU'].strip()+'_'+str(len(graph.Legendes)+1)
+            dicC={
+               'Val' : [lt,lx,ly],
+               'Lab' : [dpar['NOM_PARA'],nomresur,nomresu2]
+            }
+         else:
+            nomresur=dpar['NOM_RESU'].strip()+'_'+str(len(graph.Legendes))
+            nomresu2=dpa2['NOM_RESU'].strip()+'_'+str(len(graph.Legendes)+1)
+            dicC={
+               'Val' : [lx,ly],
+               'Lab' : [nomresur,nomresu2]
+            }
+         Graph.AjoutParaCourbe(dicC, args=dCi)
+         graph.AjoutCourbe(**dicC)
+
+      # 1.2.4. Mot-clé ABSCISSE / ORDONNEE
+      elif typi=='ABSCISSE':
+         if interp and iocc>0:
+            UTMESS('S', 'FONCT0_6')
+         lx=obj
+         lr=dCi['ORDONNEE']
+         if len(lx)!=len(lr):
+            UTMESS('S', 'FONCT0_7')
+         # on stocke les données dans le Graph
+         dicC={
+            'Val' : [lx,lr],
+            'Lab' : ['Absc','Ordo']
+         }
+         Graph.AjoutParaCourbe(dicC, args=dCi)
+         graph.AjoutCourbe(**dicC)
+
+      # 1.2.9. ménage
+      DETRUIRE(OBJET=_F(CHAINE=('li__','ftmp__','ftm2__'),),ALARME='NON',INFO=1)
+
+   # 1.2.99. ménage hors boucle
+   DETRUIRE(OBJET=_F(CHAINE='linter__',), ALARME='NON',INFO=1)
+
+   # 1.3. dbg
+   if INFO==2:
+      message='\n'+'-'*70+'\n Contenu du Graph : \n'+'-'*70+'\n'
+      message=message+graph.__repr__()
+      message=message+'-'*70+'\n'
+      aster.affiche('MESSAGE',message)
+
+   #----------------------------------------------
+   # 2. Impression du 'tableau' de valeurs
+   #----------------------------------------------
+
+   # 2.0. Surcharge des propriétés du graphique et des axes
+   # (bloc quasiment identique dans Table)
+   if args['TITRE']!=None:          graph.Titre=args['TITRE']
+   if args['SOUS_TITRE']!=None:     graph.SousTitre=args['SOUS_TITRE']
+   if FORMAT in ('XMGRACE','AGRAF'):
+      if args['BORNE_X']!=None:
+                                       graph.Min_X=args['BORNE_X'][0]
+                                       graph.Max_X=args['BORNE_X'][1]
+      if args['BORNE_Y']!=None:
+                                       graph.Min_Y=args['BORNE_Y'][0]
+                                       graph.Max_Y=args['BORNE_Y'][1]
+      if args['LEGENDE_X']!=None:      graph.Legende_X=args['LEGENDE_X']
+      if args['LEGENDE_Y']!=None:      graph.Legende_Y=args['LEGENDE_Y']
+      if args['ECHELLE_X']!=None:      graph.Echelle_X=args['ECHELLE_X']
+      if args['ECHELLE_Y']!=None:      graph.Echelle_Y=args['ECHELLE_Y']
+      if args['GRILLE_X']!=None:       graph.Grille_X=args['GRILLE_X']
+      if args['GRILLE_Y']!=None:       graph.Grille_Y=args['GRILLE_Y']
+
+   kargs={
+      'FORMAT'    : FORMAT,
+      'FICHIER'   : nomfich,
+   }
+   
+   # 2.1. au format TABLEAU
+   if FORMAT=='TABLEAU':
+      # surcharge par les formats de l'utilisateur
+      kargs['dform']={
+         'csep'   : args['SEPARATEUR'],
+         'ccom'   : args['COMMENTAIRE'],
+         'ccpara' : args['COMM_PARA'],
+         'cdeb'   : args['DEBUT_LIGNE'],
+         'cfin'   : args['FIN_LIGNE'],
+      }
+
+   # 2.2. au format AGRAF
+   elif FORMAT=='AGRAF':
+      nomdigr=None
+      if args['UNITE_DIGR']!=6:
+         nomdigr=UL.Nom(args['UNITE_DIGR'])
+      kargs['FICHIER']=[nomfich, nomdigr]
+      kargs['dform']={ 'formR' : '%12.5E' }
+
+   # 2.3. au format XMGRACE et dérivés
+   elif FORMAT=='XMGRACE':
+      kargs['dform']={ 'formR' : '%.8g' }
+      kargs['PILOTE']=args['PILOTE']
+
+   # 2.39. Format inconnu
+   else:
+      UTMESS('S', 'FONCT0_8', valk=FORMAT)
+
+   # Traiter le cas des UL réservées
+   if args['UNITE'] and args['UNITE'] in ul_reserve:
+      UL.Etat(args['UNITE'], etat='F')
+   if FORMAT=='AGRAF' and args['UNITE_DIGR']!=args['UNITE'] \
+         and args['UNITE_DIGR'] in ul_reserve:
+      UL.Etat(args['UNITE_DIGR'], etat='F')
+
+   # 2.4. On trace !
+   graph.Trace(**kargs)
+
+   # 99. Traiter le cas des UL réservées
+   UL.EtatInit()
+
+   return ier
diff --git a/Aster/Cata/cataSTA10/Macro/impr_oar_ops.py b/Aster/Cata/cataSTA10/Macro/impr_oar_ops.py
new file mode 100644 (file)
index 0000000..0a45e20
--- /dev/null
@@ -0,0 +1,773 @@
+#@ MODIF impr_oar_ops Macro  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# protection pour eficas
+try:
+   import aster
+   from Utilitai.Utmess import  UTMESS
+   from Utilitai.Table import Table
+   from Utilitai.partition import MAIL_PY
+except:
+   pass
+
+def buildTabString(tabLevel):
+   """
+      Construit une chaine de tabulation
+   """
+   chaine = ''
+   for i in range(0, tabLevel) :
+      chaine += '\t'
+      
+   return chaine
+   
+def getBornes(listIn, valTest) :
+   """
+      Retourne un doublet de valeurs qui correspond aux valeurs de la liste qui encadrent la valeur (valTest)
+      Si val n'est pas encadrée par des valeurs de la liste, une des valeurs du doublet est None
+   """
+   v1 = None
+   v2 = None   
+   for val in listIn :
+      if valTest > val : v1 = val
+      if valTest < val : v2 = val
+      
+   # traitement des cas limites
+   if valTest == listIn[0] : v1 = listIn[0]
+   if valTest == listIn[len(listIn)-1] : v2 = listIn[len(listIn)-1]
+   
+   return (v1, v2) 
+
+def interpoleLin(listDoublet, X) :
+   """
+      Interpole linéairement entre deux bornes définies par listDoublets[(X0, Y0), (X1, Y1)] la valeur Y en X
+   """
+   X0 = listDoublet[0][0]
+   Y0 = listDoublet[0][1]
+   X1 = listDoublet[1][0]
+   Y1 = listDoublet[1][1]
+   
+   return Y0 + (X - X0) * (Y1 - Y0) / (X1 - X0)
+
+class interpolationError(Exception) :
+   def __init__(self) :
+      self.mess = 'Interpolation sur une valeur hors bornes'
+      self.otherExcept = Exception()
+        
+   def getMess(self) :
+      """ 
+         retourne le message associé à l'erreur
+      """
+      # Analyse les différents cas d'erreurs
+      if self.otherExcept == IOError :
+         self.mess += "\nProblème à l'ouverture du fichier\n"
+
+      return self.mess
+class XMLNode :
+    """
+        Classe gérant un noeud de l'arborescence XML
+        Un noeud possède :
+            - un nom de balise
+            - un commentaire (optionnel)
+            - un ensemble de "paramètres" (optionnels)
+            - une liste d'élément ou d'autres noeuds (optionnels/possibilité de balises vides) :
+
+        La classe propose : 
+            - une méthode "buildTree" qui parcoure le liste de manière récursive pour
+              produire l'arborescence XML en vu de son enregistrement ou son impression
+            - (TO DO) une methode statique "loadTree" qui produit un arbre XML à partir d'un fichier
+    """
+    def __init__(self, nomBalise, valeur = None, commentaire = None, **listOpt) :
+        self.nomBalise = nomBalise
+        self.commentaire = commentaire
+        self.param = listOpt
+        self.arbre=list()
+        if valeur != None : self.addValue(valeur) # None n'est pas 0 !
+
+    def getCommentaire(self) : return self.commentaire
+
+    def setCommentaire(sel, commentaire) : self.commentaire = commentaire
+
+    def getParametres(self) : return  self.param
+
+    def setParametres(self, parametres) : self.param = parametres    
+
+    def append(self, nodeName, valeur=None, commentaire = None, **listOpt) :
+        """
+            Ajoute un noeud à l'arborescence et retourne une référence sur ce noeud
+            On peut ajouter directement la valeur, si simple, associée à la balise
+        """
+        node = XMLNode(nodeName, valeur, commentaire)
+
+        self.arbre.append(node)
+
+        return self.arbre[len(self.arbre)-1]
+
+    def addValue(self, valeur):
+        """
+            Ajoute un élément "simple" (nombre, texte) à l'arborescence
+        """
+        self.arbre.append(valeur)
+            
+    def buildTree(self, tabLevel=0) :
+        """
+            Construit l'arborescence XML en parcourant récursivement la structure de donnée
+            et la retourne sous la forme d'une chaine de caractères
+
+            tabLevel permet de gérer l'indentation
+        """
+        # Construction de la chaine de tabulations nécessaire à une bonne lecture du fichier XML
+        tabString = buildTabString(tabLevel) 
+
+        XMLString = ''
+        
+        try :
+            # listOpt contient les paramètres optionnels de la balise
+            chaine = ''
+            for v in self.param.keys() :
+                chaine = chaine + ' ' +  v  + '=' + self.param[v] 
+        except : pass
+        
+        baliseOuverture=tabString + "<" + self.nomBalise + chaine +">\n"
+        XMLString += baliseOuverture
+
+        if self.commentaire :
+            XMLString = XMLString + tabString + "\t<!--"+self.commentaire+"-->\n"
+
+        for elem in self.arbre :
+            try :
+                XMLString += elem.buildTree(tabLevel+1)
+            except : # l'élément n'est pas un noeud
+                XMLString = XMLString + tabString + '\t' + str(elem) + '\n'
+
+        XMLString = XMLString + tabString + "</"+self.nomBalise+">\n"
+
+        return XMLString
+
+    def save(self, fileObj) :
+        """ 
+         Construit le l'arborescence XML et l'écrit dans un fichier 
+         pointé par le handler passé en paramètres
+        """ 
+        try :
+            fileObj.write(self.buildTree())
+        except : pass
+
+class OAR_element :
+   """
+      Classe de base des éléments manipulés par IMPR_OAR
+   """
+   def __init__(self) :
+      self.nodeComp = None
+      
+   def buildTree(self) : pass
+
+   def getNode(self) :
+      """
+         Renvoie le noeud XML construit par buildTree
+      """
+      return self.nodeComp
+   
+
+class composant(OAR_element) :
+   """
+      Classe permettant de traiter les composants
+      
+      NB :
+      1. L utilisateur est suppose faire la meme coupe pour le calcul mecanique et le calcul thermo-mecanique 
+      2. Dans le cas d'un revetement, l'utilisateur est supposé définir son plan de coupe de telle sorte 
+         que la coupe de la structure et la coupe du revetement se raccordent
+   """
+   def __init__(self, **args) :
+      self.nodeComp = XMLNode("COMPOSANT") # Racine de l'arborescence composant
+      
+      self.diametre = args['DIAMETRE']
+      self.origine  = args['ORIGINE']
+      self.coef_u   = args['COEF_U']
+      self.angle_c  = args['ANGLE_C']
+      self.revet    = args['REVET']
+      
+      self.lastAbscisse = None # Permet de gerer le recouvrement des points de coupe entre revetement et structure
+      self.num_char = -1
+      self.type_char = ''
+      self.tabAbscisses = list()
+      self.tabAbscisses_S = None
+      self.dictMeca = dict()
+      self.dictMeca_S = None # Pas créé car optionnel
+      self.epaisseur = 0.0
+      self.epaisseur_R = 0.0
+
+      # dictionnaire gérant le résultat contraintes en fonction des instants et des abscisses
+      self.dictInstAbscSig = dict()
+      self.dictInstAbscSig_S = None # Création si nécessaire
+      # dictionnaire gérant le résultat température en fonction des instants et des abscisses
+      self.dictInstAbscTemp = dict()
+      self.dictInstAbscTemp_S = None # facultatif 
+      self.list_inst = None
+      self.num_tran = None    
+
+      self.noResuMeca = False
+      self.noResuTher = False
+      
+      # 1. resultat mecanique
+      try : 
+         # On ne construit qu'une table des abscisses et une table des contraintes.
+         # Le revetement est obligatoirement en interne on commence par lui
+         para_resu_meca = args['RESU_MECA']
+         self.num_char = para_resu_meca['NUM_CHAR']
+         self.type_char = para_resu_meca['TYPE']
+
+         if self.revet == 'OUI' :
+            # Construction de la table complementaire si revetement
+            self.dictMeca_S = dict()
+            self.tabAbscisses_S = list()
+            self.buildTablesMeca('TABLE_S', para_resu_meca, self.tabAbscisses_S, self.dictMeca_S)
+            self.epaisseur_R = abs(self.tabAbscisses_S[len(self.tabAbscisses_S)-1] - self.tabAbscisses_S[0])
+         
+         self.buildTablesMeca('TABLE', para_resu_meca, self.tabAbscisses, self.dictMeca, offset=self.epaisseur_R)
+        
+         if self.revet == 'OUI' :
+            self.mergeDictMeca() # merge les tableaux resultats du revetement et de la structure
+
+         # Calcul de l'épaisseur de la coupe.
+         self.epaisseur = abs(self.tabAbscisses[len(self.tabAbscisses)-1] - self.tabAbscisses[0])
+      except : 
+         self.noResuMeca = True
+      
+      # 2. Résultat thermique
+      try :
+         para_resu_ther = RESU_THER
+         self.num_tran = para_resu_ther['NUM_TRAN']
+         self.tabAbscisses = list()
+         self.tabAbscisses_S = None
+         
+         listInst = list()
+         if self.revet == 'OUI' :
+            # Le revetement est obligatoirement en interne on commence par lui
+            # 1. Construction champ temperature
+            self.dictInstAbscTemp_S = dict()
+            self.buildTemp('TABLE_ST', para_resu_ther, self.dictInstAbscTemp_S)
+         
+            # 2. Construction de la "table" des contraintes
+            self.dictInstAbscSig_S = dict()
+            self.tabAbscisses_S = list()
+            self.buildTablesTher('TABLE_S', para_resu_ther, self.tabAbscisses_S, self.dictInstAbscSig_S)
+               
+            # 3. calcul de l'épaisseur
+            self.epaisseur_R = abs(self.tabAbscisses_S[len(self.tabAbscisses_S)-1] - self.tabAbscisses_S[0])
+         
+         # Pour la structure
+         # 1. Construction champ température
+         self.buildTemp('TABLE_TEMP', para_resu_ther, self.dictInstAbscTemp, self.epaisseur_R)
+
+         # 2. Construction de la table des contraintes
+         self.buildTablesTher('TABLE_T', para_resu_ther, self.tabAbscisses, self.dictInstAbscSig, offset=self.epaisseur_R)
+        
+         if self.revet == 'OUI' :
+            self.mergeDictTher() # merge les tableaux resultats du revetement et de la structure
+            
+         if  not(self.compareListAbscTher()) :
+            UTMESS('F','OAR0_1')
+            
+         try :
+            self.interpoleInstants() # Interpolation des instants de la table des température sur celle de la table mécanique
+         except interpolationError, err:
+            UTMESS('F','OAR0_2',valk=err.getMess())
+
+         # 3. Calcul de l'épaisseur de la coupe.
+         self.epaisseur = abs(self.tabAbscisses[len(self.tabAbscisses)-1] - self.tabAbscisses[0])
+
+      except :
+         self.noResuTher = True
+      
+      # Construction de l arborescence
+      self.buildTree() 
+           
+                
+   def getAbscisses(self, dicoTable, tableAbsc, offset=0.0) :
+      """
+         Récupère la liste des abscisses
+      """
+      # récupération des abscisses
+      ABSCISSES = dicoTable['ABSC_CURV']
+     
+      valeurAbsc = 0.0
+      for val in ABSCISSES :
+         valeurAbsc = val + offset
+         tableAbsc.append(valeurAbsc)
+         
+   def buildTablesMeca(self, label, para_resu, tableAbsc, dictMeca, offset=0.0) :
+      """
+         Construction des tableaux mécanique 
+      """ 
+      sigma_xml   = ( 'S_RR', 'S_TT', 'S_ZZ', 'S_RT', 'S_TZ', 'S_ZR' )
+      
+      table_meca = para_resu[label].EXTR_TABLE() 
+      
+      # Utilisation des méthodes de la classe table
+      dictTable = table_meca.values()
+
+      # récupération des abscisses
+      self.getAbscisses(dictTable, tableAbsc, offset)
+      
+      # Construction de la table mécanique principale
+      for val in sigma_xml :
+         dictMeca[val] = list()
+
+      S_XX = dictTable['SIXX']
+      S_YY = dictTable['SIYY']
+      S_ZZ = dictTable['SIZZ']
+      S_XY = dictTable['SIXY']
+      S_YZ = dictTable['SIYZ']
+      S_XZ = dictTable['SIXZ']
+      for v1, v2, v3, v4, v5, v6 in zip(S_XX, S_YY, S_ZZ, S_XY, S_YZ, S_XZ) :
+         dictMeca['S_RR'].append(v1)
+         dictMeca['S_TT'].append(v2)
+         dictMeca['S_ZZ'].append(v3)
+         dictMeca['S_RT'].append(v4)
+         dictMeca['S_TZ'].append(v5)
+         dictMeca['S_ZR'].append(v6)
+    
+   def mergeDictMeca(self) :
+      """
+      Merge des résultats mécaniques issus de la structure et du revetement
+      """
+      # Merge des listes d'abscisses
+      # Le revetement est interieur la derniere abscisse du revetement doit etre egal a la premiere de la structure
+      if self.tabAbscisses_S[len(self.tabAbscisses_S)-1] != self.tabAbscisses[0] :
+         UTMESS('F','OAR0_3')
+         
+      # On construit une table des abscisses tempopraire
+      tableAbscTemp = self.tabAbscisses_S
+      
+      # On recopie la table des abscisses en sautant le premier
+      debut = True
+      for val in self.tabAbscisses :
+         if debut :
+            debut = False
+            continue
+         tableAbscTemp.append(val)
+         
+      self.tabAbscisses = tableAbscTemp
+      
+      # On construit des listes de travail intermédiaires que l'on commence par remplir avec les tables "supplémentaires"
+      dictMecaBis = self.dictMeca_S
+      
+      # On recopie les éléments de la structure dans le tableau
+      debut = True
+      for v1, v2, v3, v4, v5, v6 in zip(self.dictMeca['S_RR'], self.dictMeca['S_TT'], self.dictMeca['S_ZZ'], self.dictMeca['S_RT'], self.dictMeca['S_TZ'], self.dictMeca['S_ZR']) :
+         if debut :
+            debut = False
+            continue
+         dictMecaBis['S_RR'].append(v1)
+         dictMecaBis['S_TT'].append(v2)
+         dictMecaBis['S_ZZ'].append(v3)
+         dictMecaBis['S_RT'].append(v4)
+         dictMecaBis['S_TZ'].append(v5)
+         dictMecaBis['S_ZR'].append(v6)
+         
+      # On restitue ensuite la liste globale dans self.dictMeca
+      self.dictMeca = dictMecaBis
+
+  
+   def buildTemp(self, label, para_resu, dictInstAbscTemp, offset=0.0):
+      """
+         Récupération du champ température aux noeuds avec interpolation sur les "instants" du calcul mécanique
+      """
+      table_temp = para_resu[label].EXTR_TABLE()
+
+      # Utilisation des méthodes de la classe table
+      dictTable = table_temp.values()
+      
+      # On construit un dictionnaire associant un "instant" avec un couple ("abscisse", "température")
+
+      # 1. Récupération de la liste des instants
+      INSTANTS = dictTable['INST']
+      for val in INSTANTS :
+         dictInstAbscTemp[val] = 0 # On crée juste les clés du dictionnaire
+         
+      listTables = list() # liste de tables contenant une table pas instant
+      for inst in dictInstAbscTemp.keys():
+         listTables.append(table_temp.INST == inst)
+         
+      # 2. Récupération des abscisses
+      tableAbsc = list()
+      self.getAbscisses(listTables[0].values(), tableAbsc, offset)
+      
+      # 3. Récupération des températures
+      tableTemp = list() # liste de liste de température (1 par instant)
+      for tb in listTables :
+         TEMPERATURE = tb.values()['TEMP']
+         tableTemp.append(TEMPERATURE)
+         
+      # 4. Construction de dictInstAbscTemp
+      for i in range(0, len(dictInstAbscTemp.keys())):
+         listDoublets = list()
+         for absc, temp in zip(tableAbsc, tableTemp[i]) :
+            listDoublets.append((absc,temp))
+            
+         inst = dictInstAbscTemp.keys()[i]
+         dictInstAbscTemp[inst] = listDoublets
+         
+   def buildTablesTher(self, label, para_resu, tabAbscisses, dictInstAbscSig, offset=0.0) :
+      """
+         Construction des tableaux thermo-mécanique
+         listDictTher contient un dictionnaire par numéro d'ordre 
+      """
+      table_temp = para_resu[label].EXTR_TABLE()   
+
+      # On construit un dictionnaire associant un "instant" avec une liste de couples ("abscisse", liste de "sigma")
+
+      # Utilisation des méthodes de la classe table
+      dictTable = table_temp.values()
+      
+      # On construit un dictionnaire associant un "instant" avec un couple ("abscisse", "température")
+
+      # 1. Récupération de la liste des instants
+      INSTANTS = dictTable['INST']
+      for val in INSTANTS :
+         dictInstAbscSig[val] = 0 # On crée juste les clés du dictionnaire
+         
+      listTables = list() # liste de tables contenant une table pas instant
+      for inst in dictInstAbscSig.keys():
+         listTables.append(table_temp.INST == inst)
+         
+      # 2. Récupération des abscisses
+      self.getAbscisses(listTables[0].values(), tabAbscisses, offset)
+         
+      # 3. Récupération des listes de sigma
+      listListListSigAbscInst = list() # liste des sigma par abscisse par instant
+      for tbl in listTables:
+         listListSigAbscInst = list()
+         
+         # On crée une table pour chaque instant
+         S_XX = tbl.values()['SIXX']
+         S_YY = tbl.values()['SIYY']
+         S_ZZ = tbl.values()['SIZZ']
+         S_XY = tbl.values()['SIXY']
+         S_YZ = tbl.values()['SIYZ']
+         S_XZ = tbl.values()['SIXZ']
+         for v1, v2, v3, v4, v5, v6 in zip(S_XX, S_YY, S_ZZ, S_XY, S_YZ, S_XZ) :
+            listSigAbsc = list() # Liste des sigmas pour une abscisse
+            listSigAbsc.append(v1)
+            listSigAbsc.append(v2)
+            listSigAbsc.append(v3)
+            listSigAbsc.append(v4)
+            listSigAbsc.append(v5)
+            listSigAbsc.append(v6)
+            
+            listListSigAbscInst.append(listSigAbsc)
+            
+         listListListSigAbscInst.append(listListSigAbscInst)
+         
+      # 4. Assemblage du dictionnaire
+      for i in range(0, len(dictInstAbscSig.keys())) :
+         listDoublet = list()
+         for j in range(0, len(tabAbscisses)) :
+           listDoublet.append((tabAbscisses[j], listListListSigAbscInst[i][j]))
+               
+         dictInstAbscSig[dictInstAbscSig.keys()[i]] = listDoublet 
+
+   def mergeDictTher(self) : 
+      """
+         Merge les resultats issus de la coupe du revetement avec ceux issus de la coupe de la structure
+      """
+      # Merge des listes d'abscisses
+      # Le revetement est interieur la derniere abscisse du revetement doit etre egal a la premiere de la structure
+      if self.tabAbscisses_S[len(self.tabAbscisses_S)-1] != self.tabAbscisses[0] :
+         UTMESS('F','OAR0_3')
+         
+      # On construit une table des abscisses tempopraire
+      tableAbscTemp = self.tabAbscisses_S
+      
+      # On recopie la table des abscisses en sautant le premier
+      debut = True
+      for val in self.tabAbscisses :
+         if debut :
+            debut = False
+            continue
+         tableAbscTemp.append(val)
+         
+      self.tabAbscisses = tableAbscTemp
+       
+      # On construit des listes de travail intermédiaires que l'on commence par remplir avec les tables "supplémentaires"
+      dictInstAbscSigBis = self.dictInstAbscSig_S
+      dictInstAbscTempBis = self.dictInstAbscTemp_S
+      
+      # On recopie les élément thermiques de la structure principale en sautant la première abscisse de la structure
+      for key in dictInstAbscTempBis.keys() : # Les dictionnaires partagent les memes instants
+         debut = True
+         for valTher in self.dictInstAbscTemp[key] :
+            if debut :
+               debut = False
+               continue
+            dictInstAbscTempBis[key].append(valTher)
+            
+      # On recopie les élément mécaniques de la structure principale en sautant la première abscisse de la structure
+      for key in dictInstAbscSigBis.keys() : # Les dictionnaires partagent les memes instants
+         debut = True
+         for valSig in self.dictInstAbscSig[key] :
+            if debut :
+               debut = False
+               continue
+            dictInstAbscSigBis[key].append(valSig)
+
+      # On restitue ensuite la liste globale dans self.dictInstAbscSig
+      self.dictInstAbscSig = dictInstAbscSigBis
+      self.dictInstAbscTemp = dictInstAbscTempBis
+
+   def compareListAbscTher(self) :
+      """
+         Vérifie que la coupe du champ thermique et la coupe mécanique partagent les memes abscisses
+      """
+      # 1. Récupération des abscisses associées aux températures
+      listAbsc = list()
+      lstDoublet = self.dictInstAbscTemp[self.dictInstAbscTemp.keys()[0]]
+      for val in lstDoublet :
+         listAbsc.append(val[0])
+         
+      # 2. Comparaison des deux listes 
+      for A1, A2 in zip(self.tabAbscisses, listAbsc) :
+         if A1 != A2 : return False
+      
+      return True
+      
+   def interpoleInstants(self) :
+      """
+         Interpole les résultats thermique sur les instants des résultats mécaniques
+      """
+      # 1. récupération des instants des deux tables
+      listInstTher = self.dictInstAbscTemp.keys()
+      listInstMeca = self.dictInstAbscSig.keys()
+      
+      # 2. calcul de la liste des bornes de la table thermique qui encadrent les résultats mécaniques
+      dictInstAbscTemp = dict()
+      listAbscTemp = list()
+      listBornes = list()
+      for inst in listInstMeca :
+         bornes = getBornes(listInstTher, inst)
+         # Si une des bornes n'est pas définie, on lance une exception
+         if not(bornes[0]) or not(bornes[1]) : raise interpolationError
+          
+         abscTempInf = self.dictInstAbscTemp[bornes[0]] # Liste de doublet (abscisse, temperature) pour la borne inférieure
+         abscTempSup = self.dictInstAbscTemp[bornes[1]] # Liste de doublet (abscisse, temperature) pour la borne supérieure
+         
+         listAbscTemp = list() # liste de couples abscisses/Température
+         for A1, A2 in zip(abscTempInf, abscTempSup) : # A1 et A2 sont des doublets abscisse/Temperature
+            temperature = interpoleLin( ((bornes[0], A1[1]), (bornes[1], A2[1])), inst)   
+            listAbscTemp.append((A1[0], temperature)) # on aurait pu tout aussi bien prendre A2[0] (c est pareil ...)
+            
+         dictInstAbscTemp[inst] = listAbscTemp
+         
+      # remplacement de l'ancienne table par la nouvelle
+      self.dictInstAbscTemp = dictInstAbscTemp
+
+   def buildTree(self) :
+      """
+         Construction (en mémoire) de l'arborescence du document XML
+      """
+      sigma_xml   = ( 'S_RR', 'S_TT', 'S_ZZ', 'S_RT', 'S_TZ', 'S_ZR' )
+
+      # Création de l'arborescence "géométrie"
+      nodeGeomComp = self.nodeComp.append("GEOM_COMPO")
+      nodeGeomComp.append("REVETEMENT", valeur=self.revet)
+      if self.revet == 'OUI' :
+         nodeGeomComp.append("EP_REVET", valeur=self.epaisseur_R)
+      nodeLigneCoupe = nodeGeomComp.append("LIGNE_COUPE")
+      nodeLigneCoupe.append("EPAISSEUR_EF", valeur=self.epaisseur)
+      nodeLigneCoupe.append("DIAM_EXT_EF", valeur=self.diametre)
+      nodeLigneCoupe.append("ORI_ABSC", valeur=self.origine)
+      
+      if self.noResuMeca == False :
+         # Création des abscisses
+         for val in self.tabAbscisses :
+            nodeLigneCoupe.append("ABSCISSE", val)
+      
+         nodeLigneCoupe.append('PSI', self.angle_c)
+      
+         # Création des résultats mécaniques
+         nodeSigma_u = self.nodeComp.append("SIGMA_UNITE")
+         nodeSigma_u.append("NUM_MECA", valeur=self.num_char)
+         nodeSigma_u.append("NOM_MECA", valeur=self.type_char)
+         nodeSigma_meca = nodeSigma_u.append("SIGMA_MECA")
+         
+         for i in range(0, len(self.tabAbscisses)) :
+            for val in self.dictMeca.keys() :
+               nodeSigma_meca.append(val, valeur = self.dictMeca[val][i])
+     
+      # Création de l'arborescence "résultat thermo_mécanique"
+      if self.noResuTher == False :
+         # Création des abscisses
+         listDoublet = self.dictInstAbscTemp[self.dictInstAbscTemp.keys()[0]]
+         for val in listDoublet :
+            nodeLigneCoupe.append("ABSCISSE", val[0])
+            
+         nodeLigneCoupe.append('PSI', self.angle_c)
+            
+         # Création des résultats mécaniques
+         nodeSigma_ther_c = self.nodeComp.append("SIGMA_THER_C")
+         nodeSigma_ther_c.append("NUM_TRANSI_THER", valeur=self.num_tran)
+         
+         for inst in self.dictInstAbscTemp.keys() : # boucle sur les instants
+            nodeSigma_ther = nodeSigma_ther_c.append("SIGMA_THER")
+            nodeSigma_ther.append("INSTANT", valeur=inst)
+            
+            # boucle sur les abscisses
+            for doubletAbscSig, doubletAbscTemp in zip(self.dictInstAbscSig[inst], self.dictInstAbscTemp[inst]) : 
+               nodeSigma_point = nodeSigma_ther.append("SIGMA_POINT")
+               for val, label in zip(doubletAbscSig[1], sigma_xml) :
+                  nodeSigma_point.append(label, valeur = val)
+               
+               nodeSigma_point.append("TEMPERATURE", doubletAbscTemp[1]) 
+
+class tuyauterie(OAR_element) :
+   """
+      Classe permettant de traiter les tuyauteries
+   """
+   def __init__(self, **args) :
+      self.nodeComp = XMLNode("TUYAUTERIE")
+      try :
+         self.para_resu_meca = args['RESU_MECA']
+         self.num_char = self.para_resu_meca['NUM_CHAR']
+      
+         #Gestion du maillage
+         self.maillage = self.para_resu_meca['MAILLAGE']
+         mapy = MAIL_PY()
+         mapy.FromAster(self.maillage)
+      
+         self.ma = [val.rstrip() for val in mapy.correspondance_mailles]
+         self.no = [val.rstrip() for val in mapy.correspondance_noeuds]
+      
+         self.dictMailleNoeuds = dict()
+         for val in self.ma :
+            self.dictMailleNoeuds[val] = list()
+      
+         for i in range(0, len(mapy.co)) :
+            self.dictMailleNoeuds[self.ma[i]].append(self.no[mapy.co[i][0]])
+            self.dictMailleNoeuds[self.ma[i]].append(self.no[mapy.co[i][1]])
+      
+         self.dictNoeudValTorseur = dict()
+         self.buildTableTorseur()
+      
+      except :
+         UTMESS('F','OAR0_4')
+
+      # Construction de l arborescence
+      self.buildTree() 
+       
+
+   def buildTableTorseur(self) :
+      """
+         Construit un dictionnaire associant un noeud à un torseur exprimé sous la forme d'une liste de valeurs
+      """
+      table_temp = self.para_resu_meca['TABLE'].EXTR_TABLE()   
+
+      # Utilisation des méthodes de la classe table
+      dictTable = table_temp.values()
+      
+      # 1. Récupération de la liste des noeuds
+      NOEUDS = dictTable['NOEUD']
+      for val in NOEUDS :
+         self.dictNoeudValTorseur[val.rstrip()] = list() # On crée juste les clés du dictionnaire
+         
+      N   = dictTable['N']
+      VY  = dictTable['VY']
+      VZ  = dictTable['VZ']
+      MT  = dictTable['MT']
+      MFY = dictTable['MFY']
+      MFZ = dictTable['MFZ']
+      
+      for no, n, vy, vz, mt, mfy, mfz in zip(NOEUDS, N, VY, VZ, MT, MFY, MFZ):
+         no = no.rstrip()
+         self.dictNoeudValTorseur[no].append(n)
+         self.dictNoeudValTorseur[no].append(vy)
+         self.dictNoeudValTorseur[no].append(vz)
+         self.dictNoeudValTorseur[no].append(mt)
+         self.dictNoeudValTorseur[no].append(mfy)
+         self.dictNoeudValTorseur[no].append(mfz)
+         
+         
+   def buildTree(self) :
+      """
+         Construction (en mémoire) de l'arborescence du document XML
+      """
+      torseur_XML   = ( 'FX', 'FY', 'FZ', 'MX', 'MY', 'MZ' )
+
+      # Création de l'arborescence "torseur"
+      nodeTMG = self.nodeComp.append("TORSEUR_MECA-GRP")
+      nodeTM = nodeTMG.append("TORSEUR_MECA")
+      nodeTM.append("oar:CHAR-REF", self.num_char)
+      nodeMTG = nodeTM.append("MAILLE_TORSEUR-GRP")
+      nodeMT = nodeMTG.append("MAILLE_TORSEUR")
+      for MA in self.dictMailleNoeuds.keys() : # Boucle sur les mailles
+         nodeMT.append("oar:MAILLE-REF", MA)
+         for NO in self.dictMailleNoeuds[MA] : # 2 noeuds
+            nodeTorseur = nodeMT.append("oar:TORSEUR")
+            for val, cle in zip(self.dictNoeudValTorseur[NO], torseur_XML) : # 6 valeurs
+               nodeTorseur.append(cle, val)
+      
+      
+
+def impr_oar_ops(self, TYPE_CALC, **args) :
+   """
+   Macro IMPR_OAR
+   Ecrit des fichiers au format XML selon la DTD OAR Fichier
+   
+   IMPR_OAR va etre utilise en deux fois d abord calcul mecanique, 
+   ensuite calcul thermique ce qui implique qu il ne peut y avoir qu'une seule des deux options a la fois
+   """
+   # La macro compte pour 1 dans la numérotation des commandes
+   self.set_icmd(1)
+   
+   obj = None
+   
+   if TYPE_CALC=='COMPOSANT' :
+      obj = composant(**args)
+   elif TYPE_CALC=='MEF' : 
+      UTMESS('F','OAR0_5')
+   elif TYPE_CALC=='TUYAUTERIE' :
+      obj = tuyauterie(**args) 
+   else :
+      UTMESS('F','OAR0_6')
+
+   # Ecriture dans le fichier
+   # Récupération de la LU du fichier de sortie
+   try :
+      unite = args['UNITE']
+   except :
+      unite = 38
+      
+   try :
+      ajout=args['AJOUT']
+   except :
+      ajout='NON'
+         
+   name = 'fort.'+str(unite)
+   try :
+      if ajout=='NON' :  # nouveau fichier
+         fileObj = open(name, 'wt')
+      else :            # extension du fichier existant
+         fileObj = open(name, 'a+t')
+   except IOError :
+      UTMESS('F','OAR0_7')
+   else :
+      obj.getNode().save(fileObj)
+      fileObj.close()
diff --git a/Aster/Cata/cataSTA10/Macro/impr_table_ops.py b/Aster/Cata/cataSTA10/Macro/impr_table_ops.py
new file mode 100644 (file)
index 0000000..f2de0bd
--- /dev/null
@@ -0,0 +1,247 @@
+#@ MODIF impr_table_ops Macro  DATE 10/11/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# RESPONSABLE MCOURTOI M.COURTOIS
+
+import os.path
+import re
+
+
+def impr_table_ops(self, FORMAT, TABLE, INFO, **args):
+   """
+   Macro IMPR_TABLE permettant d'imprimer une table dans un fichier.
+   Erreurs<S> dans IMPR_TABLE pour ne pas perdre la base.
+   """
+   macro='IMPR_TABLE'
+   import aster
+   from Accas import _F
+   from Cata.cata import table_jeveux
+   from Utilitai.Utmess  import  UTMESS
+   from Utilitai.UniteAster import UniteAster
+   ier=0
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+
+   # On importe les definitions des commandes a utiliser dans la macro
+   # Le nom de la variable doit etre obligatoirement le nom de la commande
+   DETRUIRE         = self.get_cmd('DETRUIRE')
+   RECU_FONCTION    = self.get_cmd('RECU_FONCTION')
+
+   #----------------------------------------------
+   # 0. Traitement des arguments, initialisations
+   # unité logique des fichiers réservés
+   ul_reserve=(8,)
+   UL = UniteAster()
+
+   # 0.1. Fichier
+   nomfich=None
+   if args['UNITE'] and args['UNITE']<>6:
+      nomfich=UL.Nom(args['UNITE'])
+   if nomfich and os.path.exists(nomfich) and os.stat(nomfich).st_size<>0:
+      if FORMAT=='XMGRACE':
+         UTMESS('A','TABLE0_6',valk=nomfich)
+
+   # 0.2. Création des dictionnaires des FILTRES
+   Filtre=[]
+   if args['FILTRE']:
+      for Fi in args['FILTRE']:
+         dF = Fi.cree_dict_valeurs(Fi.mc_liste)
+         for mc in dF.keys():
+            if dF[mc]==None: del dF[mc]
+         Filtre.append(dF)
+   # format pour l'impression des filtres
+   form_filtre='\nFILTRE -> NOM_PARA: %-16s CRIT_COMP: %-4s VALE: %s'
+
+   # 0.3. Création de la liste des tables (une seule sans SENSIBILITE)
+   form_sens='\n... SENSIBILITE AU PARAMETRE %s (SD COMP %s)'
+   ltab=[]
+   if args['SENSIBILITE']:
+      lps=args['SENSIBILITE']
+      if not type(lps) in (list, tuple):
+         lps=[lps,]
+      for ps in lps:
+         ncomp = self.jdc.memo_sensi.get_nocomp(TABLE.nom, ps.nom)
+         if ncomp != None:
+            sdtab = table_jeveux(ncomp)
+            tabs = sdtab.EXTR_TABLE()
+            tabs.titr = TABLE.TITRE() + tabs.titr + form_sens % (ps.get_name(), ncomp)
+            ltab.append([tabs, sdtab])
+   else:
+      ltab.append([TABLE.EXTR_TABLE(), TABLE])
+
+   if len(ltab)<1:
+      return ier
+
+   # 0.4.1. liste des paramètres à conserver
+   nom_para=ltab[0][0].para
+   if args['NOM_PARA']:
+      nom_para=args['NOM_PARA']
+   if not type(nom_para) in (list, tuple):
+      nom_para=[nom_para,]
+
+   # 0.4.2. Traiter le cas des UL réservées
+   if args['UNITE'] and args['UNITE'] in ul_reserve:
+      UL.Etat(args['UNITE'], etat='F')
+
+   #----------------------------------------------
+   # Boucle sur les tables
+   for tab, sdtab in ltab:
+
+      # ----- 1. Infos de base
+      if INFO==2:
+         print 'IMPRESSION DE LA TABLE : %s' % sdtab.get_name()
+
+      if args['TITRE']:
+         tab.titr=args['TITRE'] + '\n' + tab.titr
+
+      # ----- 2. Filtres
+      for Fi in Filtre:
+         col = getattr(tab, Fi['NOM_PARA'])
+         # peu importe le type
+         opts=[Fi[k] for k in ('VALE','VALE_I','VALE_C','VALE_K') if Fi.has_key(k)]
+         kargs={}
+         for k in ('CRITERE','PRECISION'):
+            if Fi.has_key(k):
+               kargs[k]=Fi[k]
+         tab = tab & ( getattr(col, Fi['CRIT_COMP'])(*opts,**kargs) )
+         # trace l'operation dans le titre
+         #if FORMAT in ('TABLEAU','ASTER'):
+         tab.titr+=form_filtre % (Fi['NOM_PARA'], Fi['CRIT_COMP'], \
+               ' '.join([str(v) for v in opts]))
+
+      # ----- 3. Tris
+      if args['TRI']:
+         # une seule occurence de TRI
+         T0=args['TRI'][0]
+         dT=T0.cree_dict_valeurs(T0.mc_liste)
+         tab.sort(CLES=dT['NOM_PARA'], ORDRE=dT['ORDRE'])
+
+      # ----- 4. Impression
+      # vérification des paramètres
+      for p in nom_para:
+         if not p in tab.para:
+           UTMESS('A','TABLE0_7',valk=p)
+      
+      # sélection des paramètres et suppression des colonnes vides
+      timp = tab.SansColonneVide(nom_para)
+      
+      # passage des mots-clés de mise en forme à la méthode Impr
+      kargs=args.copy()
+      kargs.update({
+         'FORMAT'    : FORMAT,
+         'FICHIER'   : nomfich,
+         'dform'     : {},
+      })
+      # pour l'impression des fonctions
+      kfonc={
+         'FORMAT'    : FORMAT,
+         'FICHIER'   : nomfich,
+      }
+
+      # 4.1. au format TABLEAU
+      if FORMAT=='TABLEAU':
+         # surcharge par les formats de l'utilisateur
+         kargs['dform']={
+            'csep'   : args['SEPARATEUR'],
+            'ccom'   : args['COMMENTAIRE'],
+            'ccpara' : args['COMM_PARA'],
+            'cdeb'   : args['DEBUT_LIGNE'],
+            'cfin'   : args['FIN_LIGNE'],
+         }
+      
+      # 4.2. au format AGRAF
+      elif FORMAT=='AGRAF':
+         kargs['dform']={ 'formR' : '%12.5E' }
+         kfonc['FORMAT']='TABLEAU'
+      
+      # 4.3. au format XMGRACE et dérivés
+      elif FORMAT=='XMGRACE':
+         kargs['dform']={ 'formR' : '%.8g' }
+         kargs['PILOTE']=args['PILOTE']
+         kfonc['PILOTE']=args['PILOTE']
+
+      # 4.4. format spécifié dans les arguments
+      if args['FORMAT_R']:
+         kargs['dform'].update({ 'formR' : fmtF2PY(args['FORMAT_R']) })
+
+      # 4.5. regroupement par paramètre : PAGINATION
+      if args['PAGINATION']:
+         l_ppag=args['PAGINATION']
+         if not type(l_ppag) in (list, tuple):
+            l_ppag=[l_ppag,]
+         kargs['PAGINATION'] = [p for p in l_ppag if p in nom_para]
+         l_para_err          = [p for p in l_ppag if not p in nom_para]
+         if len(l_para_err)>0:
+             UTMESS('A','TABLE0_8',valk=l_para_err)
+
+      timp.Impr(**kargs)
+
+      # ----- 5. IMPR_FONCTION='OUI'
+      if args['IMPR_FONCTION'] == 'OUI':
+         # cherche parmi les cellules celles qui contiennent un nom de fonction
+         dfon = []
+         p_extr = set(['FONCTION', 'FONCTION_C'])
+         p_extr.intersection_update(timp.para)
+         if len(p_extr) > 0:
+            # on réduit timp aux colonnes FONCTION et FONCTION_C
+            textr = timp.__getitem__(list(p_extr))
+            for row in textr:
+               for par,cell in row.items():
+                  if type(cell) in (str, unicode):
+                     cell = cell.strip()
+                     if aster.getvectjev('%-19s.PROL' % cell) != None:
+                        dfon.append(['%-19s' % cell, par])
+            # impression des fonctions trouvées
+            for f,par in dfon:
+               __fonc=RECU_FONCTION(
+                  TABLE=sdtab,
+                  FILTRE=_F(
+                     NOM_PARA=par,
+                     VALE_K=f,
+                  ),
+                  NOM_PARA_TABL=par,
+                  TITRE = 'Fonction %s' % f,
+               )
+               __fonc.Trace(**kfonc)
+               DETRUIRE(CONCEPT=_F(NOM=(__fonc,),), ALARME='NON', INFO=1,)
+
+   # 99. Traiter le cas des UL réservées
+   UL.EtatInit()
+   return ier
+
+
+def fmtF2PY(fformat):
+   """Convertit un format Fortran en format Python (printf style).
+   Gère uniquement les fortrans réels, par exemple : E12.5, 1PE13.6, D12.5...
+   """
+   fmt=''
+   matP=re.search('([0-9]+)P',fformat)
+   if matP:
+      fmt+=' '*int(matP.group(1))
+   matR=re.search('([eEdDfFgG]{1})([\.0-9]+)',fformat)
+   if matR:
+      fmt+='%'+matR.group(2)+re.sub('[dD]+','E',matR.group(1))
+   try:
+      s=fmt % -0.123
+   except (ValueError, TypeError), msg:
+      fmt='%12.5E'
+      print 'Error :',msg
+      print 'Format par défaut utilisé :',fmt
+   return fmt
diff --git a/Aster/Cata/cataSTA10/Macro/info_fonction_ops.py b/Aster/Cata/cataSTA10/Macro/info_fonction_ops.py
new file mode 100644 (file)
index 0000000..19d0b34
--- /dev/null
@@ -0,0 +1,307 @@
+#@ MODIF info_fonction_ops Macro  DATE 16/11/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+def info_fonction_ops(self,RMS,NOCI_SEISME,MAX,NORME,ECART_TYPE,INFO,**args):
+  """
+     Ecriture de la macro INFO_FONCTION
+  """
+  ier=0
+  import string
+  from Cata_Utils.t_fonction import t_fonction,t_fonction_c,t_nappe
+  import math
+  from Accas import _F
+  from Utilitai.Utmess import  UTMESS
+  import types
+  from types import ListType, TupleType
+  EnumTypes = (ListType, TupleType)
+
+  ### On importe les definitions des commandes a utiliser dans la macro
+  CREA_TABLE     = self.get_cmd('CREA_TABLE')
+  CALC_TABLE     = self.get_cmd('CALC_TABLE')
+  IMPR_TABLE     = self.get_cmd('IMPR_TABLE')
+  CALC_FONCTION  = self.get_cmd('CALC_FONCTION')
+  
+  ### Comptage commandes + déclaration concept sortant
+  self.set_icmd(1)
+  self.DeclareOut('C_out',self.sd)
+
+  ### type de traitement
+  
+  ###
+  if (MAX != None): 
+     if type(MAX['FONCTION']) not in EnumTypes : l_fonc=[MAX['FONCTION'],]
+     else                                       : l_fonc=MAX['FONCTION']
+     __tmfonc=[None]*3
+     k=0
+     mfact=[]
+     ltyfo=[]
+     lpara=[]
+     lresu=[]
+     lfnom=[]
+     for fonc in l_fonc :
+        __ff=fonc.convert()
+        __ex=__ff.extreme()
+        ltyfo.append(__ff.__class__)
+        lpara.append(__ff.para['NOM_PARA'])
+        lresu.append(__ff.para['NOM_RESU'])
+        lfnom.append(fonc.nom)
+        n_mini=len(__ex['min'])
+        n_maxi=len(__ex['max'])
+        listeMCF=[_F(LISTE_K=[fonc.nom]*(n_mini+n_maxi),PARA='FONCTION'), 
+                  _F(LISTE_K=['MINI',]*n_mini+['MAXI',]*n_maxi,PARA='TYPE'),]
+        n_resu=__ff.para['NOM_RESU']
+        if isinstance(__ff,t_nappe) :
+           listeMCF=listeMCF+[\
+              _F(LISTE_R=[i[0] for i in __ex['min']]+[i[0] for i in __ex['max']],PARA=__ff.para['NOM_PARA']),\
+              _F(LISTE_R=[i[1] for i in __ex['min']]+[i[1] for i in __ex['max']],PARA=__ff.para['NOM_PARA_FONC']),\
+              _F(LISTE_R=[i[2] for i in __ex['min']]+[i[2] for i in __ex['max']],PARA=__ff.para['NOM_RESU'])]
+        else :
+           listeMCF=listeMCF+[\
+                  _F(LISTE_R=[i[0] for i in __ex['min']]+[i[0] for i in __ex['max']],PARA=__ff.para['NOM_PARA']),\
+                  _F(LISTE_R=[i[1] for i in __ex['min']]+[i[1] for i in __ex['max']],PARA=__ff.para['NOM_RESU'])]
+        __tmfonc[k]=CREA_TABLE(LISTE=listeMCF)
+        if k!=0 :
+           mfact.append(_F(OPERATION = 'COMB',TABLE=__tmfonc[k]))
+        k=k+1
+     ltyfo=dict([(i,0) for i in ltyfo]).keys()
+     lpara=dict([(i,0) for i in lpara]).keys()
+     lresu=dict([(i,0) for i in lresu]).keys()
+     if len(ltyfo)>1 : 
+# n'est pas homogène en type (fonctions et nappes) ''')
+        UTMESS('F','FONCT0_37')
+     if len(lpara)>1 : 
+# n'est pas homogène en label NOM_PARA :'''+' '.join(lpara))
+        UTMESS('F','FONCT0_38',valk=' '.join(lpara))
+     if len(lresu)>1 : 
+# n'est pas homogène en label NOM_RESU : '''+' '.join(lresu))
+        UTMESS('F','FONCT0_39',valk=' '.join(lresu))
+     __tab=CALC_TABLE(TABLE  = __tmfonc[0],
+                      ACTION = mfact        )
+     __min=CALC_TABLE(TABLE  = __tab,
+                      ACTION = _F(OPERATION = 'FILTRE',
+                                  CRIT_COMP = 'MINI',
+                                  NOM_PARA  = lresu[0]  ), )
+     __max=CALC_TABLE(TABLE  = __tab,
+                      ACTION = _F(OPERATION = 'FILTRE',
+                                  CRIT_COMP = 'MAXI',
+                                  NOM_PARA  = lresu[0]  ), )
+     print __min.EXTR_TABLE()
+     print __max.EXTR_TABLE()
+     C_out=CALC_TABLE(TABLE  = __min,
+                      TITRE  = 'Calcul des extrema sur fonction '+' '.join(lfnom),
+                      ACTION = _F(OPERATION = 'COMB',
+                                  TABLE=__max  ), )
+     print C_out.EXTR_TABLE()
+
+  ###
+  if (ECART_TYPE  != None): 
+     __ff=ECART_TYPE['FONCTION'].convert()
+     if ECART_TYPE['INST_INIT']!=None : tini=ECART_TYPE['INST_INIT']
+     else                             : tini=__ff.vale_x[0]
+     if ECART_TYPE['INST_FIN' ]!=None : tfin=ECART_TYPE['INST_FIN' ]
+     else                             : tfin=__ff.vale_x[-1]
+     __ff=__ff.cut(tini,__ff.vale_x[-1],ECART_TYPE['PRECISION'],ECART_TYPE['CRITERE'])
+     __ff=__ff.cut(__ff.vale_x[0],tfin,ECART_TYPE['PRECISION'],ECART_TYPE['CRITERE'])
+     if ECART_TYPE['METHODE'  ]=='SIMPSON' : __ex=__ff.simpson(0.)
+     if ECART_TYPE['METHODE'  ]=='TRAPEZE' : __ex=__ff.trapeze(0.)
+     fmoy=__ex.vale_y[-1]/(__ff.vale_x[-1]-__ff.vale_x[0])
+     __ff=__ff+(-1*fmoy)
+     __ff=__ff*__ff
+     if ECART_TYPE['METHODE'  ]=='SIMPSON' : __ez=__ff.simpson(0.)
+     if ECART_TYPE['METHODE'  ]=='TRAPEZE' : __ez=__ff.trapeze(0.)
+     sigma=math.sqrt(__ez.vale_y[-1]/(__ff.vale_x[-1]-__ff.vale_x[0]))
+     C_out=CREA_TABLE(LISTE=(_F(LISTE_K=ECART_TYPE['FONCTION'].nom,PARA='FONCTION'),
+                             _F(LISTE_K=ECART_TYPE['METHODE']     ,PARA='METHODE'),
+                             _F(LISTE_R=fmoy                      ,PARA='MOYENNE'),
+                             _F(LISTE_R=sigma                     ,PARA='ECART_TYPE'),
+                             _F(LISTE_R=tini                      ,PARA='INST_INIT'),
+                             _F(LISTE_R=tfin                      ,PARA='INST_FIN'),)
+                     )
+
+  ###
+  if (RMS != None):
+     RMS  =list(RMS)
+     sigm =[]
+     tmpi =[]
+     tmpf =[]
+     nomf =[]
+     meth =[]
+     for i_rms in RMS :
+         __ff=i_rms['FONCTION'].convert()
+         if i_rms['INST_INIT']!=None : tini=i_rms['INST_INIT']
+         else                        : tini=__ff.vale_x[0]
+         if i_rms['INST_FIN' ]!=None : tfin=i_rms['INST_FIN' ]
+         else                        : tfin=__ff.vale_x[-1]
+         __ff=__ff.cut(tini,__ff.vale_x[-1],i_rms['PRECISION'],i_rms['CRITERE'])
+         __ff=__ff.cut(__ff.vale_x[0],tfin,i_rms['PRECISION'],i_rms['CRITERE'])
+         __ff=__ff*__ff
+         if i_rms['METHODE'  ]=='SIMPSON' : __ez=__ff.simpson(0.)
+         if i_rms['METHODE'  ]=='TRAPEZE' :
+            __ez=__ff.trapeze(0.)
+         sigm.append(math.sqrt(__ez.vale_y[-1]/(__ff.vale_x[-1]-__ff.vale_x[0])))
+         tmpi.append(tini)
+         tmpf.append(tfin)
+         nomf.append(i_rms['FONCTION'].nom)
+         meth.append(i_rms['METHODE'])
+     C_out=CREA_TABLE(LISTE=(_F(LISTE_K=nomf ,PARA='FONCTION'),
+                             _F(LISTE_K=meth ,PARA='METHODE'),
+                             _F(LISTE_R=tmpi ,PARA='INST_INIT'),
+                             _F(LISTE_R=tmpf ,PARA='INST_FIN'),
+                             _F(LISTE_R=sigm ,PARA='RMS'), )
+                     )
+
+  ###
+  if (NORME != None):
+     __ff=NORME['FONCTION'].convert()
+     norme=[]
+     for __fi in __ff.l_fonc :
+         norme.append(__fi.normel2())
+     nom=[NORME['FONCTION'].nom,]*len(norme)
+     C_out=CREA_TABLE(LISTE=(_F(LISTE_R=norme ,PARA='NORME'),
+                             _F(LISTE_K=nom   ,PARA='FONCTION'), )
+                     )
+
+  ###
+  if (NOCI_SEISME != None):
+     l_table=[]
+     if NOCI_SEISME['SPEC_OSCI'] !=None :
+        ### cas intensité spectrale d'une nappe de SRO
+        ### la seule option licite est INTE_SPEC
+#intensite spectrale, il est prudent de verifier la norme de la nappe sur laquelle \
+#porte le calcul, ceci peut etre une source d erreurs.''')
+        UTMESS('I','FONCT0_40')
+        amor=NOCI_SEISME['AMOR_REDUIT']
+        fini=NOCI_SEISME['FREQ_INIT'  ]
+        ffin=NOCI_SEISME['FREQ_FIN'   ]
+        __sp  =NOCI_SEISME['SPEC_OSCI'].convert()
+        vale_x=__sp.l_fonc[0].vale_x
+        vale_y=[__sp(amor,f) for f in vale_x]
+        para  =__sp.l_fonc[0].para
+        __srov=t_fonction(vale_x,vale_y,para)
+        if   NOCI_SEISME['NATURE']=='DEPL' : 
+             __srov.vale_y=(__srov.vale_y/__srov.vale_x)*2.*math.pi
+        elif NOCI_SEISME['NATURE']=='VITE' : 
+             __srov.vale_y=__srov.vale_y/__srov.vale_x/__srov.vale_x
+        elif NOCI_SEISME['NATURE']=='ACCE' : 
+             __srov.vale_y=__srov.vale_y/__srov.vale_x/__srov.vale_x
+             __srov.vale_y=__srov.vale_y/__srov.vale_x/2./math.pi
+        __srov=__srov.cut(fini,ffin,NOCI_SEISME['PRECISION'],NOCI_SEISME['CRITERE'])
+        insp=__srov.trapeze(0.).vale_y[-1]
+        l_table.append(_F(LISTE_R=fini ,PARA='FREQ_INIT'  ))
+        l_table.append(_F(LISTE_R=ffin ,PARA='FREQ_FIN'   ))
+        l_table.append(_F(LISTE_R=amor ,PARA='AMOR_REDUIT'))
+        l_table.append(_F(LISTE_R=insp ,PARA='INTE_SPECT' ))
+     if NOCI_SEISME['FONCTION'] !=None :
+        ### cas fonction
+        l_table.append(_F(LISTE_K=NOCI_SEISME['FONCTION'].nom,PARA='FONCTION'))
+        __ac=NOCI_SEISME['FONCTION'].convert()
+        option= NOCI_SEISME['OPTION']
+        if   NOCI_SEISME['INST_INIT']!=None : tdeb=NOCI_SEISME['INST_INIT']
+        else                                : tdeb=__ac.vale_x[0]
+        if   NOCI_SEISME['INST_FIN' ]!=None : tfin=NOCI_SEISME['INST_FIN' ]
+        else                                : tfin=__ac.vale_x[-1]
+        # calcul de la vitesse :
+        __vi=__ac.trapeze(NOCI_SEISME['COEF'])
+        # calcul du déplacement :
+        __de=__vi.trapeze(NOCI_SEISME['COEF'])
+        # calcul de |acceleration| :
+        __aa=__ac.abs()
+        # calcul de integrale(|acceleration|) :
+        ### on "coupe" la fonction entre tdeb et tfin
+        __ac=__ac.cut(tdeb,tfin,NOCI_SEISME['PRECISION'],NOCI_SEISME['CRITERE'])
+        __vi=__vi.cut(tdeb,tfin,NOCI_SEISME['PRECISION'],NOCI_SEISME['CRITERE'])
+        __de=__de.cut(tdeb,tfin,NOCI_SEISME['PRECISION'],NOCI_SEISME['CRITERE'])
+        __aa=__aa.cut(tdeb,tfin,NOCI_SEISME['PRECISION'],NOCI_SEISME['CRITERE'])
+        if   NOCI_SEISME['FREQ'     ]!=None : l_freq=NOCI_SEISME['FREQ']
+        elif NOCI_SEISME['LIST_FREQ']!=None : l_freq=NOCI_SEISME['LIST_FREQ'].Valeurs()
+        else                                :  
+           # fréquences par défaut
+           l_freq=[]
+           for i in range(56) : l_freq.append( 0.2+0.050*i)
+           for i in range( 8) : l_freq.append( 3.0+0.075*i)
+           for i in range(14) : l_freq.append( 3.6+0.100*i)
+           for i in range(24) : l_freq.append( 5.0+0.125*i)
+           for i in range(28) : l_freq.append( 8.0+0.250*i)
+           for i in range( 6) : l_freq.append(15.0+0.500*i)
+           for i in range( 4) : l_freq.append(18.0+1.000*i)
+           for i in range(10) : l_freq.append(22.0+1.500*i)
+        if option in('TOUT','MAXI','ACCE_SUR_VITE') : 
+           #   calcul du max des valeurs absolues
+           maxa_ac=__ac.abs().extreme()['max'][0][1]
+           maxa_vi=__vi.abs().extreme()['max'][0][1]
+           maxa_de=__de.abs().extreme()['max'][0][1]
+           l_table.append(_F(LISTE_R=maxa_ac,PARA='ACCE_MAX'))
+           l_table.append(_F(LISTE_R=maxa_vi,PARA='VITE_MAX'))
+           l_table.append(_F(LISTE_R=maxa_de,PARA='DEPL_MAX'))
+           l_table.append(_F(LISTE_R=maxa_ac/maxa_vi,PARA='ACCE_SUR_VITE'))
+        if option in('TOUT','INTE_ARIAS') : 
+           __a2=__ac*__ac
+           inte_arias=__a2.trapeze(0.).vale_y[-1]
+           inte_arias=inte_arias*math.pi/NOCI_SEISME['PESANTEUR']/2.
+           l_table.append(_F(LISTE_R=inte_arias,PARA='INTE_ARIAS'))
+        if option in('TOUT','POUV_DEST') : 
+           __v2=__vi*__vi
+           pouv_dest=__v2.trapeze(0.).vale_y[-1]
+           pouv_dest=pouv_dest*(math.pi)**3/NOCI_SEISME['PESANTEUR']/2.
+           l_table.append(_F(LISTE_R=pouv_dest,PARA='POUV_DEST'))
+        if option in('TOUT','VITE_ABSO_CUMU') : 
+           __vc=__aa.trapeze(0.)
+           vite_abso=__vc.vale_y[-1]
+           l_table.append(_F(LISTE_R=vite_abso,PARA='VITE_ABSO_CUMU'))
+        if option in('TOUT','INTE_SPEC') :
+           amor=NOCI_SEISME['AMOR_REDUIT']
+           fini=NOCI_SEISME['FREQ_INIT'  ]
+           ffin=NOCI_SEISME['FREQ_FIN'   ]
+           __so= CALC_FONCTION(SPEC_OSCI=_F(
+                                      NATURE     ='VITE',
+                                      NATURE_FONC='ACCE',
+                                      FONCTION   =NOCI_SEISME['FONCTION'],
+                                      METHODE    ='NIGAM',
+                                      NORME      =NOCI_SEISME['NORME'],
+                                      FREQ       =l_freq,
+                                      AMOR_REDUIT=(amor,)
+                                      ), )
+           __srov=__so.convert().l_fonc[0]
+           __srov=__srov.cut(fini,ffin,NOCI_SEISME['PRECISION'],NOCI_SEISME['CRITERE'])
+           __srov.vale_y=__srov.vale_y/__srov.vale_x/__srov.vale_x
+           insp=__srov.trapeze(0.).vale_y[-1]
+           l_table.append(_F(LISTE_R=fini ,PARA='FREQ_INIT'  ))
+           l_table.append(_F(LISTE_R=ffin ,PARA='FREQ_FIN'   ))
+           l_table.append(_F(LISTE_R=amor ,PARA='AMOR_REDUIT'))
+           l_table.append(_F(LISTE_R=insp ,PARA='INTE_SPECT' ))
+        if option in('TOUT','DUREE_PHAS_FORT') : 
+           __a2=__ac*__ac
+           __i2=__a2.trapeze(0.)
+           arias = __i2.vale_y[-1]*math.pi/NOCI_SEISME['PESANTEUR']/2.
+           valinf = arias * NOCI_SEISME['BORNE_INF']
+           valsup = arias * NOCI_SEISME['BORNE_SUP']
+           for i in range(len(__i2.vale_x)) :
+               ariask = __i2.vale_y[i]*math.pi/NOCI_SEISME['PESANTEUR']/2.
+               if ariask>=valinf : break
+           for j in range(len(__i2.vale_x)-1,-1,-1) :
+               ariask = __i2.vale_y[j]*math.pi/NOCI_SEISME['PESANTEUR']/2.
+               if ariask<=valsup : break
+           dphfor = __i2.vale_x[j] - __i2.vale_x[i]
+           l_table.append(_F(LISTE_R=dphfor,PARA='DUREE_PHAS_FORT'))
+     C_out=CREA_TABLE(LISTE=l_table)
+
+  if INFO > 1:
+     IMPR_TABLE(UNITE=6,
+                TABLE=C_out)
+  return ier
diff --git a/Aster/Cata/cataSTA10/Macro/lire_fonction_ops.py b/Aster/Cata/cataSTA10/Macro/lire_fonction_ops.py
new file mode 100644 (file)
index 0000000..9900061
--- /dev/null
@@ -0,0 +1,262 @@
+#@ MODIF lire_fonction_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import os.path as osp
+import numpy
+
+class LectureBlocError(Exception):
+   pass
+
+# ------------------------------------------------------------------------------
+def lire_blocs(nomfich, SEPAR):
+   """Retourne la liste des blocs
+   """
+   def info(ib, nlig, ncol):
+      """Affiche les infos d'un bloc"""
+      print "   . Bloc %2d : %6d lignes, %6d colonnes" % (ib, nlig, ncol)
+   print "  Lecture des blocs du fichier '%s'" % nomfich
+   fich=open(nomfich, 'r')
+   if SEPAR == 'None':
+      SEPAR=None
+   blocs  = []
+   lignes = []
+   llen=0
+   il=0
+   for line in fich:
+      il+=1
+      try:
+         if line.strip()=='':
+            raise ValueError
+         splin = line.split(SEPAR)
+         lignes.append(map(float, splin))
+         if llen==0:
+            llen=len(splin)
+         elif len(splin) != llen:
+            raise LectureBlocError,  'Ligne %d : %d champs au lieu de %d attendus' % (il, len(splin), llen)
+      except ValueError:
+         if lignes==[]:
+            pass  # dans ce cas, on a plusieurs lignes délimitant 2 fonctions
+         else:
+            blocs.append(numpy.array(lignes))
+            info(len(blocs), len(lignes), llen)
+            lignes=[]
+            llen=0
+   fich.close()
+   if len(lignes) > 0 :
+      blocs.append(numpy.array(lignes))
+      info(len(blocs), len(lignes), llen)
+   return blocs
+
+# ------------------------------------------------------------------------------
+def liste_double(nomfich,INDIC_PARA,INDIC_RESU,SEPAR):
+  """Méthode de construction du VALE pour le format libre
+  format LIBRE
+  Les lignes contenant autre chose que des séquences de nombres
+  réels et de séparateurs sont considérées comme délimitant deux
+  fonctions différentes. Cette situation correspond à l exception
+  ValueError levée par le map de float. Le deuxieme indice de
+  INDIC_PARA et INDIC_RESU est l indice permettant de pointer sur la
+  fonction voulue, au sens de ce découpage.
+  """
+  from Utilitai.transpose import transpose
+  blocs = lire_blocs(nomfich, SEPAR)
+
+  # vérifications de cohérences lignes et colonnes
+  nb_blocs = len(blocs)
+  bloc_para = INDIC_PARA[0]
+  col_para  = INDIC_PARA[1]
+  bloc_resu = INDIC_RESU[0]
+  col_resu  = INDIC_RESU[1]
+  if bloc_para > nb_blocs :
+     raise LectureBlocError, "Il y a %d blocs or INDIC_PARA=(%d, .)" % (nb_blocs, bloc_para)
+  if bloc_resu > nb_blocs:
+     raise LectureBlocError, "Il y a %d blocs or INDIC_RESU=(%d, .)" % (nb_blocs, bloc_resu)
+
+  if col_para > len(blocs[bloc_para-1][0]):
+     raise LectureBlocError, "Le bloc %d comporte %d colonnes or INDIC_PARA=(., %d)" % \
+         (bloc_para, len(blocs[bloc_para-1][0]), col_para)
+  if col_resu > len(blocs[bloc_resu-1][0]):
+     raise LectureBlocError, "Le bloc %d comporte %d colonnes or INDIC_RESU=(., %d)" % \
+         (bloc_resu, len(blocs[bloc_resu-1][0]), col_resu)
+
+  # construction du VALE de la fonction par recherche des indices
+  # de colonnes et de fonctions dans le tableau blocs
+  vale_para = blocs[bloc_para-1][:,col_para-1]
+  vale_resu = blocs[bloc_resu-1][:,col_resu-1]
+  if len(vale_para) != len(vale_resu) :
+     print 'VALE_PARA =', vale_para
+     print 'VALE_RESU =', vale_resu
+     message="""Les deux colonnes extraites n'ont pas la meme longueur
+         %d lignes pour PARA
+         %d lignes pour RESU""" % (len(vale_para), len(vale_resu))
+     raise LectureBlocError, message
+
+  laux=transpose([vale_para, vale_resu])
+  liste_vale=[]
+  for v in laux:
+     liste_vale.extend(v)
+  return liste_vale
+
+# ------------------------------------------------------------------------------
+def liste_simple(nomfich,INDIC_PARA,SEPAR):
+  """recherche d'une liste simple
+  """
+  blocs = lire_blocs(nomfich, SEPAR)
+
+  # vérifications de cohérences lignes et colonnes
+  nb_blocs = len(blocs)
+  bloc_para = INDIC_PARA[0]
+  col_para  = INDIC_PARA[1]
+  if bloc_para > nb_blocs :
+     raise LectureBlocError, "Il y a %d blocs or INDIC_PARA=(%d, .)" % (nb_blocs, bloc_para)
+  if col_para > len(blocs[bloc_para-1][0]):
+     raise LectureBlocError, "Le bloc %d comporte %d colonnes or INDIC_PARA=(., %d)" % \
+         (bloc_para, len(blocs[bloc_para-1][0]), col_para)
+
+  # construction du VALE de la fonction par recherche des indices
+  # de colonnes et de fonctions dans le tableau l_fonc
+  vale_1=blocs[bloc_para-1][:,col_para-1]
+  return vale_1.tolist()
+
+# ------------------------------------------------------------------------------
+def lire_fonction_ops(self,FORMAT,TYPE,SEPAR,INDIC_PARA,UNITE,
+                      NOM_PARA,NOM_RESU,INTERPOL,PROL_DROITE,
+                      PROL_GAUCHE,VERIF,INFO,TITRE,**args):
+  """Méthode corps de la macro
+  """
+  from Accas import _F
+  from Utilitai.Utmess     import  UTMESS
+  from Utilitai.UniteAster import UniteAster
+
+  ier=0
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  # On recopie le mot cle defi_fonction pour le proteger
+  if TYPE=='NAPPE' :
+     mc_DEFI_FONCTION=args['DEFI_FONCTION']
+
+  # On importe les definitions des commandes a utiliser dans la macro
+  DEFI_FONCTION  =self.get_cmd('DEFI_FONCTION')
+  DEFI_NAPPE     =self.get_cmd('DEFI_NAPPE')
+
+  nompro='LIRE_FONCTION'
+
+  # Lecture de la fonction dans un fichier d unité logique UNITE
+  UL = UniteAster()
+  nomfich=UL.Nom(UNITE)
+  if not osp.isfile(nomfich):
+     UTMESS('F','FONCT0_41',valk=nomfich)
+
+  # fonction(_c) ou nappe en sortie
+  self.DeclareOut('ut_fonc',self.sd)
+
+  if   TYPE=='FONCTION':
+    # mise en forme de la liste de valeurs suivant le format choisi :
+    try:
+       liste_vale = liste_double(nomfich,INDIC_PARA,args['INDIC_RESU'],SEPAR)
+    except LectureBlocError, message:
+       UTMESS('F', 'FONCT0_42', valk=message)
+
+    # création de la fonction ASTER :
+    ut_fonc=DEFI_FONCTION( NOM_PARA   =NOM_PARA,
+                           NOM_RESU   =NOM_RESU,
+                           PROL_DROITE=PROL_DROITE,
+                           PROL_GAUCHE=PROL_GAUCHE,
+                           INTERPOL   =INTERPOL,
+                           INFO       =INFO,
+                           TITRE      =TITRE,
+                           VERIF      =VERIF,
+                           VALE       =liste_vale,)
+
+  elif TYPE=='FONCTION_C':
+    # mise en forme de la liste de valeurs suivant le format choisi :
+    if 'INDIC_REEL' in args :
+                              indic1=args['INDIC_REEL']
+                              indic2=args['INDIC_IMAG']
+    if 'INDIC_MODU' in args :
+                              indic1=args['INDIC_MODU']
+                              indic2=args['INDIC_PHAS']
+    try:
+       liste_vale_r = liste_double(nomfich,INDIC_PARA,indic1,SEPAR)
+    except LectureBlocError, message:
+       UTMESS('F', 'FONCT0_42', valk=message)
+
+    try:
+       liste_vale_i = liste_double(nomfich,INDIC_PARA,indic2,SEPAR)
+    except LectureBlocError, message:
+       UTMESS('F', 'FONCT0_42', valk=message)
+
+    liste=[]
+    if   'INDIC_REEL' in args :
+      for i in range(len(liste_vale_r)/2) :
+        liste.extend([liste_vale_r[2*i],liste_vale_r[2*i+1],liste_vale_i[2*i+1]])
+    elif 'INDIC_MODU' in args :
+      for i in range(len(liste_vale_r)/2) :
+        module=liste_vale_r[2*i+1]
+        phase =liste_vale_i[2*i+1]
+        liste.extend([liste_vale_r[2*i],module*cos(phase),module*sin(phase)])
+
+    # création de la fonction ASTER :
+    ut_fonc=DEFI_FONCTION( NOM_PARA    =NOM_PARA,
+                           NOM_RESU    =NOM_RESU,
+                           PROL_DROITE =PROL_DROITE,
+                           PROL_GAUCHE =PROL_GAUCHE,
+                           INTERPOL    =INTERPOL,
+                           INFO        =INFO,
+                           TITRE       =TITRE,
+                           VERIF       =VERIF,
+                           VALE_C      =liste,)
+
+  elif TYPE=='NAPPE':
+
+    # création de la nappe ASTER :
+    motscles={}
+    motscles['DEFI_FONCTION']=[]
+    for elem in mc_DEFI_FONCTION:
+       try:
+          liste_vale=liste_double(nomfich,args['INDIC_ABSCISSE'],elem['INDIC_RESU'],SEPAR)
+       except LectureBlocError, message:
+          UTMESS('F', 'FONCT0_42', valk=message)
+
+       motscles['DEFI_FONCTION'].append( _F( VALE       =liste_vale,
+                                             INTERPOL   =args['INTERPOL_FONC'],
+                                             PROL_DROITE=args['PROL_DROITE_FONC'],
+                                             PROL_GAUCHE=args['PROL_GAUCHE_FONC'] ) )
+    try:
+       liste_para = liste_simple(nomfich,INDIC_PARA,SEPAR)
+    except LectureBlocError, message:
+       UTMESS('F', 'FONCT0_42', valk=message)
+
+    # création de la nappe
+    ut_fonc=DEFI_NAPPE( PARA          =liste_para,
+                        NOM_PARA      =NOM_PARA,
+                        NOM_PARA_FONC =args['NOM_PARA_FONC'],
+                        NOM_RESU      =NOM_RESU,
+                        PROL_DROITE   =PROL_DROITE,
+                        PROL_GAUCHE   =PROL_GAUCHE,
+                        INTERPOL      =INTERPOL,
+                        INFO          =INFO,
+                        TITRE         =TITRE,
+                        VERIF         =VERIF,
+                        **motscles)
+  # remet UNITE dans son état initial
+  UL.EtatInit()
+  return ier
diff --git a/Aster/Cata/cataSTA10/Macro/lire_inte_spec_ops.py b/Aster/Cata/cataSTA10/Macro/lire_inte_spec_ops.py
new file mode 100644 (file)
index 0000000..708dfef
--- /dev/null
@@ -0,0 +1,264 @@
+#@ MODIF lire_inte_spec_ops Macro  DATE 26/03/2008   AUTEUR BODEL C.BODEL 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+def lire_inte_spec_ops(self,
+                       UNITE = None,
+                       FORMAT = None,
+                       FORMAT_C = None,
+                       NOM_PARA = None,
+                       NOM_RESU = None,
+                       INTERPOL = None,
+                       PROL_DROITE = None,
+                       PROL_GAUCHE = None,
+                       TITRE = None,
+                       INFO = None,
+                       **args):
+    ier=0
+
+    from Accas import _F
+    import os
+    from math import cos,sin,sqrt
+    from Utilitai.Utmess     import UTMESS
+    from Utilitai.UniteAster import UniteAster
+    # On importe les definitions des commandes a utiliser dans la macro
+    DEFI_FONCTION  =self.get_cmd('DEFI_FONCTION')
+    CREA_TABLE     =self.get_cmd('CREA_TABLE')
+
+    # La macro compte pour 1 dans la numerotation des commandes
+    self.set_icmd(1)
+    nompro='LIRE_INTE_SPEC'
+
+    # Lecture de la fonction dans un fichier d unité logique UNITE
+    UL = UniteAster()
+    nomfich=UL.Nom(UNITE)
+    if not os.path.isfile(nomfich):
+       UTMESS('F','SPECTRAL0_4',valk=nomfich)
+    file=open(nomfich,'r')
+    texte=file.read()
+    file.close()
+
+
+    if FORMAT == 'IDEAS':
+        # fabrication d'une liste de data sets 58
+        list_fonc = texte.split('    -1')
+        j = 0
+        for ind_fonc in range(len(list_fonc)):
+            try:
+                tmp = list_fonc[j].split()
+                if tmp[0] == '58':
+                    j = j+1
+                else:
+                    list_fonc.pop(j)
+            except IndexError:
+                list_fonc.pop(j)
+
+        nb_fonc = len(list_fonc)
+        if nb_fonc == 0:
+            UTMESS('F', 'SPECTRAL0_9')
+
+        l_fonc = []
+        l_noi  = []
+        l_noj  = []
+        l_cmpi = []
+        l_cmpj = []
+        for ind_fonc in range(nb_fonc):
+            # Extraction des en-tete : nom des noeuds, composantes (=ddl), de leur sens
+            fonc = list_fonc[ind_fonc]
+            ligne = fonc.split('\n')
+
+            record_6 = ligne[7].split()
+            if  record_6[0] != '2' and record_6[0] != '3' and record_6[0] != '9' :
+                UTMESS('F', 'SPECTRAL0_10')
+            nono   = record_6[4]             # nom du noeud
+            nuno   = int(record_6[5])        # numero
+            ddlno  = float(record_6[6])/10   # DDL
+            noref  = record_6[7]             # nom du noeud de reference
+            nuref  = int(record_6[8])        # numero
+            ddlref = float(record_6[9])/10   # DDL
+            # On traduit les ddl "chiffres" en vrais ddl. Avec le sens des capteurs.
+            sens_no,ddl_no = comp(ddlno)
+            sens_ref,ddl_ref = comp(ddlref)
+            signe = sens_no*sens_ref
+
+            # On ne garde que la triang sup de la matrice inter-spectrale
+            crit1 = nuno + ddlno
+            crit2 = nuref + ddlref
+            if crit1 > crit2:
+                continue
+            record_7 = ligne[8].split()
+            nbpairs = int(record_7[1])
+            if record_7[2] == 0:
+                UTMESS('F', 'SPECTRAL0_11')
+            f0 = float(record_7[3])
+            df = float(record_7[4])
+
+            # Liste des valeurs
+            liste = fonc.split('\n')
+            valeurs = ''
+            for ind in range(13):
+                liste.pop(0)
+            for ind_lign in range(len(liste)):
+                valeurs = valeurs + liste[ind_lign]
+            tmp = valeurs.split()
+            valeurs = [signe*float(tmp[ind]) for ind in range(len(tmp))]
+
+            liste = []
+            freq = f0
+            for ind_freq in range(nbpairs):
+                liste.append(freq)
+                liste.append(valeurs[2*ind_freq])
+                liste.append(valeurs[2*ind_freq+1])
+                freq = freq + df
+
+            # création de la fonction ASTER :
+            _fonc=DEFI_FONCTION( NOM_PARA   = NOM_PARA,
+                                 NOM_RESU   = NOM_RESU,
+                                 PROL_DROITE= PROL_DROITE,
+                                 PROL_GAUCHE= PROL_GAUCHE,
+                                 INTERPOL   = INTERPOL,
+                                 INFO       = INFO,
+                                 TITRE      = TITRE,
+                                 VALE_C     = liste,)
+            l_fonc.append(_fonc.nom)     # Liste des fonctions
+            l_noi.append('N'+str(nuno))  # Liste des noeuds de mesure
+            l_cmpi.append(ddl_no)        # DDL associes
+            l_noj.append('N'+str(nuref)) # Liste des noeuds de ref
+            l_cmpj.append(ddl_ref)       # DDL associes
+
+        # Verification a posteriori de la dimension de l'inter-spectre
+        tmp = 0.5*(-1+sqrt(1+8*len(l_fonc)))
+        dim = int(tmp)
+        nb_fonc = 0.5*dim*(dim+1) 
+
+        if dim != tmp :
+            UTMESS('F', 'SPECTRAL0_6')
+
+            
+        mcfact=[]
+        mcfact.append(_F(PARA='NOM_CHAM'    ,LISTE_K=(NOM_RESU),NUME_LIGN=(1,)))
+        mcfact.append(_F(PARA='OPTION'      ,LISTE_K=('TOUT',) ,NUME_LIGN=(1,)))
+        mcfact.append(_F(PARA='DIMENSION'   ,LISTE_I=(dim)     ,NUME_LIGN=(1,)))
+        mcfact.append(_F(PARA='NOEUD_I'     ,LISTE_K=l_noi     ,NUME_LIGN=range(2,nb_fonc+2)))
+        mcfact.append(_F(PARA='NOM_CMP_I'   ,LISTE_K=l_cmpi    ,NUME_LIGN=range(2,nb_fonc+2)))
+        mcfact.append(_F(PARA='NOEUD_J'     ,LISTE_K=l_noj     ,NUME_LIGN=range(2,nb_fonc+2)))
+        mcfact.append(_F(PARA='NOM_CMP_J'   ,LISTE_K=l_cmpj    ,NUME_LIGN=range(2,nb_fonc+2)))
+        mcfact.append(_F(PARA='FONCTION_C'  ,LISTE_K=l_fonc    ,NUME_LIGN=range(2,nb_fonc+2)))
+        self.DeclareOut('tab_inte',self.sd)
+        tab_inte=CREA_TABLE(LISTE=mcfact,
+                          TITRE=TITRE,
+                          TYPE_TABLE='TABLE_FONCTION')
+
+        
+    elif FORMAT == 'ASTER':
+        list_fonc=texte.split('FONCTION_C')
+        entete=list_fonc.pop(0)
+        try : 
+            entete=entete[entete.index('DIM'):]
+            dim=int(entete[entete.index('=')+1:entete.index('\n')])
+        except ValueError : 
+            UTMESS('F', 'SPECTRAL0_5')
+
+        if len(list_fonc)!=(dim*(dim+1)/2):
+            UTMESS('F', 'SPECTRAL0_6')
+
+        nume_i=[]
+        nume_j=[]
+        l_fonc=[]
+        for i in range(dim*(dim+1)/2):
+            numi=list_fonc[i][list_fonc[i].index('I =')+3:]
+            numi=numi[:numi.index('\n')]
+            nume_i.append(int(numi))
+            numj=list_fonc[i][list_fonc[i].index('J =')+3:]
+            numj=numj[:numj.index('\n')]
+            nume_j.append(int(numj))
+            try : 
+                vale_fonc=list_fonc[i][list_fonc[i].index('VALEUR =\n')+9:list_fonc[i].index('FINSF\n')]
+                vale_fonc=vale_fonc.replace('\n',' ')
+                vale_fonc=map(float,vale_fonc.split())
+            except ValueError : 
+                UTMESS('F', 'SPECTRAL0_7')
+
+            liste=[]
+            if   FORMAT_C=='REEL_IMAG':
+                liste=vale_fonc
+            elif FORMAT_C=='MODULE_PHASE':
+                for i in range(len(vale_fonc)/3) :
+                  module=vale_fonc[3*i+1]
+                  phase =vale_fonc[3*i+2]
+                  liste=liste+[vale_fonc[3*i],module*cos(phase),module*sin(phase)]
+
+
+            # création de la fonction ASTER :
+            _fonc=DEFI_FONCTION( NOM_PARA   =NOM_PARA,
+                                 NOM_RESU   =NOM_RESU,
+                                 PROL_DROITE=PROL_DROITE,
+                                 PROL_GAUCHE=PROL_GAUCHE,
+                                 INTERPOL   =INTERPOL,
+                                 INFO       =INFO,
+                                 TITRE      =TITRE,
+                                 VALE_C     =liste,)
+            l_fonc.append(_fonc.nom)
+
+        nume_ib=[]
+        nume_jb=[]
+        for i in range(dim):
+            for j in range(i,dim):
+                nume_ib.append(i+1)
+                nume_jb.append(j+1)
+        if nume_i!=nume_ib or nume_j!=nume_jb : 
+            UTMESS('F', 'SPECTRAL0_3')
+        mcfact=[]
+        mcfact.append(_F(PARA='NOM_CHAM'    ,LISTE_K=(NOM_RESU),NUME_LIGN=(1,)))
+        mcfact.append(_F(PARA='OPTION'      ,LISTE_K=('TOUT',) ,NUME_LIGN=(1,)))
+        mcfact.append(_F(PARA='DIMENSION'   ,LISTE_I=(dim,)    ,NUME_LIGN=(1,)))
+        mcfact.append(_F(PARA='NUME_ORDRE_I',LISTE_I=nume_i    ,NUME_LIGN=range(2,len(nume_i)+2)))
+        mcfact.append(_F(PARA='NUME_ORDRE_J',LISTE_I=nume_j    ,NUME_LIGN=range(2,len(nume_j)+2)))
+        mcfact.append(_F(PARA='FONCTION_C'  ,LISTE_K=l_fonc    ,NUME_LIGN=range(2,len(list_fonc)+2)))
+        self.DeclareOut('tab_inte',self.sd)
+        tab_inte=CREA_TABLE(LISTE=mcfact,
+                          TITRE=TITRE,
+                          TYPE_TABLE='TABLE_FONCTION')
+
+    else:
+        # mot-clé != 'ASTER', ou 'IDEAS' => ERREUR !
+        UTMESS('F', 'SPECTRAL0_12')
+        
+
+    # remet UNITE dans son état initial
+    UL.EtatInit()
+    return ier
+        
+        
+    
+def comp(ddlno):
+    sens = 1
+    if ddlno < 0:
+        sens = -1
+    if ddlno == .1:return sens,'DX'
+    elif ddlno == .2:return sens,'DY'
+    elif ddlno == .3:return sens,'DZ'
+    elif ddlno == .4:return sens,'DRX'
+    elif ddlno == .5:return sens,'DRY'
+    elif ddlno == .6:return sens,'DRZ'
+    else:
+        print "Probleme pour l'attribution des composantes"
+    
+    
+
diff --git a/Aster/Cata/cataSTA10/Macro/lire_table_ops.py b/Aster/Cata/cataSTA10/Macro/lire_table_ops.py
new file mode 100644 (file)
index 0000000..5273ab5
--- /dev/null
@@ -0,0 +1,148 @@
+#@ MODIF lire_table_ops Macro  DATE 15/03/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import os
+import re
+
+# ------------------------------------------------------------------------------
+def msplit(chaine, separ):
+   """Equivalent de chaine.split(separ) en acceptant une ou plusieurs
+   occurrences du séparateur.
+   """
+   return re.split('%s+' % re.escape(separ), chaine.strip(separ))
+
+# ------------------------------------------------------------------------------
+def lecture_table(texte, nume, separ):
+   """Méthode de construction de l'objet Table à partir d'un texte d'une table
+   au format ASTER.
+   """
+   from Utilitai.transpose import transpose
+   from Utilitai.Table     import Table
+   from Utilitai.Utmess    import  UTMESS
+   
+   tab_lue = {}
+   nume_lign = []
+   idt_deb = '#DEBUT_TABLE\n'
+   idt_fin = '#FIN_TABLE\n'
+   idt_tit = '#TITRE'
+   id_vide = '-'
+   
+   # expression régulière pour découper les N tables du fichier
+   exp = re.compile(re.escape(idt_deb) + '(.*?)' + re.escape(idt_fin),
+                    re.MULTILINE | re.DOTALL)
+   l_txt = exp.findall(texte)
+   nbbloc = len(l_txt)
+   if nume > nbbloc:
+      UTMESS('F', 'TABLE0_10', vali=(nume, nbbloc))
+   txttab = l_txt[nume - 1]
+  
+   # expression régulière pour extraire le titre
+   exp = re.compile(re.escape(idt_tit) + '(.*)$', re.MULTILINE)
+   titre_tab = os.linesep.join([s.strip(separ) for s in exp.findall(txttab)])
+  
+   # restent dans la table les lignes non vides qui ne sont pas des titres
+   txttab = [line for line in txttab.splitlines() \
+                     if line.strip(separ) != '' and not line.startswith(idt_tit)]
+  
+   # ligne des paramètres et des types
+   list_para = msplit(txttab.pop(0), separ)
+   list_type = msplit(txttab.pop(0), separ)
+   nb_para = len(list_type)
+   
+   # format de lecture
+   fmt = {
+      'I' : '([0-9\-\+]+)',
+      'R' : '([0-9\.,\-\+eEdD]+)',
+      'K' : '(.{%(len)s})'
+   }
+   lfmt = ('%s+' % re.escape(separ)).join(
+      [fmt[typ[0]] % { 'len' : typ[1:] } for typ in list_type]
+   )
+   
+   # construction des lignes de la Table
+   l_rows = []
+   for i, line in enumerate(txttab):
+      mat = re.search(lfmt, line)
+      if mat is None or nb_para != len(mat.groups()):
+         UTMESS('F+', 'TABLE0_11', vali=i + 1)
+         if mat is not None:
+            UTMESS('F+', 'TABLE0_12', vali=len(mat.groups()))
+         UTMESS('F', 'TABLE0_13', vali=nb_para)
+      dico = {}
+      for para, typ, ch in zip(list_para, list_type, mat.groups()):
+         ch = ch.strip()
+         if ch != id_vide:
+            if typ == 'I':
+               val = int(ch)
+            elif typ == 'R':
+               val = float(ch)
+            else:
+               val = ch
+            dico[para] = val
+      l_rows.append(dico)
+   
+   tab = Table(l_rows, list_para, list_type, titre_tab)
+   return tab
+
+
+# ------------------------------------------------------------------------------
+def lire_table_ops(self, **args):
+   """Méthode corps de la macro LIRE_TABLE
+   """
+   from Utilitai.Utmess     import  UTMESS
+   from Utilitai.UniteAster import UniteAster
+   
+   ier = 0
+   nompro = 'LIRE_TABLE'
+   ### On importe les definitions des commandes a utiliser dans la macro
+   CREA_TABLE = self.get_cmd('CREA_TABLE')
+   UNITE      = self['UNITE']
+   FORMAT     = self['FORMAT']
+   NUME_TABLE = self['NUME_TABLE']
+   SEPARATEUR = self['SEPARATEUR']
+   PARA       = self['PARA']
+   TITRE      = self['TITRE']
+   
+   ### La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+   
+   ### Lecture de la table dans un fichier d unité logique UNITE
+   UL = UniteAster()
+   nomfich=UL.Nom(UNITE)
+   if not os.path.isfile(nomfich):
+      UTMESS('F', 'FONCT0_41', valk=nomfich)
+   
+   texte = open(nomfich,'r').read()
+   # remet UNITE dans son état initial
+   UL.EtatInit()
+   
+   ### mise en forme de la liste de valeurs suivant le format choisi :
+   # pour le moment uniquement ASTER
+   if FORMAT=='ASTER':
+      tab_lue = lecture_table(texte, NUME_TABLE, SEPARATEUR)
+   else:
+      pass
+   
+   ### création de la table ASTER :
+   self.DeclareOut('ut_tab', self.sd)
+   motscles = tab_lue.dict_CREA_TABLE()
+   ut_tab=CREA_TABLE(**motscles)
+   
+   return ier
diff --git a/Aster/Cata/cataSTA10/Macro/macr_adap_mail_ops.py b/Aster/Cata/cataSTA10/Macro/macr_adap_mail_ops.py
new file mode 100644 (file)
index 0000000..5b016ad
--- /dev/null
@@ -0,0 +1,959 @@
+#@ MODIF macr_adap_mail_ops Macro  DATE 15/03/2010   AUTEUR GNICOLAS G.NICOLAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                   
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+#
+"""
+Traitement des macros MACR_ADAP_MAIL/MACR_INFO_MAIL
+"""
+__revision__ = "V1.3"
+#
+def macr_adap_mail_ops ( self,
+                         INFO, VERSION_HOMARD, MAILLAGE_FRONTIERE,
+                         **args):
+  """
+     Traitement des macros MACR_ADAP_MAIL/MACR_INFO_MAIL
+  """
+#
+#  1. args est le dictionnaire des arguments
+#     args.keys() est la liste des mots-cles
+#     args.keys()[0] est la premiere valeur de cette liste
+#     args.keys()[1:] est la liste des valeurs suivantes dans cette liste
+#     args.keys(mot_cle) represente le contenu de la variable mot_cle dans la macro appelante.
+#
+###  print 'glop'
+###  print args
+###  print args.keys()
+###  if len (args.keys())>0 : print args.keys()[0]
+###  print args["MAILLAGE"]
+#
+#  2. Les caracteristiques d'un passage sont conservees dans un dictionnaire. Il y a autant de
+#     dictionnaires que de sollicitations pour une serie d'adaptation. L'ensemble de ces dictionnaires
+#     est conserve dans la liste Liste_Passages. Cette liste est necessairement globale pour pouvoir
+#     la retrouver e chaque nouveau passage.
+#     Description du dictionnaire de passages :
+#        dico["Maillage_0"]             = o ; string ; nom du concept du maillage initial de la serie d'adaptation
+#        dico["Maillage_NP1"]           = o ; string ; nom du concept du dernier maillage adapte
+#        dico["Rep_Calc_HOMARD_global"] = o ; string ; Nom global du repertoire de calcul pour HOMARD
+#        dico["Rep_Calc_HOMARD_local"]  = o ; string ; Nom local du repertoire de calcul pour HOMARD
+#                                                      depuis le repertoire de calcul pour ASTER
+#        dico["niter"]                  = o ; entier ; numero d'iteration
+#
+#  3. Les caracteristiques d'un maillage sont conservees dans un dictionnaire. Il y a autant de
+#     dictionnaires que de maillages manipules. L'ensemble de ces dictionnaires est conserve
+#     dans la liste liste_maillages.
+#     Description du dictionnaire de maillages :
+#        dico["Type_Maillage"] = o ; string ; "MAILLAGE_N", "MAILLAGE_NP1", "MAILLAGE_NP1_ANNEXE" ou "MAILLAGE_FRONTIERE"
+#        dico["Nom_ASTER"]     = o ; concept ASTER associe
+#        dico["Action"]        = o ; string ; "A_ecrire" ou "A_lire"
+#        dico["NOM_MED"]       = o ; string ; Nom MED du maillage
+#
+#  4. Les caracteristiques d'un champ sont conservees dans un dictionnaire. Il y a autant de
+#     dictionnaires que de champs manipules. L'ensemble de ces dictionnaires est conserve
+#     dans la liste liste_champs.
+#     Description du dictionnaire de champs :
+#        dico["Type_Champ"]   = o ; string ; "INDICATEUR" ou "CHAMP_MAJ"
+#        dico["RESULTAT"]     = f ; concept ASTER du resutat associe
+#        dico["NOM_CHAM"]     = f ; string ; Nom ASTER du champ
+#        dico["CHAM_GD"]      = f ; concept ASTER du champ de grandeur associee
+#        dico["COMPOSANTE"]   = f ; liste ; Liste des noms ASTER des composante de l'indicateur
+#        dico["NUME_ORDRE"]   = f ; entier ; Numero d'ordre du champ
+#        dico["INST"]         = f ; entier ; Instant du champ
+#        dico["PRECISION"]    = f ; entier ; Precision sur l'instant du champ
+#        dico["CRITERE"]      = f ; entier ; Critere de precision sur l'instant du champ
+#        dico["CHAM_MAJ"]     = f ; string ; Nom ASTER du champ interpole sur le nouveau maillage
+#        dico["NOM_MED"]      = o ; string ; Nom MED du champ
+#        dico["SENSIBILITE"]  = f ; string ; Nom du parametre sensible associe
+#
+#  5. Signification de INFO
+#     INFO = 1 : aucun message
+#     INFO = 2 : les messages des commandes annexes (DEFI_FICHIER, IMPR_RESU, LIRE_MAILLAGE, LIRE_CHAMP)
+#     INFO = 3 : aucun message pour les commandes annexes
+#                1er niveau de message pour l'execution de HOMARD
+#     INFO = 4 : aucun message pour les commandes annexes
+#                2nd niveau de message pour l'execution de HOMARD
+#
+  from Accas import _F
+  from Macro import creation_donnees_homard 
+  from Utilitai.Utmess     import UTMESS, MasquerAlarme, RetablirAlarme
+  import aster 
+  import string
+  import os
+  from types import ListType, TupleType
+  EnumTypes = (ListType, TupleType)
+#gn  import shutil
+#
+  global Liste_Passages
+#
+#====================================================================
+# 1. Prealables
+#====================================================================
+#
+# 1.1. ==> La macro compte pour 1 dans la numerotation des commandes
+#
+  self.set_icmd(1)
+#
+# 1.2. ==> Numero du passage dans cette macro
+#
+  try :
+    self.jdc.indice_macro_homard = self.jdc.indice_macro_homard + 1
+  except :
+    self.jdc.indice_macro_homard = 1
+    Liste_Passages = []
+  numero_passage_fonction = self.jdc.indice_macro_homard
+###  print "numero_passage_fonction = ",numero_passage_fonction
+#
+# 1.3. ==> On importe les definitions des commandes a utiliser dans la macro
+#
+  DEFI_FICHIER    = self.get_cmd("DEFI_FICHIER")
+  IMPR_RESU       = self.get_cmd("IMPR_RESU")
+  EXEC_LOGICIEL   = self.get_cmd("EXEC_LOGICIEL")
+  LIRE_MAILLAGE   = self.get_cmd("LIRE_MAILLAGE")
+  LIRE_CHAMP      = self.get_cmd("LIRE_CHAMP")
+#
+# 1.4. ==> Le nom du programme HOMARD a lancer
+#
+  repertoire_outils = aster.repout()
+  homard            = repertoire_outils + "homard"
+#
+# 1.5. ==> Initialisations
+#
+  codret_partiel = [0]
+  Rep_Calc_ASTER = os.getcwd()
+#
+  liste_maillages = []
+  liste_champs    = []
+  liste_zones     = []
+  liste_front_analytiques = []
+  dico_indi = {}
+#
+  LISTE_ADAPTATION_LIBRE = ("RAFF_DERA" , "RAFFINEMENT" , "DERAFFINEMENT")
+#
+  if ( INFO == 2 ) :
+    infomail = "OUI"
+    infocomm = 2
+  else :
+    infomail = "NON"
+    infocomm = 1
+#
+#====================================================================
+# 2. Decodage des arguments de la macro-commande
+#====================================================================
+# 2.1. ==> Donnees de pilotage de l'adaptation
+#
+  if ( self.nom == "MACR_ADAP_MAIL" ) :
+#
+    if args["ADAPTATION"] == "MODIFICATION" :
+      mode_homard = "MODI"
+    else :
+      mode_homard = "ADAP"
+#
+# 2.1.1. ==> Les concepts "maillage"
+#
+#gn    print "\n.. Debut de 2.1.1"
+#    for mot_cle in ["MAILLAGE_N" , "MAILLAGE_NP1"] :
+    for mot_cle in ["MAILLAGE_N" , "MAILLAGE_NP1" , "MAILLAGE_NP1_ANNEXE"] :
+#gn      print "\nmot_cle = ",mot_cle
+      dico = {}
+      dico["Type_Maillage"] = mot_cle
+      if ( args[mot_cle] != None ) :
+#gn        print "==> args[",mot_cle,"] = ",args[mot_cle]
+        dico["Nom_ASTER"] = args[mot_cle]
+        if ( mot_cle == "MAILLAGE_N" ) :
+          dico["Action"] = "A_ecrire"
+        else :
+          dico["Action"] = "A_lire"
+      else :
+        dico["Action"] = "Rien"
+#gn      print "dico = ",dico
+      liste_maillages.append(dico)
+#
+# 2.1.2. ==> L'eventuel indicateur d'erreur
+#
+#gn    print "\n.. Debut de 2.1.2"
+#gn    print "args = ", args
+    if args["ADAPTATION"] in LISTE_ADAPTATION_LIBRE :
+      dico = {}
+      dico["Type_Champ"] = "INDICATEUR"
+      if ( args["RESULTAT_N"] != None ) :
+        lresu = 1
+        dico["RESULTAT"]   = args["RESULTAT_N"]
+        noresu = dico["RESULTAT"].nom
+        dico["NOM_CHAM"]   = args["INDICATEUR"]
+        nomsym = dico["NOM_CHAM"]
+        if ( args["NUME_ORDRE"] != None ) :
+          dico["NUME_ORDRE"] = args["NUME_ORDRE"]
+        if ( args["INST"] != None ) :
+          dico["INST"] = args["INST"]
+          for cle in [ "PRECISION", "CRITERE" ] :
+            if ( args[cle] != None ) :
+              dico[cle] = args[cle]
+        if ( args["SENSIBILITE"] != None ) :
+          dico["SENSIBILITE"] = args["SENSIBILITE"]
+      else :
+        lresu = 0
+        dico["CHAM_GD"] = args["CHAM_GD"]
+        noresu = dico["CHAM_GD"].nom
+        nomsym = " "
+#gn      print "dico = ", dico
+#
+      if dico.has_key("SENSIBILITE") :
+        nopase = dico["SENSIBILITE"].nom
+      else :
+        nopase = " "
+#gn      print "Avant appel a aster.mdnoch, lresu = ",lresu,", noresu =", noresu ,", nomsym = ", nomsym ,", nopase = ", nopase
+      dico["NOM_MED"] = aster.mdnoch ( lresu, noresu, nomsym, nopase )
+#gn      print "==> dico[\"NOM_MED\"] = ", dico["NOM_MED"]
+#
+      if args.has_key("NOM_CMP_INDICA") :
+        if args["NOM_CMP_INDICA"] is not None :
+          if not type(args["NOM_CMP_INDICA"]) in EnumTypes :
+            l_aux = [args["NOM_CMP_INDICA"]]
+          else :
+            l_aux = []
+            les_composantes = args["NOM_CMP_INDICA"]
+            for composante in les_composantes :
+              l_aux.append(composante)
+          dico["COMPOSANTE"] = l_aux
+#
+      liste_champs.append(dico)
+      dico_indi = dico
+###      print dico
+#
+# 2.1.3. ==> Les champs a mettre a jour
+#
+#gn     print "\n.. Debut de 2.1.3."
+#
+    if args.has_key("MAJ_CHAM") :
+#
+      if args["MAJ_CHAM"] is None :
+        les_champs = []
+      else :
+        les_champs = args["MAJ_CHAM"]
+#
+      for maj_cham in les_champs :
+#gn        print maj_cham
+#gn        print type(maj_cham)
+#
+        dico = {}
+        dico["Type_Champ"] = "CHAMP_MAJ"
+        l_aux = [ "CHAM_MAJ", "TYPE_CHAM" ]
+        if ( maj_cham["RESULTAT"] != None ) :
+          lresu = 1
+          l_aux.append("RESULTAT")
+          l_aux.append("NOM_CHAM")
+          if ( maj_cham["NUME_ORDRE"] != None ) :
+            dico["NUME_ORDRE"] = maj_cham["NUME_ORDRE"]
+          elif ( maj_cham["INST"] != None ) :
+            dico["INST"] = maj_cham["INST"]
+            for cle in [ "PRECISION", "CRITERE" ] :
+              if ( maj_cham[cle] != None ) :
+                dico[cle] = maj_cham[cle]
+          noresu = maj_cham["RESULTAT"].nom
+          nomsym = maj_cham["NOM_CHAM"]
+          if ( maj_cham["SENSIBILITE"] != None ) :
+            dico["SENSIBILITE"] = maj_cham["SENSIBILITE"]
+        else :
+          lresu = 0
+          l_aux.append("CHAM_GD")
+          noresu = maj_cham["CHAM_GD"].nom
+          nomsym = " "
+        for cle in l_aux :
+          dico[cle] = maj_cham[cle]
+#gn        print "dico = ", dico
+#
+        if dico.has_key("SENSIBILITE") :
+          nopase = dico["SENSIBILITE"].nom
+        else :
+          nopase = " "
+#gn        print "Avant appel a aster.mdnoch, lresu = ",lresu,", noresu =", noresu ,", nomsym = ", nomsym ,", nopase = ", nopase
+        dico["NOM_MED"] = aster.mdnoch ( lresu, noresu, nomsym, nopase )
+#gn        print "==> dico[\"NOM_MED\"] = ", dico["NOM_MED"]
+#
+###        print dico
+        liste_champs.append(dico)
+#
+# 2.1.4. ==> Les zones de raffinement
+#
+###    print "\n.. Debut de 2.1.4."
+#
+    if args.has_key("ZONE") :
+#
+      if args["ZONE"] is not None :
+        l_aux = ['TYPE', 'X_MINI', 'X_MAXI', 'Y_MINI', 'Y_MAXI', 'Z_MINI', 'Z_MAXI', 'X_CENTRE', 'Y_CENTRE', 'Z_CENTRE', 'RAYON', 'RAYON_INT', 'RAYON_EXT', 'X_AXE', 'Y_AXE', 'Z_AXE', 'X_BASE', 'Y_BASE', 'Z_BASE', 'HAUTEUR' ]
+        les_zones = args["ZONE"]
+#
+        for zone in les_zones :
+###          print zone
+###          print type(zone)
+          dico = {}
+          for aux in l_aux :
+            if ( zone[aux] != None ) :
+              dico[aux] = zone[aux]
+###        print dico
+          liste_zones.append(dico)
+#
+###    print liste_zones
+#
+# 2.2. ==> Donnees de pilotage de l'information
+#
+  else :
+#
+    mode_homard = "INFO"
+#
+    dico = {}
+    dico["Type_Maillage"] = "MAILLAGE_N"
+    dico["Nom_ASTER"]     = args["MAILLAGE"]
+    dico["Action"]        = "A_ecrire"
+    liste_maillages.append(dico)
+#
+# 2.3. ==> Suivi d'une frontiere
+# 2.3.1. ==> Suivi d'une frontiere maillee
+#
+#gn  print "\n.. Debut de 2.3.1."
+#
+  if ( MAILLAGE_FRONTIERE != None ) :
+#
+    dico = {}
+    dico["Type_Maillage"] = "MAILLAGE_FRONTIERE"
+    dico["Nom_ASTER"]     = MAILLAGE_FRONTIERE
+    dico["Action"]        = "A_ecrire"
+    liste_maillages.append(dico)
+#
+# 2.3.2. ==> Suivi d'une frontiere analytique
+#
+#gn  print "\n.. Debut de 2.3.2."
+#
+  if args.has_key("FRONTIERE_ANALYTIQUE") :
+#
+    if args["FRONTIERE_ANALYTIQUE"] is None :
+      les_front_analytiques = []
+    else :
+      les_front_analytiques = args["FRONTIERE_ANALYTIQUE"]
+#
+    for frontiere in les_front_analytiques :
+      l_aux = [ "TYPE", "GROUP_MA", "RAYON", "X_CENTRE", "Y_CENTRE", "Z_CENTRE"]
+      if ( frontiere["TYPE"] == "CYLINDRE" ) :
+        l_aux.append("X_AXE")
+        l_aux.append("Y_AXE")
+        l_aux.append("Z_AXE")
+      dico = {}
+      for aux in l_aux :
+        dico[aux] = frontiere[aux]
+#gn      print dico
+#
+      liste_front_analytiques.append(dico)
+#
+# 2.4. ==> Le numero de version de HOMARD
+#    Remarque : dans la donnee de la version de HOMARD, il faut remplacer
+#               le _ de la donnee par un ., qui est interdit dans la
+#               syntaxe du langage de commandes ASTER
+#    Remarque : il faut remplacer le N majuscule de la donnee par
+#               un n minuscule, qui est interdit dans la syntaxe du langage
+#               de commandes ASTER
+#
+#gn  print "\n.. Debut de 2.4. avec VERSION_HOMARD = ", VERSION_HOMARD
+  VERSION_HOMARD = string.replace(VERSION_HOMARD,"_" , ".")
+  VERSION_HOMARD = string.replace(VERSION_HOMARD,"N" , "n")
+#
+  if ( VERSION_HOMARD[-6:]==".PERSO" ):
+    VERSION_HOMARD = VERSION_HOMARD[:-6]
+    version_perso = 1
+  else :
+    version_perso = 0
+#gn  print ".... VERSION_HOMARD = ", VERSION_HOMARD
+#gn  print ".... version_perso  = ", version_perso
+#
+# 2.54. ==> Les messages d'information
+#
+#gn  print "\n.. Debut de 2.5."
+#gn  print args["INTERPENETRATION"]
+  if ( args["INTERPENETRATION"] == "OUI" ) :
+    if ( mode_homard == "INFO" ) :
+      UTMESS('I','HOMARD0_6')
+    else :
+      UTMESS('A','HOMARD0_7')
+#    UTMESS('I','HOMARD0_6',valk='glop')
+#
+#====================================================================
+# 3. Preparation du lancement des commandes
+#====================================================================
+#
+# 3.1. ==> . Elaboration des noms MED des concepts de maillage
+#          . Memorisation des noms ASTER du maillage en entree et en sortie (sous forme string)
+#
+#          On cree une nouvelle liste des dictionnaires decrivant les maillages
+#          et e la fin on ecrase l'ancienne liste par cette nouvelle.
+#
+#gn  print "\n.. Debut de 3.1."
+#
+  Nom_Concept_Maillage_NP1_ANNEXE = None
+  l_aux = []
+  for dico in liste_maillages :
+#gn    print "\ndico avant = ",dico
+    if ( dico["Action"] != "Rien" ) :
+      dico["NOM_MED"] = aster.mdnoma(dico["Nom_ASTER"].nom)
+      l_aux.append(dico)
+      if ( dico["Type_Maillage"] == "MAILLAGE_N" ) :
+        Nom_Concept_Maillage_N = dico["Nom_ASTER"].nom
+      elif ( dico["Type_Maillage"] == "MAILLAGE_NP1" ) :
+        Nom_Concept_Maillage_NP1 = dico["Nom_ASTER"].nom
+      elif ( dico["Type_Maillage"] == "MAILLAGE_NP1_ANNEXE" ) :
+        Nom_Concept_Maillage_NP1_ANNEXE = dico["Nom_ASTER"].nom
+#gn    print "\ndico apres = ",dico
+  liste_maillages = l_aux
+#
+# 3.2. ==> Recherche du numero d'iteration et du repertoire de travail
+#
+# 3.2.1. ==> Par defaut :
+#            . le numero d'iteration est nul
+#            . le nom du repertoire de lancement de HOMARD est construit sur le nom
+#              du maillage en entree et le numero de passage dans la fonction
+#
+#gn  print "\.. Debut de 3.2.1."
+#
+  niter = 0
+  Nom_Rep_local = Nom_Concept_Maillage_N + "_" + mode_homard + "_" + str(numero_passage_fonction)
+  Rep_Calc_HOMARD_local = os.path.join(".", Nom_Rep_local)
+  Rep_Calc_HOMARD_global = os.path.join(Rep_Calc_ASTER, Nom_Rep_local)
+#gn  print "Rep_Calc_HOMARD_local  = ", Rep_Calc_HOMARD_local
+#gn  print "Rep_Calc_HOMARD_global = ", Rep_Calc_HOMARD_global
+#
+# 3.2.2. ==> En adaptation : il faut repartir du repertoire de l'iteration precedente
+#
+#gn  print "\.. Debut de 3.2.2."
+#
+  if ( mode_homard == "ADAP" ) :
+#
+# 3.2.2.1. ==> On recherche si dans les passages deja effectues, il en existe un
+#              dont le maillage d'arrivee etait l'actuel maillage d'entree. Si c'est
+#              le cas, cela veut dire que l'adaptation en cours est la suite d'une
+#              precedente. On doit donc utiliser le meme repertoire. Le numero
+#              d'iteration est celui de l'adaptation precedente augmente de 1.
+#
+#gn    print "\.. Debut de 3.2.2.1."
+#
+    for dico in Liste_Passages :
+      if ( dico["Maillage_NP1"] == Nom_Concept_Maillage_N ) :
+        niter   = dico["niter"] + 1
+        Rep_Calc_HOMARD_local  = dico["Rep_Calc_HOMARD_local"]
+        Rep_Calc_HOMARD_global = dico["Rep_Calc_HOMARD_global"]
+#
+# 3.2.2.2. ==> Memorisation de ce passage
+#
+#gn    print "\.. Debut de 3.2.2.2."
+#
+# 3.2.2.2.1. ==> Enregistrement d'un nouveau cas de figure
+#
+    if ( niter == 0 ) :
+      dico = {}
+      dico["Maillage_0"]   = Nom_Concept_Maillage_N
+      dico["Maillage_NP1"] = Nom_Concept_Maillage_NP1
+      dico["Maillage_NP1_ANNEXE"] = Nom_Concept_Maillage_NP1_ANNEXE
+      dico["Rep_Calc_HOMARD_local"]  = Rep_Calc_HOMARD_local
+      dico["Rep_Calc_HOMARD_global"] = Rep_Calc_HOMARD_global
+      dico["niter"]        = niter
+      Liste_Passages.append(dico)
+#
+# 3.2.2.2.2. ==> Modification du cas en cours
+#
+    else :
+      l_aux = []
+      for dico in Liste_Passages :
+        if ( dico["Maillage_NP1"] == Nom_Concept_Maillage_N ) :
+          dico["Maillage_NP1"] = Nom_Concept_Maillage_NP1
+          dico["Maillage_NP1_ANNEXE"] = Nom_Concept_Maillage_NP1_ANNEXE
+          dico["niter"]        = niter
+        l_aux.append(dico)
+      Liste_Passages = l_aux
+#
+###  print "niter = ", niter, ", Rep_Calc_HOMARD_global = ", Rep_Calc_HOMARD_global
+#
+# 3.2.3. Creation du repertoire pour homard
+#        attention : on ne fait cette creation qu'une seule fois par cas
+#                    d'adaptation ou d'information
+#
+#gn  print "\.. Debut de 3.2.3."
+#
+  if ( niter == 0 ) :
+#
+    try :
+      os.mkdir(Rep_Calc_HOMARD_global)
+    except os.error,codret_partiel :
+      self.cr.warn("Code d'erreur de mkdir : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
+      UTMESS("F", 'HOMARD0_4', valk=Rep_Calc_HOMARD_global)
+#
+#====================================================================
+# 4. Ecriture des commandes de creation des donnees MED
+#====================================================================
+#
+#gn  print "\.. Debut de 4."
+#
+#  On doit ecrire : le maillage,
+#                   le champ d'indicateur d'erreur
+#                   les champs e convertir
+#  Remarque : on met tout dans le meme fichier
+#
+#  Chacune de ces ecritures est optionnelle selon le contexte.
+#
+# 4.1. ==> Noms des fichiers d'ASTER vers HOMARD et eventuellement de HOMARD vers ASTER
+#          Remarque : aujourd'hui, les ecritures ou les lectures au format MED se font obligatoirement sur
+#                     un fichier de nom fort.n, place dans le repertoire de calcul
+##
+# 4.1.1. ==> D'ASTER vers HOMARD
+#
+  unite_fichier_aster_vers_homard = 1787 + 2*numero_passage_fonction
+  fichier_aster_vers_homard = os.path.join(Rep_Calc_ASTER,"fort." + str(unite_fichier_aster_vers_homard))
+###  print "fichier_aster_vers_homard = ",fichier_aster_vers_homard
+#
+# 4.1.2. ==> De HOMARD vers ASTER
+#
+  if ( mode_homard in [ "ADAP", "MODI" ] ) :
+    unite_fichier_homard_vers_aster = unite_fichier_aster_vers_homard + 1
+    fichier_homard_vers_aster = os.path.join(Rep_Calc_ASTER,"fort." + str(unite_fichier_homard_vers_aster))
+###    print "fichier_homard_vers_aster = ",fichier_homard_vers_aster
+#
+# 4.2. La definition du fichier de ASTER vers HOMARD
+#
+  DEFI_FICHIER ( ACTION= "ASSOCIER",
+                 UNITE = unite_fichier_aster_vers_homard,
+                 TYPE = "LIBRE",
+                 INFO = infocomm )
+#
+# 4.3. Le(s) maillage(s)
+# Le maillage de calcul et l'eventuel maillage de la frontiere sont ecrits
+# dans le meme fichier MED
+# En fait, on pourrait s'en passer au dela de la 1ere iteration
+# car HOMARD a memorise. Mais des que l'on ecrit un champ,
+# les conventions MED imposent la presence du maillage dans le fichier.
+# Donc on va toujours ecrire.
+#
+  for dico in liste_maillages :
+    if ( dico["Action"] == "A_ecrire" ) :
+      motscsi = {}
+      motscsi["MAILLAGE"] = dico["Nom_ASTER"]
+      motscfa = {}
+      motscfa["RESU"] = _F( INFO_MAILLAGE=infomail,
+                          **motscsi )
+#
+      IMPR_RESU ( INFO = infocomm, 
+                  FORMAT ='MED', UNITE = unite_fichier_aster_vers_homard,
+                  **motscfa )
+#
+# 4.4. Le(s) champ(s)
+#        Attention : il se peut que l'on demande la mise à jour du champ qui a servi comme
+#                    indicateur d'erreur. Si c'est le cas, il ne faut pas demander son
+#                    impression sinon il y a plantage d'IMPR_RESU qui ne sait pas substituer
+#                    deux champs. D'ailleurs, c'est plus economique ainsi !
+#        Remarque : pour l'adaptation, on peut ne demander qu'un nombre reduit de composante du
+#                   champ d'indicateur.
+#                   s'il y a demande de mise a jour, toutes les composantes sont concernees. Il faut
+#                   donc dans ce cas imprimer le champ total.
+#        dico["Type_Champ"]   = o ; string ; "INDICATEUR" ou "CHAMP_MAJ"
+#        dico["RESULTAT"]     = f ; concept ASTER du resutat associe
+#        dico["NOM_CHAM"]     = f ; string ; Nom ASTER du champ
+#        dico["CHAM_GD"]      = f ; concept ASTER du champ de grandeur associee
+#        dico["COMPOSANTE"]   = f ; liste ; Liste des noms ASTER des composante de l'indicateur
+#        dico["NUME_ORDRE"]   = f ; entier ; Numero d'ordre du champ
+#        dico["INST"]         = f ; entier ; Instant du champ
+#        dico["PRECISION"]    = f ; entier ; Precision sur l'instant du champ
+#        dico["CRITERE"]      = f ; entier ; Critere de precision sur l'instant du champ
+#        dico["CHAM_MAJ"]     = f ; string ; Nom ASTER du champ interpole sur le nouveau maillage
+#        dico["NOM_MED"]      = o ; string ; Nom MED du champ
+#        dico["SENSIBILITE"]  = f ; string ; Nom du parametre sensible associe
+#
+# 4.4.1. Recherche d'un doublon eventuel sur le champ d'indicateur d'erreur
+#
+#gn  print "dico_indi = ",dico_indi
+  if len(dico_indi) > 0 :
+    indic_est_deja_imprime = 0
+    if dico_indi.has_key("RESULTAT") :
+      l_aux = [ "RESULTAT", "NOM_CHAM" ]
+    else :
+      l_aux = [ "CHAM_GD" ]
+  else :
+    indic_est_deja_imprime = 1
+    l_aux = [ ]
+#gn  print ".. Au debut de la boucle, l_aux = ",l_aux
+#gn  print ".. Au debut de la boucle, indic_est_deja_imprime = ",indic_est_deja_imprime
+#
+  liste_champs_imprime = []
+  for dico in liste_champs :
+###    print "\n.... dico = ",dico
+#   Pour un champ e mettre e jour, on a toujours impression
+    if ( dico["Type_Champ"] == "CHAMP_MAJ" ) :
+      liste_champs_imprime.append(dico)
+#     Si le champ d'indicateur n'a toujours pas ete repere comme champ e mettre e jour :
+      if not indic_est_deja_imprime :
+#       Est-ce le meme champ ?
+        on_a_le_champ = 1
+        for cle in l_aux :
+          if ( dico.has_key(cle) ) :
+###            print "...... dico_indi[cle] = ",dico_indi[cle]
+###            print "...... dico[cle]      = ",dico[cle]
+            if ( dico_indi[cle] != dico[cle] ) :
+              on_a_le_champ = 0
+              break
+          else :
+            on_a_le_champ = 0
+            break
+#       Si oui, est-ce un champ sensible ou non ?
+        if on_a_le_champ :
+          cle = "SENSIBILITE"
+          if dico.has_key(cle) :
+            if ( dico[cle] != None ) :
+              if dico_indi.has_key(cle) :
+                if ( dico_indi[cle] != dico[cle] ) :
+                  on_a_le_champ = 0
+                  break
+              else :
+                on_a_le_champ = 0
+                break
+#       Si oui, est-ce au meme moment ? (remarque : si rien n'est designe, c'est qu'il n'y a qu'un
+#       seul instant ... donc c'est le meme ! En revanche, on ne sait pas comparer une donnee
+#       en numero d'ordre et une donnee en instant. On croise les doigts.)
+        if on_a_le_champ :
+          for cle in [ "NUME_ORDRE", "INST" ] :
+            if dico.has_key(cle) :
+              if ( dico[cle] != None ) :
+                if dico_indi.has_key(cle) :
+                  if ( dico_indi[cle] != dico[cle] ) :
+                    on_a_le_champ = 0
+                    break
+        if on_a_le_champ :
+          indic_est_deja_imprime = 1
+###  print "\n\nFin de la boucle .. indic_est_deja_imprime = ",indic_est_deja_imprime
+#   Si le champ d'indicateur n'a pas ete repere comme champ e mettre e jour, il faut
+#   l'inclure dans les champs e imprimer
+  if not indic_est_deja_imprime :
+    liste_champs_imprime.append(dico_indi)
+#
+# 4.4.2. Impressions apres le filtrage precedent
+#gn  print "\n.... Debut de 4.2.4.2."
+#
+  for dico in liste_champs_imprime :
+    motscsi = {}
+    for cle in [ "RESULTAT", "NOM_CHAM", "CHAM_GD", "NUME_ORDRE", "INST", "PRECISION", "CRITERE" ] :
+      if dico.has_key(cle) :
+        if ( dico[cle] != None ) :
+          motscsi[cle] = dico[cle]
+    if dico.has_key("COMPOSANTE") :
+      if ( len(dico["COMPOSANTE"]) == 1 ) :
+        motscsi["NOM_CMP"] = dico["COMPOSANTE"][0]
+      else :
+        motscsi["NOM_CMP"] = dico["COMPOSANTE"]
+    if dico.has_key("SENSIBILITE") :
+      motscsi["SENSIBILITE"] = dico["SENSIBILITE"]
+    motscfa = {}
+    motscfa["RESU"] = _F( INFO_MAILLAGE=infomail,
+                        **motscsi
+                      )
+#gn    print ".. motscfa = ",motscfa
+#
+    IMPR_RESU ( INFO = infocomm, 
+                FORMAT ='MED', UNITE = unite_fichier_aster_vers_homard,
+                **motscfa )
+#
+#====================================================================
+# 5. ==> Creation des fichiers de donnees pour HOMARD
+#====================================================================
+#
+#gn  print "\.. Debut de 5."
+#
+  dico_configuration = {}
+#
+# 5.1. ==> Les generalites
+#
+  dico_configuration["INFO"] = INFO
+#
+  dico_configuration["Rep_Calc_HOMARD_global"] = Rep_Calc_HOMARD_global
+  dico_configuration["VERSION_HOMARD"] = VERSION_HOMARD
+  dico_configuration["version_perso"] = version_perso
+  if args.has_key("UNITE") :
+    UNITE = args["UNITE"]
+    fichier_conf_suppl = os.path.join(Rep_Calc_ASTER,"fort." + str(UNITE))
+    dico_configuration["fichier_conf_suppl"] = fichier_conf_suppl
+#
+  dico_configuration["niter"] = niter
+  dico_configuration["Fichier_ASTER_vers_HOMARD"] = fichier_aster_vers_homard
+  if ( mode_homard in [ "ADAP", "MODI" ] ) :
+    dico_configuration["Fichier_HOMARD_vers_ASTER"] = fichier_homard_vers_aster
+#
+# 5.2. ==> Les noms med des maillages
+#
+  for dico in liste_maillages :
+#gn    print "Nom MED de " + dico["Type_Maillage"] + " = " + dico["NOM_MED"]
+    dico_configuration[ "NOM_MED_"+dico["Type_Maillage"] ] = dico["NOM_MED"]
+#gn  print dico_configuration
+#
+# 5.3. ==> Les caracteristiques de l'eventuel indicateur d'erreur
+#
+  for dico in liste_champs :
+    dico_aux = {}
+    if ( dico["Type_Champ"] == "INDICATEUR" ) :
+      l_aux = [ "NOM_MED", "COMPOSANTE" ]
+      if dico.has_key("NUME_ORDRE") :
+        l_aux.append("NUME_ORDRE")
+      for cle in l_aux :
+        if ( dico[cle] != None ) :
+          dico_aux[cle] = dico[cle]
+      dico_configuration["Indicateur"] = dico_aux
+#gn  if dico_configuration.has_key("Indicateur") :
+#gn    print "dico_configuration[Indicateur] = ", dico_configuration["Indicateur"]
+#
+# 5.4. ==> Les eventuelles zones de raffinement
+#
+  prem = 1
+  for dico in liste_zones :
+    if prem :
+      l_aux = [dico]
+      prem = 0
+    else :
+      l_aux = dico_configuration["Zones_raffinement"]
+      l_aux.append(dico)
+    dico_configuration["Zones_raffinement"] = l_aux
+###  if dico_configuration.has_key("Zones_raffinement") :
+###    print "dico_configuration[Zones_raffinement] = ", dico_configuration["Zones_raffinement"]
+#
+# 5.5. ==> La mise a jour de champs
+#
+  prem = 1
+  for dico in liste_champs :
+    dico_aux = {}
+    if ( dico["Type_Champ"] == "CHAMP_MAJ" ) :
+      l_aux = [ "NOM_MED", "COMPOSANTE" ]
+      if dico.has_key("NUME_ORDRE") :
+        l_aux.append("NUME_ORDRE")
+      else :
+        for cle in [ "RESULTAT", "NOM_CHAM", "INST", "PRECISION", "CRITERE" ] :
+          l_aux.append(cle)
+      for cle in l_aux :
+        if dico.has_key(cle) :
+          if ( dico[cle] != None ) :
+            dico_aux[cle] = dico[cle]
+#gn      print dico_aux
+      if prem :
+        l_aux = [dico_aux]
+        prem = 0
+      else :
+        l_aux = dico_configuration["Champs"]
+        l_aux.append(dico_aux)
+      dico_configuration["Champs"] = l_aux
+#gn  if dico_configuration.has_key("Champs") :
+#gn   print "dico_configuration[Champs] = ", dico_configuration["Champs"]
+#
+# 5.6. ==> Les eventuelles frontieres analytiques
+#
+  prem = 1
+  for dico in liste_front_analytiques :
+    if prem :
+      l_aux = [dico]
+      prem = 0
+    else :
+      l_aux = dico_configuration["Frontiere_analytique"]
+      l_aux.append(dico)
+    dico_configuration["Frontiere_analytique"] = l_aux
+#gn  if dico_configuration.has_key("Frontiere_analytique") :
+#gn    print "dico_configuration[Frontiere_analytique] = ", dico_configuration["Frontiere_analytique"]
+#
+# 5.7. ==> Appel de la fonction de creation
+#
+  donnees_homard = creation_donnees_homard.creation_donnees_homard ( self.nom, args, dico_configuration )
+  if ( INFO >= 4 ) :
+    donnees_homard.quel_mode ( )
+  fic_homard_niter, fic_homard_niterp1 = donnees_homard.creation_configuration ( )
+  donnees_homard.ecrire_fichier_configuration ( )
+  if ( mode_homard == "INFO" ) :
+    Nom_Fichier_Donnees = donnees_homard.ecrire_fichier_donnees ( )
+  else :
+    Nom_Fichier_Donnees = "0"
+#
+# 5.8. ==> Impression eventuelle des fichiers crees
+#
+#gn  print "Repertoire ",Rep_Calc_HOMARD_global
+#gn  os.system("ls -la "+Rep_Calc_HOMARD_global)
+  if ( INFO >= 4 ) :
+    l_aux = ["HOMARD.Donnees" , "HOMARD.Configuration"]
+  else :
+    l_aux = [ ]
+  for nomfic in l_aux :
+    fic = os.path.join(Rep_Calc_HOMARD_global, nomfic)
+    if os.path.isfile (fic) :
+      print "\n\n=============================================================="
+      print "Contenu de", nomfic
+      fichier = open (fic,"r")
+      les_lignes = fichier.readlines()
+      fichier.close()
+      for ligne in les_lignes :
+        print ligne[:-1]
+      print "==============================================================\n"
+#gn  if ( mode_homard == "ADAP" ) :
+#gn    if args.has_key("MAJ_CHAM") :
+#gn      if args["MAJ_CHAM"] is not None :
+#gn        import time
+#gn        time.sleep(3600)
+#
+#====================================================================
+# 6. Ecriture de la commande d'execution de homard
+#====================================================================
+#
+#
+#gn  print "\.. Debut de 6."
+#gn  os.system("cp " + Rep_Calc_HOMARD_global + "/../fort.17* $HOME/aster")
+#gn  os.system("cp " + Rep_Calc_HOMARD_global + "/HOMARD.Configuration $HOME/aster/HOMARD.Configuration"+str(niter))
+#gn  fichier_aster_vers_homard_2 = os.path.join("/tmp" , "fort." + str(unite_fichier_aster_vers_homard))
+#gn  shutil.copyfile(fichier_aster_vers_homard, fichier_aster_vers_homard_2)
+#
+  if ( INFO == 1 ) :
+    iaux = INFO
+  else :
+    iaux = 2
+  EXEC_LOGICIEL ( ARGUMENT = (Rep_Calc_HOMARD_global, # nom du repertoire
+                              VERSION_HOMARD,         # version de homard
+                              str(INFO),              # niveau d information
+                              Nom_Fichier_Donnees,    # fichier de donnees HOMARD
+                              str(version_perso),     # version personnelle de homard ?
+                             ),
+                  LOGICIEL = homard,
+                  INFO     = iaux,
+                )
+#gn  import time
+#gn  time.sleep(3600)
+#
+#gn  if ( mode_homard == "ADAP" ) :
+#gn    fichier_homard_vers_aster_2 = os.path.join("/tmp" , "fort." + str(unite_fichier_homard_vers_aster))
+#gn    shutil.copyfile(fichier_homard_vers_aster, fichier_homard_vers_aster_2)
+#gn    fichier_homard_vers_aster_2_1 = os.path.join("/tmp" , "fort." + str(unite_fichier_homard_vers_aster)+".1")
+#gn    os.system("/local00/Logiciels/med-2.3.1/Linux/bin/mdump "+fichier_homard_vers_aster_2+">"+fichier_homard_vers_aster_2_1+"</tmp/donn1")
+#gn    fichier_homard_vers_aster_2_2 = os.path.join("/tmp" , "fort." + str(unite_fichier_homard_vers_aster)+".2")
+#gn    os.system("/local00/Logiciels/med-2.3.1/Linux/bin/mdump "+fichier_homard_vers_aster_2+">"+fichier_homard_vers_aster_2_2+"</tmp/donn2")
+#
+#====================================================================
+# 7. ==> Ecriture de la commande de lecture des resultats med
+#        Remarque :
+#        La fonction self.DeclareOut(a,b) fonctionne ainsi :
+#        a est une chaine de caracteres
+#        b est la variable declaree dans la commande
+#        le but est de associer le contenu de b e la variable locale qui sera designee par a
+#        Exemple :
+#        self.DeclareOut("maillage_a_lire",args["MAILLAGE_NP1"])
+#        ==> la variable maillage_a_lire est identifiee e l'argument "MAILLAGE_NP1"
+#====================================================================
+#
+  if ( mode_homard in [ "ADAP", "MODI" ] ) :
+#
+# 7.1. ==> Le maillage
+#          On inhibe l'alarme MODELISA5_49 qui apparait car on fait VERIF=NON
+#
+#gn    print "args = ",args
+    for dico in liste_maillages :
+#gn      print dico
+      if ( dico["Action"] == "A_lire" ) :
+#
+        MasquerAlarme('MODELISA5_49')
+#
+        self.DeclareOut("maillage_a_lire", dico["Nom_ASTER"])
+        maillage_a_lire = LIRE_MAILLAGE ( UNITE = unite_fichier_homard_vers_aster,
+                                       FORMAT = "MED",
+                                       NOM_MED = dico["NOM_MED"],
+                                       VERI_MAIL = _F(VERIF="NON"), INFO_MED = infocomm, INFO = infocomm )
+#
+        RetablirAlarme('MODELISA5_49')
+#
+#gn        print "MAILLAGE = ",maillage_a_lire
+#gn        print "NOM_MED = ",dico["NOM_MED"]
+        if ( dico["Type_Maillage"] == "MAILLAGE_NP1" ) :
+          maillage_np1 = maillage_a_lire
+          maillage_np1_nom_med = dico["NOM_MED"]
+#
+# 7.2. ==> Les champs
+#gn    import time
+#gn    time.sleep(3600)
+#
+    for dico in liste_champs :
+      if ( dico["Type_Champ"] == "CHAMP_MAJ" ) :
+#gn        print dico
+        self.DeclareOut("champ_maj", dico["CHAM_MAJ"])
+        motscsi = {}
+        for cle in [ "NUME_ORDRE", "INST", "PRECISION", "CRITERE" ] :
+          if dico.has_key(cle) :
+            if ( dico[cle] != None ) :
+              motscsi[cle] = dico[cle]
+        if dico.has_key("NUME_ORDRE") :
+          motscsi["NUME_PT"] = dico["NUME_ORDRE"]
+#gn        print "MAILLAGE = ",maillage_np1
+#gn        print "NOM_MAIL_MED = ",maillage_np1_nom_med
+#gn        print "NOM_MED = ",dico["NOM_MED"]
+#gn        print "TYPE_CHAM =", dico["TYPE_CHAM"]
+        champ_maj = LIRE_CHAMP ( UNITE = unite_fichier_homard_vers_aster, FORMAT = "MED",
+                                 MAILLAGE = maillage_np1, NOM_MAIL_MED=maillage_np1_nom_med,
+                                 NOM_MED = dico["NOM_MED"], NOM_CMP_IDEM = "OUI", TYPE_CHAM = dico["TYPE_CHAM"],
+                                 INFO = infocomm, **motscsi )
+#
+#====================================================================
+# 8. Menage des fichiers devenus inutiles
+#    Il est important de faire le menage des fichiers MED, qui sont
+#    les plus gros.
+#    On doit imperativement garder le dernier fichier homard produit
+#    En mode d'information, on garde egalement les fichiers textes
+#====================================================================
+#
+  l_aux = [fichier_aster_vers_homard]
+  if ( mode_homard in [ "ADAP", "MODI" ] ) :
+    l_aux.append(fichier_homard_vers_aster)
+#
+  l_aux_bis = os.listdir(Rep_Calc_HOMARD_global)
+  for fic in l_aux_bis :
+    fic_total = os.path.join(Rep_Calc_HOMARD_global, fic)
+    l_aux.append(fic_total)
+#
+  l_aux_bis = []
+  if ( mode_homard == "ADAP" ) :
+    fic = os.path.join(Rep_Calc_HOMARD_global, fic_homard_niterp1)
+    l_aux_bis.append(fic)
+#gn  os.system("cp " + Rep_Calc_HOMARD_global + "/* $HOME/aster")
+#
+  for fic in l_aux :
+    if ( INFO >= 3 ) :
+      print "Examen du fichier ", fic
+    if fic not in l_aux_bis :
+      if ( INFO >= 3 ) :
+        print "==> Destruction du fichier"
+      if os.path.isfile(fic) :
+        try :
+          os.remove(fic)
+        except os.error,codret_partiel :
+          self.cr.warn("Code d'erreur de remove : " + str(codret_partiel[0]) + " : " + codret_partiel[1])
+          UTMESS("F", 'HOMARD0_5', valk=fic)
+#
+#gn  print "Repertoire ",Rep_Calc_HOMARD_global
+#gn  print os.listdir(Rep_Calc_HOMARD_global)
+#gn  print "Repertoire ",Rep_Calc_ASTER
+#gn  print os.listdir(Rep_Calc_ASTER)
+#
+#====================================================================
+#  C'est fini !
+#====================================================================
+#
+###  if ( mode_homard == "ADAP" and niter == 3 ) :
+###  if ( niter == 2 ) :
+#gn  import time
+#gn  time.sleep(3600)
+#
+  return
diff --git a/Aster/Cata/cataSTA10/Macro/macr_ascouf_calc_ops.py b/Aster/Cata/cataSTA10/Macro/macr_ascouf_calc_ops.py
new file mode 100644 (file)
index 0000000..5464de3
--- /dev/null
@@ -0,0 +1,775 @@
+#@ MODIF macr_ascouf_calc_ops Macro  DATE 22/12/2009   AUTEUR ABBAS M.ABBAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+
+def macr_ascouf_calc_ops(self,TYPE_MAILLAGE,CL_BOL_P2_GV,MAILLAGE,MODELE,CHAM_MATER,CARA_ELEM,
+                              FOND_FISS,RESU_THER,AFFE_MATERIAU,
+                              PRES_REP,ECHANGE,TORS_P1,COMP_INCR,COMP_ELAS,
+                              SOLVEUR,CONVERGENCE,NEWTON,RECH_LINEAIRE,
+                              INCREMENT,THETA_3D,IMPR_TABLE,IMPRESSION,INFO,TITRE ,**args):
+  """
+     Ecriture de la macro MACR_ASCOUF_CALC
+  """
+  from Accas import _F
+  import types
+  import math
+  import aster
+  from math import pi,sin,cos,sqrt,atan2
+  from Utilitai.Utmess     import  UTMESS
+  ier=0
+# On recopie les mots cles affe_materiau et impr_table pour les proteger
+  mc_AFFE_MATERIAU=AFFE_MATERIAU
+  mc_IMPR_TABLE   =IMPR_TABLE
+  # On importe les definitions des commandes a utiliser dans la macro
+  AFFE_MODELE      =self.get_cmd('AFFE_MODELE'     )
+  AFFE_MATERIAU    =self.get_cmd('AFFE_MATERIAU'   )
+  AFFE_CARA_ELEM   =self.get_cmd('AFFE_CARA_ELEM'  )
+  AFFE_CHAR_THER_F =self.get_cmd('AFFE_CHAR_THER_F')
+  DEFI_CONTACT     =self.get_cmd('DEFI_CONTACT')  
+  THER_LINEAIRE    =self.get_cmd('THER_LINEAIRE'   )
+  AFFE_CHAR_MECA   =self.get_cmd('AFFE_CHAR_MECA'  )
+  STAT_NON_LINE    =self.get_cmd('STAT_NON_LINE'   )
+  CALC_ELEM        =self.get_cmd('CALC_ELEM'       )
+  IMPR_RESU        =self.get_cmd('IMPR_RESU'       )
+  IMPR_TABLE       =self.get_cmd('IMPR_TABLE'      )
+  DEFI_FOND_FISS   =self.get_cmd('DEFI_FOND_FISS'  )
+  CALC_THETA       =self.get_cmd('CALC_THETA'      )
+  CALC_G           =self.get_cmd('CALC_G'          )
+  POST_RCCM        =self.get_cmd('POST_RCCM'       )
+  POST_RELEVE_T    =self.get_cmd('POST_RELEVE_T'   )
+
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+#------------------------------------------------------------------
+# DATA
+  GRMAIL = ('COUDE','PEAUINT','PEAUEXT','EXTUBE','CLGV','FACE1','FACE2')
+#------------------------------------------------------------------
+#
+  if CL_BOL_P2_GV!=None :
+    if TYPE_MAILLAGE=='SOUS_EPAIS_COUDE' :
+       message=        ' la condition aux limites sur bol a section conique \n'
+       message=message+' est ignoree pour un coude avec sous-epaisseurs \n'
+       UTMESS('A','ASCOUF0_1')
+    elif (TYPE_MAILLAGE[:4]!='FISS') and (CL_BOL_P2_GV['AZIMUT']!=None) :
+       UTMESS('E','ASCOUF0_2')
+ #
+  if mc_IMPR_TABLE!=None :
+    FLAG = 0
+    if (mc_IMPR_TABLE['NOM_PARA']==None) and (mc_IMPR_TABLE['POSI_ANGUL']==None) and (mc_IMPR_TABLE['POSI_CURV_LONGI']==None) :
+       UTMESS('E','ASCOUF0_3')
+       return ier
+    if (mc_IMPR_TABLE['NOM_PARA']!=None) :
+       impr_table_nom_para= mc_IMPR_TABLE['NOM_PARA']
+       for impt in impr_table_nom_para :
+         if impt in ('SI_LONG','SI_CIRC','SI_RADI') :
+           FLAG = 1
+           if (((impt['ANGLE']==None) and (impt['POSI_ANGUL']==None) and (impt['R_CINTR'        ]==None)) or
+               ((impt['ANGLE']==None) and (impt['R_CINTR'   ]==None) and (impt['POSI_CURV_LONGI']==None))   )  :
+             UTMESS('E','ASCOUF0_4')
+    if (mc_IMPR_TABLE['NOM_PARA']==None) : FLAG = 1
+    if not FLAG : UTMESS('A','ASCOUF0_5')
+#
+#------------------------------------------------------------------
+#
+#     --- commande AFFE_MODELE ---
+#
+  self.DeclareOut('modele',MODELE)
+  mcfact=[]
+  if (TYPE_MAILLAGE[:4]=='FISS') :
+     mcfact.append(_F(GROUP_MA=GRMAIL     ,PHENOMENE='MECANIQUE',MODELISATION='3D'    ))
+  else:
+     mcfact.append(_F(GROUP_MA=GRMAIL[:5] ,PHENOMENE='MECANIQUE',MODELISATION='3D'    ))
+  if TORS_P1!=None :
+     mcfact.append(_F(GROUP_MA='P1' ,PHENOMENE='MECANIQUE',MODELISATION='DIS_TR'))
+  if CL_BOL_P2_GV==None :
+     mcfact.append(_F(GROUP_MA='P2' ,PHENOMENE='MECANIQUE',MODELISATION='DIS_TR'))
+  modele = AFFE_MODELE( MAILLAGE = MAILLAGE ,
+                        AFFE     = mcfact    )
+  if ECHANGE!=None :                                # modele thermique
+     __modthe = AFFE_MODELE( MAILLAGE = MAILLAGE ,
+                             AFFE     = _F(TOUT        ='OUI',
+                                           PHENOMENE   ='THERMIQUE',
+                                           MODELISATION='3D' )       )
+
+#------------------------------------------------------------------
+#
+#     --- commande AFFE_MATERIAU (thermique)---
+#
+  mcfact=[]
+  for mater in mc_AFFE_MATERIAU :
+     if mater['TOUT']!=None :
+       mcfact.append(_F(TOUT    =mater['TOUT'    ],MATER=mater['MATER']))
+       rccmat = mater['MATER']
+     else                   :
+       mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER']))
+       if    mater['GROUP_MA'][:5]=='COUDE' :
+         if TORS_P1!=None :
+           mcfact.append(_F(GROUP_MA='P1',MATER=mater['MATER']))
+           mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER']))
+         elif (len(mc_AFFE_MATERIAU)==1) and (CL_BOL_P2_GV==None) :
+           mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER']))
+       elif (mater['BOL'     ][:3]=='BOL'  ) and (CL_BOL_P2_GV==None) :
+         mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER']))
+
+  __affmat = AFFE_MATERIAU( MAILLAGE = MAILLAGE ,
+                          MODELE   = modele ,
+                          AFFE     = mcfact    )
+
+#------------------------------------------------------------------
+#
+#     --- commande AFFE_CARA_ELEM ---
+#
+  if (TORS_P1!=None) or (CL_BOL_P2_GV==None) :
+    if CARA_ELEM!=None : self.DeclareOut('carael',CARA_ELEM)
+    motscles={}
+    motscles['DISCRET']=[]
+    if (TORS_P1!=None)      : motscles['DISCRET'].append(_F( GROUP_MA='P1' ,
+                                                             CARA    ='K_TR_D_N',
+                                                             VALE    = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ),)
+    if (CL_BOL_P2_GV==None) : motscles['DISCRET'].append(_F( GROUP_MA='P2' ,
+                                                             CARA    ='K_TR_D_N',
+                                                             VALE    = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ),)
+
+    carael = AFFE_CARA_ELEM( MODELE   = modele ,**motscles)
+#
+  if ECHANGE!=None :
+#------------------------------------------------------------------
+#
+#     --- commande AFFE_CHAR_THER_F ---
+#         condition aux limites
+#
+     __chther = AFFE_CHAR_THER_F( MODELE = __modthe ,
+                                  ECHANGE= _F(GROUP_MA='PEAUINT',
+                                              COEF_H  =ECHANGE['COEF_H'],
+                                              TEMP_EXT=ECHANGE['TEMP_EXT'],), )
+#------------------------------------------------------------------
+#
+#     --- calcul thermique ---
+#
+     if RESU_THER!=None : self.DeclareOut('resuth',RESU_THER)
+     mcsimp={}
+     if INCREMENT['NUME_INST_INIT']!=None : mcsimp['NUME_INST_INIT']=INCREMENT['NUME_INST_INIT']
+     if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_INST_FIN' ]=INCREMENT['NUME_INST_FIN' ]
+     mcfact=_F(LIST_INST=INCREMENT['LIST_INST'],**mcsimp)
+     resuth = THER_LINEAIRE( MODELE     = __modthe ,
+                             CHAM_MATER = __affmat ,
+                             ETAT_INIT  = _F(STATIONNAIRE='OUI',),
+                             EXCIT      = _F(CHARGE=__chther,),
+                             INCREMENT  = mcfact, )
+#
+#------------------------------------------------------------------
+#
+#     --- commande AFFE_MATERIAU (mécanique)---
+#
+  if CHAM_MATER!=None : self.DeclareOut('affmth',CHAM_MATER)
+  indther= ECHANGE
+  mcfact=[]
+  mcfac2=[]
+  for mater in mc_AFFE_MATERIAU :
+     if mater['TOUT']!=None :
+       mcfact.append(_F(TOUT    =mater['TOUT'    ],MATER=mater['MATER'],))
+       if indther:
+         mcfac2.append(_F(NOM_VARC='TEMP',TOUT='OUI',
+                        EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
+       rccmat = mater['MATER']
+     else                   :
+       mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],))
+       if indther:
+         mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA=mater['GROUP_MA'],
+                        EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
+       if    mater['GROUP_MA'][:5]=='COUDE' :
+         if TORS_P1!=None :
+           mcfact.append(_F(GROUP_MA='P1',MATER=mater['MATER'],))
+           mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],))
+           if indther:
+             mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA='P1',
+                            EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
+             mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA='P2',
+                            EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
+         elif (len(mc_AFFE_MATERIAU)==1) and (CL_BOL_P2_GV==None) :
+           mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],))
+           if indther:
+             mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA='P2',
+                            EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
+       elif (mater['BOL'     ][:3]=='BOL'  ) and (CL_BOL_P2_GV==None) :
+         mcfact.append(_F(GROUP_MA='P2',MATER=mater['MATER'],))
+         if indther:
+           mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA='P2',
+                          EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF'],),)
+
+
+  affmth = AFFE_MATERIAU( MAILLAGE = MAILLAGE ,
+                          MODELE   = modele ,
+                          AFFE     = mcfact,
+                          AFFE_VARC= mcfac2,)
+
+
+
+
+#------------------------------------------------------------------
+#
+#     --- commande AFFE_CHAR_MECA ---
+#         condition aux limites de type raccord 3d-poutre
+#         ou bien blocage de mouvements rigides en cas d embout
+#         a section conique, bol de type gv
+#
+  motscles={}
+  motscles['LIAISON_ELEM']=[]
+  if TORS_P1!=None :
+    motscles['LIAISON_ELEM'].append(_F( OPTION    ='3D_POU'  ,
+                                         GROUP_MA_1='EXTUBE',
+                                         GROUP_NO_2='P1') )
+  if CL_BOL_P2_GV==None :
+    motscles['LIAISON_ELEM'].append(_F( OPTION    ='3D_POU'  ,
+                                         GROUP_MA_1='CLGV',
+                                         GROUP_NO_2='P2') )
+    motscles['DDL_IMPO'    ]=_F( GROUP_NO  ='P2' ,
+                                 DX        = 0.0 ,
+                                 DY        = 0.0 ,
+                                 DZ        = 0.0 ,
+                                 DRX       = 0.0 ,
+                                 DRY       = 0.0 ,
+                                 DRZ       = 0.0 , )
+  else :
+    motscles['FACE_IMPO'   ]=_F( GROUP_MA  ='CLGV' ,
+                                 DNOR      = 0.0 , )
+    ALPHA  = CL_BOL_P2_GV['ANGLE' ]
+    AZIM   = CL_BOL_P2_GV['AZIMUT']
+    ALPHAR = ALPHA*pi/180.0
+    AZIMR  = AZIM *pi/180.0
+    DDLB1  = []
+    COEFB1 = []
+    if (AZIM!=0.0) and (AZIM!=180.0) and (ALPHA!=90.0) :
+      DDLB1.append('DX')
+      COEFB1.append(SIN(AZIMR)*COS(ALPHAR))
+    if (AZIM!=90.0) :
+      DDLB1.append('DY')
+      COEFB1.append(COS(AZIMR))
+    if (AZIM!=0.) and (AZIM!=180.) and (ALPHA!=0.):
+      DDLB1.append('DZ')
+      COEFB1.append(-SIN(AZIMR)*SIN(ALPHAR))
+    POINT=['BOUT1',]*len(DDLB1)
+    motscles['LIAISON_DDL']=_F( GROUP_NO  = POINT  ,
+                                DDL       = DDLB1  ,
+                                COEF_MULT = COEFB1 ,
+                                COEF_IMPO = 0.0    , )
+
+  _conlim = AFFE_CHAR_MECA( MODELE   = modele ,**motscles)
+#
+#     --- commande AFFE_CHAR_MECA ---
+#         chargement mecanique :  pres_rep, effet de fond
+#
+  if PRES_REP!=None :
+    motscles={}
+    if (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[:4]=='FISS') :
+      motscles['PRES_REP']=_F( GROUP_MA  = ('PEAUINT','FACE1','FACE2') ,
+                               PRES      = PRES_REP['PRES'] ,)
+    else :
+      motscles['PRES_REP']=_F( GROUP_MA  = 'PEAUINT',
+                               PRES      = PRES_REP['PRES'] ,)
+    if PRES_REP['EFFE_FOND_P1']!='NON' :
+      motscles['EFFE_FOND']=_F( GROUP_MA_INT  = 'BORDTU'  ,
+                                GROUP_MA      = 'EXTUBE'  ,
+                                PRES          = PRES_REP['PRES'] ,)
+#
+    _chpres = AFFE_CHAR_MECA( MODELE   = modele ,**motscles)
+#
+#     --- commande AFFE_CHAR_MECA ---
+#         chargement mecanique : torseur d efforts
+#
+  if TORS_P1!=None :
+    _chtor = [None]*6
+    i=0
+    for tors in TORS_P1:
+      mcsimp={}
+      if tors['FX']!=None : mcsimp['FX']=tors['FX']
+      if tors['FY']!=None : mcsimp['FY']=tors['FY']
+      if tors['FZ']!=None : mcsimp['FZ']=tors['FZ']
+      if tors['MX']!=None : mcsimp['MX']=tors['MX']
+      if tors['MY']!=None : mcsimp['MY']=tors['MY']
+      if tors['MZ']!=None : mcsimp['MZ']=tors['MZ']
+      mcfact=_F(GROUP_NO='P1',**mcsimp)
+      _chtor[i] = AFFE_CHAR_MECA( MODELE       = modele ,
+                                  FORCE_NODALE = mcfact , )
+      i=i+1
+#
+#     --- commande AFFE_CHAR_MECA ---
+#         chargement mecanique :  verif contact levres
+#
+  if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
+    _chcont = DEFI_CONTACT( MODELE      = modele ,
+                            FORMULATION = 'DISCRETE',
+                            TOLE_INTERP = -1.E-6,
+                            ZONE =_F(GROUP_MA_MAIT = 'FACE1',
+                                     GROUP_MA_ESCL = 'FACE2',
+                                     ALGO_CONT     = 'VERIF',
+                                     GROUP_MA_FOND = 'FONDFISS'),)
+#
+#     --- commande STAT_NON_LINE ---
+#
+  motscles={}
+#
+  mcfex=[]  # mot clé facteur EXCIT
+  mcfex.append(_F(CHARGE=_conlim,))
+  if PRES_REP!=None:
+    if PRES_REP['FONC_MULT']!=None :
+      mcfex.append(_F(CHARGE=_chpres,FONC_MULT=PRES_REP['FONC_MULT']))
+    else :
+      mcfex.append(_F(CHARGE=_chpres,))
+  if TORS_P1!=None:
+     i=0
+     for tors in TORS_P1 :
+       if tors['FONC_MULT']!=None :
+          mcfex.append(_F(CHARGE=_chtor[i],FONC_MULT=tors['FONC_MULT']))
+       else :
+          mcfex.append(_F(CHARGE=_chtor[i],))
+       i=i+1
+
+  contact = None          
+  if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
+    contact = _chcont  
+  motscles['EXCIT'] =mcfex
+#
+  mcfci=[]  # mot clé facteur COMP_INCR :obligatoire pour les noeuds discrets
+  if COMP_INCR!=None :
+    mcfci.append(_F(TOUT='OUI' ,RELATION=COMP_INCR['RELATION']))
+  elif COMP_ELAS!=None :
+    motscles['COMP_ELAS'] =_F(GROUP_MA='COUDE',RELATION=COMP_ELAS['RELATION'])
+    if TORS_P1!=None     : mcfci.append(  _F(GROUP_MA='P1',RELATION='ELAS'))
+    if CL_BOL_P2_GV==None: mcfci.append(  _F(GROUP_MA='P2',RELATION='ELAS'))
+  motscles['COMP_INCR'] =mcfci
+#
+  dSolveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
+  for i in dSolveur.keys():
+      if dSolveur[i]==None : del dSolveur[i]
+#
+  dConverg=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
+  for i in dConverg.keys():
+      if dConverg[i]==None : del dConverg[i]
+#
+  dNewton=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
+  for i in dNewton.keys():
+      if dNewton[i]==None : del dNewton[i]
+#
+  dRechlin = {}
+  if RECH_LINEAIRE != None:
+     dRechlin=RECH_LINEAIRE[0].cree_dict_valeurs(RECH_LINEAIRE[0].mc_liste)
+     for i in dRechlin.keys():
+         if dRechlin[i]==None : del dRechlin[i]
+#
+  dIncrem=INCREMENT[0].cree_dict_valeurs(INCREMENT[0].mc_liste)
+  for i in dIncrem.keys():
+      if dIncrem[i]==None : del dIncrem[i]
+#
+  if TITRE!=None :
+    motscles['TITRE'        ] =TITRE
+  motscles  ['SOLVEUR'      ] =dSolveur
+  motscles  ['CONVERGENCE'  ] =dConverg
+  motscles  ['NEWTON'       ] =dNewton
+  motscles  ['RECH_LINEAIRE'] =dRechlin
+  motscles  ['INCREMENT'    ] =dIncrem
+  self.DeclareOut('nomres',self.sd)
+  
+  if contact==None:
+    nomres = STAT_NON_LINE( MODELE     = modele ,
+                            CHAM_MATER = affmth ,
+                            CARA_ELEM  = carael ,
+                            INFO       = INFO   , **motscles)
+  else :
+    nomres = STAT_NON_LINE( MODELE     = modele ,
+                            CHAM_MATER = affmth ,
+                            CARA_ELEM  = carael ,
+                            CONTACT    = contact,
+                            INFO       = INFO   , **motscles)   
+#
+#     --- commande CALC_ELEM ---
+#
+  nomres = CALC_ELEM( reuse      = nomres,
+                      RESULTAT   = nomres ,
+                      MODELE     = modele ,
+                      TOUT_ORDRE = 'OUI'  ,
+                      OPTION     = ('SIEF_ELNO_ELGA','EQUI_ELNO_SIGM') ,
+                      INFO       = INFO   ,)
+#
+#     --- post-traitements ---
+#
+  if TYPE_MAILLAGE=='SOUS_EPAIS_COUDE':
+#
+#     --- post traitement sous-epaisseurs:  ligaments  ---
+#
+     if mc_IMPR_TABLE!=None:
+#
+      SECT=('MI','TU','GV')
+      LIG=('FDRO','EXDR','EXTR','EXGA','FGAU','INGA','INTR','INDR')
+      if   mc_IMPR_TABLE['POSI_ANGUL']==None:
+         ASEP=(mc_IMPR_TABLE['POSI_CURV_LONGI']/mc_IMPR_TABLE['R_CINTR'])*(180./pi)
+      else :
+         ASEP=mc_IMPR_TABLE['POSI_ANGUL']
+#
+#     moyenne_rccm, invariant et moyenne sur les ligaments dans
+#     l epaisseur
+#
+      l_grno=MAILLAGE.LIST_GROUP_NO()
+      tabprl=[None]*4
+      tablig=[None]*4
+#
+#     prelevements des ligaments circonferentiels et longitudinaux
+#     de la sous-epaisseur
+#
+      lgrno=[]
+      for tgrno in l_grno :
+        if tgrno[0][:3] in ('CIR','LON')    : lgrno.append(tgrno[0])
+        elif tgrno[0][:5]=='PCENT'          : lgrno.append(tgrno[0])
+        elif (tgrno[0][:4] in LIG) and (tgrno[0][4:6] not in ('GV','TU','MI')): lgrno.append(tgrno[0])
+#
+      motscles={}
+      motscles['ACTION']=[]
+      for grno in lgrno :
+         motscles['ACTION'].append(_F(RESULTAT=nomres,
+                                      NOM_CHAM='SIEF_ELNO_ELGA',
+                                      TOUT_CMP='OUI',
+                                      INTITULE=grno,
+                                      GROUP_NO=grno,
+                                      OPERATION='EXTRACTION',))
+      motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
+      tabprl[1]=POST_RELEVE_T(**motscles)
+      tablig[1]=POST_RCCM(MATER          = rccmat,
+                          TYPE_RESU_MECA = 'EVOLUTION',
+                          OPTION         = 'PM_PB',
+                          TRANSITOIRE=_F(TABL_RESU_MECA = tabprl[1],),)
+#
+      motscles={}
+      motscles['ACTION']=[]
+      for tgrno in lgrno :
+         motscles['ACTION'].append(_F(RESULTAT=nomres,
+                                      NOM_CHAM='SIEF_ELNO_ELGA',
+                                      INTITULE=tgrno,
+                                      GROUP_NO=tgrno,
+                                      INVARIANT='OUI',
+                                      OPERATION='EXTRACTION',))
+      motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
+
+      tablig[2]=POST_RELEVE_T(**motscles)
+#
+      motscles={}
+      nommail=MAILLAGE.nom
+      coord   =aster.getvectjev(nommail.ljust(8)+'.COORDO    .VALE')
+      linomno =aster.getvectjev(nommail.ljust(8)+'.NOMNOE')
+      collgrno=aster.getcolljev(nommail.ljust(8)+'.GROUPENO')
+
+      motscles['ACTION']=[]
+      for tgrno in lgrno :
+         if tgrno[:3]!='LON' :
+          if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
+          else                                   : vecty=(sin(ASEP*pi/180.),0.,cos(ASEP*pi/180.))
+         else :
+          if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
+          else :
+                 grpn=collgrno['FGAUTU  ']
+                 LT1=coord[3*(grpn[0]-1)+2]
+                 for node in grpn:
+                  X = coord[3*(node-1)]
+                  Y = coord[3*(node-1)+1]
+                  Z = coord[3*(node-1)+2]
+                  RCIN = mc_IMPR_TABLE['R_CINTR']
+                  if   Z<LT1                           : ANGSEC=0.
+                  elif X<(-1*RCIN) : ANGSEC=mc_IMPR_TABLE['ANGLE']*pi/180.
+                  else :
+                      VCOS = cos((-LT1-Z)/(sqrt((X+RCIN)**2+Y**2 )))
+                      VSIN = sin((-LT1-Z)/(sqrt((X+RCIN)**2+Y**2 )))
+                      ANGSEC = atan2(VSIN,VCOS)
+                 vecty=(sin(ANGSEC),0.,cos(ANGSEC))
+         motscles['ACTION'].append(_F(RESULTAT=nomres,
+                                      NOM_CHAM='SIEF_ELNO_ELGA',
+                                      INTITULE=tgrno,
+                                      GROUP_NO=tgrno,
+                                      NOM_CMP=('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ',),
+                                      REPERE='LOCAL',
+                                      VECT_Y=vecty,
+                                      OPERATION='MOYENNE',))
+      motscles['TITRE']='TABLE DE POST-TRAITEMENT SECTION SOUS-EPAISSEUR'
+      tablig[3]=POST_RELEVE_T(**motscles)
+#
+#     prelevements des ligaments sur les sections MI,TU et GV
+#     les 8 ligaments sont tous les 45 degres
+#
+      ACOUR = mc_IMPR_TABLE['ANGLE']*pi/180.0
+      secprl=[None]*3
+      secrcm=[None]*3
+      secinv=[None]*3
+      secmoy=[None]*3
+      for i in range(3):
+         if mc_IMPR_TABLE['TRANSFORMEE']=='TUBE': vecty=(0.,0.,1.)
+         else :
+             if i==0  : vecty=(sin(ACOUR/2.),0.,cos(ACOUR/2.))
+             if i==1  : vecty=(0.,0.,1.)
+             if i==2  : vecty=(sin(ACOUR),0.,cos(ACOUR))
+         motscles = {}
+         motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE RCCM SECTION '+SECT[i]
+#
+#        moyenne RCCM sur les sections MI,TU et GV
+#
+         motscles={}
+         motscles['ACTION']=[]
+         for j in range(8) :
+            motscles['ACTION'].append(_F(RESULTAT=nomres,
+                                         NOM_CHAM='SIEF_ELNO_ELGA',
+                                         TOUT_CMP='OUI',
+                                         INTITULE=LIG[j]+SECT[i],
+                                         GROUP_NO=LIG[j]+SECT[i],
+                                         OPERATION='EXTRACTION',))
+         motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE RCCM SECTION '+SECT[i]
+         secprl[i]=POST_RELEVE_T(**motscles)
+         secrcm[i]=POST_RCCM(MATER          = rccmat,
+                             TYPE_RESU_MECA = 'EVOLUTION',
+                             OPTION         = 'PM_PB',
+                             TRANSITOIRE=_F(TABL_RESU_MECA = secprl[i],),)
+#
+#        invariants sur les sections MI,TU et GV
+#
+         motscles = {}
+         motscles['TITRE']='TABLE DE POST-TRAITEMENT INVARIANTS SECTION '+SECT[i]
+         motscles['ACTION']=[]
+         for j in range(8) : motscles['ACTION'].append(_F(INTITULE =LIG[j]+SECT[i],
+                                                          GROUP_NO =LIG[j]+SECT[i],
+                                                          RESULTAT =nomres,
+                                                          NOM_CHAM ='SIEF_ELNO_ELGA',
+                                                          INVARIANT='OUI',
+                                                          OPERATION='EXTRACTION'))
+         secinv[i] = POST_RELEVE_T(**motscles)
+#
+#        moyennes contraintes sur les sections MI,TU et GV
+#
+         motscles = {}
+         motscles['TITRE']='TABLE DE POST-TRAITEMENT MOYENNE SECTION '+SECT[i]
+         motscles['ACTION']=[]
+         for j in range(8) : motscles['ACTION'].append(_F(INTITULE =LIG[j]+SECT[i],
+                                                          REPERE   ='LOCAL',
+                                                          VECT_Y   =vecty,
+                                                          GROUP_NO =LIG[j]+SECT[i],
+                                                          RESULTAT =nomres,
+                                                          NOM_CHAM ='SIEF_ELNO_ELGA',
+                                                          NOM_CMP  =('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ'),
+                                                          OPERATION='MOYENNE'))
+         secmoy[i] = POST_RELEVE_T(**motscles)
+
+#
+#     impression des valeurs maximales pour chaque sous-epaisseur
+#
+      if mc_IMPR_TABLE['TOUT_PARA']=='OUI' :
+             list_para=['TRESCA_MEMBRANE','TRESCA_MFLE','TRESCA','SI_LONG','SI_RADI','SI_CIRC']
+      else : list_para=mc_IMPR_TABLE['NOM_PARA']
+      if 'TRESCA_MEMBRANE' in list_para:
+        IMPR_TABLE(TABLE    = tablig[1],
+                   FILTRE   = _F( NOM_PARA  ='PM', CRIT_COMP ='MAXI'),
+                   NOM_PARA = ('INTITULE','PM'));
+      if 'TRESCA_MFLE'     in list_para:
+        IMPR_TABLE(TABLE    = tablig[1],
+                   FILTRE   =(_F( NOM_PARA ='LIEU',VALE_K   ='ORIG'),
+                              _F( NOM_PARA ='PMB', CRIT_COMP='MAXI'),),
+                   NOM_PARA = ('INTITULE','PMB'));
+        IMPR_TABLE(TABLE    = tablig[1],
+                   FILTRE   =(_F( NOM_PARA='LIEU', VALE_K  ='EXTR'),
+                              _F( NOM_PARA ='PMB', CRIT_COMP='MAXI'),),
+                   NOM_PARA = ('INTITULE','PMB'));
+      if 'SI_RADI'         in list_para:
+        IMPR_TABLE(TABLE    = tablig[3],
+                   FILTRE   =(_F( NOM_PARA='QUANTITE',VALE_K  ='MOMENT_0'),
+                              _F( NOM_PARA ='SIXX',   CRIT_COMP='MAXI'),),
+                   NOM_PARA = ('INTITULE','SIXX'));
+      if 'SI_LONG'         in list_para:
+        IMPR_TABLE(TABLE    = tablig[3],
+                   FILTRE   =(_F( NOM_PARA='QUANTITE',VALE_K  ='MOMENT_0'),
+                              _F( NOM_PARA ='SIYY',   CRIT_COMP='MAXI'),),
+                   NOM_PARA = ('INTITULE','SIYY'));
+      if 'SI_CIRC'         in list_para:
+        IMPR_TABLE(TABLE    = tablig[3],
+                   FILTRE   =(_F( NOM_PARA='QUANTITE',VALE_K  ='MOMENT_0'),
+                              _F( NOM_PARA ='SIZZ',   CRIT_COMP='MAXI'),),
+                   NOM_PARA = ('INTITULE','SIZZ'));
+      if 'TRESCA'          in list_para:
+        IMPR_TABLE(TABLE      = tablig[2],
+                   NOM_PARA   = ('INTITULE','NOEUD','TRESCA',),
+                   PAGINATION = 'INTITULE',
+                   FILTRE     = _F( NOM_PARA   = 'TRESCA',
+                                    CRIT_COMP  = 'MAXI'     ) )  ;
+#
+#     impression des resultats pour chaque sous-epaisseur
+#
+      if 'TRESCA_MEMBRANE' in list_para:
+        IMPR_TABLE(TABLE    = tablig[1],
+                   FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='ORIG'),
+                   NOM_PARA = ('INTITULE','PM'));
+      if 'TRESCA_MFLE'     in list_para:
+        IMPR_TABLE(TABLE    = tablig[1],
+                   FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='ORIG'),
+                   NOM_PARA = ('INTITULE','PMB'));
+        IMPR_TABLE(TABLE    = tablig[1],
+                   FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='EXTR'),
+                   NOM_PARA = ('INTITULE','PMB'));
+      if 'SI_RADI'         in list_para:
+        IMPR_TABLE(TABLE    = tablig[3],
+                   FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
+                   NOM_PARA = ('INTITULE','SIXX'));
+      if 'SI_LONG'         in list_para:
+        IMPR_TABLE(TABLE    = tablig[3],
+                   FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
+                   NOM_PARA = ('INTITULE','SIYY'));
+      if 'SI_CIRC'         in list_para:
+        IMPR_TABLE(TABLE    = tablig[3],
+                   FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
+                   NOM_PARA = ('INTITULE','SIZZ'));
+      if 'TRESCA'          in list_para:
+        IMPR_TABLE(TABLE      = tablig[2],
+                   NOM_PARA   = ('INTITULE','NOEUD','TRESCA',),
+                   PAGINATION = 'INTITULE');
+#
+#     impression des resultats pour les sections MI, TU et GV
+#
+      for k in range(3):
+       if 'TRESCA_MEMBRANE' in list_para:
+         IMPR_TABLE(TABLE    = secrcm[k],
+                    FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='ORIG'),
+                    NOM_PARA = ('INTITULE','PM'));
+       if 'TRESCA_MFLE'     in list_para:
+         IMPR_TABLE(TABLE    = secrcm[k],
+                    FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='ORIG'),
+                    NOM_PARA = ('INTITULE','PMB'));
+         IMPR_TABLE(TABLE    = secrcm[k],
+                    FILTRE   = _F( NOM_PARA='LIEU', VALE_K  ='EXTR'),
+                    NOM_PARA = ('INTITULE','PMB'));
+       if 'SI_RADI'         in list_para:
+         IMPR_TABLE(TABLE    = secmoy[k],
+                    FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
+                    NOM_PARA = ('INTITULE','SIXX'));
+       if 'SI_LONG'         in list_para:
+         IMPR_TABLE(TABLE    = secmoy[k],
+                    FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
+                    NOM_PARA = ('INTITULE','SIYY'));
+       if 'SI_CIRC'         in list_para:
+         IMPR_TABLE(TABLE    = secmoy[k],
+                    FILTRE   = _F( NOM_PARA='QUANTITE', VALE_K  ='MOMENT_0'),
+                    NOM_PARA = ('INTITULE','SIZZ'));
+       if 'TRESCA'          in list_para:
+         IMPR_TABLE(TABLE      = secinv[k],
+                    NOM_PARA   = ('INTITULE','NOEUD','TRESCA',),
+                    PAGINATION = 'INTITULE');
+#
+  if TYPE_MAILLAGE in ('FISS_COUDE','FISS_AXIS_DEB'):
+#
+#   --- post traitement fissure :  interpénétration des lèvres ----
+#
+    __tcont=POST_RELEVE_T( ACTION=_F(  INTITULE = 'Contact levres',
+                                GROUP_NO = 'FACE2',
+                                RESULTAT = nomres,
+                                TOUT_ORDRE = 'OUI',
+                                NOM_CHAM = 'VALE_CONT',
+                                NOM_CMP = 'CONT',
+                                OPERATION = 'EXTRACTION'))
+    tcont=__tcont.EXTR_TABLE()
+    numo = tcont['NUME_ORDRE'].values()['NUME_ORDRE']
+    numo=dict([(i,0) for i in numo]).keys()
+    nbinst = len(numo)
+    for i in range(1,nbinst+1) :
+      tabi = tcont.NUME_ORDRE==i
+      nbtot = len(tabi)
+      cont_actif=tabi.CONT>0.
+      nb_no_cont = len(cont_actif)
+      if nb_no_cont > 0 :
+         UTMESS('A','ASCOUF0_58',vali=[i,nbtot,nb_no_cont])
+#
+#   --- post traitement fissure :  calcul de g ----
+#
+    motscles = {}
+    if FOND_FISS != None : self.DeclareOut('fonfis',FOND_FISS)
+    if TYPE_MAILLAGE =='FISS_COUDE' :
+       motscles['FOND_FISS']=_F(GROUP_NO='FONDFISS')
+       motscles['VECT_GRNO_ORIG']= ('PFOR','THOR')
+       motscles['VECT_GRNO_EXTR']= ('PFEX','THEX')
+    else :
+       motscles['FOND_FERME']=_F(GROUP_MA='FONDFISS',
+                                 GROUP_NO_ORIG='PFOR',
+                                 GROUP_MA_ORIG='MAIL_ORI')
+    fonfis=DEFI_FOND_FISS(MAILLAGE=MAILLAGE,
+                          LEVRE_SUP=_F(GROUP_MA='FACE1'),
+                          LEVRE_INF=_F(GROUP_MA='FACE2'),
+                          INFO=INFO,**motscles
+                          );
+    if THETA_3D!=None :
+      for thet in THETA_3D:
+        _nothet=CALC_THETA(MODELE=modele,
+                           FOND_FISS=fonfis,
+                           THETA_3D=_F(TOUT   = 'OUI',
+                                       MODULE = 1.,
+                                       R_INF  = thet['R_INF'],
+                                       R_SUP  = thet['R_SUP'],),
+                           );
+        motscles = {}
+        if COMP_INCR!=None : motscles['COMP_INCR']=_F(RELATION=COMP_INCR['RELATION'])
+        if COMP_ELAS!=None : motscles['COMP_ELAS']=_F(RELATION=COMP_ELAS['RELATION'])
+        _nogthe=CALC_G( RESULTAT   =nomres,
+                        OPTION='CALC_G_GLOB',
+                        TOUT_ORDRE ='OUI',
+                        THETA      =_F(THETA=_nothet),**motscles);
+#
+        IMPR_TABLE(TABLE=_nogthe,);
+#
+      for thet in THETA_3D:
+        motscles = {}
+        if COMP_INCR!=None : motscles['COMP_INCR']=_F(RELATION=COMP_INCR['RELATION'])
+        if COMP_ELAS!=None : motscles['COMP_ELAS']=_F(RELATION=COMP_ELAS['RELATION'])
+        if   TYPE_MAILLAGE =='FISS_COUDE' :
+                             motscles['LISSAGE']=_F(LISSAGE_THETA='LEGENDRE',
+                                                    LISSAGE_G='LEGENDRE',
+                                                    DEGRE=4,)
+        elif TYPE_MAILLAGE =='FISS_AXIS_DEB' :
+                             motscles['LISSAGE']=_F(LISSAGE_THETA='LAGRANGE',
+                                                    LISSAGE_G='LAGRANGE',
+                                                    DEGRE=4,)
+        _nogloc=CALC_G (RESULTAT   =nomres,
+                        TOUT_ORDRE ='OUI',
+                        THETA=_F( FOND_FISS  =fonfis,
+                                  R_INF      = thet['R_INF'],
+                                  R_SUP      = thet['R_SUP'],),**motscles);
+
+        IMPR_TABLE(TABLE=_nogloc,);
+#
+#     --- commande IMPR_RESU  ---
+#
+  if IMPRESSION!=None:
+    mcfresu =[]
+    motscles={}
+    if IMPRESSION['FORMAT']=='IDEAS' :
+                                  motscles['VERSION'   ]= IMPRESSION['VERSION']
+    if IMPRESSION['FORMAT']=='CASTEM' :
+                                  motscles['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
+    mcfresu.append(_F(MAILLAGE=MAILLAGE,RESULTAT=nomres,))
+    if ECHANGE!=None:
+      motscles={}
+      if IMPRESSION['FORMAT']=='IDEAS' :
+                                    motscles['VERSION'   ]= IMPRESSION['VERSION']
+      if IMPRESSION['FORMAT']=='CASTEM' :
+                                    motscles['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
+      mcfresu.append(_F(RESULTAT=resuth,))
+    IMPR_RESU( MODELE = modele,
+               RESU   = mcfresu,
+               FORMAT=IMPRESSION['FORMAT'],**motscles)
+#
+  return ier
diff --git a/Aster/Cata/cataSTA10/Macro/macr_ascouf_mail_ops.py b/Aster/Cata/cataSTA10/Macro/macr_ascouf_mail_ops.py
new file mode 100644 (file)
index 0000000..9305fd0
--- /dev/null
@@ -0,0 +1,2632 @@
+#@ MODIF macr_ascouf_mail_ops Macro  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+
+import os.path
+from math import sqrt,cos,sin,pi,tan,log,fabs,ceil,fmod,floor
+import string
+
+try:
+   import aster
+   from Utilitai.Utmess     import  UTMESS
+except:
+   pass
+
+# ------------------------------------------------------------------------------
+def ASCFON(RC,RM,EP,ORIEN,AZIM,AXEC,POS,Y):
+  """
+  FONCTION F(CP)=CC
+  OU CC EST LA TAILLE DE LA FISSURE SUR LE COUDE 
+  ET CP LA TAILLE DE FISSURE SUR LA PLAQUE
+  """
+  AZIMR = AZIM*2.*pi/360.
+  if POS=='DEB_INT': X = RM-EP/2.
+  else             : X = RM+EP/2.
+  if abs(ORIEN-45.0)<0.01: SIG =  1.
+  else                   : SIG = -1.
+  f_ASCFON = - SIG*X*RC/(2.*RM*sin(AZIMR)) * (                       \
+                  log ( RM/X+RM/RC*(cos(AZIMR)-                      \
+                         sin(AZIMR)*SIG*Y/(sqrt(2.)*RM)) +           \
+                        sqrt( 1.+( RM/X+RM/RC*(cos(AZIMR)-           \
+                         sin(AZIMR)*SIG*Y/(sqrt(2.)*RM)) )**2 )      \
+                       )                                             \
+                  - log ( RM/X+RM/RC*cos(AZIMR)                      \
+                       + sqrt( 1. +(RM/X+RM/RC*cos(AZIMR))**2)       \
+                                            )      )                 \
+               - SIG*X*RC/(2.*RM*SIN(AZIMR)) *                       \
+      (    ( RM/X+RM/RC* ( cos(AZIMR)-                               \
+                           sin(AZIMR)*SIG*Y/(sqrt(2.0)*RM) )         \
+                    )  * sqrt( 1. + ( RM/X+RM/RC*(cos(AZIMR)-        \
+                         sin(AZIMR)*SIG*Y/(SQRT(2.)*RM)) )**2 )      \
+                    - ( RM/X+RM/RC*COS(AZIMR) )                      \
+                       * sqrt( 1. +(RM/X+RM/RC*cos(AZIMR))**2)       \
+                                                  )                  \
+                    - 2.0*AXEC 
+  return f_ASCFON
+
+# ------------------------------------------------------------------------------
+def ASCFIS(ALPHA, RM, RC, EP, SUREP, GEOM, AXEA,
+           AXEC, AZIM, POS, SF, DSF, BETA, ORIEN):
+  """
+  MACR_ASCOUF_MAIL ASCFIS
+  taille initiale du defaut fissure sur la plaque en
+  fonction des donnees sur le coude ou le tube suivant la
+  transformation choisie
+
+  ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
+
+  ALPHA = ANGLE DU COUDE
+  RM    = RAYON MOYEN DU COUDE
+  RC    = RAYON DE CINTRAGE DU COUDE
+  EP    = EPAISSEUR DU COUDE
+  SUREP = VALEUR DE LA SUREPAISSEUR
+  GEOM  = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)   
+  AXEA  = PROFONDEUR FISSURE (DEMI PETIT AXE)
+  AXEC  = DEMI GRAND AXE FISSURE
+  AZIM  = POSITION AZIMUTALE DU CENTRE DE LA FISSURE 
+  POS   = POSITION EN PEAU (EXTERNE OU INTERNE)
+  SF    = ABCISSE CURVILIGNE LONGITUDINALE DU CENTRE DE LA FISSURE
+  DSF   = BOOLEEN EXPRESSION POSITION CENTRE FISSURE 
+  BETA  = POSITION ANGULAIRE DU CENTRE DE LA FISSURE
+  ORIEN = ORIENTATION DE LA FISSURE
+
+  -----------------DONNEES RENVOYEES-----------------------
+
+  AXEAP = PROFONDEUR DE LA FISSURE (PETIT AXE) SUR LA PLAQUE
+  AXECP = LONGUEUR DE LA FISSURE (GRAND AXE) SUR LA PLAQUE
+  SFP   = ABCISSE CURVILIGNE LONGITUDINALE CENTRE FISSURE
+          SUR LA PLAQUE
+
+  """
+  from Utilitai import funct_root
+  echo_mess=['MACR_ASCOUF_MAIL ASCFIS \n',]
+  if POS=='DEB_INT':
+     if (AZIM>=120.) and (AZIM<=240.0): X = RM-EP/2.0 - SUREP
+     else:                              X = RM-EP/2.0
+  else:                                 X = RM+EP/2.0
+  AZIMR = AZIM*2.0*pi/360.0 
+#
+# -- CALCUL COTE AXIALE DU CENTRE FISSURE SUR LA PLAQUE EN FONCTION
+#    DE L ABSCISSE CURVILIGNE DONNEE SUR LE COUDE OU DE LA POSITION
+#    ANGULAIRE 
+#
+  if DSF:
+    if GEOM=='COUDE': SFP = SF/(1.0+X/RC*cos(AZIMR))
+    else :            SFP = SF
+  else :
+    BETAR = BETA*2.0*pi/360.0
+    if (GEOM=='COUDE'):
+       SF  = BETAR*(RC+X*cos(AZIMR))
+       SFP = SF/(1.0+X/RC*cos(AZIMR))
+    else:
+       SF  = BETAR*RC
+       SFP = SF
+  if (GEOM=='COUDE'): echo_mess.append( 'COTE AXIALE CENTRE FISSURE SUR COUDE : %.2f \n'%SF)
+  if (GEOM=='TUBE') : echo_mess.append( 'COTE AXIALE CENTRE FISSURE SUR TUBE  : %.2f \n'%SF )
+  echo_mess.append( 'COTE AXIALE CENTRE FISSURE SUR PLAQUE : %.2f \n'%SFP)
+#
+#   ON ENVISAGE LE CAS OU UNE PARTIE DE L AXE EST DANS LES
+#   DROITES DES EMBOUTS. LA TRANSFORMATION N EST FAITE QUE SUR LA 
+#   PARTIE RESTANT DANS LE COUDE.
+#
+  if (GEOM=='COUDE'): DIST = ALPHA*2.0*pi/360.0*(RC+X*cos(AZIMR))
+  else              : DIST = ALPHA*2.0*pi/360.0*RC
+  BCOUD = 0.0
+  BEMB  = 0.0
+  if abs(ORIEN)<0.01:
+# -- FISSURE LONGITUDINALE (0 DEGRE)
+     BSUP = SF + AXEC
+     BINF = SF - AXEC
+     if BSUP>DIST:
+       BCOUD = DIST - BINF
+       BEMB  = BSUP - DIST
+     elif BINF<0. :
+       BCOUD = BSUP 
+       BEMB  = abs(BINF)
+     elif (BINF>=0. and BSUP<=DIST):
+       BCOUD = 2.0*AXEC
+  elif abs(ORIEN-90.)<0.01:
+# -- FISSURE CIRCONFERENTIELLE (90 DEGRES)
+     BSUP = SF
+     BINF = SF
+     if BSUP>DIST:
+       BCOUD = DIST - BINF
+       BEMB  = BSUP - DIST
+     elif BINF<0. :
+       BCOUD = BSUP 
+       BEMB  = abs(BINF)
+     elif (BINF>=0. and BSUP<=DIST):
+       BCOUD = 2.0*AXEC
+  else:
+# -- FISSURE A +/- 45 DEGRES SUR INTRADOS OU EXTRADOS
+     BSUP = SF + sqrt(2.0)/2.0*AXEC
+     BINF = SF - sqrt(2.0)/2.0*AXEC
+     if BSUP>DIST:
+       BCOUD = (DIST - BINF)*sqrt(2.0)
+       BEMB  = (BSUP - DIST)*sqrt(2.0)
+     elif BINF<0. :
+       BCOUD = BSUP *sqrt(2.0)
+       BEMB  = abs(BINF)*sqrt(2.0)
+     elif (BINF>=0. and BSUP<=DIST):
+       BCOUD = 2.0*AXEC
+  echo_mess.append( 'PARTIE DU GRAND AXE DANS LE COUDE  : %.2f \n'%BCOUD)
+  echo_mess.append( 'PARTIE DU GRAND AXE DANS L EMBOUT  : %.2f \n'%BEMB)
+#
+# -- CALCUL DE LA TAILLE DU GRAND AXE FISSURE SUR LA PLAQUE
+#
+  NEWT=0
+  if abs(ORIEN)<0.01:
+# -- FISSURE LONGITUDINALE (0 DEGRE)
+    if GEOM=='COUDE': AXECP = BCOUD/(1.0+X/RC*cos(AZIMR)) + BEMB
+    else            : AXECP = BCOUD + BEMB
+  elif abs(ORIEN-90.)<0.01:
+# -- FISSURE CIRCONFERENTIELLE (90 DEGRES)
+    AXECP = (BCOUD+BEMB)*RM/X
+  else :
+    if GEOM=='COUDE':
+#   ------- TRANSFORMATION COUDE
+       if AZIM in (0.,180.):
+# -- FISSURE A +/- 45 DEGRES SUR INTRADOS OU EXTRADOS
+          AXECP = BCOUD*RM*sqrt(2.)/( X*sqrt(1.+(RM/X+RM/RC*cos(AZIMR))**2) )+\
+                  BEMB*sqrt( (1.0+(X/RM)**2)*0.5 )
+       else :
+# -- FISSURE A +/- 45 DEGRES AILLEURS
+          AXECP = funct_root.root(ASCFON,(BCOUD-1.,BCOUD+1.))
+          AXECP = AXECP + BEMB*sqrt( (1.+(X/RM)**2)*0.5 )
+          AXECC = ASCFON(AXECP)+BCOUD
+          NEWT=1
+    elif GEOM=='TUBE':
+       AXECP = (BCOUD+BEMB)*sqrt( (1.+(X/RM)**2)*0.5 ) 
+    else :
+       AXECP = BCOUD + BEMB
+#
+  if GEOM=='COUDE':
+    echo_mess.append( 'TAILLE GRAND AXE COUDE DONNE : %.2f \n'%(2.*AXEC))
+  elif GEOM=='TUBE':
+    echo_mess.append( 'TAILLE GRAND AXE TUBE  DONNE : %.2f \n'%(2.*AXEC))
+  echo_mess.append( 'TAILLE GRAND AXE PLAQUE DEDUIT : %.2f \n'%AXECP)
+  if NEWT:
+    echo_mess.append( 'METHODE DE NEWTON FISSURE A 45 DEGRES --> \n')
+    echo_mess.append( 'TAILLE GRAND AXE COUDE RECALCULE : %.2f \n'%AXECC)
+  if GEOM=='COUDE' and BEMB>0. and BSUP>DIST :
+    SFP =  ALPHA*2.*pi*RC/360. - AXECP/2. + BEMB
+    echo_mess.append( 'CORRECTION CENTRE : FISSURE A CHEVAL SUR EMBOUT \n')
+    echo_mess.append( 'ABSC. CURV. AXIALE CENTRE FISSURE SUR PLAQUE : %.2f \n'%SFP)
+  if GEOM=='COUDE' and BEMB>0. and BINF<0. :
+    SFP = + AXECP/2. - BEMB
+    echo_mess.append( 'CORRECTION CENTRE : FISSURE A CHEVAL SUR EMBOUT \n')
+    echo_mess.append( 'ABSC. CURV. AXIALE CENTRE FISSURE SUR PLAQUE : %.2f \n'%SFP)
+#
+# -- CORRECTION DU PETIT AXE DE LA FISSURE QUAND CELLE-CI SE TROUVE SUR
+#    LA ZONE DE SUREPAISSEUR
+#
+  ALPHAR = ALPHA*2.*pi/360.
+  ZSUR1  = ALPHAR*RC/10.
+  ZSUR2  = ALPHAR*RC*9./10.
+  YFISS  = (AZIMR-pi/2.)*RM
+  MU = 0.
+  if (AZIM>=120.) and (AZIM<=240.):
+     if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = 1.
+     elif (SFP<=ZSUR1):                MU = SFP/ZSUR1
+     elif (SFP>ZSUR2):                 MU = (ALPHAR*RC-SFP)/ZSUR1
+  elif (AZIM>=90.) and (AZIM<=120.):
+     if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = YFISS/(pi/6.*RM) 
+     elif (SFP<=ZSUR1):                MU = YFISS*SFP/(pi/6.*RM*ZSUR1)
+     elif (SFP>ZSUR2):                 MU = YFISS*(ALPHAR*RC-SFP)/(pi/6.*RM*ZSUR1)
+  elif (AZIM>=240.) and (AZIM<=270.):
+     if (SFP>=ZSUR1) and (SFP<=ZSUR2): MU = (YFISS-5.*pi/6.*RM)/(pi/6.*RM) 
+     elif (SFP<=ZSUR1):                MU = (YFISS-5.*pi/6.*RM)*SFP/(pi/6.*RM*ZSUR1)
+     elif (SFP>ZSUR2):                 MU = (YFISS-5.*pi/6.*RM)*(ALPHAR*RC-SFP)/(pi/6.*RM*ZSUR1)
+#
+  if SUREP!=0.:
+     AXEAP = AXEA * EP / ( EP + MU*SUREP )
+     echo_mess.append( '--> CORRECTION DUE A LA SUREPAISSEUR \n' )
+     echo_mess.append( '--> TAILLE PETIT AXE PLAQUE : %.2f \n'%AXEAP )
+  else: AXEAP = AXEA
+#
+  texte_final=string.join(echo_mess)
+  aster.affiche('MESSAGE',texte_final)
+  return AXEAP,AXECP,SFP 
+
+
+# ------------------------------------------------------------------------------
+def ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP,GEOM,SYME):
+  """
+  MACR_ASCOUF_MAIL ASCSEP
+  taille initiale sur la plaque des sous-epaisseurs
+
+  ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
+
+  ALPHA = ANGLE DU COUDE
+  RM    = RAYON MOYEN DU COUDE
+  RC    = RAYON DE CINTRAGE DU COUDE
+  EP    = EPAISSEUR DU COUDE
+  GEOM  = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)  
+  SYME  = QUART DE STRUCTURE SI 'OUI'
+  """
+  ier=0
+  CG=pi/180.
+  echo_mess=['MACR_ASCOUF_MAIL ASCSEP \n',]
+#
+# --- BOUCLE SUR L ENSEMBLE DES SOUS-EPAISSEURS
+#
+  i=0
+  for ssep in MCL_SOUS_EPAIS :
+      i=i+1
+      echo_mess.append( '-------------------------------------\n')
+      echo_mess.append( 'SOUS-EPAISSEUR NUMERO %d\n'%i)
+      echo_mess.append( '-------------------------------------\n')
+#
+# --- CAS DES SOUS-EPAISSEURS AXISYMETRIQUES 
+#
+      if ssep['TYPE']=='AXIS':
+         echo_mess.append( 'SOUS-EPAISSEUR AXISYMETRIQUE : \n')
+         echo_mess.append( 'CALCUL DE LA TAILLE LONGI ENVELOPPE EN INTRADOS (AZIMUT PI)\n')
+         ssep.ICIRP = 2.*pi*RM
+         ssep.ISCP  =    pi*RM
+         ssep.IPHIC = 180.
+         AZIMC      = pi
+      else:
+#
+# -- CALCUL DE L ABSCISSE CURVILIGNE CIRCONF.SUR LA PLAQUE  
+#    EN FONCTION DE L AZIMUT OU DE L ABSCISSE CURVIL.CIRCONF
+#    SUR LE COUDE DU CENTRE DE LA SOUS-EPAISSEUR
+#    NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
+#
+         if ssep['POSI_CURV_CIRC']!=None:
+           ssep.ISCP  = ssep['POSI_CURV_CIRC']*RM/(RM+EP/2.)
+           AZIMC      = ssep.ISCP/RM
+           ssep.IPHIC = ssep['POSI_CURV_CIRC']/(RM+EP/2.)*180./pi
+           echo_mess.append( 'AZIMUT CENTRE SOUS-EPAISSEUR (DEGRES) : %.2f \n'%ssep.IPHIC)
+         else:
+           ssep.ISCP  = ssep['AZIMUT']*pi*RM/180. 
+           AZIMC      = ssep['AZIMUT']*pi/180.
+           echo_mess.append( 'ABSC. CURV. CIRCONF. CENTRE SOUS-EPAISSEUR SUR COUDE : %.2f \n'%(AZIMC*(RM+EP/2.)))
+#
+#    PASSAGE DANS LE REPERE PLAQUE (0,2PI) AVEC ORIGINE FLANC DROIT
+#    CAR L ORIGINE DES DONNEES CIRCONF. EST EN EXTRADOS 
+#
+         if ssep.ISCP>(3.*pi*RM/2.): ssep.ISCP = ssep.ISCP - 3.*pi*RM/2.
+         else:                       ssep.ISCP = ssep.ISCP + pi*RM/2.
+         echo_mess.append( 'ABSC. CURV. CIRCONF. CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISCP)
+#
+# -- CALCUL DE LA TAILLE CIRCONFERENTIELLE 
+#    NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
+#
+         ssep.ICIRP = ssep['AXE_CIRC']*(RM/(RM+EP/2.))
+         if ssep.ICIRP>(2.*pi*RM) :
+            texte_final=string.join(echo_mess)
+            aster.affiche("MESSAGE",texte_final)
+            UTMESS('F','ASCOUF0_6',vali=[i],valr=[ssep.ICIRP,2*pi*RM])
+         echo_mess.append( 'TAILLE CIRCONFERENTIELLE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ICIRP)
+         echo_mess.append( '<=> TAILLE EQUIVALENTE SUR LA CIRCONFERENCE (DEGRES) : %.2f \n'%(ssep.ICIRP*360./(2.*pi*RM)))  
+
+#
+# -- CALCUL COTE AXIALE DU CENTRE SOUS-EPAISSEUR SUR LA PLAQUE 
+#    EN FONCTION DE L ABSCISSE CURVILIGNE DONNEE SUR LE COUDE 
+#    OU DE LA POSITION ANGULAIRE
+#    NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
+#
+      if ssep['POSI_CURV_LONGI']!=None:
+         if GEOM=='COUDE':
+            ssep.ISLP = ssep['POSI_CURV_LONGI']/(1.+(RM+EP/2.)/RC*cos(AZIMC))
+            AZIML     = ssep.ISLP/RC
+            echo_mess.append( 'ANGLE COUDE CENTRE SOUS-EPAISSEUR (DEGRES) : %.2f \n'%(AZIML*180./pi))
+         else :
+            ssep.ISLP = ssep['POSI_CURV_LONGI']
+         if (SYME in ('QUART','DEMI')) and (ssep.ISLP!=ALPHA*CG*RC/2.) :
+            texte_final=string.join(echo_mess)
+            aster.affiche("MESSAGE",texte_final)
+            UTMESS('F','ASCOUF0_7')
+      else :
+         if GEOM=='COUDE':
+            echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR COUDE : %.2f \n'%((ssep.BETA)*CG*(RC+(RM+EP/2.)*cos(AZIMC))))
+            AZIML = (ssep.BETA)*CG
+         else :
+            echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR TUBE  : %.2f \n'%((ssep.BETA)*CG*RC) )
+         ssep.ISLP =  (ssep.BETA)*CG*RC
+         if (SYME in ('QUART','DEMI')) and (ssep.BETA!=ALPHA/2.) :
+            texte_final=string.join(echo_mess)
+            aster.affiche("MESSAGE",texte_final)
+            UTMESS('F','ASCOUF0_7')
+      echo_mess.append( 'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISLP)
+#
+# -- CALCUL DE LA TAILLE LONGITUDINALE 
+#    NB : MESURE FAITE EN PEAU EXTERNE SUR LE COUDE
+#
+#   ON ENVISAGE LE CAS OU UNE PARTIE DE L AXE EST DANS LES
+#   DROITES DES EMBOUTS. LA TRANSFORMATION N EST FAITE QUE SUR LA 
+#   PARTIE RESTANT DANS LE COUDE.
+#
+      if GEOM=='COUDE' : DIST = ALPHA*CG*(RC+(RM+EP/2.)*cos(AZIMC))
+      else             : DIST = ALPHA*CG*RC
+      if ssep['POSI_CURV_LONGI']!=None:
+         BSUP = ssep['POSI_CURV_LONGI']+ssep['AXE_LONGI']/2.
+         BINF = ssep['POSI_CURV_LONGI']-ssep['AXE_LONGI']/2.
+      else:
+         if GEOM=='COUDE' :
+            BSUP = ssep.BETA*CG*(RC+(RM+EP/2.)*cos(AZIMC))+ssep['AXE_LONGI']/2.
+            BINF = ssep.BETA*CG*(RC+(RM+EP/2.)*cos(AZIMC))-ssep['AXE_LONGI']/2.
+         else:
+            BSUP = ssep.BETA*CG*RC + ssep['AXE_LONGI']/2.
+            BINF = ssep.BETA*CG*RC - ssep['AXE_LONGI']/2.
+      BCOUD1 = 0.
+      BCOUD2 = 0.
+      BEMB1  = 0.
+      BEMB2  = 0.
+      if BINF<0. and BSUP>DIST :
+         BCOUD1 = DIST
+         BEMB1  =  abs(BINF) + BSUP-DIST
+      elif BSUP>DIST :
+         BCOUD1 = DIST - BINF
+         BEMB1  = BSUP - DIST
+      elif BINF<0 :
+         BCOUD2 = BSUP
+         BEMB2  = abs(BINF)
+      elif (BINF>=0. and BSUP<=DIST) :
+         BCOUD1 = ssep['AXE_LONGI']
+      BCOUD = BCOUD1+ BCOUD2
+      BEMB  = BEMB1 + BEMB2
+      if GEOM=='COUDE' : BPLAQ = BCOUD/(1.+(RM+EP/2.)/RC*cos(AZIMC))
+      else             : BPLAQ = BCOUD
+      ssep.ILONP = BPLAQ+BEMB
+      if BEMB1>0.:
+         ssep.ISLP =  ALPHA*CG*RC - ssep.ILONP/2. + BEMB1
+         echo_mess.append(  'CORRECTION CENTRE : SOUS-EP. A CHEVAL SUR EMBOUT \n')
+         echo_mess.append(  'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISLP)
+      if BEMB2>0.:
+         ssep.ISLP =  ssep.ILONP/2. - BEMB2
+         echo_mess.append(  'CORRECTION CENTRE : SOUS-EP. A CHEVAL SUR EMBOUT \n')
+         echo_mess.append(  'ABSC. CURV. AXIALE CENTRE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ISLP)
+      if ssep.ISLP<0.            : ssep.ISLP = 0.
+      if (ssep.ISLP>ALPHA*CG*RC) : ssep.ISLP = ALPHA*CG*RC 
+#
+#     SI LE CENTRE DE LA SOUS-EP CALCULE SUR LA PLAQUE EST DANS L EMBOUT
+#     ON CORRIGE SA POSITION EN LE METTANT A L INTERFACE SINON CA PLANTE
+#     DANS LA PROC DE MAILLAGE (A AMELIORER)
+#
+      echo_mess.append(  'TAILLE LONGITUDINALE SOUS-EPAISSEUR SUR PLAQUE : %.2f \n'%ssep.ILONP)
+      echo_mess.append(  '<=> TAILLE EQUIVALENTE PAR RAPPORT A L ANGLE DU COUDE (DEGRES): %.2f \n'%(ssep.ILONP*360/(2*pi*RC)))  
+#
+  texte_final=string.join(echo_mess)
+  aster.affiche('MESSAGE',texte_final)
+  return ier,AZIMC
+
+# ------------------------------------------------------------------------------
+def ASCTCI(MCL_SOUS_EPAIS,RM):
+  """
+  MACR_ASCOUF_MAIL ASCTCI
+  APPELEE DANS : ASCSYM et ASCPRE
+  CALCUL TABLEAU TRIE DES ABSCISSES DES CENTRES DE SOUS-EPAISSEURS
+
+  ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
+
+  RM    = RAYON MOYEN DU COUDE
+
+  -----------------DONNEES RENVOYEES-----------------------
+
+  IABSC1 = CORRESPONDANCE ABSC. CURVI. CIRCONF. SOUS-EP. I
+  IABSC2 = CORRESPONDANCE ABSC. GAUCHE ET DROITE CIRCONF. SOUS-EP. I
+  COORXD = ABSC. DU BORD DROIT DE LA SOUS-EP I
+  COORXG = ABSC. DU BORD GAUCHE DE LA SOUS-EP I
+
+  """
+#
+# --- tri du tableau des abscisses curvilignes circonf. plaque
+#
+  echo_mess=['MACR_ASCOUF_MAIL ASCTCI \n',]
+  TAMPON = []
+  COORXG = []
+  COORYG = []
+  i=0
+  for ssep in MCL_SOUS_EPAIS :
+      i=i+1
+      if (ssep.ISCP>2.*pi*RM) or (ssep.ISCP<0.) : 
+         texte_final=string.join(echo_mess)
+         aster.affiche("MESSAGE",texte_final)
+         UTMESS('F','ASCOUF0_9',vali=[MCL_SOUS_EPAIS.index(ssep)],valr=[ssep.ISCP,2.*pi*RM])
+      TAMPON.append((ssep.ISCP,i))
+  TAMPON.sort()
+  IABSC1=[]
+  for j in range(i):
+    IABSC1.append(TAMPON[j][1])
+  echo_mess.append( ' \n')
+  echo_mess.append( 'TRI DES CENTRES ABSC. CURV. CIRCONF. :\n ')
+  echo_mess.append( '------------------------------------\n')
+  i=0
+  for ssep in TAMPON :
+    i=i+1
+    echo_mess.append( '%d) SOUS-EP NO %d <> XC = %.2f \n'%(i,ssep[1],ssep[0]) )
+#
+# --- calcul des abcisses droites et gauches des sous-epaisseurs
+#
+  COORXD=[]
+  COORXG=[]
+  for bid in TAMPON :
+      XG=bid[0]-MCL_SOUS_EPAIS[bid[1]-1].ICIRP/2.
+      if XG<0.       : XG=XG+2.*pi*RM
+      COORXG.append(XG)
+      XD=bid[0]+MCL_SOUS_EPAIS[bid[1]-1].ICIRP/2.
+      if XD>2.*pi*RM : XD=XD-2.*pi*RM
+      COORXD.append(XD)
+#
+# --- tri des bornes d'intervalles en abscisse
+#
+  TAMPON = []
+  for j in range(len(MCL_SOUS_EPAIS)):
+    TAMPON.append((COORXG[j],2*j+1))
+    TAMPON.append((COORXD[j],2*j+2))
+  TAMPON.sort() 
+  IABSC2=[]
+  for j in range(2*len(MCL_SOUS_EPAIS)):
+    IABSC2.append(TAMPON[j][1])
+  echo_mess.append( '\n')
+  echo_mess.append( 'TRI DES INTERVALLES G ET D ABSC. CURV. CIRCONF. :\n')
+  echo_mess.append( '-----------------------------------------------\n' ) 
+  for j in range(2*len(MCL_SOUS_EPAIS)):
+    if fmod(IABSC2[j],2):
+       echo_mess.append( '%d) SOUS-EP NO %d <> XG = %.2f \n'%(j+1,IABSC1[IABSC2[j]/2],TAMPON[j][0]))
+    else:
+       echo_mess.append( '%d) SOUS-EP NO %d <> XD = %.2f \n'%(j+1,IABSC1[IABSC2[j]/2-1],TAMPON[j][0]))
+#    
+  texte_final=string.join(echo_mess)
+  aster.affiche('MESSAGE',texte_final)
+  return TAMPON,IABSC1,IABSC2,COORXD,COORXG
+
+# ------------------------------------------------------------------------------
+def ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM):
+  """
+  MACR_ASCOUF_MAIL ASCTLO
+  APPELEE DANS : ASCSYM et ASCPRE
+  CALCUL TABLEAU TRIE DES ORDONNEES DES CENTRES DE SOUS-EPAISSEURS
+
+  ------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
+
+  RC     = RAYON MOYEN DU COUDE
+  ALPHA  = ANGLE DU COUDE
+  LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
+  LTCLIM  = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
+
+  -----------------DONNEES RENVOYEES-----------------------
+
+  IORDO1 = CORRESPONDANCE ORDO. CURVI. LONGIT. SOUS-EP. I
+  IORDO2 = CORRESPONDANCE ORDO. GAUCHE ET DROITE LONGIT. SOUS-EP. I
+  COORYI = ORDONNEE. DU BORD INTERIEUR DE LA SOUS-EP I
+  COORYS = ORDONNEE. DU BORD SUPERIEUR DE LA SOUS-EP I
+
+  """
+#
+# tri du tableau des abscisses curvilignes axiales plaque
+#
+  echo_mess=['MACR_ASCOUF_MAIL ASCTLO \n',]
+  ALPHAR = 2.*ALPHA*pi/360.
+  TAMPON = []
+  i=0
+  for ssep in MCL_SOUS_EPAIS :
+      i=i+1
+      if (ssep.ISLP>ALPHAR*RC) or (ssep.ISLP<0.) : 
+         texte_final=string.join(echo_mess)
+         aster.affiche("MESSAGE",texte_final)
+         UTMESS('F','ASCOUF0_10',vali=[MCL_SOUS_EPAIS.index(ssep)],valr=[ssep.ISLP,ALPHAR*RC])
+      TAMPON.append((ssep.ISLP,i))
+  TAMPON.sort()
+  IORDO1=[]
+  for j in range(i):
+    IORDO1.append(TAMPON[j][1])
+  echo_mess.append( '\n')
+  echo_mess.append( 'TRI DES CENTRES ABSC. CURV. LONGIT. : \n')
+  echo_mess.append( '------------------------------------ \n')
+  i=0
+  for ssep in TAMPON :
+    i=i+1
+    echo_mess.append( '%d) SOUS-EP NO %d <> YC = %.2f \n'%(i,ssep[1],ssep[0]))
+#
+# calcul des abscisses sup. et inf. des sous-ep.
+#
+  COORYI=[]
+  COORYS=[]
+  EPS=0.000000000001
+  for bid in TAMPON :
+      i=i+1
+      YI=bid[0]-MCL_SOUS_EPAIS[bid[1]-1].ILONP/2.
+      YS=bid[0]+MCL_SOUS_EPAIS[bid[1]-1].ILONP/2.
+      if fabs(bid[0])<EPS : 
+         YI=-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
+         YS=MCL_SOUS_EPAIS[bid[1]-1].ILONP-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
+      if fabs(bid[0]-ALPHAR*RC)<EPS :
+         YI=ALPHAR*RC-(MCL_SOUS_EPAIS[bid[1]-1].ILONP-(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.)
+         YS=ALPHAR*RC+(MCL_SOUS_EPAIS[bid[1]-1]['AXE_LONGI'])/2.
+      if YI<(-LTCHAR):
+         texte_final=string.join(echo_mess)
+         aster.affiche("MESSAGE",texte_final)
+         UTMESS('F','ASCOUF0_11',vali=[bid[1]],valr=[YI,-1*LTCHAR])
+      if YS>(ALPHAR*RC+LTCLIM):
+         texte_final=string.join(echo_mess)
+         aster.affiche("MESSAGE",texte_final)
+         UTMESS('F','ASCOUF0_11',vali=[bid[1]],valr=[YI,ALPHAR*RC+LTCLIM])
+      COORYI.append(YI) 
+      COORYS.append(YS)
+#
+# tri des bornes d'intervalles en abscisse
+#
+  TAMPON = []
+  for j in range(len(MCL_SOUS_EPAIS)):
+    TAMPON.append((COORYI[j],2*j+1))
+    TAMPON.append((COORYS[j],2*j+2))
+  TAMPON.sort() 
+  IORDO2=[]
+  for j in range(2*len(MCL_SOUS_EPAIS)):
+    IORDO2.append(TAMPON[j][1])      
+  echo_mess.append( '\n')
+  echo_mess.append( 'TRI DES INTERVALLES I ET S ABSC. CURV. LONGIT. : \n')
+  echo_mess.append( '----------------------------------------------- \n')
+  for j in range(2*len(MCL_SOUS_EPAIS)):
+    if fmod(IORDO2[j],2):
+       echo_mess.append( '%d) SOUS-EP NO %d <> YI = %.2f \n'%(j+1,IORDO1[IORDO2[j]/2],TAMPON[j][0]))
+    else:
+       echo_mess.append( '%d) SOUS-EP NO %d <> YS = %.2f \n'%(j+1,IORDO1[IORDO2[j]/2-1],TAMPON[j][0]))
+#
+  texte_final=string.join(echo_mess)
+  aster.affiche('MESSAGE',texte_final)
+  return TAMPON,IORDO1,IORDO2,COORYI,COORYS
+#
+#
+################################################################################
+################################################################################
+################################################################################
+#     MACR_ASCOUF_MAIL ASCNBE
+#     APPELEE DANS : ASCSYM et ASCPRE
+#     CALCUL DU NOMBRE D'ELEMENTS LONGI ET CIRCONF. DANS LES SOUS-EPAISSEURS
+#
+#-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
+#
+#     COORXG = ABSCISSE DU BORD GAUCHE DE LA SOUS-EPAISSEUR I
+#     COORXD = ABSCISSE DU BORD DROIT DE LA SOUS-EPAISSEUR I
+#     COORYI = ORDONNEE DU BORD INFERIEUR DE LA SOUS-EPAISSEUR I
+#     COORYS = ORDONNEE DU BORD SUPERIEUR DE LA SOUS-EPAISSEUR I
+#     BD     = ABSCISSE DU BORD DROIT DE LA ZONE CIRCONF J
+#     BG     = ABSCISSE DU BORD GAUCHE DE LA ZONE CIRCONF J
+#     BS     = ORDONNEE DU BORD SUPERIEUR DE LA ZONE LONGI J
+#     BI     = ORDONNEE DU BORD INFERIEUR DE LA ZONE LONGI J
+#     DNX    = DENSITE ET NOMBRE D'ELEMENTS CIRCONF. DE LA ZONE J
+#     DNY    = DENSITE ET NOMBRE D'ELEMENTS LONGIT. DE LA ZONE J
+#     INDSEX = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE CIRCONF J
+#     INDSEY = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE LONGI J
+#     RM     = RAYON MOYEN DU COUDE
+#     RC     = RAYON DE CINTRAGE DU COUDE
+#     IABSC1 = CORRESPONDANCE ABSCISSE CURVILIGNE CIRCONF. SOUS-EP. I
+#     IORDO1 = CORRESPONDANCE ABSCISSE CURVILIGNE LONGIT. SOUS-EP. I
+#
+#----------------------DONNEES RENVOYEES-----------------------
+#
+#     NLX = NOMBRE TOTAL D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR K
+#     NLY = NOMBRE TOTAL D'ELEMENTS LONGIT. DE LA SOUS-EPAISSEUR K
+#
+# ------------------------------------------------------------------------------
+def ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,DNX,DNY,RM,RC,
+           INDSEX,INDSEY,IABSC1,IORDO1):
+#
+#  calcul du nombre d'elements longi. et circonf. dans les sous-epaisseurs:
+#
+  echo_mess=['MACR_ASCOUF_MAIL ASCNBE \n',]
+  echo_mess.append( '\n')
+  echo_mess.append( 'DETERMINATION DU NOMBRE D''ELEMENTS DANS LES SOUS-EPAISSEURS :\n')
+  echo_mess.append( '------------------------------------------------------------\n')
+  NLX=[0]*len(MCL_SOUS_EPAIS)
+  NLY=[0]*len(MCL_SOUS_EPAIS)
+  for j in range(len(BD)):
+    if INDSEX[j]!=0:
+#      calcul au passage du nombre d'elements sur chaque zone circonf.   
+       RNBEL = (BD[j]-BG[j])*360./(DNX[2*j]*2.*pi*RM)
+       RNBEL2 = RNBEL - floor(RNBEL)
+       if RNBEL2 <= 0.5 : NBEL=int(floor(RNBEL))
+       else             : NBEL=int(floor(RNBEL))+1
+       if NBEL <= 1 :     NBEL=2
+#      calcul au passage du nombre d'elements sur chaque sous-epaisseur circonf.       
+       for i in range(len(MCL_SOUS_EPAIS)):
+         l=IABSC1[i]-1
+         if ((COORXG[l]<COORXD[l] and BG[j]>=COORXG[l] and BD[j]<=COORXD[l])\
+         or (COORXG[l]>=COORXD[l] and (BG[j]<=COORXG[l] or BD[j]>=COORXD[l]))):
+            NLX[i]=NLX[i]+NBEL
+            echo_mess.append( 'SOUS-EP NO %d ZONE CIRC. NO %d NB ELEM. = %d \n'%(i+1,j+1,NBEL))
+
+  for j in range(len(BS)):
+    if INDSEY[j]!=0:
+#      calcul au passage du nombre d'elements sur chaque zone longi.      
+       RNBEL = ((BS[j]-BI[j])*360.)/(DNY[2*j]*2.*pi*RC)
+       RNBEL2 = RNBEL - floor(RNBEL)
+       if RNBEL2 <= 0.5 : NBEL=int(floor(RNBEL))
+       else             : NBEL=int(floor(RNBEL))+1
+       if NBEL <= 1 :     NBEL=2
+#      calcul au passage du nombre d'elements sur chaque sous-epaisseur circonf.       
+       i=0
+       for i in range(len(MCL_SOUS_EPAIS)):
+         l=IORDO1[i]-1
+         if (BI[j]>=COORYI[l] and BS[j]<=COORYS[l]):
+            NLY[i]=NLY[i]+NBEL
+            echo_mess.append( 'SOUS-EP NO %d ZONE LONGI. NO %d NB ELEM. = %d \n'%(i+1,j+1,NBEL) )
+
+  for j in range(len(NLX)):
+    echo_mess.append( 'SOUS-EP NO %d NBE TOTAL ELEMENTS CIRCONF. : %d \n'%(j+1,NLX[j]))
+    echo_mess.append( 'SOUS-EP NO %d NBE TOTAL ELEMENTS LONGI.   : %d \n'%(j+1,NLY[j]))
+
+#
+  texte_final=string.join(echo_mess)
+  aster.affiche('MESSAGE',texte_final)
+  return NLX,NLY
+#
+################################################################################
+################################################################################
+################################################################################
+#     MACR_ASCOUF_MAIL ASCSYM
+#     PREPARATION DES DONNEES POUR LE MAILLAGE DE PLAQUE AVEC
+#     SOUS-EPAISSEURS :
+#     CAS D UNE SOUS-EPAISSEUR DANS LE PLAN DE SYMETRIE 
+#     CONSTRUCTION D UN QUART DU MAILLAGE
+#     - CALCUL TABLEAU TRIE DES ABSCISSES ET ORDONNEES DES CENTRES 
+#     - CALCUL TABLEAU DES ZONES COUVERTES PAR LES SOUS-EPAISSEURS
+#
+#-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
+#
+#     RM    = RAYON MOYEN DU COUDE
+#     RC    = RAYON DE CINTRAGE DU COUDE
+#     ALPHA = ANGLE DU COUDE
+#     LT    = LONGUEUR DE L EMBOUT DU COTE CHARGEMENT
+#     LGV   = LONGUEUR DE L EMBOUT DU COTE CONDITIONS AUX LIMITES
+#     NBSEP = NOMBRE DE SOUS-EPAISSEURS
+#
+#----------------------DONNEES RENVOYEES-----------------------
+#
+#     NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
+#     NZONEY = NOMBRE DE ZONES LONGITUDINALES       
+#
+# ------------------------------------------------------------------------------
+def ASCSYM(MCL_SOUS_EPAIS,RM,RC,ALPHA,LTCHAR,LTCLIM):
+  ier=0
+  echo_mess=['MACR_ASCOUF_MAIL ASCSYM \n',]
+  DERAFC = 18.
+  DERAFL =  5.       
+  INDSEX = []
+  INDSEY = []
+  BG     = []
+  BD     = []
+  INDBG  = []
+  INDBD  = []
+  DNX    = []
+
+#
+# --- tri des donnees sous-ep. en circonferentiel
+  TAMPON,IABSC1,IABSC2,COORXD,COORXG=ASCTCI(MCL_SOUS_EPAIS,RM)
+#
+# --- calcul des zones en circonferentiel
+#
+  ssep=MCL_SOUS_EPAIS[0]
+  if (ssep.ISCP<pi*RM) :
+#
+#     le centre sous-ep est dans la zone flanc droit/extrados/flanc
+#     gauche, on preleve pi*RM a droite de la sous-epaisseur
+#
+#          zone (centre sous-ep , bord droit)
+#
+     BG.append(ssep.ISCP)
+     BG.append(ssep.ISCP+ssep.ICIRP/2.)
+     BD.append(ssep.ISCP+ssep.ICIRP/2.)
+     BD.append(ssep.ISCP+pi*RM)
+     INDBG.append(0)
+     INDBG.append(1)
+     INDBD.append(0)
+     INDBD.append(0)
+     DNX.append(ssep.IDENC)
+     DNX.append(0)
+     DNX.append(DERAFC)
+     DNX.append(0)
+     INDSEX.append(1)
+     INDSEX.append(0)
+  elif (ssep.ISCP+pi*RM==2.*pi*RM) :
+#
+#     sous-ep axisymetrique : on preleve pi*RM a droite
+#
+#       zone (centre sous-ep , bord droit)
+#
+     BG.append(ssep.ISCP)
+     BD.append(ssep.ISCP+ssep.ICIRP/2.)
+     INDBG.append(0)
+     INDBD.append(0)
+     DNX.append(ssep.IDENC)
+     DNX.append(0)
+     INDSEX.append(1)
+     INDSEX.append(0)
+  else :
+#
+#     le centre sous-ep est dans la zone flanc gauche/intrados/flanc 
+#     droit : on preleve pi*RM a gauche de la sous-epaisseur
+#
+#            zone (centre -pi*RM, bord gauche)
+#
+     BG.append(ssep.ISCP-pi*RM)
+     BG.append(ssep.ISCP-ssep.ICIRP/2.)
+     BD.append(ssep.ISCP-ssep.ICIRP/2.)
+     BD.append(ssep.ISCP)
+     INDBG.append(0)
+     INDBG.append(0)
+     INDBD.append(1)
+     INDBD.append(0)
+     DNX.append(DERAFC)
+     DNX.append(0)
+     DNX.append(ssep.IDENC)
+     DNX.append(0)     
+     INDSEX.append(0)
+     INDSEX.append(1)
+
+
+  echo_mess.append( '\n')
+  echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. CIRCONF. :\n')
+  echo_mess.append( '--------------------------------------------- \n')
+  EPS=0.000000000001
+  NZONEX=len(BG)
+  for j in range(NZONEX) :
+    if ( fabs(BG[j]) < EPS ) and ( fabs(BD[j]) < EPS ) :
+      echo_mess.append( 'ZONE NO %d BORNE GAUCHE = %.2f'\
+      ' / BORNE DROITE = %.2f * SOUS-EPAISSEUR \n'%(j+1,BG[j],BD[j]) )
+    else:
+      echo_mess.append( 'ZONE NO %d BORNE GAUCHE = %.2f \n'\
+      ' / BORNE DROITE = %.2f \n'%(j+1,BG[j],BD[j]))
+
+    
+# tri des donnees sous-epaisseurs en axial
+  TAMPON,IORDO1,IORDO2,COORYI,COORYS=ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM)
+
+# calcul des zones en axial:
+  BI     = []
+  BS     = []
+  INDBI  = []
+  INDBS  = []
+  DNY    = []
+  INDSEY = []
+  ssep   = MCL_SOUS_EPAIS[0]
+  BI.append(0.)
+  BI.append(ssep.ISLP-ssep.ILONP/2.)
+  BS.append(ssep.ISLP-ssep.ILONP/2.)
+  BS.append(ssep.ISLP)
+  INDBI.append(0)  
+  INDBI.append(0)
+  INDBS.append(1)
+  INDBS.append(0)
+  DNY.append(DERAFL)
+  DNY.append(0)
+  DNY.append(ssep.IDENL)
+  DNY.append(0)
+  INDSEY.append(0)
+  INDSEY.append(1)
+  echo_mess.append( '\n')
+  echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. LONGIT. : \n')
+  echo_mess.append( '----------------------------------------------- \n')
+  NZONEY=len(BI)
+  for j in range(NZONEY) :
+    if ( fabs(BI[j]) < EPS ) and ( fabs(BS[j]) < EPS ) :
+      echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
+      ' / BORNE SUP. = %.2f * SOUS-EPAISSEUR'%(j+1,BI[j],BS[j]))
+    else:
+      echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
+      ' / BORNE SUP. = %.2f'%(j+1,BI[j],BS[j]))
+# calcul du nombre d'elements longi. et circonf. dans les soue-ep
+  NLX,NLY=ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,
+                 DNX,DNY,RM,RC,INDSEX,INDSEY,IABSC1,IORDO1)
+
+  texte_final=string.join(echo_mess)
+  aster.affiche('MESSAGE',texte_final)
+  return ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY
+################################################################################
+################################################################################
+################################################################################
+################################################################################
+#     MACR_ASCOUF_MAIL ASCPRE
+#     PREPARATION DES DONNEES POUR LE MAILLAGE DE PLAQUE 
+#     SOUS-EPAISSEURS :
+#     - CALCUL TABLEAU TRIE DES ABSCISSES ET ORDONNEES DES CENTRES 
+#     - CALCUL TABLEAU DES ZONES COUVERTES PAR LES SOUS-EPAISSEURS
+#
+#-----------------DONNEES FOURNIES PAR L UTILISATEUR--------------------
+#
+#     RM    = RAYON MOYEN DU COUDE
+#     RC    = RAYON DE CINTRAGE DU COUDE
+#     ALPHA = ANGLE DU COUDE
+#     LT    = LONGUEUR DE L EMBOUT DU COTE CHARGEMENT
+#     LGV   = LONGUEUR DE L EMBOUT DU COTE CONDITIONS AUX LIMITES
+#     NBSEP = NOMBRE DE SOUS-EPAISSEURS
+#     SYME  = "QUART" DE STRUCTURE, "DEMI" STRUCTURE OU BIEN "ENTIER"
+#
+#----------------------DONNEES RENVOYEES-----------------------
+#
+#     NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
+#     NZONEY = NOMBRE DE ZONES LONGITUDINALES       
+# ------------------------------------------------------------------------------
+def ASCPRE(MCL_SOUS_EPAIS,RM,RC,ALPHA,SYME,LTCHAR,LTCLIM):
+  ier=0
+  echo_mess=['MACR_ASCOUF_MAIL ASCPRE \n',]
+  ALPHAR = 2.*ALPHA*pi/360.
+  DERAFC = 18.
+  DERAFL =  5.
+  EPSI   =  0.001      
+  NBSEP  = len(MCL_SOUS_EPAIS)
+  echo_mess.append( 'RECHERCHE DES ZONES DE SOUS-EPAISSEURS DANS LE COUDE\n' )
+  
+# tri des donnees sous-epaisseurs en circonferentiel
+  TAMPON,IABSC1,IABSC2,COORXD,COORXG=ASCTCI(MCL_SOUS_EPAIS,RM)
+# --- calcul des recouvrements de zones en circonferentiel
+#
+  NZONEX=0
+  j=0
+  ICE=1
+  NBGAU=0
+  NBDRO=0
+  TYPG=0
+  TYPD=0
+  go10=1
+  go20=1
+#
+  BG    =[]
+  BD    =[]
+  INDBG =[]
+  INDBD =[]
+  DNX   =[]
+  INDSEX=[]
+#
+  
+  while go10:
+   
+    j=j+1      
+#
+#   definition de la zone courante (borne gauche, borne droite)
+#    
+#   TYPG = type de la borne:
+#          0 : borne gauche sous-epaisseur
+#          1 : borne droite sous-epaisseur
+#          2 : centre sous-epaisseur
+#
+    if j>2*NBSEP and ICE<NBSEP :
+#     cas ou il ne reste plus que des centres a caser
+      MING = MIND
+      TYPG = TYPD
+      NUMG = NUMD
+      MIND = 2.*pi*RM+1
+    elif TYPD==2 :
+#     cas ou la borne droite de la zone precedente etait un centre
+      MING = MIND
+      TYPG = TYPD
+      NUMG = NUMD
+      MIND = TAMPON[j-1][0]
+      if fmod(IABSC2[j-1],2):
+        TYPD = 0
+        NUMD = IABSC1[IABSC2[j-1]/2]
+      else:
+        TYPD = 1
+        NUMD = IABSC1[IABSC2[j-1]/2-1]
+      j=j-1
+    else:
+      if j>= 2*NBSEP :
+        MIND = TAMPON[2*NBSEP-1][0]
+        MING = MIND
+        if fmod(IABSC2[2*NBSEP-1],2):
+          TYPG = 0
+          NUMG = IABSC1[IABSC2[2*NBSEP-1]/2]
+        else:
+          TYPG = 1
+          NUMG = IABSC1[IABSC2[2*NBSEP-1]/2-1]
+        TYPD=TYPG
+        NUMD=NUMG
+      else:
+        MING=TAMPON[j-1][0]
+        MIND=TAMPON[j][0]
+        if fmod(IABSC2[j-1],2):
+          TYPG = 0
+          NUMG = IABSC1[IABSC2[j-1]/2]
+        else:
+          TYPG = 1
+          NUMG = IABSC1[IABSC2[j-1]/2-1]
+        if fmod(IABSC2[j],2):
+          TYPD = 0
+          NUMD = IABSC1[IABSC2[j]/2]
+        else:
+          TYPD = 1
+          NUMD = IABSC1[IABSC2[j]/2-1]
+    if fabs(MING-MIND)<EPSI : 
+      if j==2*NBSEP:break
+      else:continue
+    if j>2*NBSEP and ICE>=NBSEP: 
+        break #on sort de la boucle
+
+    while go20:
+      i=ICE
+      if i<=NBSEP:
+#       recherche des centres a intercaler
+        INDC=IABSC1[i-1]
+        if i>1:
+#         le centre est deja le meme que precedent
+          if fabs(MCL_SOUS_EPAIS[INDC-1].ISCP-MCL_SOUS_EPAIS[IABSC1[i-2]-1].ISCP) < EPSI :
+            ICE=ICE+1
+            continue
+        if MCL_SOUS_EPAIS[INDC-1].ISCP < MING :
+#          le centre est la nouvelle borne gauche
+           j=j-1
+           MIND = MING
+           TYPD = TYPG
+           NUMD = NUMG
+           MING = MCL_SOUS_EPAIS[INDC-1].ISCP
+           TYPG = 2
+           NUMG = INDC
+           ICE = ICE+1
+        elif MCL_SOUS_EPAIS[INDC-1].ISCP < MIND : 
+#          le centre est la nouvelle borne droite  
+           MIND = MCL_SOUS_EPAIS[INDC-1].ISCP
+           TYPD = 2
+           NUMD = INDC
+           ICE = ICE+1
+           continue
+        else:pass
+      NZONEX=NZONEX+1
+#    
+#     codes d'intervalles de zones
+#        0 0 = zone sous-ep.
+#        0 1 = sous-ep. a droite de la zone
+#        1 0 = sous-ep. a gauche de la zone
+#        1 1 = sous-ep. a droite et a gauche de la zone  
+#
+#     cas ou la premiere zone ne commence pas au bord de la plaque
+      if MING>0. and NZONEX==1 :
+        BG.append(0.)
+        BD.append(MING)
+        if TYPG==0:
+           INDBG.append(0)
+           INDBD.append(1)
+           DNX.append(DERAFC)
+           DNX.append(0)
+           INDSEX.append(0)
+        elif TYPG==1 or TYPG==2:
+           INDBG.append(0)
+           INDBD.append(0)
+           DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
+           DNX.append(0)
+           INDSEX.append(NUMG)
+        else: pass
+        NZONEX=NZONEX+1
+#
+      BG.append(MING)
+      BD.append(MIND)  
+#
+      if TYPG == 0:
+#       borne gauche zone = borne gauche ssep       
+        NBGAU=NBGAU+1
+        INDBG.append(0)
+        INDBD.append(0)
+        if TYPD == 0:
+#         borne droite zone = borne gauche ssep
+          DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
+          DNX.append(0)
+          INDSEX.append(NUMG)
+        elif TYPD == 1 or TYPD == 2:
+#         borne droite zone = borne droite ssep : TYPD=1
+#         borne droite zone = centre ssep : TYPD=2
+          LTMP=[]
+          LTMP.append((MCL_SOUS_EPAIS[NUMG-1].IDENC,NUMG))
+          LTMP.append((MCL_SOUS_EPAIS[NUMD-1].IDENC,NUMD))
+          LTMP.sort()
+          DNX.append(LTMP[0][0])
+          DNX.append(0)
+          INDSEX.append(LTMP[0][1])
+        else: pass
+#
+      elif TYPG == 1:
+#       borne gauche zone = borne droite ssep  
+        NBDRO = NBDRO+1  
+        if TYPD == 0:
+#         borne droite zone = borne gauche ssep
+          if NBDRO==NBGAU:
+            INDBG.append(1)
+            INDBD.append(1)
+            DNX.append(DERAFC)
+            DNX.append(0)
+            INDSEX.append(0)
+          else:
+#           cas tordu: une sous-ep enveloppe le tout
+            INDBG.append(0)
+            INDBD.append(0)
+            DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
+            DNX.append(0)    
+            INDSEX.append(NUMG)
+        elif TYPD == 1 or TYPD == 2:
+#         borne droite zone = borne droite ssep : TYPD=1
+#         borne droite zone = centre ssep : TYPD=2
+          INDBG.append(0)
+          INDBD.append(0)
+          DNX.append(MCL_SOUS_EPAIS[NUMD-1].IDENC)
+          DNX.append(0)
+          INDSEX.append(NUMD)  
+        else: pass
+#                
+      elif TYPG == 2:
+#       borne gauche zone = centre ssep  
+        INDBG.append(0)
+        INDBD.append(0)
+        if TYPD == 0:
+#         borne droite zone = borne gauche ssep
+          DNX.append(MCL_SOUS_EPAIS[NUMG-1].IDENC)
+          DNX.append(0)
+          INDSEX.append(NUMG)  
+        elif TYPD == 1 or TYPD == 2:
+#         borne droite zone = borne droite ssep : TYPD=1
+#         borne droite zone = centre ssep : TYPD=2
+          LTMP=[]
+          LTMP.append((MCL_SOUS_EPAIS[NUMG-1].IDENC,NUMG))
+          LTMP.append((MCL_SOUS_EPAIS[NUMD-1].IDENC,NUMD))
+          LTMP.sort()
+          DNX.append(LTMP[0][0])
+          DNX.append(0)
+          INDSEX.append(LTMP[0][1])
+        else:pass
+      else:pass
+      if j<=(2*NBSEP-2) or ICE<=NBSEP or (TYPD==2 and j<2*NBSEP):
+         iout=0       
+         break #on retourne dans la boucle go10
+      else :
+         iout=1
+         break #on sort definitivement 
+    if iout:break
+      
+  if MIND<2.*pi*RM:
+    NZONEX=NZONEX+1
+    BG.append(MIND)
+    BD.append(2.*pi*RM)
+    if TYPD==0 or TYPD==2:
+      INDBG.append(0)
+      INDBD.append(0)
+      DNX.append(MCL_SOUS_EPAIS[NUMD-1].IDENC)
+      DNX.append(0)
+      INDSEX.append(NUMD)
+    elif TYPD==1:
+      INDBG.append(1)
+      INDBD.append(0)
+      DNX.append(DERAFC)
+      DNX.append(0)
+      INDSEX.append(0)
+    else:pass
+
+# au cas ou 2.*pi*RM correspond a une borne d'intevalle de sous-ep ou a
+#  un centre de sous-ep.
+  if fabs(BG[NZONEX-1]-BD[NZONEX-1])<EPSI: NZONEX = NZONEX-1
+
+  echo_mess.append( '\n')
+  echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. CIRCONF. : \n')
+  echo_mess.append( '----------------------------------------------- \n')
+  for j in range(NZONEX) :
+    if INDBG[j]==0 and INDBD[j]==0 :
+      echo_mess.append( 'ZONE NO %d <> BORNE GAUCHE = %.2f \n'\
+      ' / BORNE DROITE = %.2f * SOUS-EPAISSEUR'%(j+1,BG[j],BD[j]))
+    else:
+      echo_mess.append( 'ZONE NO %d <> BORNE GAUCHE = %.2f \n'\
+      ' / BORNE DROITE = %.2f'%(j+1,BG[j],BD[j]))
+
+      
+# --- tri des donnees sous-ep. en axial
+  TAMPON,IORDO1,IORDO2,COORYI,COORYS=ASCTLO(MCL_SOUS_EPAIS,RC,ALPHA,LTCHAR,LTCLIM)
+
+  BI     = []
+  BS     = []
+  INDBI  = []
+  INDBS  = []
+  DNY    = []
+  INDSEY = []
+
+  if SYME == 'DEMI':
+#   calcul des zones en axial :
+#   zones  (0,bord inferieur) et (bord inferieur,centre sous-ep.) 
+    ssep   = MCL_SOUS_EPAIS[0]
+    BI.append(0.)
+    BI.append(ssep.ISLP-ssep.ILONP/2.)
+    BS.append(ssep.ISLP-ssep.ILONP/2.)
+    BS.append(ssep.ISLP)
+    INDBI.append(0)  
+    INDBI.append(0)
+    INDBS.append(1)
+    INDBS.append(0)
+    DNY.append(DERAFL)
+    DNY.append(0)
+    DNY.append(ssep.IDENL)
+    DNY.append(0)
+    INDSEY.append(0)
+    INDSEY.append(1)
+    NZONEY=1
+#     
+  else:
+#
+#   calcul des recouvrements de zones en axial  
+    j = 0
+    ICE = 1
+    NBINF = 0
+    NBSUP = 0
+    TYPI=0
+    TYPS=0
+    go40=1
+    go50=1
+    NZONEY=0
+#
+    while go40:
+      j=j+1      
+#
+#     definition de la zone courante (borne inf, borne sup)
+#
+#     typi = type de la borne
+#            0 : borne inf. sous-ep.
+#            1 : borne sup. sous-ep.
+#            2 : centre sous-ep.   
+#
+      if TYPS==2:
+#       cas ou la borne sup. de la zone prec. etait un centre
+        MINI=MINS
+        TYPI=TYPS
+        NUMI=NUMS
+        MINS=TAMPON[j-1][0]
+        if fmod(IORDO2[j-1],2):
+          TYPS = 0
+          NUMS = IORDO1[IORDO2[j-1]/2]
+        else:
+          TYPS = 1
+          NUMS = IORDO1[IORDO2[j-1]/2-1]
+        j=j-1
+      else:
+        if j>= 2*NBSEP :
+          MINI = TAMPON[2*NBSEP-1][0]
+          MINS = MINI
+          if fmod(IORDO2[2*NBSEP-1],2):
+            TYPI = 0
+            NUMI = IORDO1[IORDO2[2*NBSEP-1]/2]
+          else:
+            TYPI = 1
+            NUMI = IORDO1[IORDO2[2*NBSEP-1]/2-1]
+          TYPS=TYPI
+          NUMS=NUMI
+        else:
+          MINI=TAMPON[j-1][0]
+          MINS=TAMPON[j][0]
+          if fmod(IORDO2[j-1],2):
+            TYPI = 0
+            NUMI = IORDO1[IORDO2[j-1]/2]
+          else:
+            TYPI = 1
+            NUMI = IORDO1[IORDO2[j-1]/2-1]
+          if fmod(IORDO2[j],2):
+            TYPS = 0
+            NUMS = IORDO1[IORDO2[j]/2]
+          else:
+            TYPS = 1
+            NUMS = IORDO1[IORDO2[j]/2-1]
+      if fabs(MINI-MINS)<EPSI:
+        if j==2*NBSEP:break
+        else:continue
+
+      while go50:
+        i=ICE
+        if i<=NBSEP:
+#         recherche des centres a intercaler
+          INDC=IORDO1[i-1]
+          if i>1:
+#           le centre est deja le meme que le precedent
+            if fabs(MCL_SOUS_EPAIS[INDC-1].ISLP-MCL_SOUS_EPAIS[IORDO1[i-2]-1].ISLP)<EPSI:
+             ICE=ICE+1  
+             continue
+          if MCL_SOUS_EPAIS[INDC-1].ISLP<MINI:
+#            le centre est la nouvelle borne inf.
+             j=j-1
+             MINS = MINI
+             TYPS = TYPI
+             NUMS = NUMI
+             MINI = MCL_SOUS_EPAIS[INDC-1].ISLP
+             TYPI = 2
+             NUMI = INDC
+             ICE = ICE+1
+          elif MCL_SOUS_EPAIS[INDC-1].ISLP<MINS:
+#            le centre est la nouvelle borne sup.
+            MINS = MCL_SOUS_EPAIS[INDC-1].ISLP
+            TYPS = 2
+            NUMS = INDC
+            ICE = ICE+1
+            continue
+          else:pass
+        NZONEY=NZONEY+1
+#       
+#       code d'intervalles de zone
+#       0 0  = ZONE SOUS-EPAISSEUR
+#       0 1  = SOUS-EPAISSEUR A SUPERIEURE DE LA ZONE
+#       1 0  = SOUS-EPAISSEUR A INFERIEURE DE LA ZONE
+#       1 1  = SOUS EPAISSEUR A SUPERIEURE ET A INFERIEURE DE LA ZONE
+#
+#       cas ou la premiere zone ne commence pas au bord de la plaque
+        if MINI>0. and NZONEY==1:
+          first=0
+          BI.append(0.)
+          BS.append(MINI)
+          if TYPI==0:
+            INDBI.append(0)
+            INDBS.append(1)
+            DNY.append(DERAFL)
+            DNY.append(0)
+            INDSEY.append(0)
+          elif TYPI==1 or TYPI==2:
+            INDBI.append(0)
+            INDBS.append(0)
+            DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
+            DNY.append(0)
+            INDSEY.append(NUMI)
+          else:pass
+          NZONEY = NZONEY+1
+#
+        BI.append(MINI)
+        BS.append(MINS)
+
+        if TYPI==0:
+#         borne inferieure zone = borne inferieure ssep
+          NBINF = NBINF+1
+          INDBI.append(0)
+          INDBS.append(0)
+          if TYPS==0:
+#           borne superieure zone = borne inferieur ssep
+            DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
+            DNY.append(0)
+            INDSEY.append(NUMI)
+          elif TYPS==1 or TYPS==2:
+#           borne superieure zone = borne superieure ssep:TYPS==1
+#           borne superieure zone = centre ssep:TYPS==2
+            LTMP=[]
+            LTMP.append((MCL_SOUS_EPAIS[NUMI-1].IDENL,NUMI))
+            LTMP.append((MCL_SOUS_EPAIS[NUMS-1].IDENL,NUMS))
+            LTMP.sort()
+            DNY.append(LTMP[0][0])
+            DNY.append(0)
+            INDSEY.append(LTMP[0][1])
+          else:pass
+        elif TYPI==1:  
+#         borne inferieure zone=borne superieure ssep
+          NBSUP = NBSUP+1
+          if TYPS==0:
+#           borne superieure zone = borne inferieur ssep
+            if NBSUP==NBINF:
+              INDBI.append(1)
+              INDBS.append(1)        
+              DNY.append(DERAFL)
+              DNY.append(0)
+              INDSEY.append(0)
+            else:
+#             cas tordu: une sous-ep. enveloppe le tout
+              INDBI.append(0)
+              INDBS.append(0)        
+              DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
+              DNY.append(0)
+              INDSEY.append(NUMI)
+          elif TYPS==1 or TYPS==2:
+#           borne superieure zone = borne superieure ssep:TYPS==1
+#           borne superieure zone = centre ssep:TYPS==2
+            INDBI.append(0)
+            INDBS.append(0)        
+            DNY.append(MCL_SOUS_EPAIS[NUMS-1].IDENL)
+            DNY.append(0)
+            INDSEY.append(NUMS)
+          else:pass
+        elif TYPI==2:
+#         borne inferieure zone = centre ssep  
+          INDBI.append(0)
+          INDBS.append(0)        
+          if TYPS==0:
+#           borne superieure zone = borne inferieure ssep
+            DNY.append(MCL_SOUS_EPAIS[NUMI-1].IDENL)
+            DNY.append(0)
+            INDSEY.append(NUMI)
+          elif TYPS==1 or TYPS==2:
+#           borne superieure zone = borne superieure ssep
+            LTMP=[]
+            LTMP.append((MCL_SOUS_EPAIS[NUMI-1].IDENL,NUMI))
+            LTMP.append((MCL_SOUS_EPAIS[NUMS-1].IDENL,NUMS))
+            LTMP.sort()
+            DNY.append(LTMP[0][0])
+            DNY.append(0)
+            INDSEY.append(LTMP[0][1])
+          else:pass
+        else:pass
+        if j<=(2*NBSEP-2) or TYPS==2:
+          iout=0  
+          break #on retourne dans la boucle go40
+        else:
+          iout=1
+          break #on sort definitivement 
+      if iout:break
+
+#   cas ou la derniere zone ne finit pas au bout de la plaque    
+    if MINS<ALPHAR*RC:
+       NZONEY=NZONEY+1
+       BI.append(MINS)
+       BS.append(ALPHAR*RC) 
+       if TYPS==0 or TYPS==2:
+          INDBI.append(0)
+          INDBS.append(0)        
+          DNY.append(MCL_SOUS_EPAIS[NUMS-1].IDENL)
+          DNY.append(0)
+          INDSEY.append(NUMS)
+       elif TYPS==1:
+          INDBI.append(1)
+          INDBS.append(0)        
+          DNY.append(DERAFL)
+          DNY.append(0)
+          INDSEY.append(0)
+       else:pass
+
+    echo_mess.append( '\n')
+    echo_mess.append( 'ZONES APRES RECOUVREMENT ABSC. CURV. LONGIT. :\n')
+    echo_mess.append( '----------------------------------------------- \n')
+
+    for j in range(NZONEY) :
+      if INDBI[j]==0 and INDBS[j]==0 :
+        echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
+        ' / BORNE SUP. = %.2f * SOUS-EPAISSEUR'%(j+1,BI[j],BS[j]))
+      else:
+        echo_mess.append( 'ZONE NO %d <> BORNE INF. = %.2f \n'\
+        ' / BORNE SUP. = %.2f '%(j+1,BI[j],BS[j]))
+
+#   calcul du nombre d'elements longi. et circonf. dans les sous-ep
+    NLX,NLY=ASCNBE(MCL_SOUS_EPAIS,COORXG,COORXD,COORYI,COORYS,BD,BG,BS,BI,
+                   DNX,DNY,RM,RC,INDSEX,INDSEY,IABSC1,IORDO1)
+  
+
+  texte_final=string.join(echo_mess)
+  aster.affiche('MESSAGE',texte_final)
+  return ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY
+
+################################################################################
+################################################################################
+################################################################################
+#     MACR_ASCOUF_MAIL   write_file_dgib_ASCFDO
+#
+#     ECRIT DANS UN FICHIER LES DONNES GIBI DE LA PROCEDURE 
+#     "PLAQUE FISSUREE"
+#
+
+# ------------------------------------------------------------------------------
+def write_file_dgib_ASCFDO(nomFichierDATG,RM,RC,ALPHA,NBTRAN,EP1,EP2,EPI,TETA1,
+                           TETA2,LTRAN,SUREP,LTCHAR,LTCLIM,TYPBOL,AXEAP,AXECP,NT,NS,NC,
+                           SFP,ORIEN,AZIM,RC0,RC2,RC3,POSIT,EPSI,NIVMAG,SYME, loc_datg) :
+
+  if TYPBOL!= None:
+     if TYPBOL=='CUVE'     : TYPEMB = 'typcuv' 
+     if TYPBOL=='GV'       : TYPEMB = 'typegv' 
+     if TYPBOL=='ASP_MPP'  : TYPEMB = 'typapp' 
+  else: 
+     TYPEMB ='      '
+   
+  if POSIT =='DEB_INT'  :
+         POSIT2 = 'interne'
+  else:
+         POSIT2 = 'externe'
+  if   SYME[:6]=='ENTIER' : ZSYME = 'entier'
+  elif SYME[:5]=='QUART'  : ZSYME = 'quart'
+  else :                    ZSYME = 'demi'
+  C=AXECP/2.
+  TETAF=AZIM*pi/180.
+
+  POIVIR = ' ;\n'
+  texte='* DEBUT PARAMETRES UTILISATEUR\n'
+  texte=texte+'*\n'
+  texte=texte+'c        = '+str(C)            +POIVIR
+  texte=texte+'a        = '+str(AXEAP)        +POIVIR
+  texte=texte+'nt       = '+str(NT)           +POIVIR
+  texte=texte+'ns       = '+str(NS)           +POIVIR
+  texte=texte+'nc       = '+str(NC)           +POIVIR
+  texte=texte+'rm       = '+str(RM)           +POIVIR
+  texte=texte+'rc       = '+str(RC)           +POIVIR
+  texte=texte+'alphac   = '+str(ALPHA)        +POIVIR
+  texte=texte+'nbtranep = '+str(NBTRAN)       +POIVIR
+  texte=texte+'ep1      = '+str(EP1)          +POIVIR
+  texte=texte+'ep2      = '+str(EP2)          +POIVIR
+  texte=texte+'epi      = '+str(EPI)          +POIVIR
+  texte=texte+'teta1    = '+str(TETA1)        +POIVIR
+  texte=texte+'teta2    = '+str(TETA2)        +POIVIR
+  texte=texte+'ltran    = '+str(LTRAN)        +POIVIR
+  texte=texte+'posfis   = '+str(SFP)          +POIVIR
+  texte=texte+'ksiref   = '+str(ORIEN)        +POIVIR
+  texte=texte+'surep    = '+str(SUREP)        +POIVIR       
+  texte=texte+'teta_f   = '+str(TETAF)        +POIVIR
+  texte=texte+'rc0      = '+str(RC0)          +POIVIR
+  texte=texte+'rc2      = '+str(RC2)          +POIVIR
+  texte=texte+'rc3      = '+str(RC3)          +POIVIR
+  texte=texte+"pos      = '"+POSIT2+"'"       +POIVIR
+  texte=texte+'lt       = '+str(LTCHAR)       +POIVIR
+  texte=texte+'lgv      = '+str(LTCLIM)       +POIVIR
+  texte=texte+"typembou = '"+TYPEMB+"'"       +POIVIR
+  texte=texte+"zsyme    = '"+ZSYME+"'"        +POIVIR
+  texte=texte+'epsif    = '+str(EPSI)         +POIVIR
+  texte=texte+'nivmag   = '+str(NIVMAG)       +POIVIR
+  texte=texte+'*\n'
+  texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
+  texte = texte + open(os.path.join(loc_datg, 'ascouf_fiss_v4.datg'), 'r').read()
+  fdgib=open(nomFichierDATG,'w')
+  fdgib.write(texte)
+  fdgib.close()
+
+################################################################################
+################################################################################
+################################################################################
+#     MACR_ASCOUF_MAIL   write_file_dgib_ASCSQO
+#
+#     ECRIT DANS UN FICHIER LES DONNEES GIBI DE LA PROCEDURE 
+#     "PLAQUE SOUS-EPAISSEUR"
+#
+#-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
+#
+#     RM    = RAYON MOYEN DU COUDE
+#     RC    = RAYON DE CINTRAGE DU COUDE
+#     ALPHA = ANGLE DU COUDE
+#     NBTRAN = NOMBRE DE TRANSITION D'EPAISSEUR (0, 1 OU 2)
+#     EP1   = EPAISSEUR DU COUDE (COTE EMBOUT 1 SI TRANSITION)
+#     EP2   = EPAISSEUR DU COUDE (COTE EMBOUT 2 SI TRANSITION)
+#     EPI   = EPAISSEUR DU COUDE INTERMEDIAIRE SI TRANSITION A 2 PENTES
+#     TETA1  = ANGLE DE LA PREMIERE TRANSITION D'EPAISSEUR EVENTUELLE
+#     TETA2  = ANGLE DE LA DEUXIEME TRANSITION D'EPAISSEUR EVENTUELLE
+#     LTRAN  = LONGUEUR ENTRE FIN DE L'EMBOUT 1 ET DEBUT DE TRANSITION
+#     LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
+#     LCLIM  = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
+#     GEOM  = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)  
+#     SYME = "QUART" DE STRUCTURE, "DEMI" STRUCTURE OU BIEN "ENTIER"
+#     NBEP = NOMBRE D'ELEMENTS DANS LE COUDE
+#     NLX = NOMBRE D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR
+#     NLY = NOMBRE D'ELEMENTS LONGI DE LA SOUS-EPAISSEUR
+#     SUREP = SUR EPAISSEUR
+
+# ------------------------------------------------------------------------------
+def write_file_dgib_ASCSQO(nomFichierDATG,TYPELE,RM,RC,ALPHA,NBTRAN,EP1,EP2,
+                           EPI,TETA1,MCL_SOUS_EPAIS,TETA2,LTRAN,LTCHAR,LTCLIM,GEOM,
+                           SYME,NBEP,NLX,NLY,NIVMAG,SUREP,AZIMC,loc_datg) :
+
+  ssep= MCL_SOUS_EPAIS[0] 
+  print 'AZIMC', AZIMC;  
+  POIVIR = ' ;\n'
+  texte=' nivmag   = '+str(NIVMAG)       +POIVIR
+  texte=texte+' option dime 3 elem '+TYPELE+' nive nivmag echo 0'+POIVIR
+  texte=texte+'*\n'
+  texte=texte+'coory   = table '+POIVIR
+  texte=texte+'coorz   = table '+POIVIR
+  texte=texte+'prof    = table '+POIVIR
+  texte=texte+'posit   = table '+POIVIR
+  texte=texte+'axisym  = table '+POIVIR
+  texte=texte+'axecir  = table '+POIVIR
+  texte=texte+'axelon  = table '+POIVIR
+  texte=texte+'sousep  = table '+POIVIR
+  texte=texte+'coorzc  = table '+POIVIR
+  texte=texte+'axelonc = table '+POIVIR
+  texte=texte+'*\n'
+  texte=texte+'* DEBUT PARAMETRES UTILISATEUR\n'
+  texte=texte+'*\n'
+  texte=texte+'* parametres generaux\n'
+  texte=texte+'*\n'
+  texte=texte+' pirad    = '+str(pi)            +POIVIR
+  texte=texte+' rm       = '+str(RM)           +POIVIR
+  texte=texte+' rc       = '+str(RC)           +POIVIR
+  texte=texte+' alpha    = '+str(ALPHA)        +POIVIR
+  texte=texte+' lt1      = '+str(LTCHAR)       +POIVIR
+  texte=texte+' lt2      = '+str(LTCLIM)       +POIVIR
+  texte=texte+' nbtranep = '+str(NBTRAN)       +POIVIR
+  texte=texte+' ep1      = '+str(EP1)          +POIVIR
+  texte=texte+' ep2      = '+str(EP2)          +POIVIR
+  texte=texte+' epI      = '+str(EPI)          +POIVIR
+  texte=texte+' teta1    = '+str(TETA1)        +POIVIR
+  texte=texte+' teta2    = '+str(TETA2)        +POIVIR
+  texte=texte+' ltran    = '+repr(LTRAN)       +POIVIR 
+  texte=texte+' surep    = '+str(SUREP)        +POIVIR   
+  if GEOM == 'COUDE':
+    texte=texte+" zcoude = 'oui' "+POIVIR
+  else:
+    texte=texte+" zcoude = 'non' "+POIVIR
+  if SYME == 'ENTIER':
+    texte=texte+" zsyme = 'entier' "+POIVIR
+  elif SYME == 'QUART':
+    texte=texte+" zsyme = 'quart' "+POIVIR
+  else:
+    texte=texte+" zsyme = 'demi' "+POIVIR
+  if TYPELE == 'CU20':
+    texte=texte+" zquad = 'oui' "+POIVIR
+  else:
+    texte=texte+" zquad = 'non' "+POIVIR
+  SCP=pi*RM
+  texte=texte+' nxep   = '+str(NBEP)        +POIVIR
+  texte=texte+'*\n'
+  texte=texte+'* Caracteristiques de la sous-epaisseur\n'
+  texte=texte+'*\n'
+  texte=texte+' azimc = '+str(AZIMC)                                        +POIVIR
+  texte=texte+' tysep = '+str(ssep.ICIRP)                                   +POIVIR
+  texte=texte+' tzsep = '+str(ssep.ILONP)                                   +POIVIR
+  texte=texte+' prof .                      1  = '+str(ssep['PROFONDEUR'])  +POIVIR
+  texte=texte+' ycsep = '+str(SCP-pi*RM)                                    +POIVIR
+  texte=texte+' theta = '+str(ssep.IPHIC)                                   +POIVIR
+  texte=texte+' zcsep = '+repr(ssep.ISLP)                                    +POIVIR
+
+  texte=texte+" posit .                      1  = '"+str(ssep['SOUS_EPAIS'].lower())+"'"+POIVIR
+  texte=texte+' nby   = '+str(int(NLX[0]))                                  +POIVIR
+  texte=texte+' nbz   = '+str(int(NLY[0]))                                  +POIVIR
+  texte=texte+' nbxse = '+str(ssep['NB_ELEM_RADI'])                         +POIVIR
+  texte=texte+' axelonc .                      1  = '+str(ssep['AXE_LONGI'])+POIVIR
+  if ssep['POSI_CURV_LONGI']!=None:
+    texte=texte+' coorzc .                      1  = '+repr(ssep['POSI_CURV_LONGI'])+POIVIR
+  else:
+    DZC=ssep.BETA*pi*(RC+(RM+EP1/2.)*cos(pi/2.))/180.
+    texte=texte+' coorzc .                      1  = '+repr(DZC)+POIVIR
+  if ssep['TYPE']=='AXIS':
+     texte=texte+" zaxis = 'oui' "+POIVIR
+  else:
+     texte=texte+" zaxis = 'non' "+POIVIR
+  if ssep['EMPREINTE'] == 'OUI':
+     texte=texte+" sousep .                      1  = 'oui'"+POIVIR
+  else:
+     texte=texte+" sousep .                      1  = 'non'"+POIVIR
+  texte=texte+'*\n'
+  texte=texte+'* FIN PARAMETRES UTILISATEUR \n'
+  texte = texte + open(os.path.join(loc_datg, 'ascouf_ssep_mono_v1.datg'), 'r').read()
+  fdgib=open(nomFichierDATG,'w')
+  fdgib.write(texte)
+  fdgib.close()
+################################################################################
+################################################################################
+################################################################################
+#     MACR_ASCOUF_MAIL   write_subpart_file_pgib_POST
+#
+#     APPELEE DANS : write_file_pgib_ASCSQ2 , write_file_pgib_ASCSD2
+#     DEFINIE UNE CHAINE DE CARACTERES UTILISEE LORS DE L'ECRITURE DU
+#     FICHIER GIBI DE POST-TRAITEMENTS
+#
+#-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
+#
+#     NLX = NOMBRE D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR
+#     NLY = NOMBRE D'ELEMENTS LONGI DE LA SOUS-EPAISSEUR
+#
+#-----------------DONNEE RENVOYEE PAR ASTER-------------------- 
+# 
+#     texte = chaine de caracteres contenant des instructions gibi
+#             de post-traitements
+#
+# ------------------------------------------------------------------------------
+def write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY):
+  CAR3 = ('fdro','exdr','extr','exga','fgau','inga','intr','indr')
+  
+  POIVIR = ' ;\n'
+  texte='* DEBUT POINTS DE POST-TRAITEMENT\n'
+  texte=texte+'*\n'
+  issep=0
+  for ssep in MCL_SOUS_EPAIS:
+    issep=issep+1
+    texte=texte+'*\n'
+    texte=texte+'* sous-epaisseur No '+str( issep)+'\n'
+    texte=texte+'*\n'
+    if ssep['TYPE'] == 'ELLI':
+      texte=texte+'*\n'
+      texte=texte+'* plans circonf longi et colonne centrale \n'
+      texte=texte+'*\n'
+      texte=texte+'pcirc'+str( issep)+' = circo .'+str(issep).rjust(4)+POIVIR
+      texte=texte+'plong'+str( issep)+' = longi .'+str(issep).rjust(4)+POIVIR
+      texte=texte+'pcent'+str( issep)+' = centr .'+str(issep).rjust(4)+POIVIR
+    texte=texte+'*\n'
+    texte=texte+'* ligaments tous les 45 degres a epaisseur minimale \n'
+    texte=texte+'*\n'
+    texte=texte+'isep = '+str( issep)+POIVIR
+    for k in range(8):
+      texte=texte+'ilig = '+str(k+1)+POIVIR
+      texte=texte+'rlig = ilig/10. + isep'+POIVIR
+      texte=texte+str(CAR3[k])+str( issep)+' = lig45 . rlig'+POIVIR
+    if ssep['TYPE'] == 'ELLI':
+      texte=texte+'*\n'
+      texte=texte+"* ligaments circonferentiels a l'epaisseur minimale\n"
+      texte=texte+'*\n'
+      texte=texte+'isep = '+str(issep)+POIVIR
+      for k in range(2*NLX[issep-1]+1):
+        texte=texte+'ilig = '+str(k+1)+POIVIR
+        texte=texte+'rlig = ilig/100. + isep'+POIVIR
+        texte=texte+'cir'+str(issep)+'_'+str(k+1)+' = ligcir . rlig'+POIVIR
+      texte=texte+'*\n'
+      texte=texte+"* ligaments longitudinaux a l'epaisseur minimale\n"                        
+      texte=texte+'* \n'
+      for k in range(2*NLY[issep-1]+1):
+        texte=texte+'ilig = '+str(k+1)+POIVIR
+        texte=texte+'rlig = ilig/100. + isep'+POIVIR
+        texte=texte+'lon'+str(issep)+'_'+str(k+1)+' = liglon . rlig'+POIVIR
+  texte=texte+'* FIN POINTS DE POST-TRAITEMENT\n'
+  return texte
+
+################################################################################
+################################################################################
+################################################################################
+#     MACR_ASCOUF_MAIL   write_file_pgib_ASCSQ2
+#
+#     ECRIT DANS UN FICHIER  LES DONNEES GIBI DE LA PROCEDURE
+#     "PLAQUE SOUS-EPAISSEURS"
+#     IL S'AGIT DE LA DEUXIEME PARTIE ( APRES LES DONNEES UTILISATEUR )
+#
+#
+#-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
+#
+#     NLX = NOMBRE TOTAL D'ELEMENTS CIRCONF. DE LA SOUS-EPAISSEUR K
+#     NLY = NOMBRE TOTAL D'ELEMENTS LONGIT. DE LA SOUS-EPAISSEUR K
+
+# ------------------------------------------------------------------------------
+def write_file_pgib_ASCSQ2(MCL_SOUS_EPAIS,NLX,NLY):
+  POIVIR = ' ;\n'
+  texte=write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY)
+  texte=texte+'*\n'
+  texte=texte+'p1 = 0. 0. (-1.*lt1)'+POIVIR
+  texte=texte+'p2 = 0. 0. (coor 3 bou3)'+POIVIR
+  texte=texte+'ma = coude et p1 et p2'+POIVIR
+  texte=texte+"opti sauv form 'fort.8'"+POIVIR
+  texte=texte+'sort ma'+POIVIR
+  texte=texte+'sauv form ma'+POIVIR
+  texte=texte+'fin'+POIVIR
+  fpgib=open('fort.71','w')
+  fpgib.write(texte)
+  fpgib.close()
+
+################################################################################
+################################################################################
+################################################################################
+#     MACR_ASCOUF_MAIL   write_file_pgib_ASCSP1
+#
+#     ECRIT DANS UN FICHIER  LES DONNEES GIBI DE LA PROCEDURE
+#     "PLAQUE SOUS-EPAISSEURS"
+#     IL S'AGIT DE LA PREMIERE PARTIE ( AVANT LES DONNEES UTILISATEUR )
+#
+#
+# ------------------------------------------------------------------------------
+def write_file_dgib_ASCSP1(nomFichierDATG,TYPELE,MCL_SOUS_EPAIS,NIVMAG,loc_datg):
+
+  POIVIR = ' ;\n'
+  texte=' nivmag = '+str(NIVMAG)+POIVIR
+  texte=texte+' option dime 3 elem '+TYPELE+' nive nivmag echo 0 '+POIVIR
+  texte=texte+'*\n'
+  texte=texte+'bg      = table '+POIVIR
+  texte=texte+'bd      = table '+POIVIR
+  texte=texte+'bi      = table '+POIVIR
+  texte=texte+'bs      = table '+POIVIR
+  texte=texte+'indbg   = table '+POIVIR
+  texte=texte+'indbd   = table '+POIVIR
+  texte=texte+'indbi   = table '+POIVIR
+  texte=texte+'indbs   = table '+POIVIR
+  texte=texte+'axecir  = table '+POIVIR
+  texte=texte+'axelon  = table '+POIVIR
+  texte=texte+'axelonc = table '+POIVIR
+  texte=texte+'coorzc  = table '+POIVIR
+  texte=texte+'prof    = table '+POIVIR
+  texte=texte+'posit   = table '+POIVIR
+  texte=texte+'coory   = table '+POIVIR
+  texte=texte+'coorz   = table '+POIVIR   
+  texte=texte+'deny    = table '+POIVIR
+  texte=texte+'nbely   = table '+POIVIR
+  texte=texte+'denz    = table '+POIVIR
+  texte=texte+'nbelz   = table '+POIVIR
+  texte=texte+'axisym  = table '+POIVIR
+  texte=texte+'sousep  = table '+POIVIR
+  texte=texte+'* \n'  
+  texte = texte + open(os.path.join(loc_datg, 'ascouf_ssep_mult_v1.datg'), 'r').read()
+  fdgib=open(nomFichierDATG,'w')
+  fdgib.write(texte)
+  fdgib.close()
+  
+################################################################################
+################################################################################
+################################################################################
+#     MACR_ASCOUF_MAIL   write_file_pgib_ASCSDO
+#
+#     ECRIT DANS UN FICHIER  LES DONNEES GIBI DE LA PROCEDURE
+#     "PLAQUE SOUS-EPAISSEURS"
+#
+#-----------------DONNEES FOURNIES PAR L'UTILISATEUR--------------------
+#
+#     RM    = RAYON MOYEN DU COUDE
+#     RC    = RAYON DE CINTRAGE DU COUDE
+#     ALPHA = ANGLE DU COUDE
+#     EP    = EPAISSEUR DU COUDE
+#     LTCHAR = LONGUEUR DE L'EMBOUT DU COTE CHARGEMENT
+#     LCLIM  = LONGUEUR DE L'EMBOUT DU COTE CONDITIONS AUX LIMITES
+#     GEOM  = TYPE DE GEOMETRIE MODELISEE (COUDE OU TUBE)  
+#     SYME = QUART DE STRUCTURE SI 'OUI'
+#     INDBG = INDICATEUR BORD GAUCHE DE LA ZONE CIRCONF J
+#     INDBD = INDICATEUR BORD DROIT DE LA ZONE CIRCONF J
+#     BG = ABSCISSE DU BORD GAUCHE DE LA ZONE CIRCONF J
+#     BD = ABSCISSE DU BORD DROIT DE LA ZONE CIRCONF J
+#     BI = ORDONNEE DU BORD INFERIEUR DE LA ZONE LONGI J
+#     BS = ORDONNEE DU BORD SUPERIEUR DE LA ZONE LONGI J
+#     INDBI = INDICATEUR BORD INFERIEUR DE LA ZONE LONGI J
+#     INDBS = INDICATEUR BORD SUPERIEUR DE LA ZONE LONGI J
+#     INDSEX = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE CIRCONF J
+#     INDSEY = NUMERO DE SOUS-EPAISSEUR CONTENU DANS LA ZONE LONGI J
+#     DNX = DENSITE ET NOMBRE D'ELEMENTS CIRCONF. DE LA ZONE J
+#     DNY = DENSITE ET NOMBRE D'ELEMENTS LONGIT. DE LA ZONE J
+#     NZONEX = NOMBRE DE ZONES CIRCONFERENTIELLES
+#     NZONEY = NOMBRE DE ZONES LONGITUDINALES  
+#
+# ------------------------------------------------------------------------------
+def write_file_pgib_ASCSDO(RM,RC,ALPHA,EP,LTCLIM,LTCHAR,NBEP,SUREP,
+                           NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,
+                           DNX,DNY,MCL_SOUS_EPAIS,GEOM,SYME):
+
+  POIVIR = ' ;\n'
+  NY=20
+  DELTAY=2.*pi*RM/NY
+
+  def nint(x):
+    if 0<ceil(x)-x<=0.5:
+      return int(ceil(x))
+    else:
+      return int(floor(x))
+
+# conversion des densites de raffinement des embout en degres par rapport
+# a l'angle du coude
+  RTMP=nint(LTCHAR/DELTAY)*DELTAY/4.
+  DENSTU = RTMP*360./(2.*pi*RC)
+  DENSGV = DENSTU
+  NZT=0
+  NZGV=0
+
+  texte='* DEBUT PARAMETRES UTILISATEUR \n'
+  texte=texte+'*\n'
+  texte=texte+'* parametres generaux\n'
+  texte=texte+'*\n'
+  texte=texte+'rm       = '+str(RM)               +POIVIR
+  texte=texte+'rc       = '+str(RC)               +POIVIR
+  texte=texte+'alphac   = '+str(ALPHA)            +POIVIR
+  texte=texte+'epc      = '+str(EP)               +POIVIR
+  texte=texte+'pirad    = '+str(pi)               +POIVIR
+  texte=texte+'lgv      = '+str(LTCLIM)           +POIVIR
+  texte=texte+'lt       = '+str(LTCHAR)           +POIVIR
+  texte=texte+'lcoude   = '+str(ALPHA*pi/180.*RC) +POIVIR
+  if GEOM == 'COUDE':
+    texte=texte+"zcoude = 'oui' "     +POIVIR
+  else:
+    texte=texte+"zcoude = 'non' "     +POIVIR
+  if SYME == 'ENTIER':
+    texte=texte+"zsyme = 'entier' "   +POIVIR
+  elif SYME == 'QUART':
+    texte=texte+"zsyme = 'quart' "    +POIVIR
+  else:
+    texte=texte+"zsyme = 'demi' "     +POIVIR
+  texte=texte+'nxep   = '+str(NBEP)   +POIVIR
+  texte=texte+'nzt    = '+str(NZT)    +POIVIR
+  texte=texte+'nzgv   = '+str(NZGV)   +POIVIR
+  texte=texte+'daxhtu = '+str(DENSTU) +POIVIR
+  texte=texte+'daxhgv = '+str(DENSGV) +POIVIR
+  texte=texte+'*\n'
+  
+  texte=texte+'* Zones couvertes en circonference\n'
+  texte=texte+'*\n'
+  for j in range(NZONEX):
+    texte=texte+'bg .'   +str(j+1).rjust(23)+' = '+str(BG[j]-pi*RM)     +POIVIR
+    texte=texte+'bd .'   +str(j+1).rjust(23)+' = '+str(BD[j]-pi*RM)     +POIVIR
+    texte=texte+'indbg .'+str(j+1).rjust(23)+' = '+str(INDBG[j])        +POIVIR
+    texte=texte+'indbd .'+str(j+1).rjust(23)+' = '+str(INDBD[j])        +POIVIR
+    texte=texte+'deny .' +str(j+1).rjust(23)+' = '+str(DNX[2*j])        +POIVIR
+    texte=texte+'nbely .'+str(j+1).rjust(23)+' = '+str(int(DNX[2*j+1])) +POIVIR
+    texte=texte+'*\n'
+    
+  texte=texte+'* Zones couvertes longitudinalement\n'
+  texte=texte+'*\n'
+  for j in range(NZONEY):
+    texte=texte+'bi .'   +str(j+1).rjust(23)+' = '+str(BI[j])           +POIVIR
+    texte=texte+'bs .'   +str(j+1).rjust(23)+' = '+str(BS[j])           +POIVIR
+    texte=texte+'indbi .'+str(j+1).rjust(23)+' = '+str(INDBI[j])        +POIVIR
+    texte=texte+'indbs .'+str(j+1).rjust(23)+' = '+str(INDBS[j])        +POIVIR
+    texte=texte+'denz .' +str(j+1).rjust(23)+' = '+str(DNY[2*j])        +POIVIR
+    texte=texte+'nbelz .'+str(j+1).rjust(23)+' = '+str(int(DNY[2*j+1])) +POIVIR
+    texte=texte+'*\n'
+  texte=texte+'* Caracteristiques des sous-epaisseurs\n'
+  texte=texte+'*\n'
+  issep=0
+  for ssep in MCL_SOUS_EPAIS:
+     issep=issep+1
+     texte=texte+'axecir .' +str(issep).rjust(23)+' = '+str(ssep.ICIRP)        +POIVIR
+     texte=texte+'axelon .' +str(issep).rjust(23)+' = '+str(ssep.ILONP)        +POIVIR
+     texte=texte+'prof .'   +str(issep).rjust(23)+' = '+str(ssep['PROFONDEUR'])+POIVIR
+     texte=texte+'coory .'  +str(issep).rjust(23)+' = '+str(ssep.ISCP-pi*RM)   +POIVIR
+     texte=texte+'coorz .'  +str(issep).rjust(23)+' = '+str(ssep.ISLP)         +POIVIR
+     texte=texte+'posit .'  +str(issep).rjust(23)+" = '"+str(ssep['SOUS_EPAIS'].lower())+"'"+POIVIR
+     texte=texte+'axelonc .'+str(issep).rjust(23)+' = '+str(ssep['AXE_LONGI']) +POIVIR
+     if ssep['POSI_CURV_LONGI']!=None:
+       texte=texte+'coorzc .'+str(issep).rjust(23)+' = '+str(ssep['POSI_CURV_LONGI'])+POIVIR
+     else:
+       DZC=ssep.BETA*pi*(RC+(RM+EP/2.)*cos(pi/2.))/180.
+       texte=texte+'coorzc .'+str(issep).rjust(23)+' = '+str(DZC)+POIVIR
+     if ssep['TYPE']=='AXIS':
+       texte=texte+'axisym .'+str(issep).rjust(23)+" = 'oui'"+POIVIR
+     else:
+       texte=texte+'axisym .'+str(issep).rjust(23)+" = 'non'"+POIVIR
+     if ssep['EMPREINTE'] == 'OUI':
+       texte=texte+'sousep .'+str(issep).rjust(23)+" = 'oui'"+POIVIR
+     else:
+       texte=texte+'sousep .'+str(issep).rjust(23)+" = 'non'"+POIVIR
+  texte=texte+'*\n'  
+
+  texte=texte+'* Caracteristique de sur-epaisseur\n'
+  texte=texte+'surep    = '+str(SUREP)            +POIVIR
+  texte=texte+'* \n'
+  texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
+  fpgib=open('fort.71','w') 
+  fpgib.write(texte)
+  fpgib.close()
+  
+################################################################################
+################################################################################
+################################################################################
+
+# ------------------------------------------------------------------------------
+def write_file_pgib_ASCSP2(MCL_SOUS_EPAIS,NLX,NLY):
+
+  POIVIR = ' ;\n'
+  texte='*\n'
+  texte=texte+'coude extube bord1 clgv  bord2 peauext peauint placoude platube\n'
+  texte=texte+'plagv  longi  circo centr bou1  bou3  ligmed  ligtub liggv lig45\n'
+  texte=texte+'ligcir liglon bordtu\n'
+  texte=texte+'= PLAQSEP bg bd bi bs indbg indbd indbi indbs rm rc\n'
+  texte=texte+'alphac pirad epc lt lgv coory coorz axecir axelon prof zsyme posit\n'
+  texte=texte+'lcoude nxep sousep deny nbely denz nbelz axelonc coorzc axisym\n'
+  texte=texte+'daxhtu daxhgv nzt nzgv zcoude surep'+POIVIR
+  texte=texte+'fdromi   = ligmed .   1'+POIVIR
+  texte=texte+'exdrmi   = ligmed .   2'+POIVIR
+  texte=texte+'extrmi   = ligmed .   3'+POIVIR
+  texte=texte+'exgami   = ligmed .   4'+POIVIR
+  texte=texte+'fgaumi   = ligmed .   5'+POIVIR
+  texte=texte+'ingami   = ligmed .   6'+POIVIR
+  texte=texte+'intrmi   = ligmed .   7'+POIVIR
+  texte=texte+'indrmi   = ligmed .   8'+POIVIR
+  texte=texte+'fdrotu   = ligtub .   1'+POIVIR
+  texte=texte+'exdrtu   = ligtub .   2'+POIVIR
+  texte=texte+'extrtu   = ligtub .   3'+POIVIR
+  texte=texte+'exgatu   = ligtub .   4'+POIVIR
+  texte=texte+'fgautu   = ligtub .   5'+POIVIR
+  texte=texte+'ingatu   = ligtub .   6'+POIVIR
+  texte=texte+'intrtu   = ligtub .   7'+POIVIR
+  texte=texte+'indrtu   = ligtub .   8'+POIVIR
+  texte=texte+"si (ega zsyme 'entier')"+POIVIR
+  texte=texte+'   fdrogv   = liggv  .  1'+POIVIR
+  texte=texte+'   exdrgv   = liggv .   2'+POIVIR
+  texte=texte+'   extrgv   = liggv .   3'+POIVIR
+  texte=texte+'   exgagv   = liggv .   4'+POIVIR
+  texte=texte+'   fgaugv   = liggv .   5'+POIVIR
+  texte=texte+'   ingagv   = liggv .   6'+POIVIR
+  texte=texte+'   intrgv   = liggv .   7'+POIVIR
+  texte=texte+'   indrgv   = liggv .   8'+POIVIR
+  texte=texte+'finsi'+POIVIR
+  texte=texte+'*\n'
+  
+  text2=write_subpart_file_pgib_POST(MCL_SOUS_EPAIS,NLX,NLY)
+  texte=texte+text2
+  
+  texte=texte+'*\n'
+  texte=texte+'*oeil = 10000. 0. 0.' +POIVIR
+  texte=texte+'*trac oeil cach coude'+POIVIR
+  texte=texte+'*opti donn 5'         +POIVIR
+  texte=texte+'p1 = 0. 0. (-1.*lt)'+POIVIR
+  texte=texte+'p2 = 0. 0. (coor 3 bou3)'+POIVIR
+  texte=texte+'ma = coude et p1 et p2'+POIVIR
+  texte=texte+'sort ma'+POIVIR
+  texte=texte+'neu = nbno ma'+POIVIR
+  texte=texte+"mess 'nombre de noeuds : 'neu"+POIVIR
+  texte=texte+"opti sauv form 'fort.8'"+POIVIR
+  texte=texte+'sauv form ma'+POIVIR
+  texte=texte+'fin'+POIVIR
+  fpgib=open('fort.71','a') 
+  fpgib.write(texte)
+  fpgib.close()  
+
+################################################################################
+################################################################################
+################################################################################
+
+# ------------------------------------------------------------------------------
+def write_file_dgib_ASCRDO(nomFichierDATG,TYPELE,NIVMAG,TYPBOL,ALPHA,RC,RM,EP,SUREP,
+                           LTCLIM,LTCHAR,NBEP,loc_datg):
+
+  NY=20
+  CZ=ALPHA*RC*pi/180.
+  NZC=int((ALPHA+0.00001)/5.)
+  DELTAY=2.*pi*RM/20
+  DELTAZ=CZ/NZC
+  DENEXT=int(LTCHAR/DELTAY)*DELTAY/4.
+  NZT=0
+  NZGV=0
+  
+  if TYPBOL!=None:
+     if TYPBOL=='CUVE'     : TYPEMB = 'typcuv' 
+     if TYPBOL=='GV'       : TYPEMB = 'typegv' 
+     if TYPBOL=='ASP_MPP'  : TYPEMB = 'typapp' 
+  else: 
+     TYPEMB ='      '
+   
+  POIVIR = ' ;\n'
+  texte='* DEBUT PARAMETRES UTILISATEUR\n'
+  texte=texte+'*\n'
+  texte=texte+'* Parametres generaux\n'
+  texte=texte+'*\n'
+  texte=texte+'nivmag   = '+str(NIVMAG)       +POIVIR
+  texte=texte+'option dime 3 elem '+TYPELE+' nive nivmag echo 0'+POIVIR
+  texte=texte+'rm       = '+str(RM)           +POIVIR
+  texte=texte+'rc       = '+str(RC)           +POIVIR
+  texte=texte+'alphac   = '+str(ALPHA)        +POIVIR
+  texte=texte+'epc      = '+str(EP)           +POIVIR
+  texte=texte+'surep    = '+str(SUREP)        +POIVIR       
+  texte=texte+'lgv      = '+str(LTCLIM)       +POIVIR
+  texte=texte+'lt       = '+str(LTCHAR)       +POIVIR
+  texte=texte+"typembou = '"+TYPEMB+"'"       +POIVIR
+  texte=texte+'nx       = '+str(NBEP)         +POIVIR
+  texte=texte+'ny       = '+str(NY)           +POIVIR
+  texte=texte+"pos      = 'bidon'"            +POIVIR
+  texte=texte+'l1       = 0.'                 +POIVIR
+  texte=texte+'lbloc    = 0.'                 +POIVIR
+  texte=texte+'crit     = 0.0001'             +POIVIR
+  texte=texte+'crit2    = 0.01'               +POIVIR
+  texte=texte+'epsit    = 1.e-3'              +POIVIR
+  texte=texte+'pirad    = '+str(pi)           +POIVIR
+  texte=texte+'nzc      = '+str(NZC)          +POIVIR
+  texte=texte+'teta_f   = '+str(pi/2.)        +POIVIR
+  texte=texte+'zpp31    = '+str(CZ)           +POIVIR
+  texte=texte+'daxbtu   = '+str(DENEXT)       +POIVIR
+  texte=texte+'daxhtu   = '+str(DELTAZ)       +POIVIR
+  texte=texte+'daxbgv   = '+str(DELTAZ)       +POIVIR
+  texte=texte+'daxhgv   = '+str(DENEXT)       +POIVIR
+  texte=texte+'nzt      = '+str(NZT)          +POIVIR
+  texte=texte+'nzgv     = '+str(NZGV)         +POIVIR
+  texte=texte+'*\n'
+  texte=texte+'* FIN PARAMETRES UTILISATEUR\n'
+  texte = texte + open(os.path.join(loc_datg, 'ascouf_regl_v1.datg'), 'r').read()
+  fdgib=open(nomFichierDATG,'w')
+  fdgib.write(texte)
+  fdgib.close()
+  
+################################################################################
+################################################################################
+################################################################################
+# ------------------------------------------------------------------------------
+def macr_ascouf_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,COUDE,
+                              SOUS_EPAIS_COUDE,SOUS_EPAIS_MULTI,
+                              FISS_COUDE,IMPRESSION,INFO,**args):
+  """
+     Ecriture de la macro MACR_ASCOUF_MAIL
+  """
+  from Accas import _F
+  import types
+  import aster 
+
+  ier=0
+  
+# On importe les definitions des commandes a utiliser dans la macro
+  EXEC_LOGICIEL =self.get_cmd('EXEC_LOGICIEL')
+  PRE_GIBI      =self.get_cmd('PRE_GIBI')
+  LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE')
+  DEFI_GROUP    =self.get_cmd('DEFI_GROUP')
+  MODI_MAILLAGE =self.get_cmd('MODI_MAILLAGE')
+  CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
+  DEFI_FICHIER  =self.get_cmd('DEFI_FICHIER')
+  IMPR_RESU     =self.get_cmd('IMPR_RESU')
+
+# La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  
+  TYPELE = TYPE_ELEM
+  NIVMAG = EXEC_MAILLAGE['NIVE_GIBI']
+  PRECIS = 0.01
+  CRITER = 'RELATIF'
+  CAR3   = ('IFDRO','IEXDR','IEXTR','IEXGA','IFGAU','IINGA','IINTR','IINDR')
+  CAR4   = ('NOFDRO','NOEXDR','NOEXTR','NOEXGA','NOFGAU','NOINGA','NOINTR','NOINDR')
+  CAR5   = ('NEFDRO','NEEXDR','NEEXTR','NEEXGA','NEFGAU','NEINGA','NEINTR','NEINDR')
+  CAR6   = ('FDRO','EXDR','EXTR','EXGA','FGAU','INGA','INTR','INDR')
+  SECT   = ('MI','TU','GV')  
+  
+#
+################################################################################
+#     --- caracteristiques du coude ---
+################################################################################
+#
+  GEOM    =COUDE['TRANSFORMEE']
+  ALPHA   =COUDE['ANGLE']
+  RC      =COUDE['R_CINTR']
+  LTCHAR  =COUDE['L_TUBE_P1']
+  LTCLIM  =COUDE['L_TUBE_P2']
+  NBEP    =COUDE['NB_ELEM_EPAIS']
+  SYME    =COUDE['SYME']
+  SUREP   =0.0
+  TYPBOL  = None
+#
+  if COUDE['TRANSFORMEE']=='COUDE' or COUDE['TRAN_EPAIS']=='NON' :
+     SUREP=COUDE['SUR_EPAIS']
+     TYPBOL  =COUDE['BOL_P2']
+     DEXT   = COUDE['DEXT']
+     EP1    = COUDE['EPAIS']
+     EP2    = EP1
+     EPI    = 0.0
+     TETA1  = 0.0
+     TETA2  = 0.0
+     LTRAN  = 0.0
+     NBTRAN = 0
+  else:
+     NBTRAN = 1
+     if COUDE['SYME']!='ENTIER':
+        UTMESS('F','ASCOUF0_13')
+#
+     DEXT  = COUDE['DEXT_T1']
+     EP1   = COUDE['EPAIS_T1']
+     EP2   = COUDE['EPAIS_T2']
+     TETA1 = COUDE['ANGL_TETA1']
+     TETA2 = 0.0
+     EPI   = 0.0
+     if COUDE['ANGL_TETA2']!=None :
+       NBTRAN = 2
+       TETA2 = COUDE['ANGL_TETA2']
+       EPI   = COUDE['EPAIS_TI']
+#
+     if COUDE['ABSC_CURV_TRAN']!=None :
+       LTRAN   = COUDE['ABSC_CURV_TRAN']
+     else :
+       LTRAN   = COUDE['POSI_ANGU_TRAN']* RC * pi / 180.0
+#
+  RM  = (DEXT-EP1)/2.0
+  RM2 = RM + (EP2-EP1)/2.0
+  R1  = RC
+  R2  = RM
+  E   = EP1
+#
+  if COUDE['SYME']!='ENTIER' and (LTCHAR!=LTCLIM) :
+     UTMESS('F','ASCOUF0_14')
+#
+  LAMOR = 3.0/2.0 * sqrt( RM*RM*RM / EP1)
+  if LTCHAR<LAMOR :
+     UTMESS('A','ASCOUF0_15',valr=LAMOR)
+#
+  LAMOR = 3.0/2.0 * sqrt( RM2*RM2*RM2 / EP2)
+  if LTCLIM<LAMOR :
+     UTMESS('A','ASCOUF0_16',valr=LAMOR)
+#
+  if TYPBOL!=None:
+   if TYPBOL[:1]=='GV' :
+     UTMESS('A','ASCOUF0_17')
+#
+################################################################################
+#     --- caracteristiques de la fissure ---
+################################################################################
+#
+  if FISS_COUDE!=None:
+     if NBEP!=3:
+        UTMESS('A','ASCOUF0_18')
+     FPROF = FISS_COUDE['PROFONDEUR']
+     FAXI  = FISS_COUDE['AXIS']
+     if FAXI=='NON' and FISS_COUDE['LONGUEUR']==None :
+        UTMESS('F','ASCOUF0_19')
+     if FAXI=='OUI' and FISS_COUDE['LONGUEUR']!=None :
+        UTMESS('A','ASCOUF0_20')
+     if FISS_COUDE['LONGUEUR']!=None : FLONG = FISS_COUDE['LONGUEUR']
+     if FAXI=='OUI' :
+####    on prend une marge de securite a cause des modifs dans ascfis
+        FLONG = 2.0 * pi * (RM + EP1)
+     if FISS_COUDE['ABSC_CURV']!=None :
+         SF     = FISS_COUDE['ABSC_CURV']
+         LDEFAU = SF
+         BETA   = 0.0
+     else:
+         SF     = 0.0
+         BETA   = FISS_COUDE['POSI_ANGUL']
+         LDEFAU = BETA * RC * pi / 180.0
+     AZIM   = FISS_COUDE['AZIMUT']
+     ORIEN  = FISS_COUDE['ORIEN']
+     POSIT  = FISS_COUDE['FISSURE']
+     NT     = FISS_COUDE['NB_TRANCHE']
+     NS     = FISS_COUDE['NB_SECTEUR']
+     NC     = FISS_COUDE['NB_COURONNE']
+     if FISS_COUDE['RAYON_TORE']!=None    : RC0 = FISS_COUDE['RAYON_TORE']
+     else :                                 RC0 = 0.
+     if FISS_COUDE['COEF_MULT_RC2']!=None : RC2 = FISS_COUDE['COEF_MULT_RC2']
+     else :                                 RC2 = 0.
+     if FISS_COUDE['COEF_MULT_RC3']!=None : RC3 = FISS_COUDE['COEF_MULT_RC3']
+     else :                                 RC3 = 0.
+     EPSI   = FISS_COUDE['ANGL_OUVERTURE']
+     OR     = ORIEN
+     AZ     = AZIM
+     POS    = POSIT
+     DGAXEC = FLONG/2.0
+     DC     = DGAXEC
+     if ORIEN!=90.0 and NBTRAN!=0 :
+        UTMESS('F','ASCOUF0_21')
+     if ORIEN!=90.0 and NBTRAN!=0 :
+        UTMESS('F','ASCOUF0_21')
+     if ORIEN!=90.0 and COUDE['SYME']!='ENTIER' :
+        UTMESS('F','ASCOUF0_23')
+     if ORIEN!=90.0 and FAXI=='OUI' :
+        UTMESS('F','ASCOUF0_24')
+#
+################################################################################
+#     --- caracteristiques des sous epaisseurs ---
+################################################################################
+#
+  isep = 0
+  MCL_SOUS_EPAIS = None
+  if SOUS_EPAIS_MULTI!=None : MCL_SOUS_EPAIS = SOUS_EPAIS_MULTI
+  if SOUS_EPAIS_COUDE!=None : MCL_SOUS_EPAIS = SOUS_EPAIS_COUDE
+  if SOUS_EPAIS_MULTI!=None and NBTRAN!=0 :
+     UTMESS('F','ASCOUF0_25')
+  if SOUS_EPAIS_COUDE!=None and FISS_COUDE!=None and NBTRAN!=0 :
+     UTMESS('F','ASCOUF0_26')
+  if MCL_SOUS_EPAIS!=None :
+     AZIM = 90.0
+     if MCL_SOUS_EPAIS.__class__.__name__  !='MCList' : MCL_SOUS_EPAIS=[MCL_SOUS_EPAIS,]
+     if len(MCL_SOUS_EPAIS)!=1 and COUDE['SYME']!='ENTIER' :
+        UTMESS('F','ASCOUF0_27')
+     for ssep in MCL_SOUS_EPAIS :
+        isep=isep+1
+        if ssep['AXE_CIRC']!=None and ssep['TYPE']=='AXIS' :
+           UTMESS('F','ASCOUF0_28')
+        if ssep['AXE_CIRC']==None and ssep['TYPE']=='ELLI' :
+           UTMESS('F','ASCOUF0_29')
+        if ssep['POSI_CURV_LONGI']!=None:
+           if ssep['POSI_CURV_LONGI']>(ALPHA*RC*pi/180.0) :
+              UTMESS('F','ASCOUF0_30',vali=[isep],valr=[ssep['POSI_CURV_LONGI'],ALPHA*RC*pi/180.0])
+           LDEFAU = ssep['POSI_CURV_LONGI'] + ssep['AXE_LONGI']/2.0
+           BETA = 0.0
+        else:
+           BETA=ssep['POSI_ANGUL']
+           if (BETA<0.) or (BETA>ALPHA) :
+              UTMESS('F','ASCOUF0_31',vali=[isep],valr=[BETA,ALPHA])
+           LDEFAU = (BETA*RC*pi/180.0) + ssep['AXE_LONGI']/2.0
+#
+        if ssep['POSI_CURV_CIRC']!=None:
+           if ssep['POSI_CURV_CIRC']>(2*pi*RM) :
+              UTMESS('F','ASCOUF0_32',vali=[isep],valr=[ssep['POSI_CURV_CIRC'],2*pi*RM])
+           if ssep['POSI_CURV_CIRC']!=(pi*RM) and ssep['TYPE']=='AXIS':
+              UTMESS('F','ASCOUF0_33')
+        else:
+           ssep.IPHIC=ssep['AZIMUT']
+           if ssep['AZIMUT']!=180. and ssep['TYPE']=='AXIS':
+              UTMESS('F','ASCOUF0_34')
+#        l_ITYPE.append(ssep['TYPE'           ])
+#        l_ICIRC.append(ssep['AXE_CIRC'       ])
+#        l_ILONC.append(ssep['AXE_LONGI'      ])
+#        l_IPROC.append(ssep['PROFONDEUR'     ])
+#        l_ISLC.append( ssep['POSI_CURV_LONGI'])
+#        l_IBETC.append(BETA)
+        ssep.BETA=BETA
+#        l_ISCC.append( ssep['POSI_CURV_CIRC' ])
+#        l_IPHIC.append(ssep['AZIMUT'         ])
+#        l_IPOS.append( ssep['SOUS_EPAIS'     ])
+#        l_INBEL.append(ssep['NB_ELEM_LONGI'  ])
+#        l_INBEC.append(ssep['NB_ELEM_CIRC'   ])
+#        l_IEVID.append(ssep['EMPREINTE'      ])
+
+     if SOUS_EPAIS_COUDE!=None and COUDE['NB_ELEM_EPAIS']!=3 :
+        UTMESS('A','ASCOUF0_35')
+#
+################################################################################
+#     --- verifications de coherences ---
+################################################################################
+#
+# donnees globales
+  if COUDE['TRANSFORMEE']=='COUDE' or COUDE['TRAN_EPAIS']=='NON' :
+    if SUREP<0. or SUREP>(RM-EP1/2.0):
+
+       UTMESS('F','ASCOUF0_36',vali=SUREP,valr=RM-EP1/2.0)
+  if RC<=(RM+EP1/2.0):
+     UTMESS('F','ASCOUF0_37',valr=[RC,RM+EP1/2.0])
+#
+# coude fissure
+#
+  if FISS_COUDE!=None:
+    if (RM/EP1)<5. or (RM/EP1)>50.:
+       UTMESS('F','ASCOUF0_38',valr=RM/EP1)
+    if FISS_COUDE['ABSC_CURV']!=None:
+     if SF<0. or SF>(ALPHA*RC*pi/180.0) :
+       UTMESS('F','ASCOUF0_39',valr=[SF,ALPHA*RC*pi/180.0])
+    if (NT-2*(NT/2))!=0:
+       UTMESS('F','ASCOUF0_40',vali=NT)
+    if FISS_COUDE['ABSC_CURV'] and ((BETA<0.) or (BETA>ALPHA)):
+       UTMESS('F','ASCOUF0_41',valr=[BETA,ALPHA])
+#
+# transition d epaisseur
+#
+  if NBTRAN!=0:
+    LCOUDE = ALPHA * RC * pi / 180.0
+    DEXT = 2.0*RM + EP1
+    if (LTRAN<LDEFAU) and (LTRAN>LCOUDE) :
+       UTMESS('F','ASCOUF0_42',valr=[LTRAN,LDEFAU,LCOUDE])
+    if (TETA1<0.) or (TETA1>30.) :
+       UTMESS('F','ASCOUF0_43',valr=[TETA1])  
+#
+# transition d epaisseur a une pente
+#
+    if NBTRAN==1:
+       if (EP1<12.) or (EP1>80.) :
+          UTMESS('F','ASCOUF0_44',valr=[EP1])
+       if (EP2<20.) or (EP2>110.) :
+          UTMESS('F','ASCOUF0_45',valr=[EP2])
+       if (EP1>EP2) :
+          UTMESS('F','ASCOUF0_46')
+       LTRANF = LTRAN + ((EP2-EP1)/(tan(TETA1)))
+       if (LTRANF>LCOUDE) :
+          UTMESS('F','ASCOUF0_47',valr=[LTRANF,LCOUDE])
+       if DEXT<112. or DEXT>880. :
+          UTMESS('F','ASCOUF0_48',valr=[DEXT])
+#
+# transition d epaisseur a une pente
+#
+    else:
+       if (TETA2<0.) or (TETA2>45.) :
+          UTMESS('F','ASCOUF0_49',valr=[TETA2])
+       if (EP1<7.) or (EP1>35.) :
+          UTMESS('F','ASCOUF0_50',valr=[EP1])
+       if (EP2<15.) or (EP2>40.) :
+          UTMESS('F','ASCOUF0_51',valr=[EP2])
+       if (EPI<15.) or (EPI>40.) :
+          UTMESS('F','ASCOUF0_52',valr=[EPI])
+       if (EP1>EPI) :
+          UTMESS('F','ASCOUF0_53')
+       if (EP2<EPI) :
+          UTMESS('F','ASCOUF0_54')
+       LTRANF = LTRAN  + (EPI-EP1)/(tan(TETA1))
+       LTRANF = LTRANF + (EP2-EPI)/(tan(TETA2))
+       if (LTRANF>LCOUDE) :
+          UTMESS('F','ASCOUF0_55',valr=[LTRANF,LCOUDE])
+       if (DEXT<77.) or (DEXT>355.) :
+          UTMESS('F','ASCOUF0_56',valr=[LTRANF])
+#
+################################################################################
+#     --- calcul taille initiale des defauts sur la plaque ---
+################################################################################
+#
+#
+  if FISS_COUDE!=None:
+     DSF=(FISS_COUDE['ABSC_CURV']!=None)
+     AXEAP,AXECP,SFP = ASCFIS(ALPHA, RM, RC, EP1, SUREP, GEOM, FPROF,
+                              DGAXEC, AZIM, POSIT, SF, DSF, BETA, ORIEN)
+  elif MCL_SOUS_EPAIS!=None :
+     ier,AZIMC= ASCSEP(MCL_SOUS_EPAIS,ALPHA,RM,RC,EP1,GEOM,SYME)
+     for ssep in MCL_SOUS_EPAIS:
+         ssep.IDENL = ssep.ILONP/ssep['NB_ELEM_LONGI']*180./(pi*RC)
+         ssep.IDENC = ssep.ICIRP/ssep['NB_ELEM_CIRC']*180./(pi*RM)
+     if SYME=='QUART' :
+#       quart de structure     
+        ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY\
+        = ASCSYM(MCL_SOUS_EPAIS,RM,RC,ALPHA,LTCHAR,LTCLIM)
+     else :
+#       demi-structure ou entiere
+        ier,NLX,NLY,NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,DNX,DNY\
+        = ASCPRE(MCL_SOUS_EPAIS,RM,RC,ALPHA,SYME,LTCHAR,LTCLIM)
+#
+#
+  loc_gibi=aster.repout()
+  logiel = EXEC_MAILLAGE['LOGICIEL'  ]
+  UNITD  = EXEC_MAILLAGE['UNITE_DATG']
+  UNITP  = EXEC_MAILLAGE['UNITE_MGIB']
+  if   logiel=='GIBI98'  : logiel = loc_gibi+'gibi98'
+  elif logiel=='GIBI2000': logiel = loc_gibi+'gibi2000'
+  
+  else                   :
+       UTMESS('F','ASCOUF0_57')
+#
+#     --- ecriture sur le fichier .datg  de la procedure ---
+#
+# Nom du fichier de commandes pour GIBI
+  nomFichierDATG = 'fort.'+str(UNITD)
+# Nom du fichier de maillage GIBI
+  nomFichierGIBI = 'fort.'+str(UNITP)
+  loc_datg = aster.repdex()
+#
+  if FISS_COUDE!=None:
+#   procedure coude fissure (MOT-CLE FISS_COUDE)
+    write_file_dgib_ASCFDO(nomFichierDATG,RM,RC,ALPHA,NBTRAN,EP1,EP2,EPI,TETA1,
+                           TETA2,LTRAN,SUREP,LTCHAR,LTCLIM,TYPBOL,AXEAP,AXECP,NT,NS,NC,SFP,
+                           ORIEN,AZIM,RC0,RC2,RC3,POSIT,EPSI,NIVMAG,SYME,loc_datg)
+  elif MCL_SOUS_EPAIS!=None :
+     if SOUS_EPAIS_MULTI==None :
+#      procedure coude sous-ep.: (MOT-CLE SOUS_EPAIS_COUDE)  
+       write_file_dgib_ASCSQO(nomFichierDATG,TYPELE,RM,RC,ALPHA,NBTRAN,EP1,EP2,
+                              EPI,TETA1,MCL_SOUS_EPAIS,TETA2,LTRAN,LTCHAR,LTCLIM,GEOM,
+                              SYME,NBEP,NLX,NLY,NIVMAG,SUREP,AZIMC,loc_datg)
+       write_file_pgib_ASCSQ2(MCL_SOUS_EPAIS,NLX,NLY)
+     else:
+#      procedure coude sous-ep.:(MOT-CLE SOUS_EPAIS_MULTI)
+       write_file_dgib_ASCSP1(nomFichierDATG,TYPELE,MCL_SOUS_EPAIS,NIVMAG,loc_datg)
+       write_file_pgib_ASCSDO(RM,RC,ALPHA,EP1,LTCLIM,LTCHAR,NBEP,SUREP,
+                              NZONEX,NZONEY,BG,BD,BI,BS,INDBG,INDBD,INDBI,INDBS,
+                              DNX,DNY,MCL_SOUS_EPAIS,GEOM,SYME)
+       write_file_pgib_ASCSP2(MCL_SOUS_EPAIS,NLX,NLY)
+  else:
+#   procedure coude regle
+    write_file_dgib_ASCRDO(nomFichierDATG,TYPELE,NIVMAG,TYPBOL,ALPHA,RC,RM,EP1,SUREP,
+                           LTCLIM,LTCHAR,NBEP,loc_datg)
+
+  
+# GIBI  
+  DEFI_FICHIER(ACTION='LIBERER',UNITE=19)
+  DEFI_FICHIER(ACTION='LIBERER',UNITE=20)
+  EXEC_LOGICIEL( LOGICIEL = logiel ,
+                 ARGUMENT = (nomFichierDATG,
+                             nomFichierGIBI), )
+# PRE_GIBI
+  PRE_GIBI()
+
+# LIRE_MAILLAGE
+  __nomres=LIRE_MAILLAGE(INFO=INFO)
+
+# DEFI_GROUP  1
+
+  motscles={}
+  l_CREA_GROUP_NO=[]
+  l_CREA_GROUP_NO.append('BORD1')
+  l_CREA_GROUP_NO.append('CLGV')
+  l_CREA_GROUP_NO.append('BORD2')
+  l_CREA_GROUP_NO.append('PEAUINT')
+  l_CREA_GROUP_NO.append('PEAUEXT') 
+
+# cas des fissures axisymetriques
+  if FISS_COUDE!=None:
+    if FISS_COUDE['AXIS']=='OUI':
+      motscles['CREA_GROUP_MA']=[]
+      motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FONDFISS',
+                                          NOM      = 'MAIL_ORI',
+                                          POSITION = 'INIT'    , ),) 
+
+# conversion des groupes de mailles en groupes du bloc fissure  
+  if FISS_COUDE!=None:
+    if SYME == 'ENTIER':
+      l_CREA_GROUP_NO.append('NOLIG1')
+      l_CREA_GROUP_NO.append('FACE1')
+    l_CREA_GROUP_NO.append('NOLIG2')
+    l_CREA_GROUP_NO.append('FACE2')
+    l_CREA_GROUP_NO.append('FONDFISS')
+
+  motscles['CREA_GROUP_NO']=[]
+  motscles['CREA_GROUP_NO'].append(_F(GROUP_MA=tuple(l_CREA_GROUP_NO)))
+
+# conversion des groupes de mailles en groupes de noeuds pour les
+# ligaments des sous-ep.
+  if MCL_SOUS_EPAIS!=None:
+    issep=0
+    for ssep in MCL_SOUS_EPAIS:
+      issep=issep+1
+      if ssep['TYPE']=='ELLI':
+        for k in range(2*NLX[issep-1]+1):
+          chtmp=str(issep)+'_'+str(k+1)
+          ch1='CIR'+chtmp
+          ch2='ICI'+chtmp
+          motscles['CREA_GROUP_NO'].append(_F(NOM      = ch2,
+                                              GROUP_MA = ch1,),)
+        motscles['CREA_GROUP_NO'].append(_F(NOM      = 'IPCEN'+str(issep),
+                                            GROUP_MA = 'PCENT'+str(issep),),)
+        for k in range(2*NLY[issep-1]+1):
+          chtmp=str(issep)+'_'+str(k+1)
+          ch1='LON'+chtmp
+          ch2='ILO'+chtmp
+          motscles['CREA_GROUP_NO'].append(_F(NOM      = ch2,
+                                              GROUP_MA = ch1,),)
+        for k in range(2*NLX[issep-1]+1):
+          chtmp=str(issep)+'_'+str(k+1)
+          ch1='ICI'+chtmp
+          ch2='OCI'+chtmp
+          ch3='ECI'+chtmp
+          motscles['CREA_GROUP_NO'].append(_F(NOM      = ch2,
+                                              INTERSEC = ('PEAUEXT',ch1),),)
+          motscles['CREA_GROUP_NO'].append(_F(NOM      = ch3,
+                                              INTERSEC = ('PEAUINT',ch1),),)
+        motscles['CREA_GROUP_NO'].append(_F(NOM      = 'OPCEN'+str(issep),
+                                            INTERSEC = ('PEAUEXT','IPCEN'+str(issep),),),)
+        motscles['CREA_GROUP_NO'].append(_F(NOM      = 'EPCEN'+str(issep),
+                                            INTERSEC = ('PEAUINT','IPCEN'+str(issep),),),)
+        for k in range(2*NLY[issep-1]+1):
+          chtmp=str(issep)+'_'+str(k+1)
+          ch1='ILO'+chtmp
+          ch2='OLO'+chtmp
+          ch3='ELO'+chtmp
+          motscles['CREA_GROUP_NO'].append(_F(NOM      = ch2,
+                                              INTERSEC =  ('PEAUEXT',ch1),),)
+          motscles['CREA_GROUP_NO'].append(_F(NOM      = ch3,
+                                              INTERSEC =  ('PEAUINT',ch1),),)
+        for k in range(2*NLX[issep-1]+1):
+          chtmp=str(issep)+'_'+str(k+1)
+          ch1='CIR'+chtmp
+          ch2='ICI'+chtmp
+          ch3='OCI'+chtmp
+          ch4='ECI'+chtmp  
+          motscles['CREA_GROUP_NO'].append(_F(OPTION        = 'SEGM_DROI_ORDO',
+                                              NOM           = ch1,
+                                              GROUP_NO      = ch2,
+                                              GROUP_NO_ORIG = ch3,
+                                              GROUP_NO_EXTR = ch4,
+                                              PRECISION     = PRECIS,
+                                              CRITERE       = CRITER,),)
+        motscles['CREA_GROUP_NO'].append(_F(OPTION        = 'SEGM_DROI_ORDO',
+                                            NOM           = 'PCENT'+str(issep),
+                                            GROUP_NO      = 'IPCEN'+str(issep),
+                                            GROUP_NO_ORIG = 'OPCEN'+str(issep),
+                                            GROUP_NO_EXTR = 'EPCEN'+str(issep),
+                                            PRECISION     =  PRECIS,
+                                            CRITERE       =  CRITER,),)
+        for k in range(2*NLY[issep-1]+1):
+           chtmp=str(issep)+'_'+str(k+1)
+           ch1='LON'+chtmp
+           ch2='ILO'+chtmp
+           ch3='OLO'+chtmp
+           ch4='ELO'+chtmp  
+           motscles['CREA_GROUP_NO'].append(_F(OPTION        = 'SEGM_DROI_ORDO',
+                                               NOM           = ch1,
+                                               GROUP_NO      = ch2,
+                                               GROUP_NO_ORIG = ch3,
+                                               GROUP_NO_EXTR = ch4,
+                                               PRECISION     = PRECIS,
+                                               CRITERE       = CRITER,),)
+#     1/ noms intermediaires des groupes de noeuds representant les ligaments
+#        des sections: TU,MI,GV et sous-ep.     
+      for k in range(8):
+        motscles['CREA_GROUP_NO'].append(_F( NOM      = CAR3[k]+str(issep),
+                                             GROUP_MA = CAR6[k]+str(issep),),)
+
+    for k in range(3):
+      if SYME == 'ENTIER' or k!=2:
+        for j in range(8):
+          motscles['CREA_GROUP_NO'].append(_F( NOM      = CAR3[j]+SECT[k],
+                                               GROUP_MA = CAR6[j]+SECT[k],),)
+
+#   2/ determination et nommage des noeuds origine et extremite des groupes de noeuds
+#      representant les ligaments de la ou des sections: sous-ep.
+    issep=0
+    for ssep in MCL_SOUS_EPAIS:
+      issep=issep+1
+      for k in range(8):
+        motscles['CREA_GROUP_NO'].append(_F( NOM      = CAR4[k]+str(issep),
+                                             INTERSEC = ('PEAUEXT',CAR3[k]+str(issep),),),)
+        motscles['CREA_GROUP_NO'].append(_F( NOM      = CAR5[k]+str(issep),
+                                             INTERSEC = ('PEAUINT',CAR3[k]+str(issep),),),)        
+#     3/ nommage final des groupes de noeuds representant les ligaments 
+#        de la ou des sections: sous-ep.
+      for k in range(8):
+        motscles['CREA_GROUP_NO'].append(_F(OPTION        = 'SEGM_DROI_ORDO',
+                                            NOM           = CAR6[k]+str(issep),
+                                            GROUP_NO      = CAR3[k]+str(issep),
+                                            GROUP_NO_ORIG = CAR4[k]+str(issep),
+                                            GROUP_NO_EXTR = CAR5[k]+str(issep),
+                                            PRECISION     = PRECIS,
+                                            CRITERE       = CRITER,),)
+
+#   4/ determination et nommage des noeuds origine et extremite des groupes de noeuds
+#      representant les ligaments des sections: TU,MI,GV
+    for k in range(3):
+      if SYME == 'ENTIER' or k!=2:
+        for j in range(8):
+           motscles['CREA_GROUP_NO'].append(_F( NOM      = CAR4[j]+SECT[k],
+                                                INTERSEC = ('PEAUEXT',CAR3[j]+SECT[k],),),) 
+           motscles['CREA_GROUP_NO'].append(_F( NOM      = CAR5[j]+SECT[k],
+                                                INTERSEC = ('PEAUINT',CAR3[j]+SECT[k],),),) 
+#       5/ nommage final des groupes de noeuds representant les ligaments des sections: TU,MI,GV   
+        for j in range(8):    
+           motscles['CREA_GROUP_NO'].append(_F(OPTION        = 'SEGM_DROI_ORDO',
+                                               NOM           = CAR6[j]+SECT[k],
+                                               GROUP_NO      = CAR3[j]+SECT[k],
+                                               GROUP_NO_ORIG = CAR4[j]+SECT[k],
+                                               GROUP_NO_EXTR = CAR5[j]+SECT[k],
+                                               PRECISION     = PRECIS,
+                                               CRITERE       = CRITER,),)
+    
+
+  __nomres=DEFI_GROUP(reuse   =__nomres,
+                      MAILLAGE=__nomres,
+                      **motscles )
+#
+# DEFI_GROUP  2
+  if FISS_COUDE!=None:
+# creation des groupes petit axe et grand axe fissure par
+# intersection de groupes existants
+    motscles={}
+    motscles['CREA_GROUP_NO']=[]
+    l_peau=[]
+    l_intersec=[]
+    if POSIT == 'DEB_INT':
+        l_peau.append('PEAUINT')
+    else:
+        l_peau.append('PEAUEXT')
+    
+    if SYME == 'ENTIER' :
+      l_intersec.append('FACE1')
+      motscles['CREA_GROUP_NO'].append(_F(NOM      = 'P_AXE_1',
+                                          INTERSEC = ('NOLIG1','FACE1'),),)
+      motscles['CREA_GROUP_NO'].append(_F(NOM      = 'G_AXE_1',
+                                          INTERSEC =  tuple(l_peau+l_intersec),),)  
+    l_intersec=[]
+    l_intersec.append('FACE2')  
+    motscles['CREA_GROUP_NO'].append(_F(NOM      = 'P_AXE_2',
+                                        INTERSEC = ('NOLIG2','FACE2'),),)
+    motscles['CREA_GROUP_NO'].append(_F(NOM      = 'G_AXE_2',
+                                        INTERSEC =  tuple(l_peau+l_intersec),),)
+   
+    __nomres=DEFI_GROUP(reuse   =__nomres,
+                        MAILLAGE=__nomres,
+                        **motscles )    
+# MODI_MAILLAGE  1
+  motscles={}
+  if GEOM == 'COUDE':
+    motscles['TUBE_COUDE']=[]
+    motscles['TUBE_COUDE'].append(_F(ANGLE=ALPHA,
+                                    R_CINTR=RC,
+                                    L_TUBE_P1=LTCHAR),)
+  motscles['PLAQ_TUBE']=[]
+  D_PLAQ_TUBE={}
+  D_PLAQ_TUBE['DEXT']=DEXT
+  D_PLAQ_TUBE['EPAIS']=EP1
+  D_PLAQ_TUBE['L_TUBE_P1']=LTCHAR
+  if SYME == 'QUART' : D_PLAQ_TUBE['COUTURE']='NON'
+  if FISS_COUDE!=None:
+      D_PLAQ_TUBE['AZIMUT']=AZIM
+  elif SOUS_EPAIS_COUDE!=None :
+      D_PLAQ_TUBE['AZIMUT']=MCL_SOUS_EPAIS[0].IPHIC
+  else:pass
+  motscles['PLAQ_TUBE'].append(_F(**D_PLAQ_TUBE),) 
+  __nomres=MODI_MAILLAGE( reuse   =__nomres,
+                          MAILLAGE=__nomres,
+                          **motscles )
+# MODI_MAILLAGE  2
+  motscles={}
+  motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXTUBE'),)
+  if FISS_COUDE!=None:
+    if FISS_COUDE['FISSURE'] == 'DEB_INIT':
+      motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXTUBE','FACE1','FACE2'),)  
+  __nomres=MODI_MAILLAGE(reuse   =__nomres,
+                       MAILLAGE=__nomres,
+                       **motscles)
+
+# CREA_MAILLAGE
+  self.DeclareOut('nomre2',self.sd)
+  motscles={}
+  motscles['CREA_POI1']=[]
+  motscles['CREA_POI1'].append(_F(NOM_GROUP_MA='P1',
+                                  GROUP_NO='P1'),)
+  if TYPBOL == None :
+    motscles['CREA_POI1'].append(_F(NOM_GROUP_MA='P2',
+                                  GROUP_NO='P2'),)    
+  nomre2=CREA_MAILLAGE( MAILLAGE=__nomres,
+                          **motscles)
+
+# IMPRESSSION
+  if IMPRESSION!=None:
+     if IMPRESSION.__class__.__name__  !='MCList' : IMPRESSION  =[IMPRESSION,]
+     for impr in IMPRESSION :
+#
+         motscles={}
+         if impr['FORMAT']=='IDEAS'  : motscles['VERSION']   =impr['VERSION']
+         if impr['FORMAT']=='CASTEM' : motscles['NIVE_GIBI'] =impr['NIVE_GIBI']
+         if impr['UNITE']!=None      : motscles['UNITE']     =impr['UNITE']
+         impr_resu = _F( MAILLAGE = nomre2,)
+#
+         IMPR_RESU( RESU = impr_resu,
+                    FORMAT= impr['FORMAT'],**motscles)
+
+
+
+  return ier
+
+
diff --git a/Aster/Cata/cataSTA10/Macro/macr_aspic_calc_ops.py b/Aster/Cata/cataSTA10/Macro/macr_aspic_calc_ops.py
new file mode 100644 (file)
index 0000000..86eb043
--- /dev/null
@@ -0,0 +1,881 @@
+#@ MODIF macr_aspic_calc_ops Macro  DATE 22/12/2009   AUTEUR ABBAS M.ABBAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+
+def macr_aspic_calc_ops(self,TYPE_MAILLAGE,TUBULURE,MAILLAGE,MODELE,CHAM_MATER,CARA_ELEM,
+                             FOND_FISS_1,FOND_FISS_2,RESU_THER,AFFE_MATERIAU,EQUILIBRE,
+                             PRES_REP,ECHANGE,TORS_CORP,TORS_TUBU,COMP_INCR,COMP_ELAS,
+                             THETA_3D,OPTION,SOLVEUR,CONVERGENCE,NEWTON,RECH_LINEAIRE,
+                             INCREMENT,PAS_AZIMUT,IMPRESSION,INFO,TITRE,BORNES ,**args):
+  """
+     Ecriture de la macro MACR_ASPIC_CALC
+  """
+  from Accas import _F
+  import types
+  from Utilitai.Utmess     import  UTMESS
+  ier=0
+#------------------------------------------------------------------
+  # On recopie le mot cle affe_materiau pour le proteger
+  mc_AFFE_MATERIAU=AFFE_MATERIAU
+#------------------------------------------------------------------
+  # On importe les definitions des commandes a utiliser dans la macro
+  AFFE_MODELE      =self.get_cmd('AFFE_MODELE'     )
+  AFFE_MATERIAU    =self.get_cmd('AFFE_MATERIAU'   )
+  AFFE_CARA_ELEM   =self.get_cmd('AFFE_CARA_ELEM'  )
+  AFFE_CHAR_THER_F =self.get_cmd('AFFE_CHAR_THER_F')
+  DEFI_CONTACT     =self.get_cmd('DEFI_CONTACT'    )  
+  THER_LINEAIRE    =self.get_cmd('THER_LINEAIRE'   )
+  AFFE_CHAR_MECA   =self.get_cmd('AFFE_CHAR_MECA'  )
+  STAT_NON_LINE    =self.get_cmd('STAT_NON_LINE'   )
+  CALC_ELEM        =self.get_cmd('CALC_ELEM'       )
+  POST_RELEVE_T    =self.get_cmd('POST_RELEVE_T'   )
+  IMPR_TABLE       =self.get_cmd('IMPR_TABLE'      )
+  POST_RCCM        =self.get_cmd('POST_RCCM'       )
+  DEFI_FOND_FISS   =self.get_cmd('DEFI_FOND_FISS'  )
+  CALC_THETA       =self.get_cmd('CALC_THETA'      )
+  CALC_G           =self.get_cmd('CALC_G'          )
+  IMPR_RESU        =self.get_cmd('IMPR_RESU'       )
+
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+#------------------------------------------------------------------
+# data
+  GRMAIL= ('EQUERRE','PEAUINT','EXCORP1','EXCORP2','EXTUBU','LEVRTUBU','LEVRCORP')
+  NOMNOE= ('P1_CORP','P2_CORP','P_TUBU ')
+  IMPRT1= ('NUME_ORDRE','INTITULE','RESU'  ,'NOM_CHAM',
+           'ABSC_CURV' ,'COOR_X'  ,'COOR_Y','COOR_Z'  ,
+           'SIXX'      ,'SIXY'    ,'SIXZ'   )
+  IMPRT2= ('NUME_ORDRE','INTITULE','RESU'  ,'NOM_CHAM',
+           'ABSC_CURV' ,'COOR_X'  ,'COOR_Y','COOR_Z'  ,
+           'SIYY'      ,'SIXY'    ,'SIYZ'   )
+  IMPRT3= ('NUME_ORDRE','INTITULE','RESU'  ,'NOM_CHAM',
+           'ABSC_CURV' ,'COOR_X'  ,'COOR_Y','COOR_Z'  ,
+           'TEMP'   )
+  APPRES= ('PEAUINT ','LEVRTUBU','LEVRCORP')
+#------------------------------------------------------------------
+#
+  i=0
+  for mate in mc_AFFE_MATERIAU:
+     if mate['RCCM']=='OUI' :
+        i=i+1
+        MRCCM=mate['MATER']
+  if i>1 :
+     UTMESS('E','ASPIC0_1')
+#
+  if (TYPE_MAILLAGE[:4]=='SAIN') and (TUBULURE==None) :
+     UTMESS('E','ASPIC0_2')
+#
+  if EQUILIBRE['NOEUD'] not in ('P1_CORP','P2_CORP') :
+     UTMESS('E','ASPIC0_3')
+#
+  if PRES_REP['EFFE_FOND']=='OUI' :
+     if PRES_REP['NOEUD']==None :
+       UTMESS('E','ASPIC0_4')
+     if PRES_REP['NOEUD'] not in ('P1_CORP','P2_CORP') :
+       UTMESS('E','ASPIC0_5')
+     if PRES_REP['NOEUD']==EQUILIBRE['NOEUD'] :
+       UTMESS('E','ASPIC0_6')
+#
+  if TORS_CORP!=None :
+     for tors in TORS_CORP :
+         if tors['NOEUD'] not in ('P1_CORP','P2_CORP') :
+            UTMESS('E','ASPIC0_7')
+         if tors['NOEUD']==EQUILIBRE['NOEUD'] :
+            UTMESS('E','ASPIC0_8')
+#
+  if (TYPE_MAILLAGE[:4]=='SAIN') and (THETA_3D!=None) :
+     UTMESS('E','ASPIC0_9')
+#
+  if OPTION in ('CALC_G_MAX','CALC_G_MAX_LOCAL') :
+    if BORNES==None :
+       UTMESS('E','ASPIC0_10')
+#
+  if IMPRESSION!=None :
+    if IMPRESSION['FORMAT'] in ('IDEAS','CASTEM') :
+      if IMPRESSION['NOM_CHAM']==None :
+       UTMESS('E','ASPIC0_11')
+#
+#------------------------------------------------------------------
+#
+#     --- commande AFFE_MODELE ---
+#
+  if MODELE!=None : self.DeclareOut('modele',MODELE)
+  mcfact=[]
+  if (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[-4:]=='_DEB') :
+     mcfact.append(_F(GROUP_MA=GRMAIL,     PHENOMENE='MECANIQUE',MODELISATION='3D'    ))
+  else:
+     mcfact.append(_F(GROUP_MA=GRMAIL[:-2],PHENOMENE='MECANIQUE',MODELISATION='3D'    ))
+  mcfact.append(   _F(GROUP_MA='P1_CORP'  ,PHENOMENE='MECANIQUE',MODELISATION='DIS_TR'))
+  mcfact.append(   _F(GROUP_MA='P2_CORP'  ,PHENOMENE='MECANIQUE',MODELISATION='DIS_TR'))
+  mcfact.append(   _F(GROUP_MA='P_TUBU'   ,PHENOMENE='MECANIQUE',MODELISATION='DIS_TR'))
+  modele = AFFE_MODELE( MAILLAGE = MAILLAGE ,
+                        AFFE     = mcfact    )
+  if ECHANGE!=None :                                # modele thermique
+     __modthe = AFFE_MODELE( MAILLAGE = MAILLAGE ,
+                             AFFE     = _F(GROUP_MA    =GRMAIL[:-2],
+                                           PHENOMENE   ='THERMIQUE',
+                                           MODELISATION='3D' )       )
+#
+#     --- commande AFFE_MATERIAU (thermique)---
+#
+  mcfact=[]
+  for mater in mc_AFFE_MATERIAU :
+     if mater['TOUT']!=None : mcfact.append(_F(TOUT    =mater['TOUT'    ],MATER=mater['MATER']))
+     else                   : mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER']))
+  __affmat = AFFE_MATERIAU( MAILLAGE = MAILLAGE ,
+                          MODELE   = modele ,
+                          AFFE     = mcfact    )
+#
+#     --- commande AFFE_CARA_ELEM ---
+#
+  if CARA_ELEM!=None : self.DeclareOut('carael',CARA_ELEM)
+  carael = AFFE_CARA_ELEM( MODELE   = modele ,
+                           DISCRET  = ( _F( GROUP_MA='P1_CORP' ,
+                                            CARA    ='K_TR_D_N',
+                                            VALE    = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ),
+                                        _F( GROUP_MA='P2_CORP' ,
+                                            CARA    ='K_TR_D_N',
+                                            VALE    = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ),
+                                        _F( GROUP_MA='P_TUBU' ,
+                                            CARA    ='K_TR_D_N',
+                                            VALE    = ( 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 ) ), ) )
+#
+#     --- commande AFFE_CHAR_THER_F ---
+#         condition aux limites
+#
+  if ECHANGE!=None :
+     __chther = AFFE_CHAR_THER_F( MODELE = __modthe ,
+                                  ECHANGE=( _F(GROUP_MA='PEAUTUBU',
+                                               COEF_H  =ECHANGE['COEF_H_TUBU'],
+                                               TEMP_EXT=ECHANGE['TEMP_EXT'],),
+                                            _F(GROUP_MA='PEAUCORP',
+                                               COEF_H  =ECHANGE['COEF_H_CORP'],
+                                               TEMP_EXT=ECHANGE['TEMP_EXT'],),))
+#
+#     --- calcul thermique ---
+#
+     if RESU_THER!=None : self.DeclareOut('resuth',RESU_THER)
+     mcsimp={}
+     if INCREMENT['NUME_INST_INIT']!=None : mcsimp['NUME_INST_INIT']=INCREMENT['NUME_INST_INIT']
+     if INCREMENT['NUME_INST_FIN' ]!=None : mcsimp['NUME_INST_FIN' ]=INCREMENT['NUME_INST_FIN' ]
+     mcfact=_F(LIST_INST=INCREMENT['LIST_INST'],**mcsimp)
+     resuth = THER_LINEAIRE( MODELE     = __modthe ,
+                             CHAM_MATER = __affmat ,
+                             ETAT_INIT  = _F(STATIONNAIRE='OUI',),
+                             EXCIT      = _F(CHARGE=__chther,),
+                             INCREMENT  = mcfact, )
+#
+#     --- commande AFFE_MATERIAU (mécanique)---
+#
+  if CHAM_MATER!=None : self.DeclareOut('affmth',CHAM_MATER)
+  indther=0
+  if ECHANGE!=None and RESU_THER!=None : indther=1
+  mcfact=[]
+  mcfac2=[]
+  for mater in mc_AFFE_MATERIAU :
+     if mater['TOUT']!=None :
+       mcfact.append(_F(TOUT    =mater['TOUT'    ],MATER=mater['MATER'],))
+       if indther==1:
+         mcfac2.append(_F(NOM_VARC='TEMP',TOUT='OUI',
+                        EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF']),)
+     else:
+       mcfact.append(_F(GROUP_MA=mater['GROUP_MA'],MATER=mater['MATER'],))
+       if indther==1:
+         mcfac2.append(_F(NOM_VARC='TEMP',GROUP_MA=mater['GROUP_MA'],
+                        EVOL=resuth,NOM_CHAM='TEMP',VALE_REF=mater['TEMP_REF']),)
+  affmth = AFFE_MATERIAU( MAILLAGE = MAILLAGE ,
+                          MODELE   = modele ,
+                          AFFE     = mcfact,
+                          AFFE_VARC= mcfac2,)
+#
+#     --- commande AFFE_CHAR_MECA ---
+#         condition aux limites
+#
+  if     EQUILIBRE['NOEUD']=='P1_CORP' :
+         NENCAS = EQUILIBRE['NOEUD']
+         AEFOCO = 'EXCORP2'
+         ATORCO = 'P2_CORP'
+         LINTC  = 'L_INT_C2'
+  elif   EQUILIBRE['NOEUD']=='P2_CORP' :
+         NENCAS = EQUILIBRE['NOEUD']
+         AEFOCO = 'EXCORP1'
+         ATORCO = 'P1_CORP'
+         LINTC  = 'L_INT_C1'
+  _conlim = AFFE_CHAR_MECA(  MODELE   = modele ,
+                             LIAISON_ELEM  = ( _F( OPTION    ='3D_POU'  ,
+                                                   GROUP_MA_1='EXCORP1',
+                                                   GROUP_NO_2='P1_CORP'),
+                                               _F( OPTION    ='3D_POU'  ,
+                                                   GROUP_MA_1='EXCORP2' ,
+                                                   GROUP_NO_2='P2_CORP'),
+                                               _F( OPTION    ='3D_POU'  ,
+                                                   GROUP_MA_1='EXTUBU',
+                                                   GROUP_NO_2='P_TUBU'), ),
+                             DDL_IMPO      =   _F( GROUP_NO  = NENCAS  ,
+                                                   DX        = 0.0 ,
+                                                   DY        = 0.0 ,
+                                                   DZ        = 0.0 ,
+                                                   DRX       = 0.0 ,
+                                                   DRY       = 0.0 ,
+                                                   DRZ       = 0.0 , ) )
+#
+#     --- commande AFFE_CHAR_MECA ---
+#         chargement mecanique : pres_rep, effet de fond
+#
+  motscles={}
+  if (PRES_REP['PRES_LEVRE']=='OUI') and (TYPE_MAILLAGE[-4:]=='_DEB') :
+      motscles['PRES_REP'  ]= _F(GROUP_MA=APPRES,   PRES=PRES_REP['PRES'])
+  else :
+      motscles['PRES_REP'  ]= _F(GROUP_MA=APPRES[0],PRES=PRES_REP['PRES'])
+  if  PRES_REP['EFFE_FOND' ]=='OUI' :
+      motscles['EFFE_FOND' ]=(_F(GROUP_MA    ='EXTUBU  ',
+                                 GROUP_MA_INT='L_INT_TU',
+                                 PRES        =PRES_REP['PRES']),
+                              _F(GROUP_MA    =AEFOCO,
+                                 GROUP_MA_INT=LINTC,
+                                 PRES        =PRES_REP['PRES']))
+  _chpres = AFFE_CHAR_MECA( MODELE   = modele ,**motscles)
+#
+#     --- commande AFFE_CHAR_MECA ---
+#         chargement mecanique : torseur sur le corps
+#
+  if TORS_CORP!=None:
+     _chtrc = [None]*6
+     i=0
+     for tors in TORS_CORP :
+       mcsimp={}
+       if tors['FX']!=None : mcsimp['FX']=tors['FX']
+       if tors['FY']!=None : mcsimp['FY']=tors['FY']
+       if tors['FZ']!=None : mcsimp['FZ']=tors['FZ']
+       if tors['MX']!=None : mcsimp['MX']=tors['MX']
+       if tors['MY']!=None : mcsimp['MY']=tors['MY']
+       if tors['MZ']!=None : mcsimp['MZ']=tors['MZ']
+       mcfact=_F(GROUP_NO=ATORCO,**mcsimp)
+       _chtrc[i] = AFFE_CHAR_MECA(  MODELE       = modele ,
+                                    FORCE_NODALE = mcfact , )
+       i=i+1
+#
+#     --- commande AFFE_CHAR_MECA ---
+#         chargement mecanique : torseur sur la tubulure
+#
+  if TORS_TUBU!=None:
+     _chtrt = [None]*6
+     i=0
+     for tors in TORS_TUBU :
+       mcsimp={}
+       if tors['FX']!=None : mcsimp['FX']=tors['FX']
+       if tors['FY']!=None : mcsimp['FY']=tors['FY']
+       if tors['FZ']!=None : mcsimp['FZ']=tors['FZ']
+       if tors['MX']!=None : mcsimp['MX']=tors['MX']
+       if tors['MY']!=None : mcsimp['MY']=tors['MY']
+       if tors['MZ']!=None : mcsimp['MZ']=tors['MZ']
+       mcfact=_F(GROUP_NO='P_TUBU  ',**mcsimp)
+       _chtrt[i] = AFFE_CHAR_MECA( MODELE       = modele ,
+                                    FORCE_NODALE = mcfact , )
+       i=i+1
+
+#
+#     --- commande AFFE_CHAR_MECA ---
+#         chargement mecanique :  verif contact levres
+#
+  if TYPE_MAILLAGE[:4]=='FISS' :
+    if TYPE_MAILLAGE in ('FISS_LONG_NONDEB','FISS_AXIS_NONDEB') :
+       mcfond = ('FOND_SUP','FOND_INF')
+    else :
+       mcfond = ('FONDFISS')
+       _chcont = DEFI_CONTACT( MODELE      = modele ,
+                            FORMULATION = 'DISCRETE',
+                            TOLE_INTERP = -1.E-6,
+                            ZONE =_F(GROUP_MA_MAIT = 'LEVRCORP',
+                                     GROUP_MA_ESCL = 'LEVRTUBU',
+                                     ALGO_CONT     = 'VERIF',
+                                     GROUP_MA_FOND = mcfond,),)
+
+#
+#     --- commande STAT_NON_LINE ---
+#
+  motscles={}
+#
+  mcfex=[]  # mot clé facteur EXCIT
+  mcfex.append(_F(CHARGE=_conlim,))
+  if PRES_REP['FONC_MULT']!=None :
+     mcfex.append(_F(CHARGE=_chpres,FONC_MULT=PRES_REP['FONC_MULT']))
+  else :
+     mcfex.append(_F(CHARGE=_chpres,))
+  if TORS_CORP!=None:
+     i=0
+     for tors in TORS_CORP :
+       if tors['FONC_MULT']!=None :
+          mcfex.append(_F(CHARGE=_chtrc[i],FONC_MULT=tors['FONC_MULT']))
+       else :
+          mcfex.append(_F(CHARGE=_chtrc[i],))
+       i=i+1
+  if TORS_TUBU!=None:
+     i=0
+     for tors in TORS_TUBU :
+       if tors['FONC_MULT']!=None :
+          mcfex.append(_F(CHARGE=_chtrt[i],FONC_MULT=tors['FONC_MULT']))
+       else :
+          mcfex.append(_F(CHARGE=_chtrt[i],))
+       i=i+1
+       
+  contact = None     
+  if TYPE_MAILLAGE[:4]=='FISS' :
+     if mcfond == 'FONDFISS' :
+       contact = _chcont
+     
+     
+  motscles['EXCIT'] =mcfex
+#
+  mcfci=[]  # mot clé facteur COMP_INCR :obligatoire pour les noeuds discrets
+  if COMP_INCR!=None :
+    mcfci.append(_F(TOUT    ='OUI' ,RELATION=COMP_INCR['RELATION']))
+  mcfci.append(  _F(GROUP_MA=NOMNOE,RELATION='ELAS'))
+  motscles['COMP_INCR'] =mcfci
+#
+  if COMP_ELAS!=None :
+    motscles['COMP_ELAS'] =_F(GROUP_MA=GRMAIL[:-2] ,RELATION=COMP_ELAS['RELATION'])
+#
+  dSolveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
+  for i in dSolveur.keys():
+      if dSolveur[i]==None : del dSolveur[i]
+#
+  dConverg=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
+  for i in dConverg.keys():
+      if dConverg[i]==None : del dConverg[i]
+#
+  dNewton=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
+  for i in dNewton.keys():
+      if dNewton[i]==None : del dNewton[i]
+#
+  dRechlin = {}
+  if RECH_LINEAIRE != None:
+     dRechlin=RECH_LINEAIRE[0].cree_dict_valeurs(RECH_LINEAIRE[0].mc_liste)
+     for i in dRechlin.keys():
+         if dRechlin[i]==None : del dRechlin[i]
+#
+  dIncrem=INCREMENT[0].cree_dict_valeurs(INCREMENT[0].mc_liste)
+  for i in dIncrem.keys():
+      if dIncrem[i]==None : del dIncrem[i]
+#
+  if TITRE!=None :
+    motscles['TITRE'        ] =TITRE
+  motscles  ['SOLVEUR'      ] =dSolveur
+  motscles  ['CONVERGENCE'  ] =dConverg
+  motscles  ['NEWTON'       ] =dNewton
+  motscles  ['RECH_LINEAIRE'] =dRechlin
+  motscles  ['INCREMENT'    ] =dIncrem
+  self.DeclareOut('nomres',self.sd)
+  
+  
+  if contact==None:
+    nomres = STAT_NON_LINE( MODELE     = modele ,
+                            CHAM_MATER = affmth ,
+                            CARA_ELEM  = carael ,
+                            INFO       = INFO   , **motscles)
+  else :
+    nomres = STAT_NON_LINE( MODELE     = modele ,
+                            CHAM_MATER = affmth ,
+                            CARA_ELEM  = carael ,
+                            CONTACT    = contact,
+                            INFO       = INFO   , **motscles)                            
+                          
+                          
+                          
+#
+  nomres = CALC_ELEM( reuse      = nomres,
+                      RESULTAT   = nomres ,
+                      TOUT_ORDRE = 'OUI'  ,
+                      OPTION     = ('SIEF_ELNO_ELGA','VARI_ELNO_ELGA','EQUI_ELNO_SIGM') ,
+                      INFO       = INFO ,)
+#
+#-----------------------------------------------------------------------
+  if TYPE_MAILLAGE[:4]=='SAIN' :
+#-----------------------------------------------------------------------
+#
+#     --- post traitement :  POST_RELEVE_T  --- azimuts droits
+#
+#     ----  champs de contrainte SI, SII ET SIII  ----
+#
+    if TYPE_MAILLAGE=='SAIN_GROS' : NBAZIM = 40
+    else                          : NBAZIM = 48
+    mcfact=[]
+    TYPSOU=None
+    if TUBULURE!=None : TYPSOU = TUBULURE['TYPE']
+    for i in range(1,NBAZIM+1,PAS_AZIMUT):
+      if i<10 : NUME = '0'+str(i)
+      else    : NUME =     str(i)
+      mcsimp={}
+      if TYPSOU=='TYPE_1':
+          mcsimp['REPERE' ]='CYLINDRIQUE',
+          mcsimp['ORIGINE']=( 0.0 , 0.0 , 0.0 )
+          mcsimp['AXE_Z'  ]=( 0.0 , 0.0 , 1.0 )
+          INTITD = 'AZI_'+NUME+'_D-REP_CYL'
+      else:
+          mcsimp['REPERE' ]='LOCAL'
+          mcsimp['VECT_Y' ]=( 0.0 , 0.0 , 1.0 )
+          INTITD = 'AZI_'+NUME+'_D-REP_LOC'
+      mcsimp['INTITULE' ]=INTITD
+      mcsimp['GROUP_NO' ]='LD'+str(i)
+      mcfact.append( _F( RESULTAT   = nomres,
+                         TOUT_ORDRE ='OUI',
+                         NOM_CHAM   ='SIEF_ELNO_ELGA',
+                         PRECISION  =55.E-1,
+                         TOUT_CMP   ='OUI',
+                         OPERATION  ='EXTRACTION',**mcsimp))
+    __noposd=POST_RELEVE_T(ACTION = mcfact,
+                           TITRE  = '-- TRAITEMENT DES AZIMUTS DROITS --')
+#
+#     --- IMPR_TABLE dans un repere cylindrique ou local
+#         des champs de contrainte SI, SII ET SIII
+#
+    if TYPSOU=='TYPE_1' : nompara=IMPRT1
+    else                : nompara=IMPRT2
+    IMPR_TABLE(TABLE    = __noposd,
+               NOM_PARA = nompara   )
+#
+#     ----  Pm, Pm+Pb sur les lignes de depouillement  ----
+#
+    if mc_AFFE_MATERIAU[0]['RCCM']=='OUI':
+      mcfact=[]
+      for i in range(1,NBAZIM+1,PAS_AZIMUT):
+        if i<10 : NUME = '0'+str(i)
+        else    : NUME =     str(i)
+        mcsimp={}
+        mcsimp['INTITULE'   ]='LD'+str(i)
+        mcsimp['GROUP_NO'   ]='LD'+str(i)
+        mcsimp['RESULTAT'   ]=nomres
+        mcsimp['TOUT_ORDRE' ]='OUI'
+        mcsimp['NOM_CHAM'   ]='SIEF_ELNO_ELGA'
+        mcsimp['PRECISION'  ]=55.E-1
+        mcsimp['TOUT_CMP'   ]='OUI'
+        mcsimp['OPERATION'  ]='EXTRACTION'
+        mcfact.append( _F(**mcsimp) )
+      __prelsd=POST_RELEVE_T(ACTION=mcfact)
+      __pmpbsd=POST_RCCM(OPTION         = 'PM_PB',
+                         TYPE_RESU_MECA = 'EVOLUTION',
+                         TYPE_RESU      = 'VALE_MAX',
+                         MATER          = MRCCM,
+                         TRANSITOIRE = _F(TABL_RESU_MECA = __prelsd,),
+                         TITRE       = '-- TRAITEMENT DES AZIMUTS DROITS --',)
+      IMPR_TABLE(TABLE = __pmpbsd, )
+#
+#     ----  champ de temperature, si il a ete calcule, sur les lignes de depouillement  ----
+#
+    if ECHANGE!=None :
+      mcfact=[]
+      for i in range(1,NBAZIM+1,PAS_AZIMUT):
+        if i<10 : NUME = '0'+str(i)
+        else    : NUME =     str(i)
+        mcsimp={}
+        mcsimp['GROUP_NO'   ]='LD'+str(i)
+        mcsimp['RESULTAT'   ]=resuth
+        mcsimp['TOUT_ORDRE' ]='OUI'
+        mcsimp['NOM_CHAM'   ]='TEMP'
+        mcsimp['PRECISION'  ]=55.E-1
+        mcsimp['TOUT_CMP'   ]='OUI'
+        mcsimp['INTITULE'   ]='AZI_'+NUME+'_D'
+        mcsimp['OPERATION'  ]='EXTRACTION'
+        mcfact.append( _F(**mcsimp) )
+      __rthazd=POST_RELEVE_T(ACTION=mcfact)
+      IMPR_TABLE(TABLE = __rthazd, )
+#
+#     ----  parametres caracterisant la distribution de temperature,
+#           si elle a ete calculee, dans l epaisseur du ligament  ----
+#
+      mcfact=[]
+      for i in range(1,NBAZIM+1,PAS_AZIMUT):
+        if i<10 : NUME = '0'+str(i)
+        else    : NUME =     str(i)
+        mcsimp={}
+        mcsimp['GROUP_NO'   ]='LD'+str(i)
+        mcsimp['RESULTAT'   ]=resuth
+        mcsimp['TOUT_ORDRE' ]='OUI'
+        mcsimp['NOM_CHAM'   ]='TEMP'
+        mcsimp['PRECISION'  ]=55.E-1
+        mcsimp['TOUT_CMP'   ]='OUI'
+        mcsimp['INTITULE'   ]='AZI_'+NUME+'_D'
+        mcsimp['OPERATION'  ]='MOYENNE'
+        mcfact.append( _F(**mcsimp) )
+      __rmothd=POST_RELEVE_T(ACTION=mcfact)
+      IMPR_TABLE(TABLE = __rmothd, )
+#
+#-----------------------------------------------------------------------
+#
+#     --- post traitement :  POST_RELEVE_T  --- azimuts inclines
+#     --- champs de contrainte SI, SII ET SIII  ----
+#
+    mcfact=[]
+    for i in range(1,NBAZIM+1,PAS_AZIMUT):
+      if i<10 : NUME = '0'+str(i)
+      else    : NUME =     str(i)
+      mcsimp={}
+      mcsimp['GROUP_NO'   ]='LI'+str(i)
+      mcsimp['RESULTAT'   ]=nomres
+      mcsimp['TOUT_ORDRE' ]='OUI'
+      mcsimp['NOM_CHAM'   ]='SIEF_ELNO_ELGA'
+      mcsimp['PRECISION'  ]=55.E-1
+      mcsimp['TOUT_CMP'   ]='OUI'
+      mcsimp['REPERE'     ]='LOCAL'
+      mcsimp['VECT_Y'     ]=( 0.0 , 0.0 , 1.0 )
+      mcsimp['INTITULE'   ]='AZI_'+NUME+'_I-REP_LOC'
+      mcsimp['OPERATION'  ]='EXTRACTION'
+      mcfact.append( _F(**mcsimp) )
+    __noposi=POST_RELEVE_T(ACTION=mcfact)
+    IMPR_TABLE(TABLE = __noposi, )
+#
+#     ----  Pm, Pm+Pb sur les lignes de depouillement  ----
+#
+    if mc_AFFE_MATERIAU[0]['RCCM']=='OUI':
+      mcfact=[]
+      for i in range(1,NBAZIM+1,PAS_AZIMUT):
+        if i<10 : NUME = '0'+str(i)
+        else    : NUME =     str(i)
+        mcsimp={}
+        mcsimp['INTITULE'   ]='LI'+str(i)
+        mcsimp['GROUP_NO'   ]='LI'+str(i)
+        mcsimp['RESULTAT'   ]=nomres
+        mcsimp['TOUT_ORDRE' ]='OUI'
+        mcsimp['NOM_CHAM'   ]='SIEF_ELNO_ELGA'
+        mcsimp['PRECISION'  ]=55.E-1
+        mcsimp['TOUT_CMP'   ]='OUI'
+        mcsimp['OPERATION'  ]='EXTRACTION'
+        mcfact.append( _F(**mcsimp) )
+      __prelsi=POST_RELEVE_T(ACTION=mcfact)
+      __pmpbsi=POST_RCCM(OPTION         = 'PM_PB',
+                         TYPE_RESU_MECA = 'EVOLUTION',
+                         TYPE_RESU      = 'VALE_MAX',
+                         MATER          = MRCCM,
+                         TRANSITOIRE = _F(TABL_RESU_MECA = __prelsi,),
+                         TITRE       = '-- TRAITEMENT DES AZIMUTS INCLINES --',)
+      IMPR_TABLE(TABLE = __pmpbsi, )
+#
+#     ----  champs de temperature,si il a ete calcule, sur les lignes de depouillement  ----
+#
+    if ECHANGE!=None :
+      mcfact=[]
+      for i in range(1,NBAZIM+1,PAS_AZIMUT):
+        if i<10 : NUME = '0'+str(i)
+        else    : NUME =     str(i)
+        mcsimp={}
+        mcsimp['GROUP_NO'   ]='LI'+str(i)
+        mcsimp['RESULTAT'   ]=resuth
+        mcsimp['TOUT_ORDRE' ]='OUI'
+        mcsimp['NOM_CHAM'   ]='TEMP'
+        mcsimp['PRECISION'  ]=55.E-1
+        mcsimp['TOUT_CMP'   ]='OUI'
+        mcsimp['INTITULE'   ]='AZI_'+NUME+'_I'
+        mcsimp['OPERATION'  ]='EXTRACTION'
+        mcfact.append( _F(**mcsimp) )
+      __rthazi=POST_RELEVE_T(ACTION=mcfact)
+      IMPR_TABLE(TABLE    = __rthazi,
+                 NOM_PARA = IMPRT3 )
+#
+#     ----  parametres caracterisant la distribution de temperature,
+#           si elle a ete calculee, dans l epaisseur du ligament  ----
+#
+      mcfact=[]
+      for i in range(1,NBAZIM+1,PAS_AZIMUT):
+        if i<10 : NUME = '0'+str(i)
+        else    : NUME =     str(i)
+        mcsimp={}
+        mcsimp['GROUP_NO'   ]='LI'+str(i)
+        mcsimp['RESULTAT'   ]=resuth
+        mcsimp['TOUT_ORDRE' ]='OUI'
+        mcsimp['NOM_CHAM'   ]='TEMP'
+        mcsimp['PRECISION'  ]=55.E-1
+        mcsimp['TOUT_CMP'   ]='OUI'
+        mcsimp['INTITULE'   ]='AZI_'+NUME+'_I'
+        mcsimp['OPERATION'  ]='MOYENNE'
+        mcfact.append( _F(**mcsimp) )
+      __rmothi=POST_RELEVE_T(ACTION=mcfact)
+      IMPR_TABLE(TABLE = __rmothi, )
+#
+#-----------------------------------------------------------------------
+  elif TYPE_MAILLAGE[:4]=='FISS' :
+#-----------------------------------------------------------------------
+#
+    NOMGRO=[]
+    NOMGRE=[]
+    TABMA8=[]
+    NOMMA =[]
+    if TYPE_MAILLAGE in ('FISS_COUR_DEB','FISS_LONG_DEB','FISS_AXIS_DEB','FISS_COUR_NONDEB') :
+       NBFIS = 1
+       NOMGRO.append(('P_FON1' ,'P_FIS1' ),)
+       NOMGRE.append(('P_FON2' ,'P_FIS2' ),)
+       TABMA8.append('FONDFISS')
+       if TYPE_MAILLAGE in ('FISS_COUR_DEB','FISS_LONG_DEB') : FERME=0
+       else :
+          FERME=1
+          NOMMA.append('MAIL_ORI')
+    elif TYPE_MAILLAGE in ('FISS_LONG_NONDEB','FISS_AXIS_NONDEB') :
+       NBFIS = 2
+#       NOMGRO.append(('P_FON1' ,'P_FIS1' ),)
+#       NOMGRE.append(('P_FON2' ,'P_FIS2' ),)
+       NOMGRO.append(('PS_FON1','PS_FIS1'),)
+       NOMGRO.append(('PI_FON1','PI_FIS1'),)
+       NOMGRE.append(('PS_FON2','PS_FIS2'),)
+       NOMGRE.append(('PI_FON2','PI_FIS2'),)
+       TABMA8.append('FOND_SUP')
+       TABMA8.append('FOND_INF')
+       if TYPE_MAILLAGE=='FISS_LONG_NONDEB' : FERME=0
+       else :
+          FERME=1
+          NOMMA.append('MA_ORI_S')
+          NOMMA.append('MA_ORI_I')
+#
+    if ECHANGE!=None:
+#
+#     ----  champs de temperature en fond de fissure
+#           si il a ete calcule, cas 1 fond de fissure  ----
+#
+      if NBFIS==1:
+        __rthfis=POST_RELEVE_T(ACTION=_F(GROUP_NO   ='FONDFISS',
+                                         RESULTAT   =resuth,
+                                         TOUT_ORDRE ='OUI',
+                                         NOM_CHAM   ='TEMP',
+                                         PRECISION  =55.E-1,
+                                         TOUT_CMP   ='OUI',
+                                         INTITULE   ='FONDFISS',
+                                         OPERATION  ='EXTRACTION',))
+        IMPR_TABLE(TABLE = __rthfis, )
+#
+#     ----  champs de temperature en fond de fissure
+#           si il a ete calcule, cas 2 fonds de fissure  ----
+#
+      elif NBFIS==2:
+#
+        __rthfis1=POST_RELEVE_T(ACTION=_F(GROUP_NO   ='FOND_SUP',
+                                          RESULTAT   =resuth,
+                                          TOUT_ORDRE ='OUI',
+                                          NOM_CHAM   ='TEMP',
+                                          PRECISION  =55.E-1,
+                                          TOUT_CMP   ='OUI',
+                                          INTITULE   ='FOND_SUP',
+                                          OPERATION  ='EXTRACTION',))
+        IMPR_TABLE(TABLE = __rthfis1, )
+        __rthfis2=POST_RELEVE_T(ACTION=_F(GROUP_NO   ='FOND_INF',
+                                          RESULTAT   =resuth,
+                                          TOUT_ORDRE ='OUI',
+                                          NOM_CHAM   ='TEMP',
+                                          PRECISION  =55.E-1,
+                                          TOUT_CMP   ='OUI',
+                                          INTITULE   ='FOND_INF',
+                                          OPERATION  ='EXTRACTION',))
+        IMPR_TABLE(TABLE = __rthfis2, )
+#
+#   --- post traitement fissure :  interpénétration des lèvres ----
+#
+
+    if TYPE_MAILLAGE[:4]=='FISS' :
+      __tcont=POST_RELEVE_T( ACTION=_F(  INTITULE = 'Contact levres',
+                                GROUP_NO = 'LEVRTUBU',
+                                RESULTAT = nomres,
+                                TOUT_ORDRE = 'OUI',
+                                NOM_CHAM = 'VALE_CONT',
+                                NOM_CMP = 'CONT',
+                                OPERATION = 'EXTRACTION'))
+      tcont=__tcont.EXTR_TABLE()
+#      print tcont
+      numo = tcont['NUME_ORDRE'].values()['NUME_ORDRE']
+      numo=dict([(i,0) for i in numo]).keys()
+      nbinst = len(numo)
+      for i in range(1,nbinst+1) :
+        tabi = tcont.NUME_ORDRE==i
+        nbtot = len(tabi)
+        cont_actif=tabi.CONT>0.
+        nb_no_cont = len(cont_actif)
+        if nb_no_cont > 0 :
+           UTMESS('A','ASPIC0_22',vali=[i,nbtot,nb_no_cont])
+
+
+#
+#        boucle sur le nombre de fond de fissure
+#
+    fond3d = [None]*2
+    for j in range(NBFIS):
+      if FOND_FISS_1!=None : self.DeclareOut('fond3d_0',FOND_FISS_1)
+      if FOND_FISS_2!=None : self.DeclareOut('fond3d_1',FOND_FISS_2)
+#
+#          --- commande DEFI_FOND_FISS ---
+#
+      motscles={}
+      if not FERME:
+         motscles['FOND_FISS']=_F(GROUP_MA     =TABMA8[j],
+                                  GROUP_NO_ORIG=NOMGRO[j][0],
+                                  GROUP_NO_EXTR=NOMGRE[j][0],)
+         motscles['VECT_GRNO_ORIG']=NOMGRO[j]
+         motscles['VECT_GRNO_EXTR']=NOMGRE[j]
+      else:
+         if TYPE_MAILLAGE.find('AXIS')!=-1  : grnoorig=NOMGRE[j][0]
+#                  si AXIS, P_FON1 est remplace par P_FON2 pour
+#                  fermer le fond de fissure
+         else                               : grnoorig=NOMGRO[j][0]
+         motscles['FOND_FERME']=_F(GROUP_MA     =TABMA8[j],
+                                   GROUP_NO_ORIG=grnoorig,
+                                   GROUP_MA_ORIG=NOMMA[j],)
+      fond3d[j]=DEFI_FOND_FISS( MAILLAGE  = MAILLAGE,
+                                LEVRE_SUP = _F(GROUP_MA='LEVRCORP',),
+                                LEVRE_INF = _F(GROUP_MA='LEVRTUBU',),**motscles)
+      if THETA_3D!=None:
+        for tht3d in THETA_3D :
+#
+#          --- commande CALC_THETA ---
+#
+          __theta = CALC_THETA( MODELE    = modele,
+                                FOND_FISS = fond3d[j],
+                                THETA_3D  = _F( TOUT    = 'OUI',
+                                                MODULE  =  1.0 ,
+                                                R_INF   = tht3d['R_INF'],
+                                                R_SUP   = tht3d['R_SUP'], ) )
+#
+#          --- commande CALC_G (3D GLOBAL) ---
+#
+          montit = 'G_THETA AVEC R_INF = '+str(tht3d['R_INF'])+' ET R_SUP = '+str(tht3d['R_SUP'])
+          motscles={}
+          if COMP_ELAS!=None:  motscles['COMP_ELAS']=  _F(TOUT     = 'OUI',
+                                                          RELATION = COMP_ELAS['RELATION'],)
+          if COMP_INCR!=None:  motscles['COMP_INCR']=  _F(RELATION = COMP_INCR['RELATION'],)
+          __gtheta = CALC_G ( THETA      = _F(THETA=__theta),
+                              OPTION     = 'CALC_G_GLOB',
+                              RESULTAT   = nomres,
+                              TOUT_ORDRE = 'OUI',
+                              TITRE      = montit,**motscles)
+          IMPR_TABLE(TABLE = __gtheta, )
+#
+#           recherche du g max
+#
+          if OPTION=='CALC_G_MAX' :
+            if BORNES!=None:
+              mcfact=[]
+              for born in BORNES :
+                mcfact.append(_F( NUME_ORDRE = born['NUME_ORDRE'] ,
+                                  VALE_MIN   = born['VALE_MIN'  ] ,
+                                  VALE_MAX   = born['VALE_MAX'  ]   ) )
+              __gbil = CALC_G( THETA      = _F(THETA=__theta),
+                               RESULTAT   = nomres,
+                               TOUT_ORDRE = 'OUI',
+                               COMP_ELAS  =  _F(TOUT     = 'OUI',
+                                                RELATION = COMP_ELAS['RELATION'],),
+                               TITRE    = montit,
+                               OPTION   = 'G_MAX_GLOB',
+                               BORNES   = mcfact,)
+              IMPR_TABLE(TABLE = __gbil, )
+#
+#          --- commande CALC_G (3D LOCAL) ---
+#
+          montit = 'G_LOCAL AVEC R_INF = '+str(tht3d['R_INF'])+' ET R_SUP = '+str(tht3d['R_SUP'])
+          motscles={}
+          if COMP_ELAS!=None:  motscles['COMP_ELAS'    ]=  _F(TOUT     = 'OUI',
+                                                              RELATION = COMP_ELAS['RELATION'],)
+          if FERME:
+                               motscles['LISSAGE']=_F(LISSAGE_THETA= 'LAGRANGE',
+                                                      LISSAGE_G= 'LAGRANGE',)
+          __glocal = CALC_G( THETA=_F( FOND_FISS  = fond3d[j],
+                                       R_INF      = tht3d['R_INF'],
+                                       R_SUP      = tht3d['R_SUP'],),
+                             RESULTAT   = nomres,
+                             TOUT_ORDRE = 'OUI',
+                             TITRE      = montit,**motscles)
+          IMPR_TABLE(TABLE = __glocal, )
+#
+#          recherche du g max local
+#
+          if OPTION=='CALC_G_MAX_LOCAL' :
+            if BORNES!=None:
+              motscles={}
+              mcfact=[]
+              if FERME:
+                motscles['LISSAGE']=_F(LISSAGE_THETA= 'LAGRANGE',
+                                       LISSAGE_G= 'LAGRANGE',)
+              for born in BORNES :
+                mcfact.append(_F( NUME_ORDRE = born['NUME_ORDRE'] ,
+                                  VALE_MIN   = born['VALE_MIN'  ] ,
+                                  VALE_MAX   = born['VALE_MAX'  ]   ) )
+              motscles['BORNES']=mcfact
+              __glbil = CALC_G( THETA=_F( FOND_FISS  = fond3d[j],
+                                          R_INF      = tht3d['R_INF'],
+                                          R_SUP      = tht3d['R_SUP'],),
+                                RESULTAT   = nomres,
+                                TOUT_ORDRE = 'OUI',
+                                COMP_ELAS  =  _F(TOUT     = 'OUI',
+                                                 RELATION = COMP_ELAS['RELATION'],),
+                                TITRE      = montit,
+                                OPTION     = 'G_MAX',**motscles)
+              IMPR_TABLE(TABLE = __glbil, )
+#
+#     --- commande IMPR_RESU  ---
+#
+  if IMPRESSION!=None:
+    mcfresu =[]
+    motscles={}
+    motsclei={}
+    if IMPRESSION['FORMAT'] in ('IDEAS','CASTEM') :
+      ncham   =[]
+      if IMPRESSION['NOM_CHAM']!=None :
+         if type(IMPRESSION['NOM_CHAM']) in (types.TupleType,types.ListType) : ncham= IMPRESSION['NOM_CHAM']
+         else                                                                : ncham=[IMPRESSION['NOM_CHAM'],]
+      if    len(ncham)==3       : motscles['NOM_CHAM'  ]=('DEPL','EQUI_ELNO_SIGM')
+      elif (len(ncham)==1) and (ncham[0][:4]!='TEMP')  :
+                                  motscles['NOM_CHAM'  ]= ncham[0]
+      elif (len(ncham)==2) and (ncham[0][:4]!='TEMP') and (ncham[1][:4]!='TEMP')  :
+                                  motscles['NOM_CHAM'  ]=(ncham[0],ncham[1])
+      elif (len(ncham)==2) and (ncham[0][:4]=='TEMP')  :
+                                  motscles['NOM_CHAM'  ]= ncham[1]
+      elif (len(ncham)==2) and (ncham[1][:4]=='TEMP') :
+                                  motscles['NOM_CHAM'  ]= ncham[0]
+      if   IMPRESSION['TOUT_ORDRE']!=None :
+                                  motscles['TOUT_ORDRE']= IMPRESSION['TOUT_ORDRE']
+      elif IMPRESSION['NUME_ORDRE']!=None :
+                                  motscles['NUME_ORDRE']= IMPRESSION['NUME_ORDRE']
+      elif IMPRESSION['INST']!=None :
+                                  motscles['INST'      ]= IMPRESSION['INST']
+    if IMPRESSION['FORMAT']=='IDEAS' :
+                                  motsclei['VERSION'   ]= IMPRESSION['VERSION']
+    if IMPRESSION['FORMAT']=='CASTEM' :
+                                  motsclei['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
+    mcfresu.append(_F(MAILLAGE=MAILLAGE,RESULTAT=nomres,**motscles))
+    if ECHANGE!=None:
+      motscles={}
+      if IMPRESSION['FORMAT'] in ('IDEAS','CASTEM') :
+        if    len(ncham)==3       : motscles['NOM_CHAM'  ]=('TEMP',)
+        elif (len(ncham)==1) and (ncham[0][:4]=='TEMP') :
+                                    motscles['NOM_CHAM'  ]= ncham[0]
+        elif (len(ncham)==2) and (ncham[0][:4]=='TEMP') :
+                                    motscles['NOM_CHAM'  ]= ncham[0]
+        elif (len(ncham)==2) and (ncham[1][:4]=='TEMP') :
+                                    motscles['NOM_CHAM'  ]= ncham[1]
+        if   IMPRESSION['TOUT_ORDRE']!=None :
+                                    motscles['TOUT_ORDRE']= IMPRESSION['TOUT_ORDRE']
+        elif IMPRESSION['NUME_ORDRE']!=None :
+                                    motscles['NUME_ORDRE']= IMPRESSION['NUME_ORDRE']
+        elif IMPRESSION['INST']!=None :
+                                    motscles['INST'      ]= IMPRESSION['INST']
+      if IMPRESSION['FORMAT']=='IDEAS' :
+                                    motsclei['VERSION'   ]= IMPRESSION['VERSION']
+      if IMPRESSION['FORMAT']=='CASTEM' :
+                                    motsclei['NIVE_GIBI' ]= IMPRESSION['NIVE_GIBI']
+      mcfresu.append(_F(RESULTAT=resuth,**motscles))
+    IMPR_RESU( MODELE = modele,
+               RESU   = mcfresu,
+               FORMAT=IMPRESSION['FORMAT'],**motsclei)
+#
+  return ier
diff --git a/Aster/Cata/cataSTA10/Macro/macr_aspic_mail_ops.py b/Aster/Cata/cataSTA10/Macro/macr_aspic_mail_ops.py
new file mode 100644 (file)
index 0000000..c04e209
--- /dev/null
@@ -0,0 +1,906 @@
+#@ MODIF macr_aspic_mail_ops Macro  DATE 14/04/2008   AUTEUR GALENNE E.GALENNE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+
+import os.path
+from math import sqrt, cos, sin, pi, pow, tan
+
+# Ecriture du fichier GIBI principal (dgib) - ASPID0
+def write_file_dgib_ASPID0(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
+                           ALPHA, JEU, EPC, DEC, XMAX, TYPMAI, THETA, TYPELE,
+                           ITYPSO, DPENE, NIVMAG, loc_datg):
+  import aster
+# Ouverture du fichier d'entrée de commandes
+  fdgib=open(nomFichierDATG,'w')
+  texte = """
+****************************************************************
+opti echo 0;
+epT1     = %s;
+DeT1     = %s;
+d1       = %s;
+d2       = %s;
+epT2     = %s;
+DeT2     = %s;
+Zmax     = %s;
+type_s   = %s;
+d_pene   = %s;
+h        = %s;
+angl_s   = %s;
+jeu      = %s;
+epC      = %s;
+DeC      = %s;
+Xmax     = %s;
+typmai   = MOT %s;
+theta    = %s;
+typele   = MOT %s;
+typ_eque = MOT SAINE;
+nivmag   = %s;
+****************************************************************
+""" % (EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, ITYPSO, DPENE, H,
+       ALPHA, JEU, EPC, DEC, XMAX, TYPMAI, THETA, TYPELE, NIVMAG)
+  aster.affiche('MESSAGE',texte + ' + aspic.datg...\n')
+  texte = texte + open(os.path.join(loc_datg, 'aspic.datg'), 'r').read()
+  fdgib.write(texte)
+  fdgib.close()
+
+# Ecriture du fichier GIBI principal (dgib) - ASPID1
+def write_file_dgib_ASPID1(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
+                           ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,THETA,
+                           A,C,EPS, RC0, NS,NC,NT,POSI, NDT,FETIRF,FETIRP,
+                           TFISS,ZETA,ITYPSO,DPENE, NIVMAG, loc_datg) :
+
+  import aster
+# Ouverture du fichier d'entrée de commandes
+  fdgib=open(nomFichierDATG,'w')
+  POIVIR = ' ;                                         \n'
+  texte='****************************************************************\n'
+  texte=texte+'opti echo 0 ;                                                   \n'
+  texte=texte+'epT1   = '+str(EPT1)         +POIVIR
+  texte=texte+'DeT1   = '+str(DET1)         +POIVIR
+  texte=texte+'d1     = '+str(D1)           +POIVIR
+  texte=texte+'d2     = '+str(D2)           +POIVIR
+  texte=texte+'epT2   = '+str(EPT2)         +POIVIR
+  texte=texte+'DeT2   = '+str(DET2)         +POIVIR
+  texte=texte+'Zmax   = '+str(ZMAX)         +POIVIR
+  texte=texte+'type_s = '+str(ITYPSO)       +POIVIR
+  texte=texte+'d_pene = '+str(DPENE)        +POIVIR
+  texte=texte+'h      = '+str(H)            +POIVIR
+  texte=texte+'angl_s = '+str(ALPHA)        +POIVIR
+  texte=texte+'jeu    = '+str(JEU)          +POIVIR
+  texte=texte+'epC    = '+str(EPC)          +POIVIR
+  texte=texte+'DeC    = '+str(DEC)          +POIVIR
+  texte=texte+'Xmax   = '+str(XMAX)         +POIVIR
+  texte=texte+'typmai =  MOT '+TYPMAI       +POIVIR
+  texte=texte+'theta  = '+str(THETA)        +POIVIR
+  texte=texte+'a      = '+str(A)            +POIVIR
+  texte=texte+'c      = '+str(C)            +POIVIR
+  texte=texte+'zeta   = '+str(ZETA)         +POIVIR
+  texte=texte+'eps    = '+str(EPS)          +POIVIR
+  texte=texte+'rc0    = '+str(RC0)          +POIVIR
+  texte=texte+'ns     = '+str(NS)           +POIVIR
+  texte=texte+'nc     = '+str(NC)           +POIVIR
+  texte=texte+'nt     = '+str(NT)           +POIVIR
+  texte=texte+'dir_fiss = MOT '+POSI        +POIVIR
+  texte=texte+'pos_fiss = MOT '+TFISS       +POIVIR
+  texte=texte+'ndt    = '+str(NDT)          +POIVIR
+  texte=texte+'f_etir_f = '+str(FETIRF)     +POIVIR
+  texte=texte+'f_etir_p = '+str(FETIRP)     +POIVIR
+  texte=texte+'typ_eque = MOT '+'FISS_LON'  +POIVIR
+  texte=texte+'nivmag = '+str(NIVMAG)       +POIVIR
+  texte=texte+'*                                                               \n'
+  aster.affiche('MESSAGE',texte + ' + aspic_v2.datg...\n')
+  texte = texte + open(os.path.join(loc_datg, 'aspic_v2.datg'), 'r').read()
+  fdgib.write(texte)
+  fdgib.close()
+
+# Ecriture du fichier GIBI principal (dgib) - ASPID2
+def write_file_dgib_ASPID2(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX,
+                           H, ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,
+                           THETA, A, C, EPS, RC0, RC1, RC2, RC3,
+                           ALP,BETA, NS, NC, NT, POSI ,NDT,NSDT,TFISS,
+                           ZETA,ITYPSO,DPENE, NIVMAG, loc_datg) :
+# 
+  import aster
+  CALPHA = cos(ALPHA*pi/180.)
+  SALPHA = sin(ALPHA*pi/180.)
+  CTHETA = cos(THETA*pi/180.)
+  STHETA = sin(THETA*pi/180.)
+#
+  AOLD = A
+#
+  if (ITYPSO == 1) :
+# PIQUAGE TYPE 1
+     if (POSI == 'DROIT') :
+#    PIQUAGE DROIT
+        if (TFISS == 'DEB_INT') :
+#       POSITION INTERNE
+           SGAMMA = STHETA * (DET1/2.0)/( (DEC/2.0) -EPC)
+           SGAMME = STHETA * (DET1/2.0)/( (DEC/2.0) )
+           RAPPA = sqrt(1.0 - pow(SGAMMA,2))
+           RAPPE = sqrt(1.0 - pow(SGAMME,2))
+           AP =  A - (1.0 - RAPPA)*A  
+           RAPP = (AP/EPC*RAPPE) + (1.0-(AP/EPC))*RAPPA
+           XA = (DET1/2.0) * CTHETA 
+           YA = (DET1/2.0) * STHETA      
+           ZA = ((DEC/2.0) -EPC) * sqrt(1.0 - pow(SGAMMA,2))
+           ZA0 = (DEC/2.0) - EPC
+           XA0 = DET1/2.0
+           XN0 = XA0
+           YN0 = 0.0 
+           ZN0 = ZA0 + A
+           XN = XN0 * CTHETA 
+           YN = XN0 * STHETA
+           SGAMN = YN / ZN0
+           ZN = ZN0 * sqrt(1.0 - (SGAMN*SGAMN))
+           D0N0 = sqrt( pow((XA0 - XN0),2) + pow((ZA0 - ZN0),2) )
+           DN = sqrt( pow((XA - XN),2) + pow((YA - YN),2) + pow((ZA - ZN),2) )
+           RAPP = D0N0 / DN
+           ECART = (1.0 - RAPP) * D0N0
+           A = A - ECART
+        elif (TFISS == 'DEB_EXT') :
+#       POSITION EXTERNE
+           SGAMME = STHETA * (DET1/2.0)/ (DEC/2.0) 
+           RAPPE = sqrt(1.0 - pow(SGAMME,2))
+           A =  A  -(1.0 - RAPPE)*A  
+
+     elif (POSI == 'INCLINE') :
+#    PIQUAGE INCLINE
+        SGAMMA = STHETA * (DET1/2.0)/ ( (DEC/2.0) -EPC)
+        XA = (DET1/2.0) * CTHETA 
+        YA = (DET1/2.0) * STHETA     
+        ZA = ((DEC/2.0) - EPC) * sqrt(1.0 - pow(SGAMMA,2))
+        ZA0 = (DEC/2.0) - EPC
+        ZD0 = DEC/2.0
+        XA0 = DET1/2.0
+        XD0 = XA0 + (tan(ALPHA*pi/180.0) * EPC)   
+        A0D0 = sqrt( pow((ZD0 - ZA0),2) + pow((XD0 - XA0),2) )
+        EPSIL = STHETA * tan(ALPHA*pi/180.0) 
+        PHI = (EPSIL * ZA) - YA
+        DELTA = pow(PHI,2) - ((1 + pow(EPSIL,2))*(pow(PHI,2) - (pow((DEC/2.0),2)*pow(EPSIL,2))))
+        if (STHETA > 0) :          
+           YD = ( sqrt(DELTA) - PHI) / (1.0 + pow(EPSIL,2))
+        else :
+           YD = ( -1.0*sqrt(DELTA) - PHI) / (1.0 + pow(EPSIL,2))
+
+        ZD = sqrt(pow((DEC/2.0),2) - pow(YD,2))  
+
+        if ( (abs(THETA - 0.0) < 1.e-3) or ((abs(THETA - 180.0)) < 1.e-3) ) :
+           XD = CTHETA * XD0
+        else :
+           XD = YD / tan(THETA*pi/180.0)
+
+        AD = sqrt( pow((XA - XD),2) + pow((YA - YD),2) + pow((ZA - ZD),2) )       
+        RAPP =  A0D0 / AD          
+
+        if (TFISS == 'DEB_EXT') :       
+           XN0 = XD0 - A*SALPHA 
+           YN0 = 0.0 
+           ZN0 = ZD0 - A*CALPHA 
+           XN = XN0 * CTHETA 
+           YN = XN0 * STHETA
+           DNXY = sqrt(pow(XD,2) + pow(YD,2)) - sqrt(pow(XN,2) + pow(YN,2))
+           DNXY0 = XD0 - XN0
+           RAPP = DNXY/DNXY0
+           # Correction necessaire dans le cas theta et/ou alpha grand
+           if (RAPP < 0.5) :
+              DXY = sqrt(pow(XD,2) + pow(YD,2) ) 
+              XN = XN * DXY/XD0
+              YN = YN * DXY/XD0
+           SGAMN = YN / ZN0
+           ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
+           D0N0 = sqrt( pow((XD0 - XN0),2) + pow((ZD0 - ZN0),2) )
+           DN = sqrt( pow((XD - XN),2) + pow((YD - YN),2) + pow((ZD - ZN),2) )       
+           RAPP = D0N0 / DN
+           ECART = (RAPP - 1.0) * D0N0
+           A = A + ECART
+           
+        if (TFISS == 'DEB_INT') :
+           XN0 = XA0 + A*SALPHA 
+           YN0 = 0.0
+           ZN0 = ZA0 + A*CALPHA 
+           XN = XN0 * CTHETA 
+           YN = XN0 * STHETA           
+           SGAMN = YN / ZN0
+           ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
+           D0N0 = sqrt( pow((XA0 - XN0),2) + pow((ZA0 - ZN0),2) )
+           DN = sqrt( pow((XA - XN),2) + pow((YA - YN),2) + pow((ZA - ZN),2) )       
+           RAPP = D0N0 / DN
+           ECART = (RAPP - 1.0) * D0N0
+           # Correction necessaire dans le cas theta grand (cf. AL9679)
+           if ( abs(STHETA) > 0.8) :
+              DXY = sqrt(pow(XD,2) + pow(YD,2) ) 
+              XN = XN * DXY/XD0
+              YN = YN * DXY/XD0
+              SGAMN = YN / ZN0
+              ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
+              D0N0 = sqrt( pow((XA0 - XN0),2) + pow((ZA0 - ZN0),2) )
+              DN = sqrt( pow((XA - XN),2) + pow((YA - YN),2) + pow((ZA - ZN),2) )       
+              RAPP = D0N0 / DN
+              ECART = (ECART + (RAPP - 1.0) * D0N0)/2
+           A = A + ECART
+
+
+  elif (ITYPSO == 2) :
+# PIQUAGE TYPE 2
+     if (POSI == 'DROIT') :
+#    PIQUAGE DROIT
+        SGAMMI = STHETA * ((DET1/2.0) - EPT1)/(DEC/2.0)
+        XI = ((DET1/2.0) - EPT1) * CTHETA 
+        YI = ((DET1/2.0) - EPT1) * STHETA
+        ZI =  (DEC/2.0)  * sqrt(1.0 - pow(SGAMMI,2))
+        XI0 = (DET1/2.0) -EPT1
+        YI0 = 0.0 
+        ZI0 = (DEC/2.0)
+        
+        SGAMMA = STHETA * (DET1/2.0)/((DEC/2.0) -EPC)
+        YA = (DET1/2.0) * STHETA     
+        ZA = ((DEC/2.0) - EPC) * sqrt(1.0 - pow(SGAMMA,2))
+        TGALP = H / EPC
+        EPSIL =  STHETA * TGALP
+        PHI = (EPSIL * ZA) - YA
+        DELTA = pow(PHI,2) - (1.0 + pow(EPSIL,2))*(pow(PHI,2) - pow((DEC/2.0),2)*pow(EPSIL,2)) 
+        if (STHETA > 0) :          
+           YD = (sqrt(DELTA) - PHI) / (1.0 + pow(EPSIL,2))
+        else :
+           YD = (-1.0*sqrt(DELTA) - PHI) / (1.0 + pow(EPSIL,2))
+
+        ZD = sqrt( pow((DEC/2.0),2) - pow(YD,2) )
+        if ( (abs(THETA - 0.0) < 1.0e-3) or
+             (abs(THETA - 180.0) < 1.0e-3) or
+             (abs(THETA + 180.0) < 1.0e-3) or
+             (abs(THETA + 90.0) < 1.0e-3) or
+             (abs(THETA - 90.0) < 1.0e-3) ) :
+           XD = CTHETA * ((DET1/2.0) + H)
+        else :
+           XD = YD / (tan(THETA*pi/180.0))
+
+        XD0 = (DET1/2.0) + H 
+        YD0 = 0.0 
+        ZD0 = (DEC/2.0) 
+        
+        if (TFISS == 'DEB_EXT') :
+           XN0 = XD0 - A
+           YN0 = 0.0 
+           ZN0 = ZI0 
+           XN = XN0 * CTHETA 
+           YN = XN0 * STHETA 
+           DZID = abs(ZI - ZD) 
+           DXYID = sqrt( pow((XD - XI),2) + pow((YD - YI),2) )
+           DXYIN = sqrt( pow((XN - XI),2) + pow((YN - YI),2) )
+           DZIN = (DXYIN * DZID) / DXYID
+           ZN = ZI - DZIN         
+           D0N0 = sqrt( pow((XD0 - XN0),2) + pow((ZD0 - ZN0),2) )
+           DN = sqrt( pow((XD - XN),2) + pow((YD - YN),2) + pow((ZD - ZN),2) ) 
+           RAPP = D0N0 / DN 
+           ECART = DN - D0N0 
+           A = A - ECART
+
+        if (TFISS == 'DEB_INT') :
+           XN0 = XI0 + A
+           YN0 = 0.0 
+           ZN0 = ZI0 
+           XN = XN0 * CTHETA
+           YN = XN0 * STHETA 
+           SGAMN = YN / ZN0 
+           ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
+           I0N0 = sqrt( pow((XI0 - XN0),2) + pow((ZI0 - ZN0),2) ) 
+           IN = sqrt( pow((XI - XN),2) + pow((YI - YN),2) + pow((ZI - ZN),2) ) 
+           RAPP = I0N0 / IN 
+           ECART = I0N0 * ( 1.0 - RAPP ) 
+           A = A - ECART
+        
+     elif (POSI == 'INCLINE') :
+#    PIQUAGE INCLINE
+        TGALPHA = SALPHA/CALPHA
+        REPB = (DEC/2.0) + JEU + (EPT1*TGALPHA) 
+        SGAMB = (STHETA * DET1/2.0 ) / REPB 
+        CGAMB = sqrt(1.0 - pow(SGAMB,2)) 
+        XB = (DET1/2.0) * CTHETA
+        YB = (DET1/2.0) * STHETA
+        ZB = ( (DEC/2.0) + JEU + (EPT1*TGALPHA) ) * CGAMB
+        XB0 = (DET1/2.0)
+        YB0 = 0.0
+        ZB0 = (DEC/2.0) + JEU + (EPT1*TGALPHA)
+#
+        RIT1 = (DET1/2.0) - EPT1 
+        REPG = (DEC/2.0) + JEU 
+        SGAMG = ((STHETA ) * RIT1) / REPG
+        CGAMG = sqrt(1.0 - pow(SGAMG,2))
+        XG = RIT1 * CTHETA
+        YG = RIT1 * STHETA
+        ZG = ((DEC/2.0) + JEU) * CGAMG
+        XG0 = RIT1
+        YG0 = 0.0
+        ZG0 = (DEC/2.0) + JEU
+#
+        if (TFISS == 'DEB_INT')  :
+           XN0 = XG0 + A*CALPHA 
+           YN0 = 0.0
+           ZN0 = ZG0 + A*SALPHA 
+           XN = XN0 * CTHETA 
+           YN = XN0 * STHETA
+           SGAMN = YN / ZN0
+           ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
+           G0N0 = sqrt( pow((XG0 - XN0),2) + pow((ZG0 - ZN0),2) )
+           GN = sqrt( pow((XG - XN),2) + pow((YG - YN),2) + pow((ZG - ZN),2) )
+           RAPP = G0N0 / GN
+           ECART = (RAPP - 1.0) * G0N0
+           A = A + ECART
+
+        if (TFISS == 'DEB_EXT') :
+           XN0 = XB0 - A*CALPHA
+           YN0 = 0.0
+           ZN0 = ZB0 - A*SALPHA
+           XN = XN0 * CTHETA
+           YN = XN0 * STHETA
+           SGAMN = YN / ZN0
+           ZN = ZN0 * sqrt(1.0 - pow(SGAMN,2))
+           B0N0 = sqrt( pow((XB0 - XN0),2) + pow((ZB0 - ZN0),2) )
+           BN = sqrt( pow((XB - XN),2) + pow((YB - YN),2) + pow((ZB - ZN),2) )
+           RAPP = B0N0 / BN
+           ECART = (RAPP - 1.0) * B0N0
+           A = A + ECART
+
+  message= ' <MACR_ASPIC_MAIL> CORRECTION PROFONDEUR DEFAUT \n'
+  message=message+ ' PROFONDEUR SUR PIQUAGE   : %.2f \n'%AOLD
+  message=message+ ' PROFONDEUR SUR EQUERRE   : %.2f \n'%A
+  aster.affiche('MESSAGE',message)
+
+# Ouverture du fichier d'entrée de commandes
+
+  fdgib=open(nomFichierDATG,'w')
+  POIVIR = ' ;                                         \n'
+  texte='****************************************************************\n'
+  texte=texte+'opti echo 0 ;                                                   \n'
+  texte=texte+'epT1   = '+str(EPT1)         +POIVIR
+  texte=texte+'DeT1   = '+str(DET1)         +POIVIR
+  texte=texte+'d1     = '+str(D1)           +POIVIR
+  texte=texte+'d2     = '+str(D2)           +POIVIR
+  texte=texte+'epT2   = '+str(EPT2)         +POIVIR
+  texte=texte+'DeT2   = '+str(DET2)         +POIVIR
+  texte=texte+'Zmax   = '+str(ZMAX)         +POIVIR
+  texte=texte+'type_s = '+str(ITYPSO)       +POIVIR
+  texte=texte+'d_pene = '+str(DPENE)        +POIVIR
+  texte=texte+'h      = '+str(H)            +POIVIR
+  texte=texte+'angl_s = '+str(ALPHA)        +POIVIR
+  texte=texte+'jeu    = '+str(JEU)          +POIVIR
+  texte=texte+'epC    = '+str(EPC)          +POIVIR
+  texte=texte+'DeC    = '+str(DEC)          +POIVIR
+  texte=texte+'Xmax   = '+str(XMAX)         +POIVIR
+  texte=texte+'typmai =  MOT '+TYPMAI       +POIVIR
+  texte=texte+'theta  = '+str(THETA)        +POIVIR
+  texte=texte+'a      = '+str(A)            +POIVIR
+  texte=texte+'c      = '+str(C)            +POIVIR
+  texte=texte+'zeta   = '+str(ZETA)         +POIVIR
+  texte=texte+'eps    = '+str(EPS)          +POIVIR
+  texte=texte+'rc0    = '+str(RC0)          +POIVIR
+  texte=texte+'rc1    = '+str(RC1)          +POIVIR
+  texte=texte+'rc2    = '+str(RC2)          +POIVIR
+  texte=texte+'rc3    = '+str(RC3)          +POIVIR
+  texte=texte+'alpha  = '+str(ALP)          +POIVIR
+  texte=texte+'beta   = '+str(BETA)         +POIVIR
+  texte=texte+'ns     = '+str(NS)           +POIVIR
+  texte=texte+'nc     = '+str(NC)           +POIVIR
+  texte=texte+'nt     = '+str(NT)           +POIVIR
+  texte=texte+'dir_fiss = MOT '+POSI        +POIVIR
+  texte=texte+'pos_fiss = MOT '+TFISS       +POIVIR
+  texte=texte+'ndt    = '+str(NDT)          +POIVIR
+  texte=texte+'nsdt   = '+str(NSDT)         +POIVIR
+  texte=texte+'typ_eque = MOT '+'FISS_COU'  +POIVIR
+  texte=texte+'nivmag = '+str(NIVMAG)       +POIVIR
+  texte=texte+'*                                                               \n'
+  texte=texte+'list epc ;\n'
+  aster.affiche('MESSAGE',texte + ' + aspic.datg...\n')
+  texte = texte + open(os.path.join(loc_datg, 'aspic.datg'), 'r').read()
+  fdgib.write(texte)
+  fdgib.close()
+
+def macr_aspic_mail_ops(self,EXEC_MAILLAGE,TYPE_ELEM,RAFF_MAIL,TUBULURE,
+                             SOUDURE,CORPS,FISS_SOUDURE,IMPRESSION,INFO,
+                        **args):
+  """
+     Ecriture de la macro MACR_ASPIC_MAIL
+  """
+  from Accas import _F
+  import types
+  import aster 
+  from Utilitai.Utmess import  UTMESS
+  ier=0
+  
+# On importe les definitions des commandes a utiliser dans la macro
+  EXEC_LOGICIEL =self.get_cmd('EXEC_LOGICIEL')
+  PRE_GIBI      =self.get_cmd('PRE_GIBI')
+  LIRE_MAILLAGE =self.get_cmd('LIRE_MAILLAGE')
+  DEFI_GROUP    =self.get_cmd('DEFI_GROUP')
+  MODI_MAILLAGE =self.get_cmd('MODI_MAILLAGE')
+  CREA_MAILLAGE =self.get_cmd('CREA_MAILLAGE')
+  IMPR_RESU     =self.get_cmd('IMPR_RESU')
+  DEFI_FICHIER  =self.get_cmd('DEFI_FICHIER')
+
+# La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  TYPELE = TYPE_ELEM
+  NIVMAG = EXEC_MAILLAGE['NIVE_GIBI']
+#
+#     --- raffinement maillage ---
+#
+  TYPMAI = RAFF_MAIL
+  GROS   = (TYPMAI=='GROS')
+  if GROS : NBAZIT = 40
+  else    : NBAZIT = 48
+#
+#     --- caracteristiques de la tubulure ---
+#
+  EPT1  = TUBULURE['E_BASE'   ]
+  DET1  = TUBULURE['DEXT_BASE']
+  D1    = TUBULURE['L_BASE'   ]
+  D2    = TUBULURE['L_CHANF'  ]
+  EPT2  = TUBULURE['E_TUBU'   ]
+  DET2  = TUBULURE['DEXT_TUBU']
+  ZMAX  = TUBULURE['Z_MAX'    ]
+  TYPSOU= TUBULURE['TYPE'     ]
+  DPENE = TUBULURE['L_PENETR' ]
+  if TYPSOU=='TYPE_2' and DPENE>0.0 : 
+    UTMESS('F','ASPIC0_12')
+  if TYPSOU=='TYPE_2' :
+     ITYPSO = 2
+  else :
+     ITYPSO = 1
+#
+#     --- caracteristiques de la soudure ---
+#
+  H     = SOUDURE['H_SOUD'   ]
+  ALPHA = SOUDURE['ANGL_SOUD']
+  JEU   = SOUDURE['JEU_SOUD' ]
+#
+#     --- caracteristiques du corps ---
+#
+  EPC   = CORPS  ['E_CORP'   ]
+  DEC   = CORPS  ['DEXT_CORP']
+  XMAX  = CORPS  ['X_MAX'    ]
+  EPSI  = 1.E-03
+  RMB   = ( DET1 - EPT1 ) / 2.0
+  VAL1  = 1.5 * sqrt( RMB**3 / EPT1 )
+  VAL3  = 3.0 * sqrt( RMB    * EPT1 )
+  RMT   = ( DET2 - EPT2 ) / 2.0
+  VAL2  = 1.5 * sqrt( RMT**3 / EPT2 )
+  VAL4  = 3.0 * sqrt( RMT    * EPT2 )
+  LZMAX = max ( VAL1 , VAL2, VAL3, VAL4 )
+  ZMAXC = LZMAX + ( DEC/2.0 ) + D1 + D2
+  LOK = ( (ZMAX-ZMAXC) >= -1.* EPSI * abs(ZMAXC) )
+  if not LOK :
+    UTMESS('A','ASPIC0_13',valr=[ZMAX,ZMAXC])
+  RMC   = ( DEC - EPC ) / 2.0
+  VAL1  = 1.5 * sqrt( RMC**3 / EPC )
+  VAL2  = 3.0 * sqrt( RMC    * EPC )
+  LXMAX = max( VAL1 , VAL2 )
+  XMAXC = LXMAX + ( DET1 / 2.0 )
+  LOK = ( (XMAX-XMAXC) >= -1.* EPSI * abs(XMAXC) )
+  if not LOK :
+    UTMESS('A','ASPIC0_23',valr=[XMAX,XMAXC])
+  message=         ' MACR_ASPIC_MAIL : X_MAX CALCULEE : %.2f  X_MAX FOURNI : %.2f\n'%(XMAXC,XMAX)
+  message=message+ ' MACR_ASPIC_MAIL : Z_MAX CALCULEE : %.2f  Z_MAX FOURNI : %.2f\n'%(ZMAXC,ZMAX)
+  aster.affiche('MESSAGE',message)
+#
+#     --- caracteristiques de la fissure ---
+#
+  SAIN   = 0
+  FISLON = 0
+  FISCOU = 0
+  THETA  = 0.0
+  TFISS  = None
+  if FISS_SOUDURE==None :
+     SAIN = 1
+  else :
+     if   FISS_SOUDURE['TYPE']=='LONGUE' : FISLON = 1
+     elif FISS_SOUDURE['TYPE']=='COURTE' : FISCOU = 1
+     THETA = FISS_SOUDURE['AZIMUT'        ]
+     EPS   = FISS_SOUDURE['ANGL_OUVERTURE']
+     AXIS  = FISS_SOUDURE['AXIS'          ]
+     POSI  = FISS_SOUDURE['POSITION'      ]
+     TFISS = FISS_SOUDURE['FISSURE'       ]
+     A     = FISS_SOUDURE['PROFONDEUR'    ]
+     if      FISS_SOUDURE['LONGUEUR'      ]!=None :
+        C  = FISS_SOUDURE['LONGUEUR'      ]
+        N1 = 1
+     else : N1 = 0
+     if (TFISS=='DEB_INT') and (POSI=='INCLINE') and (DPENE>0.0) and (JEU>0.0) : 
+       UTMESS('F','ASPIC0_14')
+     ZETA = 0.5
+     if TFISS not in ('DEB_INT','DEB_EXT') :
+        if FISS_SOUDURE['LIGA_INT']==None : 
+           UTMESS('F','ASPIC0_15')
+        LIGA  = FISS_SOUDURE['LIGA_INT']
+        if POSI=='DROIT' :
+           if ITYPSO==1 : ZETA = (A+LIGA)/(EPC+H)
+           else         : ZETA = (A+LIGA)/(EPT1+H)
+        else :
+           if ITYPSO==1 : ZETA = (A+LIGA)*cos(ALPHA*pi/180.0)/EPC
+           else         : ZETA = (A+LIGA)*cos(ALPHA*pi/180.0)/EPT1
+        if ZETA < 0.1   :
+           UTMESS('F','ASPIC0_16')
+        if ZETA > 0.9   :
+           UTMESS('F','ASPIC0_17')
+        if LIGA < 0.1*EPC :
+           UTMESS('F','ASPIC0_16')
+        if (LIGA + 2.0*A) > 0.9*EPC :
+           UTMESS('F','ASPIC0_17')
+     if N1==0 :
+        if FISCOU      :
+           UTMESS('F','ASPIC0_18')
+        if AXIS=='NON' :
+           UTMESS('F','ASPIC0_19')
+        C = 0.0
+     else :
+        if AXIS=='OUI' : UTMESS('A','ASPIC0_20')
+     C = 0.5 * C
+     LEQU=2.*(pi*(DEC-EPC)-DET1+2.*EPT1)
+#
+# LPIQ est une valeur qui depend theoriquement de la fissure. la valeur
+# ci-dessous est approchee car elle ne sert qu'a calculer les facteurs d'etirement
+#
+     LPIQ=pi*(DET1)
+     if AXIS=='OUI' : C=100.0*LPIQ
+     RAPL=LEQU/LPIQ
+     if FISCOU :
+        RAP=A/C
+        CAS1=RAP<0.3499
+        CAS3=RAP>0.4999
+        CAS2= not (CAS1 or CAS3)
+        if CAS1 : ALP=0.8
+        if CAS2 : ALP=0.4
+        if CAS3 : ALP=0.0
+        BETA=1.0
+        if GROS and not CAS1 :
+          NDT=1
+          NSDT=2
+        else :
+          NDT=2
+          NSDT=4
+#
+     if FISLON :
+       if GROS :
+         NDT=2
+         FETIRF=30.*RAPL
+         FETIRP=60.*RAPL
+       else :
+         NDT=3
+         FETIRF=15.*RAPL
+         FETIRP=30.*RAPL
+#
+     RC0 = FISS_SOUDURE['RAYON_TORE']
+     if (FISCOU and RC0==None) :
+       if GROS : RC0=0.12
+       else    : RC0=0.10
+       if CAS1 : RC0=0.08
+       RC0=RC0*A
+     if (FISLON and RC0==None) : RC0=A/(NDT+1)
+#
+     RC1 = FISS_SOUDURE['COEF_MULT_RC1']
+     if (FISCOU and RC1==None) :
+       if GROS : RC1=1.2
+       else    : RC1=1.0
+#
+     RC2 = FISS_SOUDURE['COEF_MULT_RC2']
+     if (FISCOU and RC2==None) :
+       if GROS : RC2=1.4
+       else    : RC2=1.2
+#
+     RC3 = FISS_SOUDURE['COEF_MULT_RC3']
+     if (FISCOU and RC3==None) :
+       if GROS :
+          if CAS1 : RC3=2.5
+          else    : RC3=1.0  # valeur non utilisee
+       else : 
+          if CAS3 : RC3=2.2
+          else    : RC3=2.0
+#
+     NT = FISS_SOUDURE['NB_TRANCHE']
+     if (FISCOU and NT==None) :
+       if GROS : NT = 8
+       else    : NT = 16
+       if CAS1 : NT = NT*2
+     if (FISLON and NT==None) : NT=0
+#
+     NS = FISS_SOUDURE['NB_SECTEUR']
+     if (FISCOU and NS==None) :
+       if GROS : NS = 2
+       else    : NS = 4
+     if (FISLON and NS==None) :
+       if GROS : NS = 2
+       else    : NS = 4
+#
+     NC = FISS_SOUDURE['NB_COURONNE']
+     if (FISCOU and NC==None) :
+       if GROS : NC = 3
+       else    : NC = 4
+     if (FISLON and NC==None) :
+       if GROS : NC = 3
+       else    : NC = 4
+#
+  loc_gibi=aster.repout()
+  logiel = EXEC_MAILLAGE['LOGICIEL'  ]
+  UNITD  = EXEC_MAILLAGE['UNITE_DATG']
+  UNITS  = EXEC_MAILLAGE['UNITE_MGIB']
+  if   logiel=='GIBI98'  : logiel = loc_gibi+'gibi98'
+  elif logiel=='GIBI2000': logiel = loc_gibi+'gibi2000'
+  else                   :
+       UTMESS('F','ASPIC0_21')
+#
+#     --- ecriture sur le fichier .datg  de la procedure ---
+#
+# Nom du fichier de commandes pour GIBI
+  nomFichierDATG = 'fort.'+str(UNITD)
+# Nom du fichier de maillage GIBI
+  nomFichierGIBI = 'fort.'+str(UNITS)
+  loc_datg = aster.repdex()
+  if SAIN   : write_file_dgib_ASPID0(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
+                                     ALPHA, JEU, EPC, DEC, XMAX, TYPMAI, THETA, TYPELE,
+                                     ITYPSO, DPENE, NIVMAG,loc_datg)
+  if FISLON : write_file_dgib_ASPID1(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX, H,
+                                     ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,THETA,
+                                     A,C,EPS, RC0,NS,NC,NT,POSI, NDT,FETIRF,FETIRP,
+                                     TFISS,ZETA,ITYPSO,DPENE, NIVMAG,loc_datg)
+  if FISCOU : write_file_dgib_ASPID2(nomFichierDATG,UNITD, EPT1, DET1, D1, D2, EPT2, DET2, ZMAX,
+                                     H, ALPHA, JEU, EPC, DEC, XMAX, TYPMAI,
+                                     THETA, A, C, EPS, RC0, RC1, RC2, RC3,
+                                     ALP,BETA, NS, NC, NT, POSI ,NDT,NSDT,TFISS,
+                                     ZETA,ITYPSO,DPENE, NIVMAG,loc_datg)
+# 
+  DEFI_FICHIER(ACTION='LIBERER',UNITE=19)
+  DEFI_FICHIER(ACTION='LIBERER',UNITE=20)
+  EXEC_LOGICIEL( LOGICIEL = logiel ,
+                 ARGUMENT = (nomFichierDATG,
+                             nomFichierGIBI), )
+#
+  PRE_GIBI()
+#
+  __MAPROV=LIRE_MAILLAGE(INFO=INFO)
+#
+  motscles={}
+  motscles['CREA_GROUP_MA']=[]
+  l_CREA_GROUP_NO=[]
+  if SAIN :
+     l_CREA_GROUP_NO.append('S_LAT1')
+     l_CREA_GROUP_NO.append('S_LAT2')
+  else :
+     l_CREA_GROUP_NO.append('S_LAT1_C')
+     l_CREA_GROUP_NO.append('S_LAT2_C')
+     l_CREA_GROUP_NO.append('S_LAT1_T')
+     l_CREA_GROUP_NO.append('S_LAT2_T')
+     l_CREA_GROUP_NO.append('LEVRTUBU')
+     if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
+        l_CREA_GROUP_NO.append('PFONDINF')
+        l_CREA_GROUP_NO.append('PFONDSUP')
+     else :
+        l_CREA_GROUP_NO.append('PFONDFIS')
+     if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='COURTE') :
+        motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FONDFISS',
+                                            NOM      = 'MAIL_ORI',
+                                            POSITION = 'INIT'     ))
+     if (TFISS[:4]=='DEB_') and (AXIS=='OUI') :
+        motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FONDFISS',
+                                            NOM      = 'MAIL_ORI',
+                                            POSITION = 'INIT'     ))
+     if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
+        motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FOND_SUP',
+                                            NOM      = 'MA_ORI_S',
+                                            POSITION = 'INIT'     ))
+        motscles['CREA_GROUP_MA'].append(_F(GROUP_MA = 'FOND_INF',
+                                            NOM      = 'MA_ORI_I',
+                                            POSITION = 'INIT'     ))
+  l_CREA_GROUP_NO.append('S_FOND1')
+  l_CREA_GROUP_NO.append('S_FOND2')
+  l_CREA_GROUP_NO.append('EQUERRE')
+  motscles['CREA_GROUP_NO']=_F(GROUP_MA=l_CREA_GROUP_NO)
+#
+  __MAPROV=DEFI_GROUP(reuse   =__MAPROV,
+                      MAILLAGE=__MAPROV,
+                      **motscles )
+#
+  if not SAIN :
+     motscles={}
+     motscles['CREA_GROUP_NO']=[]
+     if not (TFISS=='NON_DEB')  :
+        motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = 'FONDFISS',))
+     if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='LONGUE') :
+        motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = ('FOND_SUP','FOND_INF',),))
+     if (TFISS=='NON_DEB') and (FISS_SOUDURE['TYPE']=='COURTE') :
+        motscles['CREA_GROUP_NO'].append(_F(GROUP_MA = 'FONDFISS',))
+     __MAPROV=DEFI_GROUP(reuse   =__MAPROV,
+                         MAILLAGE=__MAPROV,
+                         **motscles )
+#
+  __MAPROV=MODI_MAILLAGE(reuse   =__MAPROV,
+                         MAILLAGE=__MAPROV,
+                         EQUE_PIQUA=_F( GROUP_NO  = 'EQUERRE' ,
+                                        E_BASE    = EPT1  ,
+                                        DEXT_BASE = DET1  ,
+                                        L_BASE    = D1    ,
+                                        L_CHANF   = D2    ,
+                                        TYPE      = TYPSOU,
+                                        H_SOUD    = H     , 
+                                        ANGL_SOUD = ALPHA ,
+                                        JEU_SOUD  = JEU   ,
+                                        E_CORP    = EPC   , 
+                                        DEXT_CORP = DEC   ,
+                                        AZIMUT    = THETA ,
+                                        RAFF_MAIL = TYPMAI,
+                                        X_MAX     = XMAX  , )
+                         )
+#
+
+  motscles={}
+  if not SAIN :
+     motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXCORP1','EXCORP2','EXTUBU','LEVRTUBU','LEVRCORP'),)
+  else :
+     motscles['ORIE_PEAU_3D']=_F(GROUP_MA=('PEAUINT','EXCORP1','EXCORP2','EXTUBU',),)
+  __MAPROV=MODI_MAILLAGE(reuse   =__MAPROV,
+                         MAILLAGE=__MAPROV,
+                         **motscles
+                         )
+#
+  if SAIN :
+     __MAPROV=DEFI_GROUP(reuse         = __MAPROV,
+                         MAILLAGE      = __MAPROV,
+                         CREA_GROUP_NO = _F(GROUP_MA=('NIDXT','NEDXT','NIIXT','NEIXT')) )
+#
+     for i in range(1,NBAZIT+1):
+       prec = EPC / 5.0
+       __MAPROV=DEFI_GROUP(reuse         = __MAPROV,
+                           MAILLAGE      = __MAPROV,
+                         CREA_GROUP_NO = ( _F( NOM       = 'NID'+str(i) ,
+                                               GROUP_NO  = 'NIDXT'      ,
+                                               NUME_INIT = i            ,
+                                               NUME_FIN  = i            ,),
+                                           _F( NOM       = 'NED'+str(i) ,
+                                               GROUP_NO  = 'NEDXT'      ,
+                                               NUME_INIT = i            ,
+                                               NUME_FIN  = i            ,),
+                                           _F( NOM       = 'NII'+str(i) ,
+                                               GROUP_NO  = 'NIIXT'      ,
+                                               NUME_INIT = i            ,
+                                               NUME_FIN  = i            ,),
+                                           _F( NOM       = 'NEI'+str(i) ,
+                                               GROUP_NO  = 'NEIXT'      ,
+                                               NUME_INIT = i            ,
+                                               NUME_FIN  = i            ,),
+                                           _F( NOM       = 'LDN'+str(i) ,
+                                               GROUP_MA  = 'LD' +str(i) ,),
+                                           _F( NOM       = 'LD' +str(i) ,
+                                               GROUP_NO  = 'LDN'+str(i) ,
+                                               OPTION    = 'SEGM_DROI_ORDO',
+                                               PRECISION =  prec        ,
+                                               CRITERE   = 'ABSOLU'     ,
+                                               GROUP_NO_ORIG   = 'NID'+str(i),
+                                               GROUP_NO_EXTR   = 'NED'+str(i),),
+                                           _F( NOM       = 'LIN'+str(i) ,
+                                               GROUP_MA  = 'LI' +str(i) ,),
+                                           _F( NOM       = 'LI' +str(i) ,
+                                               GROUP_NO  = 'LIN'+str(i) ,
+                                               OPTION    = 'SEGM_DROI_ORDO',
+                                               PRECISION =  prec        ,
+                                               CRITERE   = 'ABSOLU'     ,
+                                               GROUP_NO_ORIG   = 'NII'+str(i),
+                                               GROUP_NO_EXTR   = 'NEI'+str(i),),))
+#
+#
+#     --- commande CREA_MAILLAGE ---
+#
+  self.DeclareOut('nomres',self.sd)
+  nomres=CREA_MAILLAGE( MAILLAGE=__MAPROV,
+                        CREA_POI1 = ( _F( NOM_GROUP_MA = 'P1_CORP ' ,
+                                          GROUP_NO     = 'P1_CORP ' , ),
+                                      _F( NOM_GROUP_MA = 'P2_CORP ' ,
+                                          GROUP_NO     = 'P2_CORP ' , ),
+                                      _F( NOM_GROUP_MA = 'P_TUBU ' ,
+                                          GROUP_NO     = 'P_TUBU ' ,  ),)
+                         )
+#
+  if IMPRESSION!=None:
+     for impr in IMPRESSION :
+#
+         motscles={}
+         if impr['FORMAT']=='IDEAS'  : motscles['VERSION']  =impr['VERSION']
+         if impr['FORMAT']=='CASTEM' : motscles['NIVE_GIBI']=impr['NIVE_GIBI']
+         if impr['UNITE']!=None      : motscles['UNITE']    =impr['UNITE']
+         impr_resu = _F( MAILLAGE = nomres,)
+#
+         IMPR_RESU( RESU = impr_resu, 
+                    FORMAT = impr['FORMAT'],**motscles )
+#
+#
+#     --- Verification profondeur fissure (courte débouchante) ---
+#
+  if FISCOU  and not (TFISS=='NON_DEB')    :
+      nomres=DEFI_GROUP( reuse=nomres,
+                         MAILLAGE=nomres,
+                         CREA_GROUP_NO=(_F( GROUP_MA = 'LEVRTUBU',),
+                                        _F( NOM = 'FONDORDO',
+                                            GROUP_MA = 'FONDFISS',
+                                            OPTION = 'NOEUD_ORDO',),),);
+
+      nommail=nomres.nom
+      coord   =aster.getvectjev(nommail.ljust(8)+'.COORDO    .VALE')
+      collgrno=aster.getcolljev(nommail.ljust(8)+'.GROUPENO')
+
+      grfo=collgrno['FONDORDO']
+      Nbno = len(grfo)  
+      listx = [None]*Nbno
+      listy = [None]*Nbno
+      listz = [None]*Nbno
+      k = 0
+      for node in grfo:
+         listx[k] = coord[3*(node-1)]
+         listy[k] = coord[3*(node-1)+1]
+         listz[k] = coord[3*(node-1)+2]
+         k = k+1
+
+      XAB = listx[Nbno-1] - listx[0]
+      YAB = listy[Nbno-1] - listy[0]
+      ZAB = listz[Nbno-1] - listz[0]
+      AB = sqrt(XAB*XAB + YAB*YAB +ZAB*ZAB)
+      d = 0
+      for k in range(0,Nbno) :
+         XAM = listx[k] - listx[0]
+         YAM = listy[k] - listy[0]
+         ZAM = listz[k] - listz[0]
+         Xvect = YAB*ZAM-ZAB*YAM
+         Yvect = ZAB*XAM-XAB*ZAM
+         Zvect = XAB*YAM-YAB*XAM
+         AM = sqrt(Xvect*Xvect+ Yvect*Yvect +Zvect*Zvect)
+         dk = AM/AB
+         if dk > d :
+            XC = listx[k]
+            YC = listy[k]
+            ZC = listz[k]
+         d = max(dk, d)
+   
+      grlev=collgrno['LEVRTUBU']
+      Nbnol = len(grlev)  
+      listxl = [None]*Nbnol
+      listyl = [None]*Nbnol
+      listzl = [None]*Nbnol
+      k = 0
+      for node in grlev:
+         listxl[k] = coord[3*(node-1)]
+         listyl[k] = coord[3*(node-1)+1]
+         listzl[k] = coord[3*(node-1)+2]
+         k = k+1
+      dist = 0
+      for k in range(0,Nbnol) :
+         XAM = listxl[k] - listx[0]
+         YAM = listyl[k] - listy[0]
+         ZAM = listzl[k] - listz[0]
+         Scal = (XAB*XAM + YAB*YAM + ZAB*ZAM)/(AB*AB)
+         if (abs(Scal) < 0.51) and (abs(Scal) > 0.49) :
+            Xk = listxl[k] -XC
+            Yk = listyl[k] -YC
+            Zk = listzl[k] -ZC
+            dk = sqrt(Xk**2+ Yk**2 +Zk**2)
+            dist = max(dk, dist)
+      
+      texte="<MACR_ASPIC_MAIL> PROFONDEUR DE LA FISSURE DANS LE MAILLAGE : %.2f \n"%dist
+      aster.affiche('MESSAGE',texte)
+#      
+  return ier
+
+
diff --git a/Aster/Cata/cataSTA10/Macro/macr_cara_poutre_ops.py b/Aster/Cata/cataSTA10/Macro/macr_cara_poutre_ops.py
new file mode 100644 (file)
index 0000000..30fc9ad
--- /dev/null
@@ -0,0 +1,848 @@
+#@ MODIF macr_cara_poutre_ops Macro  DATE 30/06/2008   AUTEUR FLEJOU J-L.FLEJOU 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE JMBHH01 J.M.PROIX
+
+def macr_cara_poutre_ops(self,MAILLAGE,SYME_X,SYME_Y,GROUP_MA_BORD,
+                              GROUP_MA,ORIG_INER,**args):
+  """
+     Ecriture de la macro MACR_CARA_POUTRE
+  """
+  import types,string
+  from Accas import _F
+  import aster
+  from Utilitai.Utmess     import  UTMESS
+  ier=0
+  # On importe les definitions des commandes a utiliser dans la macro
+  # Le nom de la variable doit etre obligatoirement le nom de la commande
+  LIRE_MAILLAGE   =self.get_cmd('LIRE_MAILLAGE')
+  DEFI_GROUP      =self.get_cmd('DEFI_GROUP')
+  CREA_MAILLAGE   =self.get_cmd('CREA_MAILLAGE')
+  AFFE_MODELE     =self.get_cmd('AFFE_MODELE')
+  DEFI_MATERIAU   =self.get_cmd('DEFI_MATERIAU')
+  AFFE_MATERIAU   =self.get_cmd('AFFE_MATERIAU')
+  DEFI_FONCTION   =self.get_cmd('DEFI_FONCTION')
+  DEFI_CONSTANTE  =self.get_cmd('DEFI_CONSTANTE')
+  AFFE_CHAR_THER  =self.get_cmd('AFFE_CHAR_THER')
+  AFFE_CHAR_THER_F=self.get_cmd('AFFE_CHAR_THER_F')
+  THER_LINEAIRE   =self.get_cmd('THER_LINEAIRE')
+  CALC_VECT_ELEM  =self.get_cmd('CALC_VECT_ELEM')
+  CALC_MATR_ELEM  =self.get_cmd('CALC_MATR_ELEM')
+  NUME_DDL        =self.get_cmd('NUME_DDL')
+  ASSE_VECTEUR    =self.get_cmd('ASSE_VECTEUR')
+  POST_ELEM       =self.get_cmd('POST_ELEM')
+  CALC_ELEM       =self.get_cmd('CALC_ELEM')
+  INTE_MAIL_2D    =self.get_cmd('INTE_MAIL_2D')
+  POST_RELEVE_T   =self.get_cmd('POST_RELEVE_T')
+  IMPR_TABLE      =self.get_cmd('IMPR_TABLE')
+  CREA_TABLE      =self.get_cmd('CREA_TABLE')
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  # Le concept sortant (de type table_sdaster) est nommé 'nomres' dans le contexte de la macro
+  self.DeclareOut('nomres',self.sd)
+  #
+  if ( MAILLAGE != None ):
+      __nomlma=CREA_MAILLAGE(MAILLAGE=MAILLAGE)
+  elif ( args.has_key('UNITE') and args.has_key('FORMAT') ):
+      __nomlma=LIRE_MAILLAGE(UNITE=args['UNITE'],FORMAT=args['FORMAT'])
+  else:
+      assert False, "Erreur dans les options UNITE, FORMAT, MAILLAGE"
+
+  __nomamo=AFFE_MODELE(MAILLAGE=__nomlma,
+                       AFFE=_F(TOUT='OUI',
+                               PHENOMENE='MECANIQUE',
+                               MODELISATION='D_PLAN',),   )
+
+  __nomdma=DEFI_MATERIAU(ELAS=_F(E=1.0,NU=0.,RHO=1.0),)
+
+
+  __nomama=AFFE_MATERIAU(MAILLAGE=__nomlma,
+                         AFFE=_F(TOUT='OUI',
+                                 MATER=__nomdma,),  )
+
+
+# --- CALCUL DES CARACTERISTIQUES GEOMETRIQUES DE LA SECTION :
+#     ------------------------------------------------------
+
+  motsimps={}
+  if GROUP_MA  : motsimps['GROUP_MA']  = GROUP_MA
+  if SYME_X    : motsimps['SYME_X']    = SYME_X
+  if SYME_Y    : motsimps['SYME_Y']    = SYME_Y
+  motsimps['ORIG_INER'] = ORIG_INER
+  mfact=_F(TOUT='OUI',**motsimps)
+  __cageo=POST_ELEM(MODELE=__nomamo,
+                    CHAM_MATER=__nomama,
+                    CARA_GEOM=mfact    )
+# nb  :  si GROUP_MA n existe pas : le mot clé est ignoré
+
+#
+#     ==================================================================
+# --- = CALCUL DE LA CONSTANTE DE TORSION SUR TOUT LE MAILLAGE         =
+# --- =     OU DU  CENTRE DE TORSION/CISAILLEMENT                      =
+# --- =        DES COEFFICIENTS DE CISAILLEMENT                        =
+# --- =     ET DE L INERTIE DE GAUCHISSEMENT                           =
+# --- =        DU RAYON DE TORSION SUR TOUT LE MAILLAGE
+# --- = ON CREE UN MODELE PLAN 2D THERMIQUE REPRESENTANT LA SECTION    =
+# --- = DE LA POUTRE CAR ON A A RESOUDRE DES E.D.P. AVEC DES LAPLACIENS=
+#     ==================================================================
+
+  if GROUP_MA_BORD and not GROUP_MA:
+
+# --- TRANSFORMATION DES GROUP_MA EN GROUP_NO SUR-LESQUELS
+# --- ON POURRA APPLIQUER DES CONDITIONS DE TEMPERATURE IMPOSEE :
+#     ---------------------------------------------------------
+     motscles={}
+     if type(GROUP_MA_BORD)==types.StringType:
+        motscles['CREA_GROUP_NO']=_F(GROUP_MA=GROUP_MA_BORD,)
+     else:
+        motscles['CREA_GROUP_NO']=[]
+        for grma in GROUP_MA_BORD:
+           motscles['CREA_GROUP_NO'].append(_F(GROUP_MA=grma,))
+     __nomlma=DEFI_GROUP(reuse=__nomlma,
+                         MAILLAGE=__nomlma,
+                         **motscles)
+
+
+
+# --- CREATION D UN MAILLAGE IDENTIQUE AU PREMIER A CECI PRES
+# --- QUE LES COORDONNEES SONT EXPRIMEES DANS LE REPERE PRINCIPAL
+# --- D INERTIE DONT L ORIGINE EST LE CENTRE DE GRAVITE DE LA SECTION :
+#     ---------------------------------------------------------------
+
+     __nomapi=CREA_MAILLAGE(MAILLAGE=__nomlma,
+                            REPERE=_F(TABLE=__cageo,
+                                      NOM_ORIG='CDG',  ),  )
+
+# --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
+# --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
+#     ------------------------------------------------------
+
+     __nomoth=AFFE_MODELE(MAILLAGE=__nomapi,
+                          AFFE=_F(TOUT='OUI',
+                                  PHENOMENE='THERMIQUE',
+                                  MODELISATION='PLAN',), )
+
+# --- POUR LA CONSTRUCTION DU LAPLACIEN, ON  DEFINIT UN
+# --- PSEUDO-MATERIAU DONT LES CARACTERISTIQUES THERMIQUES SONT :
+# --- LAMBDA = 1, RHO*CP = 0 :
+#     ----------------------
+
+     __nomath=DEFI_MATERIAU(THER=_F(LAMBDA=1.0,RHO_CP=0.,),)
+
+# --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
+#     ---------------------------------------------------------
+
+     __chmath=AFFE_MATERIAU(MAILLAGE=__nomapi,
+                            AFFE=_F(TOUT='OUI',
+                                    MATER=__nomath,),   )
+
+#
+#     ------------------------------------------------------------
+# --- - CALCUL DE LA CONSTANTE DE TORSION PAR RESOLUTION         -
+# --- - D UN LAPLACIEN AVEC UN TERME SOURCE EGAL A -2            -
+# --- - L INCONNUE ETANT NULLE SUR LE CONTOUR DE LA SECTION :    -
+# --- -    LAPLACIEN(PHI) = -2 DANS LA SECTION                   -
+# --- -    PHI = 0 SUR LE CONTOUR :                              -
+#     ------------------------------------------------------------
+#
+# --- ON IMPOSE LA VALEUR 0 A L INCONNUE SCALAIRE SUR LE CONTOUR
+# --- DE LA SECTION
+# --- ET ON A UN TERME SOURCE EGAL A -2 DANS TOUTE LA SECTION :
+#     -------------------------------------------------------
+
+     motscles={}
+     if args.has_key('GROUP_MA_INTE'):
+        if args['GROUP_MA_INTE'] != None :
+           motscles['LIAISON_UNIF']=_F(GROUP_MA=args['GROUP_MA_INTE'],DDL='TEMP'),
+     __chart1=AFFE_CHAR_THER(MODELE=__nomoth,
+                             TEMP_IMPO   =_F(GROUP_NO=GROUP_MA_BORD,
+                                             TEMP=0. ),
+                             SOURCE      =_F(TOUT='OUI',
+                                             SOUR=2.0),
+                             **motscles  )
+
+# ---  POUR CHAQUE TROU DE LA SECTION :
+# ---  .ON A IMPOSE QUE PHI EST CONSTANT SUR LE CONTOUR INTERIEUR
+# ---   EN FAISANT LE LIAISON_UNIF DANS LE AFFE_CHAR_THER PRECEDENT
+# ---  .ON IMPOSE EN PLUS D(PHI)/DN = 2*AIRE(TROU)/L(TROU)
+# ---        OU D/DN DESIGNE LA DERIVEE PAR RAPPORT A LA
+# ---        NORMALE ET L DESIGNE LA LONGUEUR DU BORD DU TROU :
+#     -------------------------------------------------------
+
+     if args.has_key('GROUP_MA_INTE'):
+        lgmaint=args['GROUP_MA_INTE']
+        if lgmaint != None :
+           __tbaire=POST_ELEM(MODELE=__nomoth,
+                           AIRE_INTERNE=_F(GROUP_MA_BORD=args['GROUP_MA_INTE'],),  )
+
+           motscles={}
+           motscles['FLUX_REP']=[]
+
+           if type(lgmaint)==types.StringType:
+              motscles['FLUX_REP']=_F(GROUP_MA=args['GROUP_MA_INTE'],CARA_TORSION=__tbaire)
+           else:
+              motscles['FLUX_REP']=[]
+              for grma in lgmaint:
+                 motscles['FLUX_REP'].append(_F(GROUP_MA=grma,CARA_TORSION=__tbaire),)
+           __chart2=AFFE_CHAR_THER(MODELE=__nomoth,**motscles)
+
+# --- RESOLUTION DE LAPLACIEN(PHI) = -2
+# --- AVEC PHI = 0 SUR LE CONTOUR :
+#     ----------------------------------------
+
+     motscles={}
+     motscles['EXCIT']=[_F(CHARGE=__chart1,),]
+     if args.has_key('GROUP_MA_INTE'):
+        if lgmaint != None :
+           motscles['EXCIT'].append(_F(CHARGE=__chart2,))
+     __tempe1=THER_LINEAIRE(MODELE=__nomoth,
+                            CHAM_MATER=__chmath,
+                            SOLVEUR=_F(STOP_SINGULIER='NON',),
+                            **motscles   )
+
+#
+#     ----------------------------------------------
+# --- - CALCUL DU  CENTRE DE TORSION/CISAILLEMENT  -
+# --- - ET DES COEFFICIENTS DE CISAILLEMENT :      -
+#     ----------------------------------------------
+#
+# --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
+# --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
+# --- PAR UNE FONCTION EGALE A Y :
+#     --------------------------
+
+     __fnsec1=DEFI_FONCTION(NOM_PARA='X',
+                            VALE=(0.,0.,10.,10.),
+                            PROL_DROITE='LINEAIRE',
+                            PROL_GAUCHE='LINEAIRE',
+                           )
+
+     __fnsec0=DEFI_CONSTANTE(VALE=0.,)
+
+# --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
+# --- DE LAPLACE EST PRIS EGAL A Y DANS TOUTE LA SECTION :
+#     --------------------------------------------------
+
+
+     motscles={}
+     if args['NOEUD']!=None:
+        nthno = args['NOEUD']
+        if type(nthno)!=types.StringType : UTMESS('F','POUTRE0_3')
+        motscles['TEMP_IMPO']=(_F(NOEUD=nthno,TEMP=__fnsec0))
+     if args['GROUP_NO']!=None:
+        collgrno=aster.getcolljev(string.ljust(__nomapi.nom,8)+'.GROUPENO')
+        nomnoe  =aster.getvectjev(string.ljust(__nomapi.nom,8)+'.NOMNOE')
+        l_no=collgrno[string.ljust(args['GROUP_NO'],8)]
+        if len(l_no)!=1 : UTMESS('F','POUTRE0_3')
+        nthno=nomnoe[l_no[0]-1]
+        motscles['TEMP_IMPO']=(_F(NOEUD=nthno,TEMP=__fnsec0))
+     __chart2=AFFE_CHAR_THER_F(MODELE=__nomoth,
+                               SOURCE=_F(TOUT='OUI',
+                                         SOUR=__fnsec1,),
+                               **motscles   )
+
+# --- RESOLUTION DE     LAPLACIEN(PHI) = -Y
+# ---              AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
+#     ------------------------------------------------
+
+     __tempe2=THER_LINEAIRE(MODELE=__nomoth,
+                            CHAM_MATER=__chmath,
+                            EXCIT=_F(CHARGE=__chart2,),
+                            SOLVEUR=_F(STOP_SINGULIER='NON',),
+                           )
+
+# --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
+# --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
+# --- PAR UNE FONCTION EGALE A Z :
+#     --------------------------
+
+     __fnsec2=DEFI_FONCTION(NOM_PARA='Y',
+                            VALE=(0.,0.,10.,10.),
+                            PROL_DROITE='LINEAIRE',
+                            PROL_GAUCHE='LINEAIRE',
+                           )
+
+# --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
+# --- DE LAPLACE EST PRIS EGAL A Z DANS TOUTE LA SECTION :
+#     --------------------------------------------------
+
+     motscles={}
+     if args['NOEUD']!=None:
+        nthno = args['NOEUD']
+        motscles['TEMP_IMPO']=_F(NOEUD=nthno,TEMP=__fnsec0)
+     if args['GROUP_NO']!=None:
+        collgrno=aster.getcolljev(string.ljust(__nomapi.nom,8)+'.GROUPENO')
+        nomnoe  =aster.getvectjev(string.ljust(__nomapi.nom,8)+'.NOMNOE')
+        l_no=collgrno[string.ljust(args['GROUP_NO'],8)]
+        if len(l_no)!=1 : UTMESS('F','POUTRE0_3')
+        nthno=nomnoe[l_no[0]-1]
+        motscles['TEMP_IMPO']=_F(NOEUD=nthno,TEMP=__fnsec0)
+     __chart3=AFFE_CHAR_THER_F(MODELE=__nomoth,
+                               SOURCE=_F(TOUT='OUI',
+                                         SOUR=__fnsec2,),
+                               **motscles)
+
+# --- RESOLUTION DE     LAPLACIEN(PHI) = -Z
+# ---              AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
+#     ------------------------------------------------
+
+     __tempe3=THER_LINEAIRE(MODELE=__nomoth,
+                            CHAM_MATER=__chmath,
+                            EXCIT=_F(CHARGE=__chart3,),
+                            SOLVEUR=_F(STOP_SINGULIER='NON',),
+                           )
+
+# --- CALCUL DU RAYON DE TORSION :
+#     --------------------------
+
+#    CALCUL DU RAYON DE TORSION EXTERNE : rtext
+
+     __tempe1=CALC_ELEM(reuse=__tempe1,
+                       RESULTAT=__tempe1,
+                       MODELE=__nomoth,
+                       CHAM_MATER=__chmath,
+                       TOUT_ORDRE='OUI',
+                       OPTION='FLUX_ELNO_TEMP',
+                      )
+
+     __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
+                         DEFI_CHEMIN=_F(GROUP_MA=GROUP_MA_BORD),
+                         INFO=2,)
+
+     __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
+                             CHEMIN=__chem,
+                             RESULTAT=__tempe1,
+                             NOM_CHAM='FLUX_ELNO_TEMP',
+                             TRAC_NOR='OUI',
+                             NOM_CMP=('FLUX','FLUY'),
+                             OPERATION='MOYENNE'))
+
+     __m1=abs(__flun['TRAC_NOR',3])
+     __m2=abs(__flun['TRAC_NOR',4])
+     __rtext=max(__m1,__m2)
+
+ #    CALCUL DU RAYON DE TORSION : rt
+ #    rt = max ( rtext , 2*AIRE(TROU)/L(TROU) )
+
+     if args.has_key('GROUP_MA_INTE'):
+       if args['GROUP_MA_INTE'] != None :
+         if type(args['GROUP_MA_INTE'])==types.StringType :
+           l_group_ma_inte=[args['GROUP_MA_INTE'],]
+         else:
+           l_group_ma_inte=args['GROUP_MA_INTE']
+         for i in range(0,len(l_group_ma_inte)):
+           __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
+                               DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_inte[i]),
+                               INFO=2,)
+           __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
+                                          CHEMIN=__chem,
+                                          RESULTAT=__tempe1,
+                                          NOM_CHAM='FLUX_ELNO_TEMP',
+                                          TRAC_NOR='OUI',
+                                          NOM_CMP=('FLUX','FLUY'),
+                                          OPERATION='MOYENNE'))
+           __m1=(abs(__flun['TRAC_NOR',3])+abs(__flun['TRAC_NOR',4]))/2.
+           if __m1 > __rtext :
+             __rtext=__m1
+
+     __rt=__rtext
+
+# --- CALCUL DE LA CONSTANTE DE TORSION :
+#     ---------------------------------
+
+     motscles={}
+     if args.has_key('GROUP_MA_INTE'):
+        lgmaint=args['GROUP_MA_INTE']
+        if lgmaint != None :
+           motscles['CARA_POUTRE']=_F(CARA_GEOM=__cageo,
+                                   LAPL_PHI=__tempe1,
+                                   RT=__rt,
+                                   TOUT='OUI',
+                                   OPTION='CARA_TORSION',
+                                   GROUP_MA_INTE=args['GROUP_MA_INTE'],)
+        else:
+           motscles['CARA_POUTRE']=_F(CARA_GEOM=__cageo,
+                                    LAPL_PHI=__tempe1,
+                                    RT=__rt,
+                                    TOUT='OUI',
+                                    OPTION='CARA_TORSION',      )
+     __cator=POST_ELEM(MODELE=__nomoth,
+                       CHAM_MATER=__chmath,
+                       **motscles  )
+
+
+# --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
+# --- CENTRE DE CISAILLEMENT/TORSION :
+#     ------------------------------
+
+     __cacis=POST_ELEM(MODELE=__nomoth,
+                       CHAM_MATER=__chmath,
+                       CARA_POUTRE=_F(CARA_GEOM=__cator,
+                                      LAPL_PHI_Y=__tempe2,
+                                      LAPL_PHI_Z=__tempe3,
+                                      TOUT='OUI',
+                                      OPTION='CARA_CISAILLEMENT',),  )
+
+
+#
+#     ------------------------------------------------------------
+# --- - CALCUL DE L INERTIE DE GAUCHISSEMENT PAR RESOLUTION  DE  -
+# --- -    LAPLACIEN(OMEGA) = 0     DANS LA SECTION              -
+# --- -    AVEC D(OMEGA)/D(N) = Z*NY-Y*NZ   SUR LE               -
+# --- -    CONTOUR DE LA SECTION                                 -
+# --- -    NY ET NZ SONT LES COMPOSANTES DU VECTEUR N NORMAL     -
+# --- -    A CE CONTOUR                                          -
+# --- -    ET SOMME_S(OMEGA.DS) = 0                              -
+# --- -    OMEGA EST LA FONCTION DE GAUCHISSEMENT                -
+# --- -    L INERTIE DE GAUCHISSEMENT EST SOMME_S(OMEGA**2.DS)   -
+#     ------------------------------------------------------------
+#
+# --- CREATION D UN MAILLAGE DONT LES COORDONNEES SONT EXPRIMEES
+# --- DANS LE REPERE PRINCIPAL D INERTIE MAIS AVEC COMME ORIGINE
+# --- LE CENTRE DE TORSION DE LA SECTION, ON VA DONC UTILISER
+# --- LE MAILLAGE DE NOM NOMAPI DONT LES COORDONNEES SONT
+# --- EXPRIMEES DANS LE REPERE PRINCIPAL D'INERTIE, L'ORIGINE
+# --- ETANT LE CENTRE DE GRAVITE DE LA SECTION (QUI EST DONC
+# --- A CHANGER)  :
+#     ----------
+
+     __nomapt=CREA_MAILLAGE(MAILLAGE=__nomapi,
+                            REPERE=_F(TABLE=__cacis,
+                                      NOM_ORIG='TORSION',)  )
+
+# --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
+# --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
+#     ------------------------------------------------------
+
+     __nomot2=AFFE_MODELE(MAILLAGE=__nomapt,
+                          AFFE=_F(TOUT='OUI',
+                                  PHENOMENE='THERMIQUE',
+                                  MODELISATION='PLAN', )  )
+
+# --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
+#     ---------------------------------------------------------
+
+     __chmat2=AFFE_MATERIAU(MAILLAGE=__nomapt,
+                            AFFE=_F(TOUT='OUI',
+                                    MATER=__nomath, ), )
+
+# --- POUR LE CALCUL DE L INERTIE DE GAUCHISSEMENT, ON VA DEFINIR
+# --- LA COMPOSANTE SELON Y DU FLUX A IMPOSER SUR LE CONTOUR
+# --- PAR UNE FONCTION EGALE A -X :
+#     ---------------------------
+
+     __fnsec3=DEFI_FONCTION(NOM_PARA='X',
+                            VALE=(0.,0.,10.,-10.),
+                            PROL_DROITE='LINEAIRE',
+                            PROL_GAUCHE='LINEAIRE',
+                           )
+
+# --- POUR LE CALCUL DE L INERTIE DE GAUCHISSEMENT, ON VA DEFINIR
+# --- LA COMPOSANTE SELON X DU FLUX A IMPOSER SUR LE CONTOUR
+# --- PAR UNE FONCTION EGALE A Y :
+#     --------------------------
+
+     __fnsec4=DEFI_FONCTION(NOM_PARA='Y',
+                            VALE=(0.,0.,10.,10.),
+                            PROL_DROITE='LINEAIRE',
+                            PROL_GAUCHE='LINEAIRE',
+                           )
+
+# --- DANS LE BUT D IMPOSER LA RELATION LINEAIRE ENTRE DDLS
+# ---  SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
+# --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
+# --- N = 0, N ETANT L EFFORT NORMAL)
+# --- ON CALCULE LE VECTEUR DE CHARGEMENT DU A UN TERME SOURCE EGAL
+# --- A 1., LES TERMES DE CE VECTEUR SONT EGAUX A
+# --- SOMME_SECTION(NI.DS) ET SONT DONC LES COEFFICIENTS DE
+# --- LA RELATION LINEAIRE A IMPOSER.
+# --- ON DEFINIT DONC UN CHARGEMENT DU A UN TERME SOURCE EGAL A 1 :
+#     -----------------------------------------------------------
+
+     __chart4=AFFE_CHAR_THER(MODELE=__nomot2,
+                             SOURCE=_F(TOUT='OUI',
+                                       SOUR=1.0),  )
+
+# --- ON CALCULE LE VECT_ELEM DU AU CHARGEMENT PRECEDENT
+# --- IL S AGIT DES VECTEURS ELEMENTAIRES DONT LE TERME
+# --- AU NOEUD COURANT I EST EGAL A SOMME_SECTION(NI.DS) :
+#     --------------------------------------------------
+
+     __vecel=CALC_VECT_ELEM(CHARGE=__chart4,
+                            OPTION='CHAR_THER'
+                            )
+
+# --- ON CALCULE LE MATR_ELEM DES MATRICES ELEMENTAIRES
+# --- DE CONDUCTIVITE UNIQUEMENT POUR GENERER LE NUME_DDL
+# --- SUR-LEQUEL S APPUIERA LE CHAMNO UTILISE POUR ECRIRE LA
+# --- RELATION LINEAIRE ENTRE DDLS :
+#     ----------------------------
+
+     __matel=CALC_MATR_ELEM(MODELE=__nomot2,
+                            CHAM_MATER=__chmat2,
+                            CHARGE=__chart4,
+                            OPTION='RIGI_THER',)
+
+# --- ON DEFINIT LE NUME_DDL ASSOCIE AU MATR_ELEM DEFINI
+# --- PRECEDEMMENT POUR CONSTRUIRE LE CHAMNO UTILISE POUR ECRIRE LA
+# --- RELATION LINEAIRE ENTRE DDLS :
+#     ----------------------------
+
+     __numddl=NUME_DDL(MATR_RIGI=__matel,
+                       METHODE='LDLT',    )
+
+# --- ON CONSTRUIT LE CHAMNO QUI VA ETRE UTILISE POUR ECRIRE LA
+# --- RELATION LINEAIRE ENTRE DDLS :
+#     ----------------------------
+
+     __chamno=ASSE_VECTEUR(VECT_ELEM=__vecel,
+                           NUME_DDL=__numddl,    )
+
+# --- ON IMPOSE LA RELATION LINEAIRE ENTRE DDLS
+# ---  SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
+# --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
+# --- N = 0, N ETANT L EFFORT NORMAL)
+# --- POUR IMPOSER CETTE RELATION ON PASSE PAR LIAISON_CHAMNO,
+# --- LES TERMES DU CHAMNO (I.E. SOMME_SECTION(NI.DS))
+# --- SONT LES COEFFICIENTS DE LA RELATION LINEAIRE :
+#     ---------------------------------------------
+
+     __chart5=AFFE_CHAR_THER(MODELE=__nomot2,
+                             LIAISON_CHAMNO=_F(CHAM_NO=__chamno,
+                                               COEF_IMPO=0.),    )
+
+# --- LE CHARGEMENT EST UN FLUX REPARTI NORMAL AU CONTOUR
+# --- DONT LES COMPOSANTES SONT +Z (I.E. +Y) ET -Y (I.E. -X)
+# --- SELON LA DIRECTION NORMALE AU CONTOUR :
+#     -------------------------------------
+
+     __chart6=AFFE_CHAR_THER_F(MODELE=__nomot2,
+                               FLUX_REP=_F(GROUP_MA=GROUP_MA_BORD,
+                                           FLUX_X  =__fnsec4,
+                                           FLUX_Y  =__fnsec3,),    )
+
+# --- RESOLUTION DE     LAPLACIEN(OMEGA) = 0
+# --- AVEC D(OMEGA)/D(N) = Z*NY-Y*NZ   SUR LE CONTOUR DE LA SECTION
+# --- ET SOMME_SECTION(OMEGA.DS) = 0 ( CETTE CONDITION
+# --- VENANT DE L EQUATION D EQUILIBRE SELON L AXE DE LA POUTRE
+# --- N = 0, N ETANT L EFFORT NORMAL)  :
+#     -------------------------------
+
+     __tempe4=THER_LINEAIRE(MODELE=__nomot2,
+                            CHAM_MATER=__chmat2,
+                            EXCIT=(_F(CHARGE=__chart5,),
+                                   _F(CHARGE=__chart6,),),
+                            SOLVEUR=_F(METHODE='LDLT',
+                                       RENUM='SANS',
+                                       STOP_SINGULIER='NON',),   )
+
+# --- CALCUL DE L INERTIE DE GAUCHISSEMENT :
+#     -------------------------------------
+
+     nomres=POST_ELEM(MODELE=__nomot2,
+                      CHAM_MATER=__chmat2,
+                      CARA_POUTRE=_F(CARA_GEOM=__cacis,
+                                     LAPL_PHI=__tempe4,
+                                     TOUT='OUI',
+                                     OPTION='CARA_GAUCHI'),  )
+
+
+#
+#     ==================================================================
+# --- = CALCUL DE LA CONSTANTE DE TORSION SUR CHAQUE GROUPE            =
+# --- =     ET DU RAYON DE TORSION SUR CHAQUE GROUPE                   =
+# --- =        DU  CENTRE DE TORSION/CISAILLEMENT                      =
+# --- =        DES COEFFICIENTS DE CISAILLEMENT                        =
+#     ==================================================================
+
+
+#
+
+
+  if GROUP_MA_BORD and GROUP_MA:
+
+# --- CALCUL DES CARACTERISTIQUES GEOMETRIQUES DE LA SECTION :
+#     ------------------------------------------------------
+
+     if type(GROUP_MA_BORD)==types.StringType :
+        l_group_ma_bord=[GROUP_MA_BORD,]
+     else:
+        l_group_ma_bord= GROUP_MA_BORD
+     if type(GROUP_MA)==types.StringType :
+        l_group_ma=[GROUP_MA,]
+     else:
+        l_group_ma= GROUP_MA
+
+     l_noeud=None
+
+     if args['NOEUD']!=None:
+       if type(args['NOEUD'])==types.StringType :
+          l_noeud=[args['NOEUD'],]
+       else:
+          l_noeud= args['NOEUD']
+
+     if args['GROUP_NO']!=None:
+       collgrno=aster.getcolljev(string.ljust(__nomlma.nom,8)+'.GROUPENO')
+       nomnoe  =aster.getvectjev(string.ljust(__nomlma.nom,8)+'.NOMNOE')
+       l_nu_no =[]
+       if type(args['GROUP_NO'])==types.StringType :
+          l_gr_no=[args['GROUP_NO'],]
+       else:
+          l_gr_no= args['GROUP_NO']
+       for grno in l_gr_no:
+          l_nu_no =l_nu_no+list(collgrno[string.ljust(grno,8)])
+       l_noeud =[nomnoe[no_i-1] for no_i in l_nu_no]
+
+     if len(l_group_ma)!=len(l_group_ma_bord):
+        UTMESS('F','POUTRE0_1')
+     if l_noeud!=None and (len(l_group_ma)!=len(l_noeud)):
+        UTMESS('F','POUTRE0_2')
+
+     __catp2=__cageo
+     for i in range(0,len(l_group_ma_bord)):
+
+# --- TRANSFORMATION DES GROUP_MA EN GROUP_NO SUR-LESQUELS
+# --- ON POURRA APPLIQUER DES CONDITIONS DE TEMPERATURE IMPOSEE :
+#     ---------------------------------------------------------
+
+        __nomlma=DEFI_GROUP(reuse=__nomlma,
+                            MAILLAGE=__nomlma,
+                            CREA_GROUP_NO=_F(GROUP_MA=l_group_ma_bord[i],)  )
+
+
+# --- CREATION D UN MAILLAGE IDENTIQUE AU PREMIER A CECI PRES
+# --- QUE LES COORDONNEES SONT EXPRIMEES DANS LE REPERE PRINCIPAL
+# --- D INERTIE DONT L ORIGINE EST LE CENTRE DE GRAVITE DE LA SECTION :
+#     ---------------------------------------------------------------
+
+        __nomapi=CREA_MAILLAGE(MAILLAGE=__nomlma,
+                               REPERE=_F(TABLE=__cageo,
+                                         NOM_ORIG='CDG',
+                                         GROUP_MA=l_group_ma[i],  ),  )
+
+# --- AFFECTATION DU PHENOMENE 'THERMIQUE' AU MODELE EN VUE DE
+# --- LA CONSTRUCTION D UN OPERATEUR LAPLACIEN SUR CE MODELE :
+#     ------------------------------------------------------
+
+        __nomoth=AFFE_MODELE(MAILLAGE=__nomapi,
+                             AFFE=_F(GROUP_MA=l_group_ma[i],
+                                     PHENOMENE='THERMIQUE',
+                                     MODELISATION='PLAN',  )  )
+
+# --- POUR LA CONSTRUCTION DU LAPLACIEN, ON  DEFINIT UN
+# --- PSEUDO-MATERIAU DONT LES CARACTERISTIQUES THERMIQUES SONT :
+# --- LAMBDA = 1, RHO*CP = 0 :
+#     ----------------------
+
+        __nomath=DEFI_MATERIAU(THER=_F(LAMBDA=1.0,
+                                       RHO_CP=0.0,  ),  )
+
+# --- DEFINITION D UN CHAM_MATER A PARTIR DU MATERIAU PRECEDENT :
+#     ---------------------------------------------------------
+
+        __chmath=AFFE_MATERIAU(MAILLAGE=__nomapi,
+                               AFFE=_F(TOUT='OUI',
+                                       MATER=__nomath ),  )
+
+#
+#     ------------------------------------------------------------
+# --- - CALCUL DE LA CONSTANTE DE TORSION PAR RESOLUTION         -
+# --- - D UN LAPLACIEN AVEC UN TERME SOURCE EGAL A -2            -
+# --- - L INCONNUE ETANT NULLE SUR LE CONTOUR DE LA SECTION :    -
+# --- -    LAPLACIEN(PHI) = -2 DANS LA SECTION                   -
+# --- -    PHI = 0 SUR LE CONTOUR :                              -
+#     ------------------------------------------------------------
+#
+# --- ON IMPOSE LA VALEUR 0 A L INCONNUE SCALAIRE SUR LE CONTOUR
+# --- DE LA SECTION
+# --- ET ON A UN TERME SOURCE EGAL A -2 DANS TOUTE LA SECTION :
+#     -------------------------------------------------------
+
+        __chart1=AFFE_CHAR_THER(MODELE=__nomoth,
+                                TEMP_IMPO=_F(GROUP_NO=l_group_ma_bord[i],
+                                             TEMP=0.0       ),
+                                SOURCE=_F(TOUT='OUI',
+                                          SOUR=2.0       )          )
+
+# --- RESOLUTION DE     LAPLACIEN(PHI) = -2
+# ---              AVEC PHI = 0 SUR LE CONTOUR :
+#     ----------------------------------------
+
+        __tempe1=THER_LINEAIRE(MODELE=__nomoth,
+                               CHAM_MATER=__chmath,
+                               EXCIT=_F(CHARGE=__chart1, ),
+                               SOLVEUR=_F(STOP_SINGULIER='NON',)    )
+
+#
+#     ----------------------------------------------
+# --- - CALCUL DU  CENTRE DE TORSION/CISAILLEMENT  -
+# --- - ET DES COEFFICIENTS DE CISAILLEMENT :      -
+#     ----------------------------------------------
+#
+# --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
+# --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
+# --- PAR UNE FONCTION EGALE A Y :
+#     --------------------------
+
+        __fnsec1=DEFI_FONCTION(NOM_PARA='X',
+                               VALE=(0.,0.,10.,10.),
+                               PROL_DROITE='LINEAIRE',
+                               PROL_GAUCHE='LINEAIRE',        )
+
+        __fnsec0=DEFI_CONSTANTE(VALE=0.,)
+
+# --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
+# --- DE LAPLACE EST PRIS EGAL A Y DANS TOUTE LA SECTION :
+#     --------------------------------------------------
+
+        __chart2=AFFE_CHAR_THER_F(MODELE=__nomoth,
+                                  TEMP_IMPO=_F(NOEUD=l_noeud[i],
+                                               TEMP=__fnsec0),
+                                  SOURCE=_F(TOUT='OUI',
+                                            SOUR=__fnsec1)       )
+
+# --- RESOLUTION DE     LAPLACIEN(PHI) = -Y
+# ---              AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
+#     ------------------------------------------------
+
+        __tempe2=THER_LINEAIRE(MODELE=__nomoth,
+                               CHAM_MATER=__chmath,
+                               EXCIT=_F(CHARGE=__chart2, ),
+                               SOLVEUR=_F(STOP_SINGULIER='NON',)         )
+
+# --- POUR LE CALCUL DES CONSTANTES DE CISAILLEMENT, ON VA DEFINIR
+# --- UN PREMIER TERME SOURCE, SECOND MEMBRE DE L EQUATION DE LAPLACE
+# --- PAR UNE FONCTION EGALE A Z :
+#     --------------------------
+
+        __fnsec2=DEFI_FONCTION(NOM_PARA='Y',
+                               VALE=(0.,0.,10.,10.),
+                               PROL_DROITE='LINEAIRE',
+                               PROL_GAUCHE='LINEAIRE',        )
+
+# --- LE TERME SOURCE CONSTITUANT LE SECOND MEMBRE DE L EQUATION
+# --- DE LAPLACE EST PRIS EGAL A Z DANS TOUTE LA SECTION :
+#     --------------------------------------------------
+
+        __chart3=AFFE_CHAR_THER_F(MODELE=__nomoth,
+                                  TEMP_IMPO=_F(NOEUD=l_noeud[i],
+                                               TEMP=__fnsec0),
+                                  SOURCE=_F(TOUT='OUI',
+                                            SOUR=__fnsec2)       )
+
+# --- RESOLUTION DE     LAPLACIEN(PHI) = -Z
+# ---              AVEC D(PHI)/D(N) = 0 SUR LE CONTOUR :
+#     ------------------------------------------------
+
+        __tempe3=THER_LINEAIRE(MODELE=__nomoth,
+                               CHAM_MATER=__chmath,
+                               EXCIT=_F(CHARGE=__chart3, ),
+                               SOLVEUR=_F(STOP_SINGULIER='NON',)         )
+
+# --- CALCUL DU RAYON DE TORSION :
+#     --------------------------
+
+#    CALCUL DU RAYON DE TORSION EXTERNE : rtext
+
+        __tempe1=CALC_ELEM(reuse=__tempe1,
+                            RESULTAT=__tempe1,
+                            MODELE=__nomoth,
+                            CHAM_MATER=__chmath,
+                            TOUT_ORDRE='OUI',
+                            OPTION='FLUX_ELNO_TEMP',
+                           )
+
+        __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
+                            DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_bord[i]),
+                            INFO=2,)
+
+        __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
+                                       CHEMIN=__chem,
+                                       RESULTAT=__tempe1,
+                                       NOM_CHAM='FLUX_ELNO_TEMP',
+                                       TRAC_NOR='OUI',
+                                       NOM_CMP=('FLUX','FLUY'),
+                                       OPERATION='MOYENNE'))
+
+        __m1=abs(__flun['TRAC_NOR',3])
+        __m2=abs(__flun['TRAC_NOR',4])
+        __rtext=max(__m1,__m2)
+
+#    CALCUL DU RAYON DE TORSION : rt
+#    rt = max ( rtext , 2*AIRE(TROU)/L(TROU) )
+
+        if args.has_key('GROUP_MA_INTE'):
+          if args['GROUP_MA_INTE'] != None :
+            if type(args['GROUP_MA_INTE'])==types.StringType :
+              l_group_ma_inte=[args['GROUP_MA_INTE'],]
+            else:
+              l_group_ma_inte=args['GROUP_MA_INTE']
+            for j in range(0,len(l_group_ma_inte)):
+              __chem=INTE_MAIL_2D(MAILLAGE=__nomapi,
+                                  DEFI_CHEMIN=_F(GROUP_MA=l_group_ma_inte[j]),
+                                  INFO=2,)
+              __flun=POST_RELEVE_T(ACTION=_F(INTITULE='FLUX_NORM',
+                                             CHEMIN=__chem,
+                                             RESULTAT=__tempe1,
+                                             NOM_CHAM='FLUX_ELNO_TEMP',
+                                             TRAC_NOR='OUI',
+                                             NOM_CMP=('FLUX','FLUY'),
+                                             OPERATION='MOYENNE'))
+              __m1=(abs(__flun['TRAC_NOR',3])+abs(__flun['TRAC_NOR',4]))/2.
+              if __m1 > __rtext :
+                __rtext=__m1
+
+        __rt=__rtext
+
+# --- CALCUL DE LA CONSTANTE DE TORSION :
+#     ---------------------------------
+
+        __catp1=POST_ELEM(MODELE=__nomoth,
+                          CHAM_MATER=__chmath,
+                          CARA_POUTRE=_F(CARA_GEOM=__catp2,
+                                         LAPL_PHI=__tempe1,
+                                         RT=__rt,
+                                         GROUP_MA=l_group_ma[i],
+                                         OPTION='CARA_TORSION' ),     )
+
+# --- CALCUL DES COEFFICIENTS DE CISAILLEMENT ET DES COORDONNEES DU
+# --- CENTRE DE CISAILLEMENT/TORSION :
+#     ------------------------------
+
+        __catp2=POST_ELEM(MODELE=__nomoth,
+                          CHAM_MATER=__chmath,
+                          CARA_POUTRE=_F(CARA_GEOM=__catp1,
+                                         LAPL_PHI_Y=__tempe2,
+                                         LAPL_PHI_Z=__tempe3,
+                                         GROUP_MA=l_group_ma[i],
+                                         LONGUEUR=args['LONGUEUR'],
+                                         MATERIAU=args['MATERIAU'],
+                                         LIAISON =args['LIAISON'],
+                                         OPTION='CARA_CISAILLEMENT' ),   )
+        IMPR_TABLE(TABLE=__catp2)
+     dprod  = __catp2.EXTR_TABLE().dict_CREA_TABLE()
+     nomres = CREA_TABLE(**dprod)
+  if not GROUP_MA_BORD :
+     nomres=POST_ELEM(MODELE=__nomamo,
+                      CHAM_MATER=__nomama,
+                      CARA_GEOM=mfact    )
+  IMPR_TABLE(TABLE=nomres)
+
+  return ier
diff --git a/Aster/Cata/cataSTA10/Macro/macr_ecla_pg_ops.py b/Aster/Cata/cataSTA10/Macro/macr_ecla_pg_ops.py
new file mode 100644 (file)
index 0000000..db6c0ba
--- /dev/null
@@ -0,0 +1,70 @@
+#@ MODIF macr_ecla_pg_ops Macro  DATE 02/02/2010   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+########################################################################
+def macr_ecla_pg_ops(self,RESULTAT,MAILLAGE,RESU_INIT,MODELE_INIT,
+                     TOUT, GROUP_MA, MAILLE,
+                     SHRINK, TAILLE_MIN,
+                     NOM_CHAM, TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE, INST, LIST_INST, PRECISION, CRITERE,
+                     **args):
+    """
+       Ecriture de la macro macr_ecla_pg
+    """
+    import os, string
+    from Accas import _F
+    from Noyau.N_utils import AsType
+    ier=0
+
+    # On importe les definitions des commandes a utiliser dans la macro
+    CREA_MAILLAGE  =self.get_cmd('CREA_MAILLAGE')
+    CREA_RESU      =self.get_cmd('CREA_RESU')
+
+
+    # La macro compte pour 1 dans la numerotation des commandes
+    self.set_icmd(1)
+
+
+    # Appel à CREA_MAILLAGE :
+    motscles={}
+    if   TOUT      : motscles['TOUT']       =TOUT
+    if   GROUP_MA  : motscles['GROUP_MA']   =GROUP_MA
+    if   MAILLE    : motscles['MAILLE']     =MAILLE
+
+    self.DeclareOut('ma2',MAILLAGE)
+    ma2=CREA_MAILLAGE(ECLA_PG=_F( MODELE = MODELE_INIT,  NOM_CHAM=NOM_CHAM,
+                                  SHRINK = SHRINK, TAILLE_MIN=TAILLE_MIN, **motscles ));
+
+
+
+    # Appel à CREA_RESU :
+    typ2=AsType(RESU_INIT).__name__
+    if   TOUT_ORDRE         : motscles['TOUT_ORDRE']     =TOUT_ORDRE
+    if   NUME_ORDRE != None : motscles['NUME_ORDRE']     =NUME_ORDRE
+    if   LIST_ORDRE         : motscles['LIST_ORDRE']     =LIST_ORDRE
+    if   LIST_INST          : motscles['LIST_INST']      =LIST_INST
+    if   INST != None       : motscles['INST']           =INST
+
+    self.DeclareOut('resu2',RESULTAT)
+    resu2=CREA_RESU( OPERATION='ECLA_PG', TYPE_RESU=string.upper(typ2),
+                    ECLA_PG=_F( MODELE_INIT= MODELE_INIT, RESU_INIT=RESU_INIT, NOM_CHAM=NOM_CHAM,
+                                MAILLAGE= ma2, **motscles ));
+    return ier
+############################################################################################
+
diff --git a/Aster/Cata/cataSTA10/Macro/macr_ecre_calc_ops.py b/Aster/Cata/cataSTA10/Macro/macr_ecre_calc_ops.py
new file mode 100644 (file)
index 0000000..3f81fc7
--- /dev/null
@@ -0,0 +1,577 @@
+#@ MODIF macr_ecre_calc_ops Macro  DATE 21/04/2010   AUTEUR BOTTONI M.BOTTONI 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+
+def macr_ecre_calc_ops(
+  self,
+  TABLE,
+  DEBIT,
+  FISSURE,
+  ECOULEMENT,
+  TEMPERATURE,
+  MODELE_ECRE,
+  CONVERGENCE,
+  LOGICIEL,
+  VERSION,
+  ENTETE,
+  #COURBES,
+  IMPRESSION,
+  INFO,
+  **args):
+
+  """
+     Procedure de couplage Aster-Ecrevisse
+     Generation par Aster du fichier de donnees d'Ecrevisse et lancement d'Ecrevisse
+  """
+
+  import os, string, types, shutil
+  import aster
+  from Accas import _F
+  #from Noyau.N_utils import AsType
+  from Utilitai.Utmess import UTMESS
+  from Utilitai.System import ExecCommand
+
+  ier=0
+
+
+  # PARAMETRES DEBUG
+  debug = True
+
+
+
+  # Concept sortant
+  self.DeclareOut('__TAB',TABLE)
+  self.DeclareOut('__DEB',DEBIT)
+
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  # Info
+  info2 = (INFO==2)
+  if debug :
+      info2=True
+
+  # Parametres Developpeur
+  tmp_ecrevisse = "tmp_ecrevisse"
+  fichier_data  = "data.dat"
+  defaut        = '00'
+
+  # IMPORTATION DE COMMANDES ASTER
+  EXEC_LOGICIEL  = self.get_cmd("EXEC_LOGICIEL")
+  CREA_TABLE     = self.get_cmd("CREA_TABLE")
+#  IMPR_TABLE     = self.get_cmd("IMPR_TABLE")
+  IMPR_FONCTION  = self.get_cmd("IMPR_FONCTION")
+
+  # RECUPERATION DES MOTS-CLES FACTEURS
+  dFISSURE=FISSURE[0].cree_dict_valeurs(FISSURE[0].mc_liste)
+  for i in dFISSURE.keys():
+    if dFISSURE[i]==None : del dFISSURE[i]
+
+  dECOULEMENT=ECOULEMENT[0].cree_dict_valeurs(ECOULEMENT[0].mc_liste)
+  for i in dECOULEMENT.keys():
+    if dECOULEMENT[i]==None : del dECOULEMENT[i]
+
+  dTEMPERATURE=TEMPERATURE[0].cree_dict_valeurs(TEMPERATURE[0].mc_liste)
+  for i in dTEMPERATURE.keys():
+    if dTEMPERATURE[i]==None : del dTEMPERATURE[i]
+
+  dMODELE_ECRE=MODELE_ECRE[0].cree_dict_valeurs(MODELE_ECRE[0].mc_liste)
+  for i in dMODELE_ECRE.keys():
+    if dMODELE_ECRE[i]==None : del dMODELE_ECRE[i]
+
+  dCONVERGENCE=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
+  for i in dCONVERGENCE.keys():
+    if dCONVERGENCE[i]==None : del dCONVERGENCE[i]
+
+  if debug:
+      print 'dFISSURE = ', dFISSURE
+      print 'dECOULEMENT = ', dECOULEMENT
+      print 'dTEMPERATURE = ', dTEMPERATURE
+      print 'dMODELE_ECRE = ', dMODELE_ECRE
+      print 'dCONVERGENCE = ', dCONVERGENCE
+      print 'ENTETE = ', ENTETE
+      print 'IMPRESSION = ', IMPRESSION
+      print 'INFO = ', INFO
+
+
+
+
+# ---------------------------------------------------------------------
+# CONSTRUCTION DU JEU DE PARAMETRES
+
+  d = {}
+  d[ 0 ] = ENTETE,
+
+  # FISSURE
+  d[ 1 ]  = defaut,
+  d[ 2 ]  = str(len(dFISSURE['LISTE_COTES_AH'])),
+  d[ 3 ]  = dFISSURE['LISTE_COTES_AH'],
+  d[ 4 ]  = dFISSURE['LISTE_VAL_AH'],
+  d[ 5 ]  = str(len(dFISSURE['LISTE_COTES_BL'])),
+  d[ 6 ]  = dFISSURE['LISTE_COTES_BL'],
+  d[ 7 ]  = dFISSURE['LISTE_VAL_BL'],
+  d[ 8 ]  = dFISSURE['LONGUEUR'],
+  d[ 9 ]  = dFISSURE['ANGLE'],
+  d[ 10 ] = dFISSURE['RUGOSITE'],
+  d[ 11 ] = dFISSURE['ZETA'],
+  if dFISSURE['SECTION'] == 'ELLIPSE':
+    d[ 1 ]  = 1,
+  if dFISSURE['SECTION'] == 'RECTANGLE':
+    d[ 1 ]  = 2,
+
+  # ECOULEMENT
+  d[ 20 ] = dECOULEMENT['PRES_ENTREE'],
+  d[ 21 ] = dECOULEMENT['PRES_SORTIE'],
+  d[ 22 ] = dECOULEMENT['FLUIDE_ENTREE'],
+  d[ 23 ] = defaut,
+  d[ 24 ] = defaut,
+  d[ 25 ] = defaut,
+  if dECOULEMENT['FLUIDE_ENTREE'] in [1, 3, 4, 6]:
+    d[ 23 ] = dECOULEMENT['TEMP_ENTREE'],
+  if dECOULEMENT['FLUIDE_ENTREE'] in [2, 5]:
+    d[ 24 ] = dECOULEMENT['TITR_MASS'],
+  if dECOULEMENT['FLUIDE_ENTREE'] in [4, 5]:
+    d[ 25 ] = dECOULEMENT['PRES_PART'],
+
+  # TEMPERATURE
+  d[ 30 ] = defaut,
+  d[ 31 ] = defaut,
+  d[ 32 ] = defaut,
+  d[ 33 ] = defaut,
+  d[ 34 ] = defaut,
+  d[ 35 ] = defaut,
+  d[ 36 ] = defaut,
+  d[ 37 ] = defaut,
+  d[ 38 ] = defaut,
+  d[ 39 ] = defaut,
+  d[ 40 ] = defaut,
+  if dTEMPERATURE['GRADIENT'] == 'FOURNI':
+    d[ 30 ] = -1
+    d[ 31 ] = len(dTEMPERATURE['LISTE_COTES_TEMP'])
+    d[ 32 ] = dTEMPERATURE['LISTE_COTES_TEMP']
+    d[ 33 ] = dTEMPERATURE['LISTE_VAL_TEMP']
+  if dTEMPERATURE['GRADIENT'] == 'IMPOSE':
+    d[ 30 ] = 0
+    d[ 34 ] = dTEMPERATURE['TEMP1']
+    d[ 35 ] = dTEMPERATURE['TEMP2']
+  if dTEMPERATURE['GRADIENT'] == 'CALCULE':
+    d[ 30 ] = 1
+    d[ 36 ] = dTEMPERATURE['EPAISSEUR_PAROI']
+    d[ 37 ] = dTEMPERATURE['CONVECTION_AMONT']
+    d[ 38 ] = dTEMPERATURE['CONVECTION_AVAL']
+    d[ 39 ] = dTEMPERATURE['LAMBDA']
+    d[ 40 ] = dTEMPERATURE['TEMP_FLUIDE_AVAL']
+
+  # MODELE_ECRE
+  d[ 60 ] = defaut,
+  d[ 61 ] = defaut,
+  if dMODELE_ECRE['ECOULEMENT'] == 'SATURATION':
+    d[ 60 ] = 1,
+  if dMODELE_ECRE['ECOULEMENT'] == 'GELE':
+    d[ 60 ] = 2,
+    d[ 61 ] = dMODELE_ECRE['PRESS_EBULLITION'],
+
+  d[ 70 ] = dMODELE_ECRE['FROTTEMENT'],
+  d[ 71 ] = defaut,
+  d[ 72 ] = defaut,
+  d[ 73 ] = defaut,
+  d[ 74 ] = defaut,
+  d[ 75 ] = defaut,
+  if dMODELE_ECRE['FROTTEMENT'] < 0:
+    d[ 71 ] = dMODELE_ECRE['REYNOLDS_LIM'],
+    d[ 72 ] = dMODELE_ECRE['FROTTEMENT_LIM'],
+
+  d[ 73 ] = dMODELE_ECRE['TRANSFERT_CHAL'],
+
+  if dMODELE_ECRE['TRANSFERT_CHAL'] == 0: pass # Pour memoire 3 cas >0, =0, <0
+  if dMODELE_ECRE['TRANSFERT_CHAL']  > 0: pass # Pour memoire 3 cas >0, =0, <0
+  if dMODELE_ECRE['TRANSFERT_CHAL']  < 0:
+    d[74] = dMODELE_ECRE['XMINCH'],
+    d[75] = dMODELE_ECRE['XMAXCH'],
+
+  d[79] = dMODELE_ECRE['IVENAC'],
+
+  if IMPRESSION == 'OUI':
+    d[ 84 ] = 1,
+  if IMPRESSION == 'NON':
+    d[ 84 ] = 0,
+
+  # CONVERGENCE
+  d[ 88 ] = dCONVERGENCE['KGTEST'],
+  d[ 89 ] = dCONVERGENCE['ITER_GLOB_MAXI'],
+  d[ 90 ] = dCONVERGENCE['CRIT_CONV_DEBI'],
+
+  if debug: print d
+
+
+
+
+# ---------------------------------------------------------------------
+# GENERATION DU FICHIER DATA.DAT
+
+  txt = fichier_data_ecrevisse()
+
+  for num_param in d.keys():
+    if type(d[num_param]) in [int, float]:
+      txt0 = str(d[num_param])
+    elif type(d[num_param]) in [tuple, list]:
+      txt0 = str(d[num_param]).replace('(', '')
+      txt0 = txt0.replace(')', '')
+      txt0 = txt0.replace(',', '')
+      txt0 = txt0.replace("'", '')
+      txt0 = txt0.replace("[", '')
+      txt0 = txt0.replace("]", '')
+    else:
+      try:    txt0 = str(d[num_param])
+      except: UTMESS('F','ECREVISSE0_11')
+
+    # On remplace la variable dans le fichier par sa valeur
+    txt = txt.replace( '$V['+str(num_param)+']', txt0 )
+
+  if debug : print txt
+
+
+
+
+# ---------------------------------------------------------------------
+# CREATION DE L'ENVIRONNEMENT D'ETUDE POUR ECREVISSE
+
+
+  # Repertoire temporaire d'execution d'Ecrevisse
+  tmp_ecrevisse = os.path.join(os.getcwd(),tmp_ecrevisse)
+
+  if not os.path.isdir(tmp_ecrevisse) :
+    try :
+      os.mkdir(tmp_ecrevisse)
+    except os.error,erreur :
+      if debug :
+        print "Code d'erreur de mkdir : " + str(erreur[0]) + " : " + str(erreur[1])
+      UTMESS('F','ECREVISSE0_12',valk=[tmp_ecrevisse])
+
+  # On recopie eventuellement l'ancien fichier debits
+  src = os.path.join('.', 'REPE_OUT', 'debits_dernier')
+  dst = os.path.join(tmp_ecrevisse, 'debits')
+  if os.path.isfile(src):
+     try:
+        shutil.copyfile(src, dst)
+     except Exception, e:
+        UTMESS('F','ECREVISSE0_24',valk=[src, dst])
+        #print "ERREUR : copyfile %s -> %s" % (src, dst)
+
+  # Executable Ecrevisse
+  if LOGICIEL :
+    if not os.path.isfile(str(LOGICIEL)):
+      UTMESS('F','ECREVISSE0_13')
+    else:
+      chemin_executable = str(LOGICIEL)
+  else :
+    chemin_executable = os.path.join(aster.repout(), 'ecrevisse')
+    #chemin_executable = os.path.join(aster.repout(),version,'ecrevisse') 
+    if debug :
+      print 'chemin_executable:',chemin_executable
+
+  # Soit on fait un lien symbolique (incompatible avec certaines plate-formes) soit on recopie l'executable
+  if not os.path.isfile(os.path.join(tmp_ecrevisse, 'ecrevisse')):
+    try:
+      os.symlink( chemin_executable, os.path.join(tmp_ecrevisse, 'ecrevisse') )
+    except:
+      UTMESS('A','ECREVISSE0_14')
+      cmd = 'cp ' + chemin_executable + ' ' + os.path.join(tmp_ecrevisse, 'ecrevisse')
+      res = os.system(cmd)
+      os.chmod( os.path.join(tmp_ecrevisse, 'ecrevisse') ,0755)
+      if (res!=0): UTMESS('F','ECREVISSE0_15')
+
+  # Ecriture du fichier de donnees pour Ecrevisse
+  fw = open(os.path.join(tmp_ecrevisse, fichier_data),'w')
+  fw.write(txt)
+  fw.close()
+
+  # Sauvegarde dans REPE_OUT du data.dat
+  os.system('cp ' + tmp_ecrevisse + '/data.dat REPE_OUT/')
+
+
+# ---------------------------------------------------------------------
+# EXECUTION D'ECREVISSE
+
+  # Choix du shell
+  cmd = '#!sh'
+  for shell in ['/bin/sh', '/bin/bash', '/usr/bin/sh']:
+    if os.path.isfile(shell):
+      cmd = '#!' + shell
+      break
+
+#   #Ligne suivante a ajouter avec la version LINUX compilee avec GFORTRAN
+#   cmd = cmd + '\nexport LD_LIBRARY_PATH=/logiciels/aster/Linux/GF4/public/gcc-4.1.1/lib:$LD_LIBRARY_PATH'
+
+  # Creation du contenu du script de lancement ecrevisse.sh
+  cmd = cmd + '\ncd ' + tmp_ecrevisse + '\n' + os.path.join(tmp_ecrevisse, 'ecrevisse') + ' ' + str(VERSION) + '\nset iret=$?\ncd ..\nexit $iret'
+  fw = open(os.path.join(tmp_ecrevisse, 'ecrevisse.sh'),'w')
+  fw.write(cmd)
+  fw.close()
+  os.chmod(os.path.join(tmp_ecrevisse, 'ecrevisse.sh') ,0755)
+
+  # Lancement d'Ecrevisse
+  UTMESS('I','ECREVISSE0_16')
+  res = ExecCommand(os.path.join(tmp_ecrevisse, 'ecrevisse.sh'),follow_output=True,verbose=True)
+  UTMESS('I','ECREVISSE0_17')
+
+
+  if info2: os.system('ls -al ' + tmp_ecrevisse)
+
+
+
+
+# ---------------------------------------------------------------------
+# RECUPERATION DES RESULTATS DEPUIS ECREVISSE
+
+
+  # 1)  5 COLONNES (a partir de ECREVISSE 3.1.e)
+  #       COTE z (m), FLUX THERMIQUE (W/m2), PRESSION TOTALE ABSOLUE (Pa),
+  #       TEMPERATURE FLUIDE (degres C), COEFFICIENT DE CONVECTION (W/m2/K)
+  try:
+      f_ast = open(os.path.join(tmp_ecrevisse, 'pour_aster'),'r')
+      _txt = f_ast.read()
+      f_ast.close()
+      # transforme le texte en liste
+      _lst = _txt.split()
+      # transforme la liste de textes en liste de float
+      _lst = map( float, _lst )
+
+      # ATTENTION : les cotes _ecr_c sont celles des resultats ecrevisse,
+      #              c'est a dire les points de milieu du maillage aster,
+      #              eventuellement multiplies par 1/TORTUOSITE!
+      _ecr_c  = _lst[1:len(_lst):5]
+      _ecr_f  = _lst[2:len(_lst):5]
+      _ecr_p  = _lst[3:len(_lst):5]
+      _ecr_t  = _lst[4:len(_lst):5]
+      _ecr_cc = _lst[5:len(_lst):5]
+
+  except:
+      UTMESS('F','ECREVISSE0_18')
+      _ecr_c  = [-1]
+      _ecr_f  = [-1]
+      _ecr_p  = [-1]
+      _ecr_t  = [-1]
+      _ecr_cc = [-1]
+
+  else:
+      # On elimine les eventuels points en plus
+      #   (cela arrive si la longueur de la fissure est plus grande de la derniere cotes)
+      #   mais on considere quand meme la derniere cote du maillage aster
+      lx_ast = dFISSURE['LISTE_COTES_AH']
+      nbCotesEcre = len(lx_ast)
+      _ecr_c  = _ecr_c[0:nbCotesEcre]
+      _ecr_f  = _ecr_f[0:nbCotesEcre]
+      _ecr_p  = _ecr_p[0:nbCotesEcre]
+      _ecr_t  = _ecr_t[0:nbCotesEcre]
+      _ecr_cc = _ecr_cc[0:nbCotesEcre]
+
+
+
+  # 2)   DEBIT - 5 COLONNES (a partir de ECREVISSE 3.1.e)
+  #          DEBIT TOTAL (kg/s), DEBIT AIR (kg/s), DEBIT VAPEUR (kg/s),
+  #          DEBIT LIQUIDE (kg/s), TYPE ECOULEMENT
+  try:
+      f_deb = open(os.path.join(tmp_ecrevisse, 'debits'),'r')
+      _tex = f_deb.read()
+      f_deb.close()
+      _lis = _tex.split()
+      _lis = map( float, _lis )
+
+      _dtot  = _lis[0:len(_lis):5]
+      _dair  = _lis[1:len(_lis):5]
+      _dvap  = _lis[2:len(_lis):5]
+      _dliq  = _lis[3:len(_lis):5]
+      _ecou  = _lis[4:len(_lis):5]
+
+  except:
+      UTMESS('A','ECREVISSE0_18')
+      _dtot = [-1]
+      _dair = [-1]
+      _dvap = [-1]
+      _dliq = [-1]
+      _ecou = [-1]
+
+
+
+# ---------------------------------------------------------------------
+# CREATION DES SD-TABLE DE RESULTATS
+
+  __TAB=CREA_TABLE(LISTE=(_F(LISTE_R=_ecr_c,
+                           PARA='COTES'),
+                        _F(LISTE_R=_ecr_f,
+                           PARA='FLUX'),
+                        _F(LISTE_R=_ecr_p,
+                           PARA='PRESSION'),
+                        _F(LISTE_R=_ecr_t,
+                           PARA='TEMP'),
+                        _F(LISTE_R=_ecr_cc,
+                           PARA='COEF_CONV'),
+                         ))
+
+  __DEB=CREA_TABLE(LISTE=(_F(LISTE_R=_dtot,
+                           PARA='DEBTOT'),
+                        _F(LISTE_R=_dair,
+                           PARA='DEBAIR'),
+                        _F(LISTE_R=_dvap,
+                           PARA='DEBVAP'),
+                        _F(LISTE_R=_dliq,
+                           PARA='DEBLIQ'),
+                        _F(LISTE_I=_ecou,
+                           PARA='ECOULEMENT'),
+                         ))
+
+
+
+
+# ---------------------------------------------------------------------
+# DEBUG
+  if debug :
+      print 'DEBUT DEBUG MACR_ECRE_CALC'
+      print 'Chargements donnes par Ecrevisse'
+      print 'cotes aster :', lx_ast
+      print '_ecr_c  : min=', min(_ecr_c), ' / max=', max(_ecr_c), ' / ', _ecr_c
+      print '_ecr_f  : min=', min(_ecr_f), ' / max=', max(_ecr_f), ' / ', _ecr_f
+      print '_ecr_p  : min=', min(_ecr_p), ' / max=', max(_ecr_p), ' / ', _ecr_p
+      print '_ecr_t  : min=', min(_ecr_t), ' / max=', max(_ecr_t), ' / ', _ecr_t
+      print '_ecr_cc : min=', min(_ecr_cc), ' / max=', max(_ecr_cc), ' / ', _ecr_cc
+      print '_dtot=', _dtot
+      print '_dair=', _dair
+      print '_dvap=', _dvap
+      print '_dliq=', _dliq
+      print '_ecou=', _ecou
+      print __DEB.EXTR_TABLE()
+      print __TAB.EXTR_TABLE()
+      print 'FIN DEBUG MACR_ECRE_CALC'
+
+
+
+# ---------------------------------------------------------------------
+# RECUPERATION DES RESULTATS OPTIONNELS DEPUIS ECREVISSE
+# A finir
+#  lst_fic = os.listdir(tmp_ecrevisse)
+
+
+
+# ---------------------------------------------------------------------
+# FIN MACR_ECRE_CALC
+  return ier
+
+
+
+
+# ---------------------------------------------------------------------
+def fichier_data_ecrevisse():
+
+  """
+     Modele du fichier data.dat a la syntaxe Ecrevisse 3.0
+     Cette chaine de caractere est l'exacte replique d'un fichier de donnees
+     Ecrevisse 3.0 dans lequel toutes les donnees numeriques ont ete
+     remplacees par $V[x].
+  """
+
+  txt = """$V[0]
+
+
+      DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+      *******************************************
+
+$V[1]        is: type de section  (is=1 ellipse is=2 rectangle)
+$V[2]        nb points decrivant ah: grand axe  (m)
+$V[3]
+$V[4]
+$V[5]        nb points decrivant bl: petit axe (m)
+$V[6]
+$V[7]
+$V[8]        zl: longueur totale de la fissure (m)
+$V[9]        theta: angle par rapport a la verticale ascendante (en degres)
+$V[10]       eps: rugosite absolu (m)
+$V[11]       zeta: coefficient de la perte de charge singuliere a l'entree
+
+      DONNEES RELATIVES A L"ECOULEMENT
+      ********************************
+
+$V[20]       pe: pression de stagnation a l'entree (Pa)
+$V[21]       ps: pression de stagnation a la sortie (Pa)
+$V[22]       iflow : condition du fluide a l'entree
+               iflow=1  : eau sous-refroidie ou saturee
+               iflow=2  : fluide diphasique
+               iflow=3  : vapeur saturee ou surchauffee
+               iflow=4  : air + vapeur surchauffee
+               iflow=5  : air + vapeur saturee
+               iflow=6  : air seul
+$V[23]       te: temperature a l'entree (deg C) (utilise si iflow=1,3,4,6)
+$V[24]       xe: titre m. eau vap/eau tot a l'entree (utilise si iflow=2 ou 5)
+$V[25]       pae : pression partielle air en entree (Pa) (utilise si iflow>3)
+
+      DONNEES RELATIVES AU PROFIL DE TEMPERATURE A TRAVERS LA PAROI
+      *************************************************************
+
+$V[30]       imograd : modele de calcul du gradient de temperature
+               imograd=-1/ distribution imposee de temperature (max 100pts)
+               imograd=0 : profil impose de la temperature
+               imograd=1 : calcul du profil
+$V[31]       cas imograd = -1 : ntmat, nb de points donnes ensuite (max=100)
+$V[32]
+$V[33]
+$V[34]       tm1: grad. temp. paroi le lg de l'ecoul.(utilise si imograd=0) (degC/m)
+$V[35]       tm2: temperature de la paroi a l'entree (utilise si imograd=0) (degC)
+$V[36]       epp: epaisseur de la paroi (utilise si imograd=1) (m)
+$V[37]       alphe: coeff. convection face amont (utilise si imograd=1) (W/degC/m2)
+$V[38]       alphs: coeff. convection face aval  (utilise si imograd=1) (W/degC/m2)
+$V[39]       lambd: conduct. thermique de la paroi (utilise si imograd=1) (W/degC/m)
+$V[40]       ts: temperature du fluide cote aval (utilise si imograd=1) (degC)
+
+      CHOIX DES MODELES
+      *****************
+
+Modeles d'ecoulement diphasique
+-------------------------------
+$V[60]       imod : type de modele d'ecoulement diphasique
+               imod=1 : modele d'ecoulement a saturation a l'entree
+               imod=2 : modele d'ecoulement 'gele' a l'entree
+$V[61]       corrp: press. d'ebullition = corrp*psat(t)
+
+Choix des correlations de frottement et de transfert de chaleur
+---------------------------------------------------------------
+$V[70]       ifrot : frottement (avec : ifrot=1 ou -1 ; sans :  ifrot=0 )
+$V[71]       cas ifrot=-1 : relim = Re limite
+$V[72]       cas ifrot=-1 : frtlim = coeff frottement si Re > relim
+$V[73]       ichal : transfert de chaleur (-2 <= ichal <= 2  ichal=0 ==> Pas d'echange de chaleur)
+$V[74]       cas ichal < 0 : xminch = titre m. gaz avec corr. Chen ou liq pour x<xminch
+$V[75]       cas ichal < 0 : xmaxch = titre m. gaz avec corr. melange pour x>xmaxch
+
+Modelisation de la vena contracta
+---------------------------------
+$V[79]       ivenac : avec = 1, sans = 0
+
+Procedure d'impression
+----------------------
+$V[84]       iprint : impression profils ecran ( oui:1 non:0 )
+
+      DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+      ********************************************
+
+$V[88]       kgtest (0 < kgtest < 1) tel que g=kgtest*gmax+(1-kgtest)*gmin
+$V[89]       itnmax : nombre maximum iterations methode newton
+$V[90]       precdb : critere de convergence en debit
+"""
+
+  return txt
diff --git a/Aster/Cata/cataSTA10/Macro/macr_ecrevisse_ops.py b/Aster/Cata/cataSTA10/Macro/macr_ecrevisse_ops.py
new file mode 100644 (file)
index 0000000..def648c
--- /dev/null
@@ -0,0 +1,720 @@
+#@ MODIF macr_ecrevisse_ops Macro  DATE 21/04/2010   AUTEUR BOTTONI M.BOTTONI 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+def macr_ecrevisse_ops(self,reuse,
+   CONV_CRITERE,
+   TABLE,
+   TEMPER,
+   DEBIT,
+   MODELE_MECA,
+   MODELE_THER,
+   FISSURE,
+   ECOULEMENT,
+   LIST_INST,
+   MODELE_ECRE,
+   CONVERGENCE_ECREVISSE,
+   COURBES,
+   LOGICIEL,
+   VERSION,
+   ENTETE,
+   IMPRESSION,
+   CHAM_MATER,
+   CARA_ELEM,
+   CONTACT,
+   EXCIT_MECA,
+   EXCIT_THER,
+   COMP_INCR,
+   NEWTON,
+   CONVERGENCE,
+   ETAT_INIT,
+   INFO,
+   **args):
+   """
+        Procedure de couplage Aster-Ecrevisse
+        Execution pour tous les pas de temps des calculs thermiques, mecaniques puis hydraulique
+        DecoupageGeneration par Aster du fichier de donnees d'Ecrevisse et lancement d'Ecrevisse
+   """
+
+
+   from Utilitai.Utmess import UTMESS
+   from Utilitai.Table import Table, merge
+   from Accas import _F
+   import os, aster, copy
+
+   ier=0
+   #
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+
+   # Parametres debug
+   debug = False
+
+   # Info
+   InfoAster = 1
+   info2 = (INFO==2)
+   if debug :
+       info2=True
+
+   # IMPORTATION DE COMMANDES ASTER
+   DEFI_LIST_REEL = self.get_cmd("DEFI_LIST_REEL")
+   THER_LINEAIRE  = self.get_cmd("THER_LINEAIRE")
+   PROJ_CHAMP     = self.get_cmd("PROJ_CHAMP")
+   DETRUIRE       = self.get_cmd("DETRUIRE")
+   AFFE_MATERIAU  = self.get_cmd("AFFE_MATERIAU")
+   STAT_NON_LINE  = self.get_cmd("STAT_NON_LINE")
+   POST_RELEVE_T  = self.get_cmd("POST_RELEVE_T")
+   CALC_ECREVISSE = self.get_cmd("CALC_ECREVISSE")
+   CO             = self.get_cmd("CO")
+   CREA_TABLE     = self.get_cmd("CREA_TABLE")
+   CREA_RESU      = self.get_cmd("CREA_RESU")
+   CREA_CHAMP     = self.get_cmd("CREA_CHAMP")
+
+   # Concepts sortants
+   # TABLE creees par concatenation des tables sorties par CALC_ECREVISSE a chaque iteration
+   self.DeclareOut('TABL_RES',TABLE)
+   self.DeclareOut('DEB_RES',DEBIT)
+   # Concepts sortant: les resultats de STAT_NON_LINE et de THER_LINEAIRE valides vis-a-vis du calcul ecrevisse
+   self.DeclareOut('RTHERM',TEMPER)
+   self.DeclareOut('MECANIC', self.sd)
+
+   IsPoursuite = False
+   IsInit = True
+   # Traitement de l'etat initial en cas de poursuite
+   if ETAT_INIT:
+       dEtatInit=ETAT_INIT[0].cree_dict_valeurs(ETAT_INIT[0].mc_liste)
+       for i in dEtatInit.keys():
+           if dEtatInit[i]==None : del dEtatInit[i]
+       __EVINIT = dEtatInit['EVOL_NOLI']
+       __THINIT = dEtatInit['EVOL_THER']
+       _nume_ordre = dEtatInit['NUME_ORDRE']
+       IsPoursuite= True
+   else :
+       dEtatInit=None
+
+   ## Valeur par defaut du mot cle LOGICIEL
+   #if not LOGICIEL: LOGICIEL = os.path.join(aster.repout(), 'ecrevisse')
+
+   # RECUPERATION DES MOTS-CLES FACTEURS
+
+   l_dFISSURE=[]
+   for fissure in FISSURE:
+      dFISSURE=fissure.cree_dict_valeurs(fissure.mc_liste)
+      for i in dFISSURE.keys():
+         if dFISSURE[i]==None : del dFISSURE[i]
+      l_dFISSURE.append(dFISSURE)
+
+   dECOULEMENT=ECOULEMENT[0].cree_dict_valeurs(ECOULEMENT[0].mc_liste)
+   for i in dECOULEMENT.keys():
+      if dECOULEMENT[i]==None : del dECOULEMENT[i]
+
+   dMODELE_ECRE=MODELE_ECRE[0].cree_dict_valeurs(MODELE_ECRE[0].mc_liste)
+   for i in dMODELE_ECRE.keys():
+      if dMODELE_ECRE[i]==None : dMODELE_ECRE[i]=None #del dMODELE_ECRE[i]
+
+   dCONVERGENCE_ECREVISSE=CONVERGENCE_ECREVISSE[0].cree_dict_valeurs(CONVERGENCE_ECREVISSE[0].mc_liste)
+   for i in dCONVERGENCE_ECREVISSE.keys():
+      if dCONVERGENCE_ECREVISSE[i]==None : del dCONVERGENCE_ECREVISSE[i]
+
+   dCOMP_INCR=COMP_INCR[0].cree_dict_valeurs(COMP_INCR[0].mc_liste)
+   for i in dCOMP_INCR.keys():
+      if dCOMP_INCR[i]==None : del dCOMP_INCR[i]
+
+   dNEWTON=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
+   for i in dNEWTON.keys():
+      if dNEWTON[i]==None : del dNEWTON[i]
+
+   dCONVERGENCE=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
+   for i in dCONVERGENCE.keys():
+      if dCONVERGENCE[i]==None : del dCONVERGENCE[i]
+
+   # Recuperation des infos pour la convergence de la macro
+   dMacr_Conv = CONV_CRITERE[0].cree_dict_valeurs(CONV_CRITERE[0].mc_liste)
+   for i in dMacr_Conv.keys():
+      if dMacr_Conv[i]==None : del dMacr_Conv[i]
+
+   motclefsCALC_ECREVISSE = {}
+   motclefsCALC_ECREVISSE['COURBES'] = COURBES,
+
+
+
+
+
+   # -----------------------------------------------------------------------------------------------------
+   # Debut de la macro
+
+   # Si LIST_INST est un DEFI_LIST_REEL :
+   _liste_inst = LIST_INST.Valeurs()
+   if (debug):
+      print 'liste des instants liste_inst = ', _liste_inst
+
+   # Drapeaux pour les 1ers calculs et les 1eres definitions
+   IsDefineMaterMeca  = False
+   EcrevisseExe       = False  # si l'execution d'Ecrevisse n'a pas plantee ou a ete realisee
+
+   # Table python devant contenir toutes les tables Ecrevisse
+   T_TABL_RES = None
+   T_DEB_RES  = None
+   # Precision demandee pour converger sur le critere de la macro
+   # Nombre de decoupages succesifs d'un pas de temps
+   # Pas de temps en dessous duquel on ne decoupe plus
+   if dMacr_Conv.has_key('SUBD_NIVEAU'):
+       MacrNbDecoupage   = dMacr_Conv['SUBD_NIVEAU']
+   if dMacr_Conv.has_key('SUBD_PAS_MINI'):
+       MacrPasMini       = dMacr_Conv['SUBD_PAS_MINI']
+   MacrTempRef       = dMacr_Conv['TEMP_REF']
+   MacrPresRef       = dMacr_Conv['PRES_REF']
+   MacrCritere       = dMacr_Conv['CRITERE']
+   if dMacr_Conv.has_key('PREC_CRIT'):
+      MacrPrecisCritere = dMacr_Conv['PREC_CRIT']
+   else:
+      MacrPrecisCritere = None
+   if dMacr_Conv.has_key('NUME_ORDRE_MIN'):
+      MacrNumeOrdre     = dMacr_Conv['NUME_ORDRE_MIN']
+
+   #
+   # il faut 2 pas au minimum dans la liste
+   if (len(_liste_inst) < 2 ):
+      UTMESS('F','ECREVISSE0_20', vali=[2])
+
+   if (not IsPoursuite) :
+     _nume_ordre = 0
+   else :
+     # Dans le cas d'une poursuite :
+     # n reconstruit une nouvelle liste d'instant composee de l'ancienne liste jusqu'a l'instant recherche,
+     # puis de la nouvelle a partir de cet instant
+     # ainsi le _nume_ordre de la nouvelle liste correspond au nume_ordre de l'ancienne
+     __dico1 = __THINIT.LIST_VARI_ACCES()
+     _list_precedente = __dico1['INST']
+     _inst_init  = _list_precedente[_nume_ordre-1]
+     try:
+        # si l'instant est dans la liste, on recupere l'index
+        _idx = _liste_inst.index(_inst_init)
+     except:
+        # on cherche le plus proche
+        idx = 0
+        found = False
+        for t in _liste_inst:
+           if t > _inst_init:
+              found = True
+              idx += 1
+              break
+           idx += 1
+     new_list = _list_precedente[0:_nume_ordre]  # liste precedent jusqu'a l'instant a recalculer (inclu, ca permet de gerer le cas ou l'instant a recalculer n'est pas dans la nouvelle liste : il sera ajoute)
+     new_list.extend( _liste_inst[_idx+1:] )  # on lui ajoute la nouvelle liste a partir du l'instant a recalculer
+     _liste_inst = copy.copy(new_list)
+
+   ########################################################################################
+   # Debut boucle sur la liste d'instant
+   ########################################################################################
+   FinBoucle = False
+   while ( not FinBoucle ):
+      _inst      = _liste_inst[_nume_ordre]
+      if ( debug ):
+          print 'Instant debut boucle', _inst
+      # On boucle jusqu'a convergence
+      NbIter = 0
+      while True:
+
+
+         if ( (not IsPoursuite) or EcrevisseExe) :
+         # Le temps que l'on traite
+           _inst_p_un = _liste_inst[_nume_ordre+1]
+           IsInitEcre= False
+           # Construction de la liste des pas
+           LES_PAS = DEFI_LIST_REEL( VALE=_liste_inst, )
+           if (debug):
+              print '=====> ===== ===== ===== <===='
+              print 'Iteration numero : ', NbIter
+              print 'Instant          : ', _inst
+              print 'Instant+1        : ', _inst_p_un
+              print 'nume_ordre       : ', _nume_ordre+1
+              print 'Donnee Ecrevisse : ', EcrevisseExe
+
+           # ---------------------
+           #        THERMIQUE
+           # ---------------------
+           # Recuperation des chargements thermiques
+           _dEXCIT_THER = []
+           if EXCIT_THER:
+             for excit_i in EXCIT_THER:
+               dEXCIT_THER_i = excit_i.cree_dict_valeurs(excit_i.mc_liste)
+               for j in dEXCIT_THER_i.keys():
+                  if dEXCIT_THER_i[j]==None : del dEXCIT_THER_i[j]
+               _dEXCIT_THER.append(dEXCIT_THER_i)
+
+         #
+         # Definition des chargements thermiques venant d Ecrevisse
+           if ( EcrevisseExe ):
+              _dEXCIT_THER.append( _F(CHARGE=FLU1ECR0) )
+              _dEXCIT_THER.append( _F(CHARGE=FLU2ECR0) )
+
+           # Definition de l'etat initial
+           motclefs = {}
+           if (_nume_ordre == 0) :
+              # On verifie que temp_ref est bien renseigne dans AFFE_MATERIAU
+              try:
+                 tref = CHAM_MATER['AFFE_VARC']['VALE_REF']
+              except:
+                 UTMESS('F','ECREVISSE0_22',)
+
+              motclefs['ETAT_INIT']=[_F(VALE=tref, NUME_ORDRE=_nume_ordre)]
+              if ( debug ):
+                 print 'thermique initialise avec tref'
+           else:
+              if (IsInit) :
+                 motclefs['reuse']=__THINIT
+                 motclefs['ETAT_INIT']=[_F(EVOL_THER=__THINIT,  NUME_ORDRE=_nume_ordre)]
+                 if (debug):
+                    print 'thermique initialise avec etat_initial'
+              else :
+                 motclefs['reuse']=RTHERM
+                 motclefs['ETAT_INIT']=[_F(EVOL_THER=RTHERM,  NUME_ORDRE=_nume_ordre)]
+                 if (debug):
+                    print 'thermique initialise avec instant precedent'
+
+           if (debug):
+              print '====> THER_LINEAIRE <===='
+              print '   Les charges thermiques'
+              print EXCIT_THER
+         #
+           if IsPoursuite :
+              __THINIT = THER_LINEAIRE(
+                MODELE     = MODELE_THER,
+                CHAM_MATER = CHAM_MATER,
+                EXCIT      = _dEXCIT_THER,
+                INCREMENT  = _F(LIST_INST=LES_PAS, NUME_INST_INIT=_nume_ordre, NUME_INST_FIN=_nume_ordre+1,),
+                ARCHIVAGE  = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
+                INFO       = InfoAster,
+                **motclefs )
+
+              RTHERMPJ=PROJ_CHAMP(RESULTAT=__THINIT, MODELE_1=MODELE_THER, MODELE_2=MODELE_MECA,
+                     VIS_A_VIS=_F(TOUT_1='OUI', TOUT_2='OUI',),
+                     INFO=2,
+                      )
+              RTHERM=__THINIT
+           else :
+              RTHERM=THER_LINEAIRE(
+               MODELE     = MODELE_THER,
+               CHAM_MATER = CHAM_MATER,
+               EXCIT      = _dEXCIT_THER,
+               INCREMENT  = _F(LIST_INST=LES_PAS, NUME_INST_INIT=_nume_ordre, NUME_INST_FIN=_nume_ordre+1,),
+               ARCHIVAGE  = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
+               INFO       = InfoAster,
+               **motclefs
+               )
+
+           # Projection du champ thermique, a tous les instants sinon pas de deformations thermiques
+              RTHERMPJ=PROJ_CHAMP(RESULTAT=RTHERM, MODELE_1=MODELE_THER, MODELE_2=MODELE_MECA,
+                VIS_A_VIS=_F(TOUT_1='OUI', TOUT_2='OUI',),
+                INFO=2,
+                 )
+
+         # Definition du materiau pour la mecanique : a faire une seule fois
+           if ( not IsDefineMaterMeca ):
+              motclefmater = {}
+              motclefmater['AFFE'] = []
+              motclefmater['AFFE_VARC'] = []
+
+              for j in CHAM_MATER['AFFE_VARC'] :
+                 dvarc = j.cree_dict_valeurs(j.mc_liste)
+                 for mc, val in dvarc.items():
+                    if val == None:
+                       del dvarc[mc]
+                 motclefmater['AFFE_VARC'].append(dvarc)
+
+              for j in CHAM_MATER['AFFE'] :
+                 daffe = j.cree_dict_valeurs(j.mc_liste)
+                 for mc, val in daffe.items():
+                    if val == None:
+                       del daffe[mc]
+                 motclefmater['AFFE'].append(daffe)
+
+
+              dvarc['EVOL'] = RTHERMPJ
+              motclefmater['MAILLAGE'] = CHAM_MATER['MAILLAGE']
+              __MATMEC=AFFE_MATERIAU(
+                 **motclefmater
+              )
+              IsDefineMaterMeca = True
+
+           # ---------------------
+           #        MECANIQUE
+           # ---------------------
+           _dEXCIT_MECA = []
+           # Recuperation des chargements mecaniques
+           if EXCIT_MECA:
+              for excit_i in EXCIT_MECA:
+                 dEXCIT_MECA_i = excit_i.cree_dict_valeurs(excit_i.mc_liste)
+                 for j in dEXCIT_MECA_i.keys():
+                    if dEXCIT_MECA_i[j]==None : del dEXCIT_MECA_i[j]
+                 _dEXCIT_MECA.append(dEXCIT_MECA_i)
+
+
+           # Definition des chargements venant d'Ecrevisse
+           if ( EcrevisseExe ):
+              _dEXCIT_MECA.append( _F(CHARGE=MECAECR0) )
+
+           motclefs = {}
+
+           if (not IsPoursuite) :
+             if (_nume_ordre != 0):
+                motclefs['reuse'] = MECANIC
+                motclefs['ETAT_INIT']=[_F(EVOL_NOLI=MECANIC, NUME_ORDRE=_nume_ordre)]
+                if (debug):
+                   print 'etat meca initial = pas precedent'
+             else:
+                if (debug):
+                   print 'etat meca initial : vierge'
+           else:
+              motclefs['reuse']=__EVINIT
+              motclefs['ETAT_INIT']=[_F(EVOL_NOLI=__EVINIT, NUME_ORDRE=_nume_ordre)]
+              if (debug):
+                 print 'etat meca initial dReuseM', motclefs
+
+           if (debug):
+              print '====> STAT_NON_LINE <===='
+           if (debug):
+              print '   Les charges mecaniques'
+              print _dEXCIT_MECA
+
+
+           MECANIC=STAT_NON_LINE(
+              MODELE      = MODELE_MECA,
+              CHAM_MATER  = __MATMEC,
+              CARA_ELEM   = CARA_ELEM,
+              CONTACT     = CONTACT,
+              EXCIT       = _dEXCIT_MECA,
+              COMP_INCR   = _F(**dCOMP_INCR),
+              INCREMENT   = _F(LIST_INST=LES_PAS, NUME_INST_INIT=_nume_ordre, NUME_INST_FIN=_nume_ordre+1,),
+              NEWTON      = _F(**dNEWTON),
+              CONVERGENCE = _F(**dCONVERGENCE),
+              SOLVEUR     = _F(SYME='OUI'),
+              ARCHIVAGE   = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
+              INFO        = InfoAster,
+              **motclefs
+           )
+           # Destruction des concepts
+           #  Thermique projete
+           #  Liste des pas
+           DETRUIRE( CONCEPT=(_F(NOM=RTHERMPJ),_F(NOM=LES_PAS),),INFO=1,ALARME='NON',)
+
+         else :
+           #      CAS OU LA MACRO EST REENTRANTE : ON RELANCE ECREVISSE POUR CONNAITRE
+           #     LES CHARGEMENT A UTILISER POUR LES PROBLEMES THERMIQUES ET MECANIQUES
+           _inst_p_un=_inst
+           IsInitEcre = True
+
+         # -----------------------------------------------------------------------
+         #        ECREVISSE : ATTENTION SI REPRISE CALCUL, ON RECALCULE LE DERNIER INSTANT
+         # -------------------------------------------------------------------------
+         # Si Ecrevisse a deja ete fait une fois.
+         #   ==> Efface les concepts qui sont en sortie
+         if ( EcrevisseExe ):
+            DETRUIRE(
+               CONCEPT=(
+                  _F(NOM=MECAECR1),
+                  _F(NOM=FLU1ECR1),
+                  _F(NOM=FLU2ECR1),
+                  _F(NOM=TABLECR1),
+                  _F(NOM=DEBIECR1),
+               ),INFO=1,ALARME='NON',
+            )
+
+         # On remplace FONC_XXX par la valeur XXX correspondante a l'instant _inst_p_un
+         dECOULEMENT_ecrevisse = copy.copy(dECOULEMENT)
+         for fonc_name in ["PRES_ENTREE_FO", "PRES_SORTIE_FO", "PRES_PART_FO", "TITR_MASS_FO", "TEMP_ENTREE_FO"]:
+            if dECOULEMENT.has_key(fonc_name):
+               fonc = dECOULEMENT_ecrevisse.pop(fonc_name)
+               vale_name = fonc_name.replace('_FO', '')
+               dECOULEMENT_ecrevisse[vale_name] = fonc(_inst_p_un)
+
+
+         # Initialisation des concepts en sortie
+         MECAECR1=CO('MECAECR1')
+         FLU1ECR1=CO('FLU1ECR1')
+         FLU2ECR1=CO('FLU2ECR1')
+         TABLECR1=CO('TABLECR1')
+         DEBIECR1=CO('DEBIECR1')
+
+         if (debug):
+            print '====> ECREVISSE entree dans CALC_ECREVISSE <===='
+
+         if (not IsPoursuite) :
+
+           CALC_ECREVISSE(
+              CHARGE_MECA      = MECAECR1,
+              CHARGE_THER1     = FLU1ECR1,
+              CHARGE_THER2     = FLU2ECR1,
+              TABLE            = TABLECR1,
+              DEBIT            = DEBIECR1,
+              MODELE_MECA      = MODELE_MECA,
+              MODELE_THER      = MODELE_THER,
+              ENTETE           = ENTETE,
+              IMPRESSION       = IMPRESSION,
+              INFO             = INFO,
+              RESULTAT=_F(THERMIQUE  = RTHERM,
+                        MECANIQUE  = MECANIC,
+                        INST       = _inst_p_un, ),
+              # chemin d acces a Ecrevisse
+              LOGICIEL         = LOGICIEL,
+              VERSION          = VERSION,
+              # donnees necessaire pour ecrevisse
+              # assurer la coherence des donnees en fonction de FLUIDE_ENTREE = iflow (voir doc Ecrevisse)
+              # activation eventuelle de TITR_VA et P_AIR
+
+              FISSURE=l_dFISSURE,
+              ECOULEMENT=_F( **dECOULEMENT_ecrevisse ),
+              MODELE_ECRE=_F( **dMODELE_ECRE),
+
+              CONVERGENCE=_F( **dCONVERGENCE_ECREVISSE ),
+              **motclefsCALC_ECREVISSE
+              );
+         else :
+           CALC_ECREVISSE(
+              CHARGE_MECA      = MECAECR1,
+              CHARGE_THER1     = FLU1ECR1,
+              CHARGE_THER2     = FLU2ECR1,
+              TABLE            = TABLECR1,
+              DEBIT            = DEBIECR1,
+              MODELE_MECA      = MODELE_MECA,
+              MODELE_THER      = MODELE_THER,
+              ENTETE           = ENTETE,
+              IMPRESSION       = IMPRESSION,
+              INFO             = INFO,
+              RESULTAT=_F(THERMIQUE  = __THINIT,
+                          MECANIQUE  = __EVINIT,
+                          INST       = _inst_p_un, ),
+              # chemin d acces a Ecrevisse
+              LOGICIEL         = LOGICIEL,
+              VERSION          = VERSION,
+              # donnees necessaire pour ecrevisse
+              # assurer la coherence des donnees en fonction de FLUIDE_ENTREE = iflow (voir doc Ecrevisse)
+              # activation eventuelle de TITR_VA et P_AIR
+
+              FISSURE=l_dFISSURE,
+              ECOULEMENT=_F( **dECOULEMENT_ecrevisse ),
+              MODELE_ECRE=_F( **dMODELE_ECRE),
+
+              CONVERGENCE=_F( **dCONVERGENCE_ECREVISSE ),
+              **motclefsCALC_ECREVISSE
+              );
+
+         if (debug):
+            print '====> ECREVISSE sortie de CALC_ECREVISSE <===='
+
+
+         # Recuperation des infos de la table resultat Ecrevisse
+         T_TABL_TMP1 = TABLECR1.EXTR_TABLE()
+         T_DEB_TMP1  = DEBIECR1.EXTR_TABLE()
+#         # On ajoute deux colonnes supplementaires
+#         _nb_ligne = len(T_DEB_TMP1["DEBTOT"])
+#         T_DEB_TMP1["NUME_ORDRE"] = [_nume_ordre+1]*_nb_ligne
+#         T_DEB_TMP1["INST"]       = [_inst_p_un]*_nb_ligne
+
+         # Le calcul Ecrevisse c'est bien passe ?
+         EcrevisseExe = ( T_TABL_TMP1.values()['COTES'][0] != -1 )
+         #
+         if ( not EcrevisseExe ):
+            # Destruction des concepts de sortie, et on arrete tout
+            DETRUIRE(
+               CONCEPT=( _F(NOM=MECAECR1),
+                         _F(NOM=FLU1ECR1),
+                         _F(NOM=FLU2ECR1),
+                         _F(NOM=TABLECR1),
+                         _F(NOM=DEBIECR1),
+               ),
+               INFO=1,ALARME='NON',
+            )
+            if ( not IsInit ):
+               DETRUIRE(
+                  CONCEPT=( _F(NOM=MECAECR0),
+                            _F(NOM=FLU1ECR0),
+                            _F(NOM=FLU2ECR0),
+                            _F(NOM=TABLECR0),
+                            _F(NOM=DEBIECR0),
+                  ),
+                  INFO=1,ALARME='NON',
+               )
+            FinBoucle = True
+            break
+         #
+         # A t'on atteint la convergence
+         #  TABLECR0 table Ecrevisse a _inst
+         #  TABLECR1 table Ecrevisse a _inst_p_un
+         # --------------------
+
+         if ( not IsInit ):
+            # On recupere la liste des temperatures a t et t+1
+            lst_T_0 = T_TABL_TMP0.values()['TEMP']
+            lst_T_1 = T_TABL_TMP1.values()['TEMP']
+            # Le maximum des ecarts
+            lst_T_diff_01 = []
+            for v1, v2 in zip(lst_T_0,lst_T_1):
+               lst_T_diff_01.append(abs(v1-v2))
+            max_T_diff_01 = max(lst_T_diff_01)
+
+            # On recupere la liste des pressions a t et t+1
+            lst_P_0 = T_TABL_TMP0.values()['PRESSION']
+            lst_P_1 = T_TABL_TMP1.values()['PRESSION']
+            # Le maximum des ecarts
+            lst_P_diff_01 = []
+            for v1, v2 in zip(lst_P_0,lst_P_1):
+               lst_P_diff_01.append(abs(v1-v2))
+            max_P_diff_01 = max(lst_P_diff_01)
+            #
+            # "TEMP_PRESS","EXPLICITE","TEMP","PRESS"
+            ErreurT = (max_T_diff_01/MacrTempRef)
+            ErreurP = (max_P_diff_01/MacrPresRef)
+            ErreurG = (ErreurT**2+ErreurP**2)**0.5
+            if   ( MacrCritere == 'TEMP' ):
+               Erreur = ErreurT
+            elif ( MacrCritere == 'PRESS' ):
+               Erreur = ErreurP
+            else:
+               Erreur = ErreurG
+
+            if ( MacrCritere != 'EXPLICITE' ):
+               Convergence = ( Erreur <= MacrPrecisCritere )
+            #
+            if info2 :
+                # Info Critere
+                UTMESS('I', 'ECREVISSE0_35', valr=[_inst_p_un], valk=[MacrCritere,MacrPrecisCritere,Convergence])
+                # Info Convergence
+                UTMESS('I', 'ECREVISSE0_34', valr=[_inst_p_un,ErreurT,max_T_diff_01,ErreurP,max_P_diff_01,ErreurG])
+
+         else:
+            Convergence = True
+            if info2 :
+                UTMESS('I', 'ECREVISSE0_36', valr=[_inst_p_un])
+         # --------------------
+         #
+
+
+         if ( MacrCritere == 'EXPLICITE' ):
+            Convergence = True
+         else:
+            if ( (_nume_ordre != 0) and (_nume_ordre+1 <= MacrNumeOrdre) ):
+               UTMESS('A','ECREVISSE0_33', vali=[_nume_ordre+1,MacrNumeOrdre],valr=[_inst_p_un])
+               Convergence = True
+
+         if ( Convergence ):
+            nb_lignes_t1 = len(T_TABL_TMP1["COTES"])
+            # Ajout de deux colonnes supplementaires
+            # POUR LA TABLE ECREVISSE
+            T_TABL_TMP1["NUME_ORDRE"] = [_nume_ordre+1]*nb_lignes_t1
+            T_TABL_TMP1["INST"]       = [_inst_p_un]*nb_lignes_t1
+
+            # POUR LA TABLE DES DEBITS
+            nb_ligne_t2 = len(T_DEB_TMP1["DEBTOT"])
+            T_DEB_TMP1["NUME_ORDRE"] = [_nume_ordre+1]*nb_ligne_t2
+            T_DEB_TMP1["INST"]       = [_inst_p_un]*nb_ligne_t2
+
+            #
+            # Ajout des infos dans la table finale
+            if ( IsInit ):
+               T_TABL_RES = T_TABL_TMP1
+               T_DEB_RES  = T_DEB_TMP1
+            else:
+               T_TABL_RES = merge(T_TABL_RES, T_TABL_TMP1)
+               T_DEB_RES = merge(T_DEB_RES, T_DEB_TMP1)
+               T_TABL_RES.titr = 'TABLE_SDASTER CHARGEMENT ECREVISSE'
+               T_DEB_RES.titr = 'TABLE_SDASTER DEBIT ECREVISSE'
+            #
+            # RAZ des compteurs de division
+            NbIter = 0
+            # On memorise les concepts valides
+            MECAECR0 = MECAECR1
+            FLU1ECR0 = FLU1ECR1
+            FLU2ECR0 = FLU2ECR1
+            TABLECR0 = TABLECR1
+            DEBIECR0 = DEBIECR1
+            #
+            T_TABL_TMP0 = T_TABL_TMP1
+            if (not IsInitEcre) :
+              IsInit = False
+            if (info2):
+              UTMESS('I','ECREVISSE0_37', valr=[_inst_p_un])
+            break
+
+         else:
+            NbIter += 1
+            # A t'on le droit de decouper, par rapport au nombre de division
+            if ( NbIter > MacrNbDecoupage ):
+               FinBoucle = True
+               UTMESS('A','ECREVISSE0_30', valr=[_inst,_inst_p_un],vali=[MacrNbDecoupage])
+               break
+            #
+            # on divise le pas de temps par 2
+            tmp = (_inst + _inst_p_un )*0.5
+            # A t'on le droit de continuer, par rapport au pas de temps minimum
+            if ( (tmp - _inst) <= MacrPasMini ):
+               FinBoucle = True
+               UTMESS('A','ECREVISSE0_31', valr=[_inst,_inst_p_un,tmp,MacrPasMini])
+               break
+            #
+            if ( info2 ):
+               UTMESS('A','ECREVISSE0_32', valr=[_inst,_inst_p_un,tmp],vali=[NbIter])
+            # on insere le nouveau temps dans la liste des instants avant "_inst_p_un"
+            _liste_inst.insert(_nume_ordre+1,tmp)
+
+
+      # Convergence atteinte, on passe au pas de temps suivant, s'il en reste
+      if IsInitEcre :
+         continue
+      elif (_nume_ordre + 2 < len(_liste_inst)):
+         _nume_ordre += 1
+      else:
+         # On a fait tous les pas de temps
+         FinBoucle = True
+   #######################################################################################
+   #     Fin boucle sur les pas de temps
+   #######################################################################################
+
+   # Creation du concept de la table en sortie
+   if ( T_TABL_RES != None ):
+      dprod = T_TABL_RES.dict_CREA_TABLE()
+      TABL_RES = CREA_TABLE(**dprod)
+   if ( T_DEB_RES != None ):
+      debprod = T_DEB_RES.dict_CREA_TABLE()
+      DEB_RES = CREA_TABLE(**debprod)
+
+   # Destruction des concepts temporaires
+   DETRUIRE(
+            CONCEPT=( _F(NOM=MECAECR1),
+                      _F(NOM=FLU1ECR1),
+                      _F(NOM=FLU2ECR1),
+                      _F(NOM=TABLECR1),
+                      _F(NOM=DEBIECR1),
+            ),
+            INFO=1,ALARME='NON',
+   )
+
+   if (_nume_ordre != 0 ):
+       DETRUIRE(
+                CONCEPT=( _F(NOM=MECAECR0),
+                          _F(NOM=FLU1ECR0),
+                          _F(NOM=FLU2ECR0),
+                          _F(NOM=TABLECR0),
+                          _F(NOM=DEBIECR0),
+                ),
+                INFO=1,ALARME='NON',
+       )
+
+   return ier
diff --git a/Aster/Cata/cataSTA10/Macro/macr_fiab_impr_ops.py b/Aster/Cata/cataSTA10/Macro/macr_fiab_impr_ops.py
new file mode 100644 (file)
index 0000000..08ac8d1
--- /dev/null
@@ -0,0 +1,110 @@
+#@ MODIF macr_fiab_impr_ops Macro  DATE 24/01/2005   AUTEUR DURAND C.DURAND 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+#
+def macr_fiab_impr_ops(self, INFO,
+                       TABLE_CIBLE, NOM_PARA_CIBLE, GRADIENTS, **args):
+#
+#
+#  1. args est le dictionnaire des arguments
+#    args.keys() est la liste des mots-clés
+#    args.keys()[0] est la premiere valeur de cette liste
+#    args.keys()[1:] est la liste des valeurs suivantes dans cette liste
+#    args.keys(mot_cle) représente le contenu de la variable mot_cle dans la macro appelante.
+#
+  """ Macro-commande réalisant l'impression des valeurs pour le logiciel de fiabilite. """
+#
+# On charge les modules nécessaires
+  from Accas import _F
+#
+#____________________________________________________________________
+#
+# 1. Préalables
+#____________________________________________________________________
+#
+  erreur = 0
+#
+# 1.1 ==> La macro compte pour 1 dans l'exécution des commandes
+#
+  self.set_icmd(1)
+#
+# 1.2 ==> On importe les définitions des commandes Aster utilisées
+#         dans la macro
+#
+  DEFI_FICHIER = self.get_cmd("DEFI_FICHIER")
+  IMPR_TABLE   = self.get_cmd("IMPR_TABLE")
+#
+# 1.3. ==> Des constantes
+#          Atention : le numéro d'unité utilisé ici et celui
+#                     utlisé dans le python d'échange lance_aster_5
+#                     doivent correspondre.
+#
+  Unite_Fichier_ASTER_vers_FIABILITE = 91
+  Nom_Symbolique_Fichier_ASTER_vers_FIABILITE = "ASTER_vers_FIABILITE"
+  FORMAT_R="1PE17.10"
+#____________________________________________________________________
+#
+# 2. Définition d'un fichier d'échange
+#____________________________________________________________________
+# 
+  DEFI_FICHIER ( ACTION= "ASSOCIER",
+#                FICHIER = Nom_Symbolique_Fichier_ASTER_vers_FIABILITE,
+                 UNITE = Unite_Fichier_ASTER_vers_FIABILITE,
+                 TYPE = "ASCII",
+                 INFO = INFO )
+#____________________________________________________________________
+#
+# 4. Ecriture de la valeur cible
+#____________________________________________________________________
+#
+  IMPR_TABLE ( TABLE = TABLE_CIBLE,
+               NOM_PARA = NOM_PARA_CIBLE,
+               UNITE = Unite_Fichier_ASTER_vers_FIABILITE,
+               FORMAT_R = FORMAT_R,
+               INFO = INFO )
+#____________________________________________________________________
+#
+# 5. Ecritures des gradients
+#____________________________________________________________________
+#
+  if GRADIENTS is not None :
+#
+    for val in GRADIENTS :
+#
+      IMPR_TABLE ( TABLE = val["TABLE"],
+                   SENSIBILITE = val["PARA_SENSI"],
+                   NOM_PARA = (val["NOM_PARA"]),
+                   UNITE = Unite_Fichier_ASTER_vers_FIABILITE,
+                   FORMAT_R = FORMAT_R,
+                   INFO = INFO )
+#____________________________________________________________________
+#
+# 6. Libération du fichier d'échange
+#____________________________________________________________________
+# 
+  DEFI_FICHIER ( ACTION= "LIBERER",
+                 UNITE = Unite_Fichier_ASTER_vers_FIABILITE,
+                 INFO = INFO )
+#
+#--------------------------------------------------------------------
+# 7. C'est fini !
+#--------------------------------------------------------------------
+#
+  return erreur
diff --git a/Aster/Cata/cataSTA10/Macro/macr_fiabilite_ops.py b/Aster/Cata/cataSTA10/Macro/macr_fiabilite_ops.py
new file mode 100644 (file)
index 0000000..d49b4f7
--- /dev/null
@@ -0,0 +1,358 @@
+#@ MODIF macr_fiabilite_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# RESPONSABLE GNICOLAS G.NICOLAS
+
+import os
+import sys
+
+
+def macr_fiabilite_ops(self, INFO,
+                       LOGICIEL, VERSION,
+                       UNITE_ESCL, MESS_ASTER,
+                       SEUIL, SEUIL_TYPE,
+                       VARIABLE,
+                       **args ) :
+#
+#    args est le dictionnaire des arguments optionnels
+#    args.keys() est la liste des mots-clés
+#    args.keys()[0] est la premiere valeur de cette liste
+#    args.keys()[1:] est la liste des valeurs suivantes dans cette liste
+#    args.keys(mot_cle) représente le contenu de la variable mot_cle dans la macro appelante.
+###  print args
+###  print args.keys()
+###  if len (args.keys())>0 : print args.keys()[0]
+#
+  """ Macro-commande réalisant le pilotage du logiciel de fiabilite. """
+#
+# On charge les modules nécessaires
+  from Accas import _F
+  from Macro import fiabilite_mefisto
+  import aster
+  import numpy
+#
+#____________________________________________________________________
+#
+# 1. Préalables
+#____________________________________________________________________
+#
+# 1.1 ==> La macro compte pour 1 dans l'exécution des commandes
+#
+  self.set_icmd(1)
+#
+# 1.2 ==> On importe les définitions des commandes Aster utilisées
+#         dans la macro
+#
+  EXEC_LOGICIEL  = self.get_cmd("EXEC_LOGICIEL")
+  DEFI_LIST_REEL = self.get_cmd("DEFI_LIST_REEL")
+#
+# 1.3 ==> Le nom du programme de fiabilite à lancer
+#
+  repertoire_outils = aster.repout()
+  fiabilite      = repertoire_outils + "fiabilite"
+#
+# 1.4 ==> Initialisations
+#
+  erreur = 0
+  erreur_partiel = [0]
+  Rep_Calc_ASTER = os.getcwd()
+  Nom_Exec_ASTER = sys.executable
+#
+  messages_erreur = { 0 : "Tout va bien",
+                      1 : "Impossible de créer le répertoire de travail pour le logiciel de fiabilité.",
+                      2 : "Probleme d'ouverture du fichier.",
+                     10 : "Erreur dans le choix du logiciel de fiabilité.",
+                     11 : "Erreur dans la création des données pour le logiciel de fiabilité.",
+                    100 : "Erreur." }
+#
+  while not erreur :
+#
+#____________________________________________________________________
+#
+# 2. Répertoires et fichiers
+#____________________________________________________________________
+#
+# 2.1. ==> Création du répertoire pour l'exécution du logiciel de fiabilité
+#
+    Nom_Rep_local = "tmp_fiabilite"
+    Rep_Calc_LOGICIEL_local = os.path.join(".", Nom_Rep_local)
+    Rep_Calc_LOGICIEL_global = os.path.join(Rep_Calc_ASTER, Nom_Rep_local)
+#
+    try :
+      os.mkdir(Rep_Calc_LOGICIEL_global)
+    except os.error, erreur_partiel :
+      self.cr.warn("Code d'erreur de mkdir : " + str(erreur_partiel[0]) + " : " + erreur_partiel[1])
+      self.cr.fatal("Impossible de créer le répertoire de travail pour le logiciel de fiabilité : "+Rep_Calc_LOGICIEL_global)
+      erreur = erreur + 1
+      break
+#
+# 2.2. ==> On définit un fichier pour les résultats du calcul de fiabilité
+#
+    FIC_RESU_FIABILITE = os.path.join(Rep_Calc_LOGICIEL_global, "resu_fiabilite")
+#
+# 2.3. ==> On crée un fichier annexe pour transmettre des données à la procédure
+#          de lancement des calculs ASTER par le LOGICIEL.
+#          Ce fichier est créé dans le répertoire d'exécution du logiciel de fiabilité.
+#          On fait ainsi car les arguments passés ont du mal à transiter via l'exécutable.
+#          On stocke :
+#          1. Le niveau d'information
+#          2. L'unité logique associée au jeu de commandes déterministes
+#          3. La gestion des sorties ASTER
+#          4. Le nom de l'exécutable ASTER
+#          5. Le type de seuil du problème (maximum ou minimum)
+#
+    fic_Info_ASTER = os.path.join(Rep_Calc_LOGICIEL_global,"InfoExecASTER")
+    try :
+      f_execAster = open(fic_Info_ASTER, "w")
+    except os.error,erreur_partiel :
+      self.cr.warn("Fichier : "+fic_Info_ASTER)
+      self.cr.warn("Code d'erreur de open : " + str(erreur_partiel[0]) + " : " + erreur_partiel[1])
+      erreur = 2
+      break
+#
+    f_execAster.write(str(INFO)+"\n")
+    f_execAster.write(str(UNITE_ESCL)+"\n")
+    f_execAster.write(str(MESS_ASTER)+"\n")
+    f_execAster.write(str(Nom_Exec_ASTER)+"\n")
+    f_execAster.write(str(SEUIL_TYPE))
+    f_execAster.close()
+    fichier = open (fic_Info_ASTER,"r")
+#
+    if INFO >= 2 :
+      print "\nContenu du fichier " + fic_Info_ASTER," :"
+      les_lignes = fichier.readlines()
+      fichier.close()
+      print les_lignes, "\n"
+#
+#____________________________________________________________________
+#
+# 3. Les variables par defaut
+#____________________________________________________________________
+#
+# 3.1. ==> Dictionnaire des valeurs physiques et liées à la loi
+#
+    valeurs_lois = { }
+#
+    for la_variable in VARIABLE :
+#
+      v_moy_physique = None
+      v_moy_loi = None
+      v_min_loi = None
+      v_max_loi = None
+      sigma_loi = None
+#
+# 3.1.1. ==> loi uniforme : transfert des min et max
+#            on définit une moyennne comme étant la médiane des extremes.
+#
+      if la_variable["LOI"] == "UNIFORME" :
+        v_moy_physique = 0.5 * ( la_variable["VALE_MIN"] + la_variable["VALE_MAX"] )
+        v_min_loi = la_variable["VALE_MIN"]
+        v_max_loi = la_variable["VALE_MAX"]
+#
+# 3.1.2. ==> loi normale : transfert des moyennne et écart-type.
+#
+      elif la_variable["LOI"] == "NORMALE" :
+        v_moy_loi = la_variable["VALE_MOY"]
+        v_moy_physique = v_moy_loi
+        sigma_loi = la_variable["ECART_TYPE"]
+#
+# 3.1.3. ==> loi lognormale : identité du min, conversion pour le reste
+#
+      elif la_variable["LOI"] == "LOGNORMALE" :
+        v_min_loi = la_variable["VALE_MIN"]
+        if la_variable["VALE_MOY_PHY"] is None :
+          v_moy_loi = la_variable["VALE_MOY"]
+          sigma_loi = la_variable["ECART_TYPE"]
+          aux = numpy.exp(0.5*sigma_loi*sigma_loi+v_moy_loi)
+          v_moy_physique = v_min_loi + aux
+        else :
+          v_moy_physique = la_variable["VALE_MOY_PHY"]
+          aux = la_variable["ECART_TYPE_PHY"]/(la_variable["VALE_MOY_PHY"]-la_variable["VALE_MIN"])
+          aux1 = 1. + aux*aux
+          aux2 = numpy.sqrt(aux1)
+          v_moy_loi = numpy.log((la_variable["VALE_MOY_PHY"]-la_variable["VALE_MIN"])/aux2)
+          aux2 = numpy.log(aux1)
+          sigma_loi = numpy.sqrt(aux2)
+#
+# 3.1.4. ==> loi normale tronquée : transfert des moyenne, mini/maxi et écart-type
+#            on définit une moyennne comme étant la médiane des extremes.
+#
+      else :
+        v_moy_loi = la_variable["VALE_MOY"]
+        v_min_loi = la_variable["VALE_MIN"]
+        v_max_loi = la_variable["VALE_MAX"]
+        sigma_loi = la_variable["ECART_TYPE"]
+        v_moy_physique = 0.5 * ( la_variable["VALE_MIN"] + la_variable["VALE_MAX"] )
+#
+      dico = { }
+      dico["v_moy_physique"] = v_moy_physique
+      dico["v_moy_loi"] = v_moy_loi
+      dico["v_min_loi"] = v_min_loi
+      dico["v_max_loi"] = v_max_loi
+      dico["sigma_loi"] = sigma_loi
+      valeurs_lois[la_variable] = dico
+#
+#____________________________________________________________________
+#
+# 4. Création des fichiers de donnees pour le logiciel de fiabilite
+#____________________________________________________________________
+#
+    if ( LOGICIEL == "MEFISTO" ) :
+#
+# 4.1. ==> MEFISTO
+#
+      erreur = fiabilite_mefisto.fiabilite_mefisto ( self, Rep_Calc_LOGICIEL_global,
+                                                     INFO, VERSION,
+                                                     SEUIL, SEUIL_TYPE,
+                                                     VARIABLE,
+                                                     valeurs_lois,
+                                                     **args )
+#
+# 4.2. ==> Erreur si autre logiciel
+#
+    else :
+#
+      self.cr.warn("Logiciel de fiabilité : "+LOGICIEL)
+      erreur = 10
+#
+# 4.3. ==> Arret en cas d'erreur
+#
+    if erreur :
+      break
+#
+#____________________________________________________________________
+#
+# 5. Ecriture de la commande d"exécution du logiciel de fiabilité
+#
+#   Remarque : dans la donnée de la version du logiciel de fiabilité, il faut remplacer
+#              le _ de la donnée par un ., qui
+#              est interdit dans la syntaxe du langage de commandes ASTER
+#   Remarque : il faut remplacer le N majuscule de la donnee par
+#              un n minuscule, qui est interdit dans la syntaxe du langage
+#              de commandes ASTER
+#____________________________________________________________________
+#
+#
+    VERSION = VERSION.replace("_", ".").replace("N", "n")
+#
+    EXEC_LOGICIEL ( ARGUMENT = (Rep_Calc_LOGICIEL_global, # nom du repertoire
+                                LOGICIEL,                 # nom du logiciel de fiabilité
+                                VERSION,                  # version du logiciel de fiabilité
+                                FIC_RESU_FIABILITE,       # fichier des résultats du logiciel de fiabilité
+                               ),
+                    LOGICIEL = fiabilite
+                   )
+#
+#--------------------------------------------------------------------
+# 6. C'est fini !
+#--------------------------------------------------------------------
+#
+    break
+#
+# 6.1. ==> Arret en cas d'erreur
+#
+  if erreur :
+    if not messages_erreur.has_key(erreur) :
+      erreur = 100
+    self.cr.fatal(messages_erreur[erreur])
+#
+# 6.2. ==> Si tout va bien, on crée une liste de réels pour le retour.
+#          Si le fichier n'a pas été rempli, on met une valeur nulle unique.
+#
+  if os.path.isfile(FIC_RESU_FIABILITE) :
+    liste_reel = []
+    fic = open(FIC_RESU_FIABILITE, "r")
+    tout = fic.readlines()
+    fic.close
+    for ligne in tout:
+      liste_reel.append(float(ligne[:-1]))
+  else :
+    liste_reel = [0.]
+#
+  self.DeclareOut("nomres", self.sd)
+  nomres = DEFI_LIST_REEL( VALE = liste_reel , INFO = 1 )
+#
+# 6.3. ==> Menage du répertoire créé pour le calcul fiabiliste
+#
+  liste = os.listdir(Rep_Calc_LOGICIEL_global)
+##  print liste
+#
+  for nomfic in liste :
+    fic_total = os.path.join(Rep_Calc_LOGICIEL_global, nomfic)
+#
+    if os.path.isdir(fic_total) :
+      liste_bis = os.listdir(fic_total)
+      for nomfic_bis in liste_bis :
+        fic_total_bis = os.path.join(fic_total, nomfic_bis)
+        if os.path.islink(fic_total_bis) :
+          os.unlink (fic_total_bis)
+        else :
+          os.chmod  (fic_total_bis, 0755)
+          os.remove (fic_total_bis)
+      os.rmdir (fic_total)
+#
+    elif os.path.isfile(fic_total) :
+      os.chmod  (fic_total, 0755)
+      os.remove (fic_total)
+#
+  os.rmdir (Rep_Calc_LOGICIEL_global)
+#
+  return
+#
+##########################  Fin de la fonction##################################
+#
+##########################   Auto-test##################################
+#
+if __name__ == "__main__" :
+#
+  import os
+  import sys
+  import tempfile
+#
+  Rep_Calc_LOGICIEL_global = tempfile.mktemp()
+  os.mkdir(Rep_Calc_LOGICIEL_global)
+#
+  classe = None
+  INFO = 2
+  LOGICIEL = "MEFISTO"
+  VERSION = "V3_2"
+  UNITE_ESCL = 38
+  MESS_ASTER = "DERNIER"
+  SEUIL = 1789.
+  SEUIL_TYPE = "MAXIMUM"
+  VARIABLE = []
+  args = {}
+#
+  lr8 = macr_fiabilite_ops(classe, INFO,
+                       LOGICIEL, VERSION,
+                       UNITE_ESCL, MESS_ASTER,
+                       SEUIL, SEUIL_TYPE,
+                       VARIABLE,
+                       **args )
+###  print "lr8 = ", lr8
+  Liste = os.listdir(Rep_Calc_LOGICIEL_global)
+#
+  for nomfic in Liste :
+    fic_total = os.path.join(Rep_Calc_LOGICIEL_global, nomfic)
+    os.chmod  (fic_total, 0755)
+    os.remove (fic_total)
+  os.rmdir (Rep_Calc_LOGICIEL_global)
+#
+  sys.exit("blabla")
diff --git a/Aster/Cata/cataSTA10/Macro/macr_lign_coupe_ops.py b/Aster/Cata/cataSTA10/Macro/macr_lign_coupe_ops.py
new file mode 100644 (file)
index 0000000..d7e18ab
--- /dev/null
@@ -0,0 +1,980 @@
+#@ MODIF macr_lign_coupe_ops Macro  DATE 13/04/2010   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+########################################################################
+# script PYTHON de creation du résultat local
+########################################################################
+
+########################################################################
+# verification que les points de la ligne de coupe sont dans la matiere
+def crea_grp_matiere(self,groupe,newgrp,iocc,m,__remodr,NOM_CHAM,LIGN_COUPE,__macou):
+
+  import aster
+  import os,string,types
+  from Accas import _F
+  from Noyau.N_utils import AsType
+  from Utilitai.Utmess import  UTMESS
+  import os
+  POST_RELEVE_T = self.get_cmd('POST_RELEVE_T')
+  DEFI_GROUP    = self.get_cmd('DEFI_GROUP')
+
+  motscles={}
+  if m['NOM_CMP']!=None:
+     motscles['NOM_CMP']=m['NOM_CMP']
+  else:
+     motscles['TOUT_CMP']='OUI'
+  motscles['OPERATION']='EXTRACTION'
+
+  __tab=POST_RELEVE_T(ACTION=_F(  INTITULE=newgrp,
+                           RESULTAT  = __remodr,
+                           NOM_CHAM=NOM_CHAM,
+                           GROUP_NO  = groupe,**motscles ))
+
+  # dictb=table initiale (contenant éventuellement des noeuds hors matière)
+  dictb=__tab.EXTR_TABLE()
+  # listenoe_b=liste ordonnee des noeuds de la ligne de coupe (avec doublons)
+  listenoe_b = dictb.NOEUD.values()
+  # lno_b2=liste des noeuds de la ligne de coupe après élimination des doublons
+  # (attention, on perd l'ordre des noeuds)
+  lno_b2 = set(listenoe_b)
+
+  # dictc=table (extraite de dictb) contenant uniquement des noeuds dans la matière
+  if m['NOM_CMP']!=None:
+     dictc=getattr(dictb,m['NOM_CMP'][0]).NON_VIDE()
+     lno_c2 = set(dictc.NOEUD.values())
+  else:# TOUT_CMP='OUI'
+     # on garde uniquement les composantes pour conserver les noeuds où il y a des valeurs
+     a_suppr = set(['INTITULE', 'RESU', 'NOM_CHAM', 'NUME_ORDRE', 'INST', 'ABSC_CURV', 'COOR_X', 'COOR_Y', 'COOR_Z'])
+     new_para = set(dictb.para)
+     new_para.difference_update(a_suppr)
+
+     lno_c2 = set()
+     for comp in new_para.difference(['NOEUD']):
+        dictc = getattr(dictb, comp).NON_VIDE()
+        lno_c2.update(dictc.NOEUD.values())
+
+  # on réordonne la liste des noeuds de lno_c2 (selon leur position dans listenoe_b) => l_matiere
+  # l_horsmat=liste des noeuds hors matière
+  l_matiere = [j for j in listenoe_b if j in lno_c2]
+  nderm=l_matiere.index(l_matiere[len(l_matiere)-1])
+  l_horsmat = [j for j in listenoe_b if j not in lno_c2]
+
+  # si on est en présence de noeuds hors matière,
+  # on emet une alarme pour informer l'utilisateur
+  nbpoin=m['NB_POINTS']
+  reste=nbpoin-len(l_matiere)
+  if len(l_horsmat) > 0:
+
+       nderh=l_horsmat.index(l_horsmat[len(l_horsmat)-1])
+       cnom = list(__macou.NOMNOE.get())
+       l_coor = __macou.COORDO.VALE.get()
+       indent=os.linesep+' '*12
+       l_surlig = []
+       l_horslig = []
+       for j in l_matiere[:nderm+1]:
+          nuno=cnom.index(j.ljust(8))
+          text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
+          l_surlig.append(text_coordo)
+       for j in l_horsmat[:nderh+1]:
+          nuno=cnom.index(j.ljust(8))
+          text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
+          l_horslig.append(text_coordo)
+       UTMESS('A','POST0_8',valk=[indent.join(l_surlig),indent.join(l_horslig)])
+
+  elif reste > 0:
+
+       cnom = list(__macou.NOMNOE.get())
+       l_coor = __macou.COORDO.VALE.get()
+       indent=os.linesep+' '*12
+       l_surlig = []
+       for j in l_matiere[:nderm+1]:
+          nuno=cnom.index(j.ljust(8))
+          text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
+          l_surlig.append(text_coordo)
+       UTMESS('A','POST0_24',vali=[iocc,reste],valk=[indent.join(l_surlig)])
+
+  __macou=DEFI_GROUP( reuse =__macou , MAILLAGE=__macou ,
+                   CREA_GROUP_NO=_F(NOM=newgrp,NOEUD=l_matiere[:nderm+1]),)
+
+  return
+
+def crea_resu_local(self,dime,NOM_CHAM,m,resin,mail,nomgrma):
+
+  from Utilitai.Utmess     import  UTMESS
+  from math import pi,sqrt,atan2,asin
+  import os,string,types
+  import aster
+  from Accas import _F
+  MODI_REPERE = self.get_cmd('MODI_REPERE')
+
+  epsi=0.00000001
+
+  if NOM_CHAM == 'DEPL':
+       if dime == 2:
+          LCMP=['DX','DY']
+          TYPE_CHAM='VECT_2D'
+       elif dime ==3 :
+          LCMP=['DX','DY','DZ']
+          TYPE_CHAM='VECT_3D'
+  elif NOM_CHAM in ('SIGM_NOEU_DEPL','SIEF_ELNO_ELGA','SIGM_NOEU_SIEF','SIGM_NOEU_ELGA','SIGM_NOEU_COQU','SIGM_ELNO_DEPL'):
+       if dime == 2:
+          LCMP=['SIXX','SIYY','SIZZ','SIXY']
+          TYPE_CHAM='TENS_2D'
+       elif dime ==3 :
+          LCMP=['SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ']
+          TYPE_CHAM='TENS_3D'
+
+
+  if m['TYPE']=='SEGMENT' and m['REPERE'] != 'CYLINDRIQUE' :
+
+    if m['REPERE'] == 'LOCAL':
+      # --- determination des angles nautiques
+      cx1=m['COOR_EXTR'][0]-m['COOR_ORIG'][0]
+      cx2=m['COOR_EXTR'][1]-m['COOR_ORIG'][1]
+      cx3=0.
+      if dime == 3:
+        cx3=m['COOR_EXTR'][2]-m['COOR_ORIG'][2]
+      nvx=sqrt(cx1**2+cx2**2+cx3**2)
+      if abs(nvx) < epsi:
+         UTMESS('F','POST0_1')
+      cx1=cx1/nvx
+      cx2=cx2/nvx
+      cx3=cx3/nvx
+      cy1=m['VECT_Y'][0]
+      cy2=m['VECT_Y'][1]
+      cy3=0.
+      if dime == 3:
+        cy3=m['VECT_Y'][2]
+      nvy=sqrt(cy1**2+cy2**2+cy3**2)
+      if abs(nvy) < epsi:
+         UTMESS('F','POST0_2')
+      cy1=cy1/nvy
+      cy2=cy2/nvy
+      cy3=cy3/nvy
+      if ((abs(cx1-cy1)<epsi and abs(cx2-cy2)<epsi and  abs(cx3-cy3)<epsi) or \
+         (abs(cx1+cy1)<epsi and abs(cx2+cy2)<epsi and  abs(cx3+cy3)<epsi)):
+         UTMESS('F','POST0_3')
+      if abs(cx1*cy1+cx2*cy2+cx3*cy3) > epsi  :
+        cz1=cx2*cy3-cx3*cy2
+        cz2=cx3*cy1-cx1*cy3
+        cz3=cx1*cy2-cx2*cy1
+        nvz=sqrt(cz1**2+cz2**2+cz3**2)
+        cz1=cz1/nvz
+        cz2=cz2/nvz
+        cz3=cz3/nvz
+        cy1=cz2*cx3-cz3*cx2
+        cy2=cz3*cx1-cz1*cx3
+        cy3=cz1*cx2-cz2*cx1
+        nvy=sqrt(cy1**2+cy2**2+cy3**2)
+        cy1=cy1/nvy
+        cy2=cy2/nvy
+        cy3=cy3/nvy
+        UTMESS('A','POST0_4',valr=[cy1,cy2,cy3])
+      else:
+        cz1=cx2*cy3-cx3*cy2
+        cz2=cx3*cy1-cx1*cy3
+        cz3=cx1*cy2-cx2*cy1
+      beta=0.
+      gamma=0.
+      if dime ==2:
+        alpha = atan2(cx2,cx1)
+      else:
+        if cx1**2 + cx2**2 > epsi :
+          alpha=atan2(cx2,cx1)
+          beta=-asin(cx3)
+          gamma=atan2(cy3,cz3)
+        else:
+          alpha=atan2(-cy1,cy2)
+          beta=-asin(cx3)
+          gamma=0.
+      alpha=alpha*180/pi
+      beta=beta*180/pi
+      gamma=gamma*180/pi
+
+    elif m['REPERE'] == 'UTILISATEUR':
+      alpha=m['ANGL_NAUT'][0]
+      beta =m['ANGL_NAUT'][1]
+      gamma=m['ANGL_NAUT'][2]
+
+    motscles={}
+    motscles['MODI_CHAM']=[]
+    motscles['DEFI_REPERE']=[]
+    motscles['MODI_CHAM'].append(_F(NOM_CHAM=NOM_CHAM,NOM_CMP=LCMP,TYPE_CHAM=TYPE_CHAM),)
+    ANGL_NAUT=[]
+    ANGL_NAUT.append(alpha)
+    if dime ==3:
+       ANGL_NAUT.append(beta)
+       ANGL_NAUT.append(gamma)
+    motscles['DEFI_REPERE'].append(_F(REPERE='UTILISATEUR',ANGL_NAUT=ANGL_NAUT),)
+    __remodr=MODI_REPERE(RESULTAT=resin,**motscles)
+
+
+  if m['TYPE']=='ARC':
+    if m['REPERE'] == 'CYLINDRIQUE' :
+      motscles={}
+      motscles['MODI_CHAM']=[]
+      motscles['DEFI_REPERE']=[]
+      motscles['MODI_CHAM'].append(_F(NOM_CHAM=NOM_CHAM,NOM_CMP=LCMP,TYPE_CHAM=TYPE_CHAM),)
+      ORIGINE=[]
+      ORIGINE.append(m['CENTRE'][0])
+      ORIGINE.append(m['CENTRE'][1])
+      if dime ==3:
+        ORIGINE.append(m['CENTRE'][2])
+        AXE_Z=[]
+        AXE_Z.append(m['DNOR'][0])
+        AXE_Z.append(m['DNOR'][1])
+        AXE_Z.append(m['DNOR'][2])
+        motscles['DEFI_REPERE'].append(_F(REPERE='CYLINDRIQUE',ORIGINE=ORIGINE,AXE_Z=AXE_Z),)
+      elif dime ==2:
+        motscles['DEFI_REPERE'].append(_F(REPERE='CYLINDRIQUE',ORIGINE=ORIGINE,),)
+      __remodr=MODI_REPERE(RESULTAT=resin,**motscles)
+    else :
+      UTMESS('F','POST0_5',valk=[m['TYPE'],m['REPERE']])
+
+
+
+  if m['TYPE'][:5]=='GROUP' or m['TYPE']=='SEGMENT':
+
+    if m['TYPE'][:5]=='GROUP' and m['REPERE'] == 'LOCAL':
+     # determination du repère local (v1,v2,v3)
+     # ---------------------------------------
+      noma=mail.nom
+      collgrma=aster.getcolljev(noma.ljust(8)+'.GROUPEMA')
+      collcnx =aster.getcolljev(noma.ljust(8)+'.CONNEX')
+      coord   =aster.getvectjev(noma.ljust(8)+'.COORDO    .VALE')
+      cnom    =aster.getvectjev(noma.ljust(8)+'.NOMNOE')
+
+      numa=collgrma[nomgrma.ljust(8)]
+      dictu={}
+#     initialisations
+      for ima in numa:
+        n1=collcnx[ima][0]
+        n2=collcnx[ima][1]
+        dictu[n1]=[]
+        dictu[n2]=[]
+#     determination du vecteur tangent (v1) + normalisation
+      for ima in numa:
+        vectu1=[]
+        vectu2=[]
+        n1=collcnx[ima][0]
+        n2=collcnx[ima][1]
+        ux=coord[3*(n2-1)]-coord[3*(n1-1)]
+        uy=coord[3*(n2-1)+1]-coord[3*(n1-1)+1]
+        vectu1.append(ux)
+        vectu1.append(uy)
+        vectu2.append(ux)
+        vectu2.append(uy)
+        if dime ==3 :
+          uz=coord[3*(n2-1)+2]-coord[3*(n1-1)+2]
+          vectu1.append(uz)
+          vectu2.append(uz)
+        dictu[n1].append(vectu1)
+        dictu[n2].append(vectu2)
+      for i in dictu:
+        if len(dictu[i])==2:
+          dictu[i][0][0]=dictu[i][0][0]+dictu[i][1][0]
+          dictu[i][0][1]=dictu[i][0][1]+dictu[i][1][1]
+          if dime==3:dictu[i][0][2]=dictu[i][0][2]+dictu[i][1][2]
+          del dictu[i][1]
+      for i in dictu:
+        if dime==2:
+          norm=sqrt(dictu[i][0][0]**2+dictu[i][0][1]**2)
+          dictu[i][0][0]=dictu[i][0][0]/norm
+          dictu[i][0][1]=dictu[i][0][1]/norm
+        elif dime==3:
+          norm=sqrt(dictu[i][0][0]**2+dictu[i][0][1]**2+dictu[i][0][2]**2)
+          dictu[i][0][0]=dictu[i][0][0]/norm
+          dictu[i][0][1]=dictu[i][0][1]/norm
+          dictu[i][0][2]=dictu[i][0][2]/norm
+#     determination du vecteur normal (v2):
+#     on projete VECT_Y sur le plan orthogonal au vecteur v1.
+#     (ce vecteur normal est obtenu par 2 produits vectoriels successifs en 3D)
+      if dime==3:
+        norm=sqrt(m['VECT_Y'][0]**2+m['VECT_Y'][1]**2+m['VECT_Y'][2]**2)
+        tmpy=[m['VECT_Y'][0]/norm,m['VECT_Y'][1]/norm,m['VECT_Y'][2]/norm]
+      j=0
+      __resu=[None]*(len(dictu)+1)
+      __resu[0]=resin
+      for i in dictu:
+          j=j+1
+          vecty=[]
+          if dime==2:
+             vecty.append(-dictu[i][0][1])
+             vecty.append(dictu[i][0][0])
+             dictu[i].append(vecty)
+          elif dime==3:
+             # v3= v1 vectoriel vect_y
+             vectz=[]
+             vectz.append(dictu[i][0][1]*tmpy[2]-dictu[i][0][2]*tmpy[1])
+             vectz.append(dictu[i][0][2]*tmpy[0]-dictu[i][0][0]*tmpy[2])
+             vectz.append(dictu[i][0][0]*tmpy[1]-dictu[i][0][1]*tmpy[0])
+             normz=sqrt(vectz[0]**2+vectz[1]**2+vectz[2]**2)
+             vectz[0]=vectz[0]/normz
+             vectz[1]=vectz[1]/normz
+             vectz[2]=vectz[2]/normz
+             vecty.append(vectz[1]*dictu[i][0][2]-vectz[2]*dictu[i][0][1])
+             vecty.append(vectz[2]*dictu[i][0][0]-vectz[0]*dictu[i][0][2])
+             vecty.append(vectz[0]*dictu[i][0][1]-vectz[1]*dictu[i][0][0])
+             normy=sqrt(vecty[0]**2+vecty[1]**2+vecty[2]**2)
+             vecty[0]=vecty[0]/normy
+             vecty[1]=vecty[1]/normy
+             vecty[2]=vecty[2]/normy
+             dictu[i].append(vecty)
+             dictu[i].append(vectz)
+          cx1=dictu[i][0][0]
+          cx2=dictu[i][0][1]
+          cy1=dictu[i][1][0]
+          cy2=dictu[i][1][1]
+          if dime==3:
+             cx3=dictu[i][0][2]
+             cy3=dictu[i][1][2]
+             cz1=dictu[i][2][0]
+             cz2=dictu[i][2][1]
+             cz3=dictu[i][2][2]
+
+     # determination des angles nautiques (alpha,beta,gamma)
+     # ----------------------------------------------------
+          beta=0.
+          gamma=0.
+          if dime ==2:
+            alpha = atan2(cx2,cx1)
+          else:
+            if cx1**2 + cx2**2 > epsi :
+              alpha=atan2(cx2,cx1)
+              beta=-asin(cx3)
+              gamma=atan2(cy3,cz3)
+            else:
+              alpha=atan2(-cy1,cy2)
+              beta=-asin(cx3)
+              gamma=0.
+          alpha=alpha*180/pi
+          beta=beta*180/pi
+          gamma=gamma*180/pi
+          motscles={}
+          motscles['MODI_CHAM']=[]
+          motscles['DEFI_REPERE']=[]
+          noeu=dictu.keys()
+          motscles['MODI_CHAM'].append(_F(NOM_CHAM=NOM_CHAM,NOM_CMP=LCMP,TYPE_CHAM=TYPE_CHAM,NOEUD=cnom[noeu[j-1]-1]),)
+          ANGL_NAUT=[]
+          ANGL_NAUT.append(alpha)
+          if dime ==3:
+            ANGL_NAUT.append(beta)
+            ANGL_NAUT.append(gamma)
+          motscles['DEFI_REPERE'].append(_F(REPERE='UTILISATEUR',ANGL_NAUT=ANGL_NAUT),)
+          __resu[j]=MODI_REPERE(RESULTAT=__resu[j-1],**motscles)
+      __remodr=__resu[j]
+
+
+    motscles={}
+    motscles['MODI_CHAM']=[]
+    motscles['DEFI_REPERE']=[]
+    motscles['MODI_CHAM'].append(_F(NOM_CHAM=NOM_CHAM,NOM_CMP=LCMP,TYPE_CHAM=TYPE_CHAM),)
+    if m['REPERE'] == 'CYLINDRIQUE' :
+      if dime ==3:
+        motscles['DEFI_REPERE'].append(_F(REPERE='CYLINDRIQUE',ORIGINE=m['ORIGINE'],AXE_Z=m['AXE_Z']),)
+      elif dime ==2:
+        motscles['DEFI_REPERE'].append(_F(REPERE='CYLINDRIQUE',ORIGINE=m['ORIGINE'],),)
+      __remodr=MODI_REPERE(RESULTAT=resin,**motscles)
+    elif m['REPERE'] == 'UTILISATEUR':
+      alpha=m['ANGL_NAUT'][0]
+      beta =m['ANGL_NAUT'][1]
+      gamma=m['ANGL_NAUT'][2]
+      ANGL_NAUT=[]
+      ANGL_NAUT.append(alpha)
+      if dime ==3:
+        ANGL_NAUT.append(beta)
+        ANGL_NAUT.append(gamma)
+      motscles['DEFI_REPERE'].append(_F(REPERE='UTILISATEUR',ANGL_NAUT=ANGL_NAUT),)
+      __remodr=MODI_REPERE(RESULTAT=resin,**motscles)
+
+
+  return __remodr
+
+########################################################################
+# script PYTHON de creation des noeuds d'une ligne de coupe 'arc'
+
+def crea_noeu_lig_coup(dimension,pt1,pt2,anglj,dnor):
+  from Utilitai.Utmess     import  UTMESS
+  from math import pi,sin,cos,sqrt
+
+  a=pt1[0]-pt2[0]
+  b=pt1[1]-pt2[1]
+  eps=0.00000001
+  anglr=anglj*pi/180.
+  if dimension==2:
+    r=sqrt(a**2+b**2)
+    if abs(r)<eps:
+      UTMESS('F','POST0_6')
+    x=pt2[0]+a*cos(anglr)-b*sin(anglr)
+    y=pt2[1]+b*cos(anglr)+a*sin(anglr)
+    return x,y
+  elif dimension==3:
+    c=pt1[2]-pt2[2]
+    r=sqrt(a**2+b**2+c**2)
+    if abs(r)<eps:
+      UTMESS('F','POST0_6')
+    d1=dnor[0]
+    d2=dnor[1]
+    d3=dnor[2]
+    d=sqrt(d1**2+d2**2+d3**2)
+    if abs(r)<eps:
+      UTMESS('F','POST0_7')
+    x=pt2[0]+a*cos(anglr)+sin(anglr)*(c*d2-b*d3)/d
+    y=pt2[1]+b*cos(anglr)+sin(anglr)*(a*d3-c*d1)/d
+    z=pt2[2]+c*cos(anglr)+sin(anglr)*(b*d1-a*d2)/d
+    return x,y,z
+########################################################################
+# determination de la distance min entre 2 points consécutifs de la ligne de coupe
+
+def dist_min_deux_points(mail):
+  from math import sqrt
+  import aster
+  nno=aster.getvectjev(mail.nom.ljust(8)+'.DIME')[0]
+  l_coor1=[]
+  l_coor2=[]
+  for i in range(nno-1):
+    l_coor1=aster.getvectjev(mail.nom.ljust(8)+'.COORDO    .VALE',3*(i),3)
+    l_coor2=aster.getvectjev(mail.nom.ljust(8)+'.COORDO    .VALE',3*(i+1),3)
+    d=sqrt( (l_coor1[0]-l_coor2[0])**2+(l_coor1[1]-l_coor2[1])**2+(l_coor1[2]-l_coor2[2])**2)
+    if i == 0 : dist=d
+    else      : dist=min(d,dist)
+  return dist
+
+########################################################################
+# script PYTHON de creation d un maillage de ligne de coupe
+
+def crea_mail_lig_coup(dimension,lignes,groups,arcs):
+
+  import os,sys,copy
+  from Utilitai.Utmess     import  UTMESS
+
+# construction du maillage au format Aster des segments de lignes de coupe
+
+  nblig=len(lignes)
+  nbngr=len(groups)
+  nbarc=len(arcs)
+
+  resu='TITRE\n'
+  titre='Maillage ligne de coupe'+'\n'
+  resu=resu+'FINSF\n'
+  resu=resu+'COOR_'+str(dimension)+'D\n'
+  epsi=0.00000001
+
+# creation des noeuds
+  nbno=0
+  for i in range(nblig):
+    pt1           = lignes[i][0]
+    pt2           = lignes[i][1]
+    nbp_lig_coupe = lignes[i][2]
+    for j in range(nbp_lig_coupe):
+      if dimension==2:
+        x=pt1[0]+j*(pt2[0]-pt1[0])/(nbp_lig_coupe-1)
+        y=pt1[1]+j*(pt2[1]-pt1[1])/(nbp_lig_coupe-1)
+        nbno=nbno+1
+        noeud='  N'+str(nbno)+'   '+str(x)+'    '+str(y)+'\n'
+        resu=resu+noeud
+      elif dimension==3:
+        x=pt1[0]+j*(pt2[0]-pt1[0])/(nbp_lig_coupe-1)
+        y=pt1[1]+j*(pt2[1]-pt1[1])/(nbp_lig_coupe-1)
+        z=pt1[2]+j*(pt2[2]-pt1[2])/(nbp_lig_coupe-1)
+        nbno=nbno+1
+        noeud='  N'+str(nbno)+'   '+str(x)+'   '+str(y)+'   '+str(z)+'\n'
+        resu=resu+noeud
+  for i in range(nbngr):
+    for pt in groups[i][1:]:
+      if dimension==2:
+        nbno=nbno+1
+        noeud='  N'+str(nbno)+' '+str(pt[0])+'    '+str(pt[1])+'\n'
+        resu=resu+noeud
+      elif dimension==3:
+        nbno=nbno+1
+        noeud='  N'+str(nbno)+' '+str(pt[0])+'    '+str(pt[1])+'    '+str(pt[2])+'\n'
+        resu=resu+noeud
+  angles=[None]*nbarc
+  for i in range(nbarc):
+    pt1           = arcs[i][0]
+    pt2           = arcs[i][1]
+    nbp_lig_coupe = arcs[i][2]
+    angle         = arcs[i][3]
+    if abs(angle-360.)<epsi: nbpt=nbp_lig_coupe+1
+    else                   : nbpt=nbp_lig_coupe
+    if dimension==3:dnor=arcs[i][4]
+    angles[i] = []
+    for j in range(nbp_lig_coupe):
+      anglj       = j*angle/(nbpt-1)
+      angles[i].append(anglj)
+      if dimension==2:
+        nbno=nbno+1
+        x,y=crea_noeu_lig_coup(dimension,pt1,pt2,anglj,dnor=[])
+        noeud='  N'+str(nbno)+'   '+str(x)+'    '+str(y)+'\n'
+        resu=resu+noeud
+      elif dimension==3:
+        nbno=nbno+1
+        x,y,z=crea_noeu_lig_coup(dimension,pt1,pt2,anglj,dnor)
+        noeud='  N'+str(nbno)+'   '+str(x)+'   '+str(y)+'   '+str(z)+'\n'
+        resu=resu+noeud
+  resu=resu+'FINSF\n'
+
+# creation des mailles
+  nbma=0
+  for i in range(nblig):
+    nbp_lig_coupe = lignes[i][2]
+    resu=resu+'SEG2\n'
+    for j in range(nbp_lig_coupe-1):
+        nbma=nbma+1
+        maille='  M'+str(nbma)+' N'+str(nbma+i)+' N'+str(nbma+1+i)+'\n'
+        resu=resu+maille
+    resu=resu+'FINSF\n'
+  for i in range(nbngr):
+    resu=resu+'SEG2\n'
+    for pt in groups[i][1:-1]:
+        nbma=nbma+1
+        maille='  M'+str(nbma)+' N'+str(nbma+nblig+i)+' N'+str(nbma+nblig+1+i)+'\n'
+        resu=resu+maille
+    resu=resu+'FINSF\n'
+  nprec=0
+
+  for i in range(nbarc):
+    nbp_lig_coupe = arcs[i][2]
+    angle         = arcs[i][3]
+    resu=resu+'SEG2\n'
+    nbmai=nbma+nblig+nbngr+nprec+i+1
+    for j in range(nbp_lig_coupe-1):
+        nbma=nbma+1
+        maille='  M'+str(nbma)+' N'+str(nbma+nblig+nbngr+nprec+i)+' N'+str(nbma+nblig+nbngr+nprec+1+i)+'\n'
+        resu=resu+maille
+    if abs(angle-360.)<epsi:
+        nbma=nbma+1
+        maille='  M'+str(nbma)+' N'+str(nbma+nblig+nbngr+nprec+i)+' N'+str(nbmai)+'\n'
+        nprec=nprec-1
+        resu=resu+maille
+    resu=resu+'FINSF\n'
+
+# creation des groupes de mailles (1 par ligne de coupe)
+  nbma=0
+  for i in range(nblig):
+    resu=resu+'GROUP_MA\n'
+    resu=resu+'  LICOU'+str(i+1)
+    nbp_lig_coupe = lignes[i][2]
+    for j in range(nbp_lig_coupe-1):
+        nbma=nbma+1
+        resu=resu+'  M'+str(nbma)+'\n'
+    resu=resu+'\n'
+    resu=resu+'FINSF\n'
+  for i in range(nbngr):
+    resu=resu+'GROUP_MA\n'
+    resu=resu+groups[i][0]
+    nbp_lig_coupe = len(groups[i])-1
+    for j in range(nbp_lig_coupe-1):
+        nbma=nbma+1
+        resu=resu+'  M'+str(nbma)+'\n'
+    resu=resu+'\n'
+    resu=resu+'FINSF\n'
+  arcgma=[]
+  for i in range(nbarc):
+    resu=resu+'GROUP_MA\n'
+    k=nblig+i
+    resu=resu+'  LICOU'+str(k+1)
+    arcgma.append('LICOU'+str(k+1))
+    nbp_lig_coupe = arcs[i][2]
+    angle         = arcs[i][3]
+    if abs(angle-360.)<epsi: nbpt=nbp_lig_coupe+1
+    else                   : nbpt=nbp_lig_coupe
+    for j in range(nbpt-1):
+        nbma=nbma+1
+        resu=resu+'  M'+str(nbma)+'\n'
+    resu=resu+'\n'
+    resu=resu+'FINSF\n'
+  resu=resu+'FIN\n'
+
+  return resu,arcgma,angles,nbno
+
+
+########################################################################
+def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
+              NOM_CHAM,MODELE,**args):
+
+  """
+     Ecriture de la macro MACR_LIGN_COUPE
+  """
+  import os,string,types
+  from Accas import _F
+  from Noyau.N_utils import AsType
+  import aster,math
+  from Utilitai.UniteAster import UniteAster
+  from Utilitai.Utmess import  UTMESS, MasquerAlarme, RetablirAlarme
+  ier=0
+
+  # On importe les definitions des commandes a utiliser dans la macro
+  LIRE_MAILLAGE  =self.get_cmd('LIRE_MAILLAGE')
+  DEFI_GROUP     =self.get_cmd('DEFI_GROUP')
+  AFFE_MODELE    =self.get_cmd('AFFE_MODELE')
+  PROJ_CHAMP     =self.get_cmd('PROJ_CHAMP')
+  POST_RELEVE_T  =self.get_cmd('POST_RELEVE_T')
+  CREA_TABLE     =self.get_cmd('CREA_TABLE')
+  CREA_RESU      =self.get_cmd('CREA_RESU')
+  CREA_MAILLAGE  =self.get_cmd('CREA_MAILLAGE')
+
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  #
+  MasquerAlarme('CALCULEL2_63')
+  MasquerAlarme('CALCULEL2_64')
+  MasquerAlarme('MODELISA5_53')
+
+  mcORDR={}
+
+  if RESULTAT != None:
+    if args['NUME_ORDRE'] != None :
+      mcORDR['NUME_ORDRE']=args['NUME_ORDRE']
+    elif args['LIST_ORDRE']  != None:
+      mcORDR['LIST_ORDRE']=args['LIST_ORDRE']
+    elif args['INST']  != None:
+      mcORDR['INST']=args['INST']
+    elif args['INST']  != None:
+      mcORDR['INST']=args['INST']
+    elif args['LIST_INST']  != None:
+      mcORDR['LIST_INST']=args['LIST_INST']
+    else :
+      mcORDR['TOUT_ORDRE']='OUI'
+
+    nomresu=RESULTAT.nom
+    iret,ibid,n_modele = aster.dismoi('F','MODELE',nomresu,'RESULTAT')
+    n_modele=n_modele.strip()
+    if n_modele=='' :
+      if MODELE==None:
+        UTMESS('F','POST0_9',valk=nomresu)
+      else : n_modele=MODELE.nom
+
+  elif CHAM_GD != None:
+    mcORDR['TOUT_ORDRE']='OUI'
+    if MODELE==None:
+      UTMESS('F','POST0_10')
+    else : n_modele=MODELE.nom
+    # récupération de la grandeur du champ
+    n_cham=CHAM_GD.nom
+    catagd=aster.getvectjev("&CATA.GD.NOMGD")
+    desc=aster.getvectjev(string.ljust(n_cham,19)+'.DESC')
+    if desc!= None:
+      nomgd=catagd[desc[0]-1]
+    else:
+      celd=aster.getvectjev(string.ljust(n_cham,19)+'.CELD')
+      nomgd=catagd[celd[0]-1]
+    # détermination du type de résultat à créer
+    if   nomgd[:6] == 'TEMP_R' : TYPE_RESU='EVOL_THER'
+    elif nomgd[:6] == 'DEPL_R' : TYPE_RESU='EVOL_ELAS'
+    elif nomgd[:6] == 'EPSI_R' : TYPE_RESU='EVOL_ELAS'
+    elif nomgd[:6] == 'VAR2_R' : TYPE_RESU='EVOL_NOLI'
+    elif nomgd[:6] == 'VARI_R' : TYPE_RESU='EVOL_NOLI'
+    elif nomgd[:6] == 'SIEF_R' :
+       if   NOM_CHAM[:4]=='SIGM':TYPE_RESU='EVOL_ELAS'
+       elif NOM_CHAM[:4]=='SIEF':TYPE_RESU='EVOL_NOLI'
+    # création d'un concept résultat à partir du champ CHAM_GD
+    __resuch=CREA_RESU(OPERATION='AFFE',
+                       NOM_CHAM=NOM_CHAM, TYPE_RESU=TYPE_RESU,
+                       AFFE=_F(CHAM_GD=CHAM_GD,INST=0.),)
+    RESULTAT=__resuch
+  l_mailla=aster.getvectjev(n_modele.ljust(8)+'.MODELE    .LGRF')
+  n_mailla=string.strip(l_mailla[0])
+  # le maillage est-il 2D ou 3D ?
+  iret,dime,kbid = aster.dismoi('F','DIM_GEOM',n_mailla,'MAILLAGE')
+  collgrma=aster.getcolljev(n_mailla.ljust(8)+'.GROUPEMA')
+  typma=aster.getvectjev(n_mailla.ljust(8)+'.TYPMAIL')
+  connex=aster.getcolljev(n_mailla.ljust(8)+'.CONNEX')
+  ltyma =aster.getvectjev("&CATA.TM.NOMTM")
+
+  lignes=[]
+  groups=[]
+  arcs=[]
+  minidim=dime
+
+  for m in LIGN_COUPE :
+      if m['TYPE'] =='SEGMENT' :
+         lignes.append((m['COOR_ORIG'],m['COOR_EXTR'],m['NB_POINTS']))
+         minidim=min(minidim,len(m['COOR_ORIG']),len(m['COOR_EXTR']))
+         if minidim!=dime:
+           UTMESS('F','POST0_11')
+      elif m['TYPE'] =='ARC' :
+         minidim=min(minidim,len(m['COOR_ORIG']),len(m['CENTRE']))
+         if minidim!=dime:
+           UTMESS('F','POST0_11')
+         if dime==2:
+           arcs.append((m['COOR_ORIG'],m['CENTRE'],m['NB_POINTS'],m['ANGLE'],))
+         elif dime==3:
+           if str(m['DNOR'])=='None':
+              UTMESS('F','POST0_12')
+           arcs.append((m['COOR_ORIG'],m['CENTRE'],m['NB_POINTS'],m['ANGLE'],m['DNOR']))
+      elif m['TYPE']=='GROUP_NO':
+        ngrno=m['GROUP_NO'].ljust(8).upper()
+        collgrno=aster.getcolljev(n_mailla.ljust(8)+'.GROUPENO')
+        if ngrno not in collgrno.keys() :
+          UTMESS('F','POST0_13',valk=[ngrno,n_mailla])
+        grpn=collgrno[ngrno]
+        l_coor_group=[ngrno,]
+        for node in grpn:
+          l_coor_group.append(aster.getvectjev(n_mailla.ljust(8)+'.COORDO    .VALE',3*(node-1),3))
+        groups.append(l_coor_group)
+      elif m['TYPE']=='GROUP_MA':
+        ngrma=m['GROUP_MA'].ljust(8).upper()
+        if ngrma not in collgrma.keys() :
+          UTMESS('F','POST0_14',valk=[ngrma,n_mailla])
+        grpm=collgrma[ngrma]
+        for ma in grpm:
+          if ltyma[typma[ma-1]-1][:3] != 'SEG' :
+             nomma=aster.getvectjev(n_mailla.ljust(8)+'.NOMMAI')
+             UTMESS('F','POST0_15',valk=[ngrma,nomma[ma-1]])
+        __mailla=CREA_MAILLAGE(MAILLAGE= m['MAILLAGE'],)
+        __mailla=DEFI_GROUP( reuse=__mailla,MAILLAGE= __mailla,
+                            CREA_GROUP_NO=_F(OPTION='NOEUD_ORDO',NOM=str(m['GROUP_MA']),GROUP_MA=m['GROUP_MA']),)
+        collgrno=aster.getcolljev(__mailla.nom.ljust(8)+'.GROUPENO')
+        grpn=collgrno[str(m['GROUP_MA']).ljust(8)]
+        l_coor_group=[ngrma,]
+        for node in grpn:
+          l_coor_group.append(aster.getvectjev(n_mailla.ljust(8)+'.COORDO    .VALE',3*(node-1),3))
+        groups.append(l_coor_group)
+
+
+  if arcs!=[] and (lignes!=[] or groups!=[]) :
+    UTMESS('F','POST0_16')
+
+  # Création du maillage des NB_POINTS segments entre COOR_ORIG et COOR_EXTR
+  # ainsi que des segments reliant les noeuds issus des group_no demandés
+  # par appel au script python crea_mail_lig_coup
+  # le maillage est ensuite recopié dans l unité logique UNITE_MAILLAGE
+
+  resu_mail,arcgma,angles,nbno=crea_mail_lig_coup(dime,lignes,groups,arcs)
+  UL = UniteAster()
+  nomFichierSortie = UL.Nom(UNITE_MAILLAGE)
+  fproc=open(nomFichierSortie,'w')
+  fproc.write(resu_mail)
+  fproc.close()
+  UL.EtatInit(UNITE_MAILLAGE)
+
+  # Lecture du maillage de seg2 contenant toutes les lignes de coupe
+  __macou=LIRE_MAILLAGE(UNITE=UNITE_MAILLAGE,);
+
+  # distance min entre 2 points de la ligne de coupe (utile pour PROJ_CHAMP)
+  dmin=dist_min_deux_points(__macou)
+
+  motscles={}
+  iocc=1
+  motscles['CREA_GROUP_NO']=[]
+  for m in LIGN_COUPE :
+      if m['TYPE'] in ('GROUP_NO','GROUP_MA') :
+        motscles['CREA_GROUP_NO'].append(_F(GROUP_MA=m[m['TYPE']].ljust(8).upper(),) )
+      else :
+        motscles['CREA_GROUP_NO'].append(_F(GROUP_MA='LICOU'+str(iocc),) )
+        iocc=iocc+1
+
+  __macou=DEFI_GROUP( reuse =__macou , MAILLAGE=__macou , **motscles );
+
+  if AsType(RESULTAT).__name__ in ('evol_elas','evol_noli') :
+    __mocou=AFFE_MODELE(MAILLAGE=__macou,
+                        AFFE=_F(TOUT='OUI',
+                                PHENOMENE='MECANIQUE',
+                                MODELISATION='BARRE',),);
+  elif AsType(RESULTAT).__name__ in ('evol_ther',) :
+    __mocou=AFFE_MODELE(MAILLAGE=__macou,
+                        AFFE=_F(TOUT='OUI',
+                                PHENOMENE='THERMIQUE',
+                                MODELISATION='PLAN',),);
+
+  motscles={}
+  motscles['VIS_A_VIS']=[]
+  motscles[mcORDR.keys()[0]]=mcORDR.values()[0]
+  if args['VIS_A_VIS']!=None:
+    for v in args['VIS_A_VIS']:
+      if v['GROUP_MA_1']!=None:
+         motscles['VIS_A_VIS'].append(_F(GROUP_MA_1 = v['GROUP_MA_1'],TOUT_2='OUI'),)
+      elif v['MAILLE_1']!=None:
+         motscles['VIS_A_VIS'].append(_F(MAILLE_1 = v['MAILLE_1'],TOUT_2='OUI'),)
+
+  if n_modele in self.get_global_contexte().keys() : MODELE_1=self.get_global_contexte()[n_modele]
+  else                                             : MODELE_1=self.jdc.current_context[n_modele]
+
+
+  if NOM_CHAM[5:9]=='ELGA' : UTMESS('F','POST0_18',valk=[NOM_CHAM,])
+
+  __recou=PROJ_CHAMP(METHODE='ELEM',
+                     RESULTAT=RESULTAT,
+                     MODELE_1=MODELE_1,
+                     DISTANCE_MAX=m['DISTANCE_MAX'],
+                     MODELE_2=__mocou,
+                     TYPE_CHAM='NOEU',
+                     NOM_CHAM=NOM_CHAM, **motscles);
+
+  __remodr=__recou
+  icham=0
+  ioc2=0
+  mcACTION=[]
+  angtab=[]
+
+  if AsType(RESULTAT).__name__ in ('evol_elas','evol_noli') :
+
+   if  NOM_CHAM in ('DEPL','SIEF_ELNO_ELGA','SIGM_NOEU_DEPL','SIGM_NOEU_SIEF','SIGM_NOEU_ELGA','SIGM_NOEU_COQU','SIGM_ELNO_DEPL'):icham=1
+   iocc=0
+   for m in LIGN_COUPE :
+
+     iocc=iocc+1
+     motscles={}
+     motscles['OPERATION']=m['OPERATION']
+     if m['NOM_CMP']!=None:
+       motscles['NOM_CMP']=m['NOM_CMP']
+       if m['TRAC_NOR']!=None:
+          motscles['TRAC_NOR']=m['TRAC_NOR']
+       elif m['TRAC_DIR']!=None:
+          motscles['TRAC_DIR']=m['TRAC_DIR']
+          motscles['DIRECTION']=m['DIRECTION']
+     elif m['INVARIANT']!=None:
+       motscles['INVARIANT']=m['INVARIANT']
+     elif m['RESULTANTE']!=None:
+       motscles['RESULTANTE']=m['RESULTANTE']
+     elif m['ELEM_PRINCIPAUX']!=None:
+       motscles['ELEM_PRINCIPAUX']=m['ELEM_PRINCIPAUX']
+     else:
+       motscles['TOUT_CMP']='OUI'
+
+     # on définit le groupe de noeud pour post_releve_t
+     if m['TYPE'] in ('GROUP_NO','GROUP_MA'):
+         groupe=m[m['TYPE']].ljust(8).upper()
+         nomgrma=groupe
+     else:
+         ioc2=ioc2+1
+         groupe='LICOU'+str(ioc2)
+         nomgrma=' '
+         newgrp='LICOF'+str(ioc2)
+         crea_grp_matiere(self,groupe,newgrp,iocc,m,__remodr,NOM_CHAM,LIGN_COUPE,__macou)
+         groupe=newgrp
+
+     # on definit l'intitulé
+     if m['INTITULE'] !=None                    : intitl=m['INTITULE']
+     elif  m['TYPE'] in ('GROUP_NO','GROUP_MA') : intitl=groupe
+     else                                       : intitl='l.coupe'+str(ioc2)
+
+
+     # Expression des contraintes aux noeuds ou des déplacements dans le repere local
+     if m['REPERE'] != 'GLOBAL':
+
+        if  icham==1:
+
+          if m['REPERE']=='POLAIRE':
+            mcACTION.append( _F(INTITULE  = intitl,
+                            RESULTAT  = __remodr,
+                            REPERE    = m['REPERE'],
+                            GROUP_NO  = groupe,
+                            NOM_CHAM  = NOM_CHAM,**motscles ),)
+          else:
+            __remodr=crea_resu_local(self,dime,NOM_CHAM,m,__recou,__macou,nomgrma)
+            mcACTION.append( _F(INTITULE  = intitl,
+                            RESULTAT  = __remodr,
+                            GROUP_NO  = groupe,
+                            NOM_CHAM  = NOM_CHAM,**motscles ),)
+
+        else:
+          UTMESS('A','POST0_17',valk=[NOM_CHAM,m['REPERE']])
+          mcACTION.append( _F(INTITULE  = intitl,
+                            RESULTAT  = __recou,
+                            GROUP_NO  = groupe,
+                            NOM_CHAM  = NOM_CHAM,**motscles ),)
+
+     # Expression des contraintes aux noeuds ou des déplacements dans le repere global
+     else:
+
+          mcACTION.append( _F(INTITULE  = intitl,
+                            RESULTAT  = __recou,
+                            GROUP_NO  = groupe,
+                            NOM_CHAM  = NOM_CHAM,**motscles ),)
+
+
+  elif AsType(RESULTAT).__name__ in ('evol_ther',) :
+     iocc=0
+     for m in LIGN_COUPE :
+
+        iocc=iocc+1
+        motscles={}
+        motscles['OPERATION']=m['OPERATION']
+        if m['NOM_CMP']!=None:
+          motscles['NOM_CMP']=m['NOM_CMP']
+          if m['TRAC_NOR']!=None:
+             motscles['TRAC_NOR']=m['TRAC_NOR']
+          elif m['TRAC_DIR']!=None:
+             motscles['TRAC_DIR']=m['TRAC_DIR']
+             motscles['DIRECTION']=m['DIRECTION']
+        elif m['INVARIANT']!=None:
+          motscles['INVARIANT']=m['INVARIANT']
+        elif m['RESULTANTE']!=None:
+          motscles['RESULTANTE']=m['RESULTANTE']
+        elif m['ELEM_PRINCIPAUX']!=None:
+          motscles['ELEM_PRINCIPAUX']=m['ELEM_PRINCIPAUX']
+        else:
+          motscles['TOUT_CMP']='OUI'
+
+        if m['TYPE'] not in ('GROUP_NO','GROUP_MA') :
+          ioc2=ioc2+1
+          groupe='LICOU'+str(ioc2)
+          newgrp='LICOF'+str(ioc2)
+          crea_grp_matiere(self,groupe,newgrp,iocc,m,__remodr,NOM_CHAM,LIGN_COUPE,__macou)
+          groupe=newgrp
+          if m['INTITULE'] !=None : intitl=m['INTITULE']
+          else                    : intitl='l.coupe'+str(ioc2)
+        else:
+          groupe=m[m['TYPE']].ljust(8).upper()
+          if m['INTITULE'] !=None : intitl=m['INTITULE']
+          else                    : intitl=groupe
+        mcACTION.append( _F(INTITULE  = intitl,
+                            RESULTAT  = __recou,
+                            GROUP_NO  = groupe,
+                            NOM_CHAM  = NOM_CHAM, **motscles ),)
+
+  __tabitm=POST_RELEVE_T(ACTION=mcACTION,);
+
+  # on repasse par les tables python pour supprimer les paramètres inutiles
+  # NOEUD (car il est propre au maillage de la ligne) et RESU
+
+  self.DeclareOut('nomres',self.sd)
+  dictab=__tabitm.EXTR_TABLE()
+### Ajout de la colonne theta
+  if len(arcgma)>0:
+    coltab=[]
+    val =  dictab['ABSC_CURV'].values()['ABSC_CURV']
+    nbi = len(val) / nbno
+    nba = len(angles)
+    tmp =[]
+    for k in range(nba) :
+      for j in range(nbi) :
+        for i in range(len(angles[k])) :
+          tmp.append(angles[k][i])
+    dictab['ANGLE']=tmp
+
+###
+
+  if 'RESU' in dictab.para:
+    del dictab['RESU']
+  if 'NOEUD' in dictab.para:
+    del dictab['NOEUD']
+  dprod = dictab.dict_CREA_TABLE()
+
+  nomres=CREA_TABLE(**dprod)
+
+  RetablirAlarme('CALCULEL2_63')
+  RetablirAlarme('CALCULEL2_64')
+  RetablirAlarme('MODELISA5_53')
+  return ier
diff --git a/Aster/Cata/cataSTA10/Macro/macr_recal_ops.py b/Aster/Cata/cataSTA10/Macro/macr_recal_ops.py
new file mode 100644 (file)
index 0000000..8c9b7d6
--- /dev/null
@@ -0,0 +1,662 @@
+#@ MODIF macr_recal_ops Macro  DATE 26/05/2010   AUTEUR ASSIRE A.ASSIRE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+import os
+import sys
+import copy
+import math
+import glob
+
+import numpy as NP
+
+debug = False
+
+INFO = 1
+NOMPRO = 'MACR_RECAL'
+
+
+# --------------------------------------------------------------------------------------------------
+def Sortie(LIST_NOM_PARA, LIST_PARA, val, CALCUL_ASTER, Mess):
+   """ Sortie de la macro, on renvoie les parametres obtenus """
+
+   import Cata, aster, Macro
+   from Cata.cata import DEFI_LIST_REEL
+   from Accas import _F
+   from Macro import reca_message
+   from Macro import reca_algo
+   from Macro import reca_interp
+   from Macro import reca_utilitaires
+   from Macro import reca_calcul_aster
+   from Macro.reca_controles import gestion
+   from Utilitai.Utmess import UTMESS, MessageLog
+
+   UTMESS('I','RECAL0_39', valk=str(CALCUL_ASTER.evaluation_fonction), cc=Mess.get_filename())
+
+   LIST_NOM_PARA_ALPHA = [ para[0] for para in LIST_PARA ]
+   LIST_NOM_PARA_ALPHA.sort()
+   lival=[]
+   for i in LIST_NOM_PARA:
+      lival.append( val[ LIST_NOM_PARA_ALPHA.index(i) ] )
+   nomres = DEFI_LIST_REEL(VALE=lival)
+
+   return nomres
+
+
+# --------------------------------------------------------------------------------------------------
+def force_list(obj, typref=list):
+   """Retourne 'obj' sous forme d'une liste de 'typref'.
+   """
+   if type(obj) not in (list, tuple):
+      assert type(obj) == typref, '%s != %s' % (type(obj), typref)
+      obj = [obj,]
+   elif len(obj) > 0:
+      elt = obj[0]
+      if type(elt) != typref:
+         obj = [obj,]
+   return obj
+
+
+# --------------------------------------------------------------------------------------------------
+def macr_recal_ops(self,UNITE_ESCL, RESU_EXP, POIDS, LIST_PARA, RESU_CALC, ITER_MAXI, ITER_FONC_MAXI, RESI_GLOB_RELA,UNITE_RESU,PARA_DIFF_FINI, GRAPHIQUE, METHODE, INFO, **args ):
+   """ Macro commande realisant le recalage de modeles Aster """
+
+   # Initialisation du compteur d'erreurs
+   ier=0
+
+   import aster
+   import Macro
+   from Cata import cata
+   from Cata.cata import DEFI_LIST_REEL, CREA_TABLE, TEST_TABLE, INCLUDE
+   from Cata.cata import OPER, MACRO
+
+   from Macro import reca_message
+   from Macro import reca_algo
+   from Macro import reca_interp
+   from Macro import reca_utilitaires
+   from Macro import reca_calcul_aster
+   from Macro.reca_controles import gestion
+
+   # Gestion des Exceptions
+   prev_onFatalError = aster.onFatalError()
+   aster.onFatalError('EXCEPTION')
+
+   # La macro compte pour 1 dans l'execution des commandes
+   self.set_icmd(1)
+
+   # Concept en sortir
+   self.DeclareOut('nomres',self.sd)
+
+   # Declaration de toutes les commandes Aster
+   for k,v in cata.__dict__.items() :
+      if isinstance(v, (OPER, MACRO)):
+         self.current_context[k]= v
+   self.current_context['_F']=cata.__dict__['_F']
+
+   macr_recal(self, UNITE_ESCL, force_list(RESU_EXP, NP.ndarray), POIDS, force_list(LIST_PARA), force_list(RESU_CALC), 
+             ITER_MAXI, ITER_FONC_MAXI, RESI_GLOB_RELA,UNITE_RESU,PARA_DIFF_FINI,
+             GRAPHIQUE, METHODE, INFO, **args)
+
+   aster.onFatalError(prev_onFatalError)
+   return
+
+
+# --------------------------------------------------------------------------------------------------
+def macr_recal(self, UNITE_ESCL, RESU_EXP, POIDS, LIST_PARA, RESU_CALC, 
+               ITER_MAXI, ITER_FONC_MAXI, RESI_GLOB_RELA,UNITE_RESU,PARA_DIFF_FINI,
+               GRAPHIQUE, METHODE, INFO, **args ):
+
+   from Utilitai.Utmess import UTMESS
+   if os.environ.has_key('ASTER_ROOT'):  ASTER_ROOT = os.environ['ASTER_ROOT']
+   else:                                 ASTER_ROOT = os.path.join(aster.repout, '..')
+
+   try:
+       sys.path.append(os.path.join(ASTER_ROOT, 'ASTK', 'ASTK_SERV', 'lib'))
+       sys.path.append(os.path.join(ASTER_ROOT, 'lib', 'python%s.%s' % (sys.version_info[0], sys.version_info[1] ) , 'site-packages'))
+   except: pass
+   try:
+       from asrun.profil       import ASTER_PROFIL
+   except Exception, e:
+       print e
+       UTMESS('F','RECAL0_2')
+
+   import Macro, Utilitai
+   from Macro import reca_message
+   from Macro import reca_algo
+   from Macro import reca_interp
+   from Macro import reca_utilitaires
+   from Macro import reca_calcul_aster
+   from Macro import recal
+   from Macro.reca_controles import gestion
+   from Utilitai.optimize import fmin, line_search, line_search_BFGS, approx_fprime, approx_fhess_p, fminBFGS, fminNCG
+
+   import Macro
+   from Cata import cata
+   from Cata.cata import OPER, MACRO
+   from Accas import _F
+   #from Cata.cata import *
+   # Declaration de toutes les commandes Aster
+   import cata
+   for k,v in cata.__dict__.items() :
+      if isinstance(v, (OPER, MACRO)):
+         self.current_context[k]= v
+   self.current_context['_F']=cata.__dict__['_F']
+
+
+   #_____________________________________________
+   #
+   # RECUPERATION DU PROFIL DU CALCUL MAITRE
+   #_____________________________________________
+   # Lecture du fichier .export dans le repertoire temporaire d'execution
+   list_export = glob.glob('*.export')
+   if len(list_export) == 0: UTMESS('F','RECAL0_4')
+   elif len(list_export) >1: UTMESS('F','RECAL0_5')
+   prof = ASTER_PROFIL(list_export[0])
+
+
+   #_____________________________________________
+   #
+   # PARAMETRES
+   #_____________________________________________
+   TOLE_PARA       = args['TOLE_PARA']
+   TOLE_FONC       = args['TOLE_FONC']
+
+   # Pour les calculs esclaves
+   CALCUL_ESCLAVE  = {}.fromkeys( ['LANCEMENT', 'MODE', 'MEMOIRE', 'TEMPS', 'CLASSE', 'ACTUALISATION', 'memjeveux_esclave', 'mem_aster', 'NMAX_SIMULT', ] )
+
+   dESCLAVE=args['CALCUL_ESCLAVE'][0].cree_dict_valeurs(args['CALCUL_ESCLAVE'][0].mc_liste)
+   for i in dESCLAVE.keys():
+       if dESCLAVE[i]==None : del dESCLAVE[i]
+
+   CALCUL_ESCLAVE['LANCEMENT']                                            = dESCLAVE['LANCEMENT']
+   if dESCLAVE.has_key('MODE'):          CALCUL_ESCLAVE['MODE']           = dESCLAVE['MODE']
+   else:                                 CALCUL_ESCLAVE['MODE']           = prof['mode'][0].upper()
+   if dESCLAVE.has_key('MEMOIRE'):       CALCUL_ESCLAVE['MEMOIRE']        = dESCLAVE['MEMOIRE']
+   else:                                 CALCUL_ESCLAVE['MEMOIRE']        = prof['memjob'][0]
+   if dESCLAVE.has_key('TEMPS'):         CALCUL_ESCLAVE['TEMPS']          = dESCLAVE['TEMPS']
+   else:                                 CALCUL_ESCLAVE['TEMPS']          = prof['tps_job'][0]
+   if dESCLAVE.has_key('CLASSE'):        CALCUL_ESCLAVE['CLASSE']         = dESCLAVE['CLASSE']
+   if dESCLAVE.has_key('ACTUALISATION'): CALCUL_ESCLAVE['ACTUALISATION']  = dESCLAVE['ACTUALISATION']
+
+   LANCEMENT = CALCUL_ESCLAVE['LANCEMENT']
+
+   # Parametres de l'algorithme genetique
+   if args.has_key('NB_PARENTS'):        NB_PARENTS      = args['NB_PARENTS']
+   if args.has_key('NB_FILS'):           NB_FILS         = args['NB_FILS']
+   if args.has_key('ECART_TYPE'):        ECART_TYPE      = args['ECART_TYPE']
+   if args.has_key('ITER_ALGO_GENE'):    ITER_ALGO_GENE  = args['ITER_ALGO_GENE']
+   if args.has_key('RESI_ALGO_GENE'):    RESI_ALGO_GENE  = args['RESI_ALGO_GENE']
+   
+   if args.has_key('GRAINE'):
+       UTMESS('A','RECAL0_43')
+       GRAINE = args['GRAINE']
+   else:
+       GRAINE = None
+
+   # Parametres concernant le recalage d'un modele dynamique
+   if args.has_key('DYNAMIQUE'):         DYNAMIQUE = args['DYNAMIQUE']
+   else:                                 DYNAMIQUE = None
+
+
+   #_____________________________________________
+   #
+   # VERIFICATION PREALABLE SUR GNUPLOT
+   #_____________________________________________
+
+   if GRAPHIQUE:
+     dGRAPHIQUE=GRAPHIQUE[0].cree_dict_valeurs(GRAPHIQUE[0].mc_liste)
+     if dGRAPHIQUE.has_key('FORMAT') and dGRAPHIQUE['FORMAT'] == 'GNUPLOT':
+       # On essaie d'importer Gnuplot -> PAS DE GRAPHIQUE
+       try:
+          import Gnuplot
+       except ImportError:
+          GRAPHIQUE == None
+          UTMESS('A','RECAL0_3')
+
+
+   #_____________________________________________
+   #
+   # VERIFICATION PREALABLE SUR MEM_ASTER
+   #_____________________________________________
+
+   if LANCEMENT == 'DISTRIBUTION':
+
+       # Recuperation des parametres mem_aster et memjeveux
+       try:
+           mem_aster = float(prof['mem_aster'][0])
+       except ValueError:
+           mem_aster = 100.0
+       memjeveux = prof.args.get('memjeveux')
+
+       if mem_aster in (0., 100.):
+           if CALCUL_ESCLAVE['MODE']=='INTERACTIF': UTMESS('A','RECAL0_6')
+           mem_aster = 0.
+       if not memjeveux:
+           UTMESS('F','RECAL0_7')
+    
+       try:
+           if mem_aster == 0.:
+               memjeveux_esclave = float(memjeveux)
+           else:
+               memjeveux_esclave = float(memjeveux) / float(mem_aster) * 100. - float(memjeveux)
+       except:
+           UTMESS('F','RECAL0_8')
+    
+       CALCUL_ESCLAVE['memjeveux_esclave'] = memjeveux_esclave
+       #CALCUL_ESCLAVE['mem_aster'] = mem_aster
+       UTMESS('I','RECAL0_9', valr=memjeveux_esclave)
+
+
+       if CALCUL_ESCLAVE['MODE']=='BATCH':
+           if CALCUL_ESCLAVE['CLASSE']: classe = CALCUL_ESCLAVE['CLASSE']
+           else:                        classe = ' -auto- '
+           UTMESS('I','RECAL0_69', valk=( str(CALCUL_ESCLAVE['TEMPS']), str(CALCUL_ESCLAVE['MEMOIRE']), classe ) )
+
+
+   #_____________________________________________
+   #
+   # INITIALISATIONS
+   #_____________________________________________
+
+   # Stocke l'ordre initial des parametres pour restituer dans le bon ordre les valeurs en sortie de la macro
+   LIST_NOM_PARA = [ para[0] for para in LIST_PARA ]
+
+   # On classe les parametres
+   LIST_PARA.sort()
+
+   # Pour les algorithmes d'optimize.py, on a des limitations
+   if METHODE in ['FMIN', 'FMINBFGS', 'FMINNCG']:
+       # On ne peut tracer qu'a la derniere iteration
+       if GRAPHIQUE:
+           if GRAPHIQUE['AFFICHAGE']=='TOUTE_ITERATION': UTMESS('I', 'RECAL0_10', valk=METHODE)
+       # Les bornes ne sont pas gerees
+       UTMESS('I','RECAL0_11', valk=METHODE)
+
+
+   #_______________________________________________
+   #
+   # GESTION DE L'OPTION FACULTATIVE POUR LES POIDS
+   #_______________________________________________
+
+   if( POIDS == None): POIDS = NP.ones(len(RESU_EXP))
+
+
+   #_____________________________________________
+   #
+   # GESTION DES ERREURS DE SYNTAXE
+   #_____________________________________________
+
+   texte_erreur, texte_alarme = gestion(UNITE_ESCL,LIST_PARA,RESU_CALC,RESU_EXP,POIDS,GRAPHIQUE,UNITE_RESU,METHODE)
+   if (texte_erreur != ""): UTMESS('F', "RECAL0_12", valk=texte_erreur)
+   if (texte_alarme != ""): UTMESS('A', "RECAL0_12", valk=texte_alarme)
+
+
+   #_____________________________________________
+   #
+   # INITIALISATIONS
+   #_____________________________________________
+
+   iter = 0
+   restant, temps_iter =0., 0.
+   restant, temps_iter, err = reca_utilitaires.temps_CPU(restant, temps_iter)
+   para, val, borne_inf, borne_sup = reca_utilitaires.transforme_list_Num(LIST_PARA, RESU_EXP)
+   val_init = copy.copy(val)
+
+   # Fonctionnelle en sortie (vectorielle ou scalaire)
+   if METHODE in ['FMIN', 'FMINBFGS', 'FMINNCG', 'GENETIQUE', 'HYBRIDE']: vector_output = False
+   else:                                                                  vector_output = True
+
+   # OBJET "CALCUL"
+   CALCUL_ASTER = reca_calcul_aster.CALCUL_ASTER(
+       jdc             = self, 
+       METHODE         = METHODE,
+       UNITE_ESCL      = UNITE_ESCL,
+       UNITE_RESU      = UNITE_RESU, 
+       para            = para,
+       reponses        = RESU_CALC,
+       PARA_DIFF_FINI  = PARA_DIFF_FINI,
+       vector_output   = vector_output,
+       DYNAMIQUE       = DYNAMIQUE,
+       #LANCEMENT       = LANCEMENT,
+       CALCUL_ESCLAVE  = CALCUL_ESCLAVE,
+       INFO            = INFO,
+                                                )
+
+   CALCUL_ASTER.RESU_EXP  = RESU_EXP
+   CALCUL_ASTER.RESU_CALC = RESU_CALC
+   CALCUL_ASTER.LIST_PARA = LIST_PARA
+
+
+   # Instances des classes pour le calcul de l'erreur et le dimensionnemnt/adim
+   Dim                    = reca_algo.Dimension(copy.copy(val_init))
+   CALCUL_ASTER.Simul     = reca_interp.Sim_exp(RESU_EXP,POIDS)
+   CALCUL_ASTER.Dim       = Dim
+   CALCUL_ASTER.reca_algo = reca_algo
+
+   if (GRAPHIQUE): CALCUL_ASTER.UNITE_GRAPHIQUE = GRAPHIQUE['UNITE']
+
+   # Dans le cas de la dynamique avec appariement manual des MAC, on passe la flag correspondant a True
+   if METHODE ==  'HYBRIDE':
+      if (DYNAMIQUE!=None and DYNAMIQUE['APPARIEMENT_MANUEL']=='OUI'): CALCUL_ASTER.graph_mac=True
+
+   # Instance de la classe gérant l'affichage des resultats du calcul de l'optimisation
+   Mess = reca_message.Message(para,RESU_EXP,copy.copy(val_init),UNITE_RESU) 
+   Mess.initialise()
+
+#    # Calcul de F
+#    erreur = CALCUL_ASTER.calcul_F(val)
+#    # Calcul de F et G
+#    erreur, residu, A_nodim, A = CALCUL_ASTER.calcul_FG(val)
+#    sys.exit()
+
+
+   # Mode INCLUDE : on doit executer les commandes PRE ici
+   if LANCEMENT=='INCLUSION':
+       UNITE_INCLUDE=UNITE_ESCL
+       recal.make_include_files(UNITE_INCLUDE=UNITE_INCLUDE, calcul=RESU_CALC, parametres=LIST_PARA)
+       pre = "fort.%s.pre" % UNITE_INCLUDE
+       #if os.path.isfile(pre): recal.execfile(filename)
+
+
+
+   #-------------------------------------------------------------------------------
+   # Pas d'optimisation (juste une evaluation de la fonctionnelle pour le point courant)
+   #-------------------------------------------------------------------------------
+   #
+   if ITER_MAXI<=0:
+      erreur = CALCUL_ASTER.calcul_F(val)
+      residu = 0
+      iter   = 0
+      L_F    = CALCUL_ASTER.Lcalc[0]
+      CALCUL_ASTER.evaluation_fonction = 1
+
+
+   #-------------------------------------------------------------------------------
+   # Algorithme FMIN (pas d'adimensionnement car n'utilise pas de gradient)
+   #-------------------------------------------------------------------------------
+   #
+   elif (METHODE == 'FMIN'):
+       UTMESS('I','RECAL0_13', valk=METHODE, cc=Mess.get_filename())
+       val, fval, warnflag = fmin(CALCUL_ASTER.calcul_F, val, maxiter=ITER_MAXI, maxfun=ITER_FONC_MAXI, fulloutput=1)
+
+       iter_fonc = CALCUL_ASTER.evaluation_fonction
+       if warnflag==1: UTMESS('I','RECAL0_54', cc=Mess.get_filename())
+       if warnflag==2: UTMESS('I','RECAL0_55', cc=Mess.get_filename())
+       Mess.affiche_etat_final_convergence(iter,ITER_MAXI,iter_fonc,ITER_FONC_MAXI, RESI_GLOB_RELA,residu=0,Act=[])
+       Mess.affiche_fonctionnelle(fval)
+       Mess.affiche_valeurs(val)
+       nomres = Sortie(LIST_NOM_PARA, LIST_PARA, val, CALCUL_ASTER, Mess)
+       return
+
+
+   #-------------------------------------------------------------------------------
+   # Algorithme GENETIQUE (pas d'adimensionnement car n'utilise pas de gradient)
+   #-------------------------------------------------------------------------------
+   #
+   elif (METHODE == 'GENETIQUE'):
+      UTMESS('I','RECAL0_13', valk=METHODE, cc=Mess.get_filename())
+      from Macro.reca_evol import evolutivo
+      nb_parents  = NB_PARENTS
+      nb_fils     = NB_FILS
+      nb_iter     = ITER_ALGO_GENE
+      sigma       = ECART_TYPE
+      err_min     = RESI_ALGO_GENE
+      graine      = GRAINE
+      val = evolutivo(CALCUL_ASTER,val,nb_iter,err_min,nb_parents,nb_fils,sigma, borne_inf, borne_sup,graine)
+      nomres = Sortie(LIST_NOM_PARA, LIST_PARA,val, CALCUL_ASTER, Mess)
+      return
+
+
+   #-------------------------------------------------------------------------------
+   # Pour tous les autres methodes, on adimensionne
+   #-------------------------------------------------------------------------------
+   #
+   else:
+
+       #-------------------------------------------------------------------------------
+       # Si METHODE=='HYBRIDE', on lance d'abord l'algo genetique et ensuite celui de
+       # Levenberg-Marquardt qui demarre avec le jeu de parametres issu de genetique
+       if (METHODE == 'HYBRIDE'):
+          from Macro.reca_evol import evolutivo
+          nb_parents    = NB_PARENTS
+          nb_fils       = NB_FILS
+          nb_iter       = ITER_ALGO_GENE
+          sigma         = ECART_TYPE
+          err_min       = RESI_ALGO_GENE
+          graine        = GRAINE
+          val_gene = evolutivo(CALCUL_ASTER,val,nb_iter,err_min,nb_parents,nb_fils,sigma, borne_inf, borne_sup,graine)
+          val = copy.copy(val_gene)
+          val_init = copy.copy(val)
+          # AA ? CALCUL_ASTER.graph_mac = True
+
+
+       # Calcul de F et G
+       erreur, residu, A_nodim, A = CALCUL_ASTER.calcul_FG(val)
+       E = recal.CALC_ERROR(experience=RESU_EXP, X0=val, calcul=RESU_CALC, poids=POIDS)
+       E.CalcError(CALCUL_ASTER.Lcalc)
+       E.CalcSensibilityMatrix(CALCUL_ASTER.Lcalc, val, dX=None, pas=PARA_DIFF_FINI)
+
+       L_init         = E.L_init
+       L_J_init       = E.L_J_init
+       J_init         = E.J_init
+       J              = E.J
+       A              = E.A
+       A_nodim        = E.A_nodim
+       erreur         = E.erreur
+       residu         = E.residu
+       gradient_init  = E.gradient_init
+
+       # Calcul du lambda_init
+       l = reca_algo.lambda_init(NP.dot(NP.transpose(A),A))
+
+
+       Mess.affiche_result_iter(iter,J,val,residu,NP.array([]))
+
+       CALCUL_ASTER.L_init         = L_init
+       CALCUL_ASTER.L_J_init       = L_J_init
+       CALCUL_ASTER.J_init         = J_init
+       CALCUL_ASTER.A_init         = A
+       CALCUL_ASTER.gradient_init  = gradient_init
+       CALCUL_ASTER.residu_init    = residu
+
+       # On teste un manque de temps CPU
+       restant,temps_iter,err=reca_utilitaires.temps_CPU(restant,temps_iter)
+       if (err==1):
+          ier=ier+1
+          return ier
+
+
+       #-------------------------------------------------------------------------------
+       # Methode FMINBFGS et FMINNCG
+       #-------------------------------------------------------------------------------
+       #
+       if METHODE in ['FMINBFGS', 'FMINNCG']:
+
+          UTMESS('I','RECAL0_13', valk=METHODE, cc=Mess.get_filename())
+
+          # Derivees
+          f      = CALCUL_ASTER.calcul_F2
+          fprime = CALCUL_ASTER.calcul_G
+          warnflag=0
+
+          if args.has_key('GRADIENT') and args['GRADIENT'] == 'NON_CALCULE': 
+              f      = CALCUL_ASTER.calcul_F
+              fprime = None
+
+          if fprime: UTMESS('I','RECAL0_14')
+          else:      UTMESS('I','RECAL0_15')
+
+          # Lancement de l'optimisation
+          if METHODE == 'FMINBFGS':
+              val, fval, func_calls, grad_calls, warnflag = fminBFGS(f=f, x0=val, fprime=fprime, maxiter=ITER_MAXI, avegtol=RESI_GLOB_RELA, fulloutput=1)
+
+          elif METHODE == 'FMINNCG':
+              val, fval, func_calls, grad_calls, hcalls, warnflag = fminNCG(f=f, x0=val, fprime=fprime, fhess_p=None, fhess=None, maxiter=ITER_MAXI, avextol=RESI_GLOB_RELA, fulloutput=1)
+
+          # Affichage des messages de sortie
+          iter_fonc = CALCUL_ASTER.evaluation_fonction
+          if warnflag: UTMESS('I','RECAL0_55', cc=Mess.get_filename())
+          Mess.affiche_etat_final_convergence(iter,ITER_MAXI,iter_fonc,ITER_FONC_MAXI, RESI_GLOB_RELA, residu=0, Act=[])
+          Mess.affiche_fonctionnelle(fval)
+          Mess.affiche_valeurs(val)
+
+          # Permet d'avoir un diagnostic NOOK pour le job
+          if warnflag: iter=ITER_MAXI
+
+          L_F = CALCUL_ASTER.L
+          residu = fval
+
+
+       #-------------------------------------------------------------------------------
+       # Methode Levenberg-Marquardt
+       #-------------------------------------------------------------------------------
+       elif METHODE in  ['LEVENBERG', 'HYBRIDE']: 
+
+             #___________________________________________________________
+             #
+             # BOUCLE PRINCIPALE DE L'ALGORITHME de Levenberg-Marquardt
+             #___________________________________________________________
+
+             UTMESS('I','RECAL0_13', valk=METHODE, cc=Mess.get_filename())
+             epsilon = 10.*RESI_GLOB_RELA
+             while(iter<ITER_MAXI):
+                iter = iter +1
+                new_val, s, l, Act = reca_algo.Levenberg_bornes(val, Dim, val_init, borne_inf, borne_sup, A, erreur, l, UNITE_RESU) 
+
+                # On teste la variation sur les parametres
+                ecart_para = reca_algo.calcul_norme2( NP.array(new_val) - NP.array(val) )
+                if debug: print "AA0/ecart para=%s\nAA0/oldpara/newpara=%s %s" % (ecart_para, val, new_val)
+                if ecart_para < TOLE_PARA:
+                    UTMESS('I','RECAL0_51', valr=ecart_para, cc=Mess.get_filename())
+                    break
+
+                # Calculs au point courant val et toutes les perturbations par differences finies (N+1 calculs distribues ou inclus)
+                CALCUL_ASTER.calcul_FG(new_val)
+
+                # Calcul de l'erreur et de la matrice des sensibilites
+                old_J = copy.copy(J)
+                E.CalcError(CALCUL_ASTER.Lcalc)
+                new_J = E.J
+
+                l = reca_algo.actualise_lambda(l,Dim.adim(val),Dim.adim(new_val),A,erreur,new_J,J)
+                E.CalcSensibilityMatrix(CALCUL_ASTER.Lcalc, new_val, dX=None, pas=PARA_DIFF_FINI)
+
+                L_F            = CALCUL_ASTER.Lcalc[0]
+                A              = E.A_nodim
+                val            = copy.copy(new_val)
+                erreur         = copy.copy(E.erreur)
+                J              = E.J
+
+                if debug:
+                   print "AA0/L_F=", L_F
+                   print "AA0/l=", l
+                   print "AA0/erreur=", erreur
+                   print "AA0/J=", J
+                   print "AA0/A_nodim=", A
+
+                # Calcul de la matrice des sensibilites
+                A = Dim.adim_sensi(A)
+
+                # Calcul du residu
+                residu = reca_algo.test_convergence(gradient_init,erreur,A,s)
+
+                if debug:
+                   print "AA0/residu=", residu
+                   print "AA0/new_val=", new_val
+                   print "AA0/A=", A
+
+                # On calcule la variation sur la fonctionnelle
+                ecart_fonc = abs( new_J - old_J )
+
+                # Affichage iteration
+                Mess.affiche_result_iter(iter,J,val,residu,Act, ecart_para, ecart_fonc)
+
+                # On teste la variation sur la fonctionnelle
+                if ecart_fonc < TOLE_FONC:
+                    UTMESS('I','RECAL0_52', valr=ecart_fonc, cc=Mess.get_filename())
+                    break
+
+                if (GRAPHIQUE):
+                    if GRAPHIQUE['AFFICHAGE']=='TOUTE_ITERATION':
+                        GRAPHE_UL_OUT=GRAPHIQUE['UNITE']
+                        pilote=GRAPHIQUE['PILOTE']
+                        reca_utilitaires.graphique(GRAPHIQUE['FORMAT'], L_F, RESU_EXP, RESU_CALC, iter, GRAPHE_UL_OUT, pilote)
+
+                # On teste le residu
+                if residu <= RESI_GLOB_RELA:
+                    UTMESS('I','RECAL0_50', valr=residu, cc=Mess.get_filename())
+                    break
+
+                # On teste un manque de temps CPU
+                restant, temps_iter, err = reca_utilitaires.temps_CPU(restant, temps_iter)
+                if (err==1):
+                   UTMESS('I','RECAL0_53', cc=Mess.get_filename())
+                   break
+
+             #_____________________________________________
+             #
+             # FIN DES ITERATIONS
+             # CONVERGENCE OU ECHEC
+             #_____________________________________________
+             iter_fonc = CALCUL_ASTER.evaluation_fonction
+             Mess.affiche_etat_final_convergence(iter, ITER_MAXI, iter_fonc, ITER_FONC_MAXI, RESI_GLOB_RELA, residu, Act)
+             reca_algo.calcul_etat_final(para, A, iter, ITER_MAXI, RESI_GLOB_RELA, residu, Mess)
+
+
+       #-------------------------------------------------------------------------------
+
+
+   #_____________________________________________
+   #
+   # FIN DES ITERATIONS POUR TOUS LES ALGOS
+   #_____________________________________________
+
+   if (GRAPHIQUE):
+      fichier = None
+      # Pour les algorithmes d'optimize.py, on ne peut tracer qu'a la derniere iteration
+      if (GRAPHIQUE['AFFICHAGE']=='ITERATION_FINALE') or (METHODE in ['FMIN', 'FMINBFGS', 'FMINNCG']) or (ITER_MAXI<=0):
+         UTMESS('I','RECAL0_17')
+         GRAPHE_UL_OUT = GRAPHIQUE['UNITE']
+         pilote = GRAPHIQUE['PILOTE']
+         reca_utilitaires.graphique(GRAPHIQUE['FORMAT'],L_F,RESU_EXP,RESU_CALC,iter,GRAPHE_UL_OUT,pilote,fichier)
+
+   # Si pas de convergence alors diagnostic NOOK_TEST_RESU
+   if (residu > RESI_GLOB_RELA) and  (ecart_fonc > TOLE_FONC) and (ecart_para < TOLE_PARA):
+      from Cata.cata import CREA_TABLE, TEST_TABLE
+      _tmp = []
+      _tmp.append( { 'PARA': 'ITER_MAXI', 'LISTE_R': 0.0, } )
+      motscle = {'LISTE': _tmp }
+
+      TBL = CREA_TABLE(**motscle);
+
+      TEST_TABLE(TABLE=TBL,
+                 TYPE_TEST='SOMM',
+                 NOM_PARA='ITER_MAXI',
+                 VALE=1.,);
+
+   #_____________________________________________
+   #
+   # CREATIONS DE LA LISTE DE REELS CONTENANT 
+   # LES VALEURS DES PARAMETRES A CONVERGENCE
+   #_____________________________________________
+
+   nomres = Sortie(LIST_NOM_PARA, LIST_PARA, val, CALCUL_ASTER, Mess)
+   return 
+
diff --git a/Aster/Cata/cataSTA10/Macro/macr_spectre_ops.py b/Aster/Cata/cataSTA10/Macro/macr_spectre_ops.py
new file mode 100644 (file)
index 0000000..44fb67d
--- /dev/null
@@ -0,0 +1,362 @@
+#@ MODIF macr_spectre_ops Macro  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from Accas import _F
+import string
+
+try:
+   import aster
+   from Utilitai.Utmess import  UTMESS
+except:
+   pass
+
+def macr_spectre_ops(self,MAILLAGE,PLANCHER,NOM_CHAM,CALCUL,RESU,IMPRESSION=None,
+                     FREQ=None,LIST_FREQ=None,LIST_INST=None,AMOR_SPEC=None,**args):
+  """
+     Ecriture de la macro MACR_SPECTRE
+  """
+  ier=0
+  import string
+  from types import ListType,TupleType,StringType
+  EnumType=(ListType,TupleType)
+  
+  ### On importe les definitions des commandes a utiliser dans la macro
+  RECU_FONCTION    = self.get_cmd('RECU_FONCTION')
+  CALC_FONCTION    = self.get_cmd('CALC_FONCTION')
+  IMPR_FONCTION    = self.get_cmd('IMPR_FONCTION')
+  CREA_TABLE       = self.get_cmd('CREA_TABLE')
+
+  ### Comptage commandes + déclaration concept sortant
+  self.set_icmd(1)
+  self.DeclareOut('tab',self.sd)
+  macro='MACR_SPECTRE'
+
+  ### construction de la liste des noeuds à traiter
+  planch_nodes={}
+  dic_gpno=aster.getcolljev(MAILLAGE.nom.ljust(8)+".GROUPENO")
+  l_nodes =aster.getvectjev(MAILLAGE.nom.ljust(8)+".NOMNOE")
+  l_plancher=[]
+  for plancher in PLANCHER :
+      liste_no=[]
+      if plancher['NOEUD']!=None :
+         if type(plancher['NOEUD'])==StringType :
+                 liste_no.append(plancher['NOEUD'])
+         else :
+                 for noeud in plancher['NOEUD'] :
+                     liste_no.append(plancher['NOEUD'])
+      if plancher['GROUP_NO']!=None :
+         if type(plancher['GROUP_NO'])==StringType :
+                noms_no =[string.strip(l_nodes[n-1]) \
+                          for n in dic_gpno[plancher['GROUP_NO'].ljust(8)]]
+                liste_no=liste_no+noms_no
+         else :
+             for group_no in plancher['GROUP_NO'] :
+                noms_no =[string.strip(l_nodes[n-1]) \
+                          for n in dic_gpno[group_no.ljust(8)]]
+                liste_no=liste_no+noms_no
+      planch_nodes[plancher['NOM']]=liste_no
+      l_plancher.append(plancher['NOM'])
+
+  if AMOR_SPEC!=None and type(AMOR_SPEC) not in EnumType :
+     AMOR_SPEC=(AMOR_SPEC,)
+
+  if NOM_CHAM=='ACCE' : dico_glob={}
+  if NOM_CHAM=='DEPL' : dico_glob={'DX_max'   :[] ,
+                                   'DY_max'   :[] ,
+                                   'DZ_max'   :[] ,
+                                   'DH_max'   :[] , }
+
+  ############################################################
+  ### boucle 1 sur les planchers
+  for plancher in l_plancher :
+
+      if NOM_CHAM=='ACCE' :
+         __moy_x=[None]*len(planch_nodes[plancher])
+         __moy_y=[None]*len(planch_nodes[plancher])
+         __moy_z=[None]*len(planch_nodes[plancher])
+      if NOM_CHAM=='DEPL' :
+         dicDmax={}
+  ############################################################
+  ### boucle 2 sur les noeuds du plancher
+      indexn=0
+      for node in planch_nodes[plancher] :
+
+  ############################################################
+  ### boucle 3 sur les directions (X,Y,Z)
+          for dd in ('X','Y','Z') :
+
+  ############################################################
+  ### boucle 4 sur les résultats
+              l_fonc=[]
+              for resu in RESU :
+                  ### Récupération des fonctions
+                  motscles={}
+                  if resu['RESU_GENE']!=None :
+                     if CALCUL=='ABSOLU' :
+                        UTMESS('F','SPECTRAL0_8')
+                     motscles['RESU_GENE'] = resu['RESU_GENE']
+
+                  if resu['RESULTAT' ]!=None :
+                    motscles['RESULTAT']  = resu['RESULTAT']
+                  
+                  __spo=RECU_FONCTION(NOM_CHAM     = NOM_CHAM,
+                                      TOUT_ORDRE   = 'OUI',
+                                      NOM_CMP      = 'D'+dd,
+                                      INTERPOL     = 'LIN',
+                                      PROL_GAUCHE  = 'CONSTANT',
+                                      PROL_DROITE  = 'CONSTANT',
+                                      NOEUD        = node , **motscles )
+
+                  if NOM_CHAM=='ACCE' :
+                     ### Accelerations relatives
+                     if CALCUL=='RELATIF' :
+                        ### Combinaison avec fonction d acceleration
+                        motscles={}
+                        if LIST_INST!=None : motscles['LIST_PARA']=LIST_INST
+                        __spo=CALC_FONCTION(COMB=(_F(FONCTION=__spo,
+                                                     COEF= 1.0      ),
+                                                  _F(FONCTION=resu['ACCE_'+dd],
+                                                     COEF= 1.0)              ),**motscles )
+
+                     ### Calcul des spectres d'oscillateur
+                     motscles={}
+                     if FREQ     !=None : motscles['FREQ']     =FREQ
+                     if LIST_FREQ!=None : motscles['LIST_FREQ']=LIST_FREQ
+                     __spo=CALC_FONCTION(
+                            SPEC_OSCI=_F(FONCTION    = __spo,
+                                         AMOR_REDUIT = AMOR_SPEC,
+                                         NORME       = args['NORME'],
+                                         **motscles                  ) )
+                     l_fonc.append(__spo)
+
+                  if NOM_CHAM=='DEPL' :
+                     if CALCUL=='ABSOLU' :
+                        ### On retranche les deplacements d entrainement
+                        motscles={}
+                        if LIST_INST!=None : motscles['LIST_PARA']=LIST_INST
+                        __spo=CALC_FONCTION(COMB=(_F(FONCTION=__spo,
+                                                     COEF= 1.0      ),
+                                                  _F(FONCTION=resu['DEPL_'+dd],
+                                                     COEF= -1.0)              ),**motscles )
+
+                     l_fonc.append(__spo)
+
+  ### fin boucle 4 sur les résultats
+  ############################################################
+
+  ############################################################
+  ### calcul de la moyenne sur les resultats à noeud et direction fixes
+              nbresu=len(RESU)
+              if NOM_CHAM=='ACCE' :
+                 mcfCMBx=[]
+                 mcfCMBy=[]
+                 mcfCMBz=[]
+                 for spo in l_fonc :
+                     mcfCMBx.append(_F(FONCTION=spo,
+                                       COEF=1./float(nbresu),))
+                     mcfCMBy.append(_F(FONCTION=spo,
+                                       COEF=1./float(nbresu),))
+                     mcfCMBz.append(_F(FONCTION=spo,
+                                       COEF=1./float(nbresu),))
+                 motscles={}
+                 if LIST_FREQ!=None : motscles['LIST_PARA']=LIST_FREQ
+                 if dd=='X' : __moy_x[indexn]=CALC_FONCTION(COMB=mcfCMBx,**motscles)
+                 if dd=='Y' : __moy_y[indexn]=CALC_FONCTION(COMB=mcfCMBy,**motscles)
+                 if dd=='Z' : __moy_z[indexn]=CALC_FONCTION(COMB=mcfCMBz,**motscles)
+
+              if NOM_CHAM=='DEPL' :
+                 moy = 0.
+                 for spo in l_fonc :
+                     fspo = spo.convert()
+                     aspo = fspo.abs()
+                     vmax  = aspo.extreme()['max']
+                     moy   = moy + vmax[-1][-1]
+                 dicDmax[(node,dd)]=moy/nbresu
+
+  ### fin boucle 3 sur les directions
+  ############################################################
+
+          ################################
+          ### impressions en chaque noeud
+          if NOM_CHAM=='ACCE' and IMPRESSION!=None :
+            if IMPRESSION['TOUT']=='OUI' :
+              __moyxa=[None]*len(AMOR_SPEC)
+              __moyya=[None]*len(AMOR_SPEC)
+              __moyza=[None]*len(AMOR_SPEC)
+              for i in range(len(AMOR_SPEC)) : 
+                 amor = AMOR_SPEC[i]
+                 __moyxa[i]=RECU_FONCTION(NAPPE          = __moy_x[indexn],
+                                          VALE_PARA_FONC = AMOR_SPEC[i]   )
+                 __moyya[i]=RECU_FONCTION(NAPPE          = __moy_y[indexn],
+                                          VALE_PARA_FONC = AMOR_SPEC[i]   )
+                 __moyza[i]=RECU_FONCTION(NAPPE          = __moy_z[indexn],
+                                          VALE_PARA_FONC = AMOR_SPEC[i]   )
+              motscles={}
+              dI = IMPRESSION[0].cree_dict_valeurs(IMPRESSION[0].mc_liste)
+              if dI.has_key('PILOTE')            : motscles['PILOTE'   ]=IMPRESSION['PILOTE']
+              if IMPRESSION['FORMAT']!='TABLEAU' : motscles['ECHELLE_X']='LOG'
+              if IMPRESSION['TRI']=='AMOR_SPEC' :
+                 for i in range(len(AMOR_SPEC)) : 
+                    TITRE   ='Spectres / Plancher = '+plancher+\
+                                       ' / amor='+str(AMOR_SPEC[i])+\
+                                       ' / noeud='+node
+                    IMPR_FONCTION(
+                      FORMAT=IMPRESSION['FORMAT'],
+                      UNITE =IMPRESSION['UNITE' ],
+                      COURBE=( _F(FONCTION=__moyxa[i], LEGENDE ='X',),
+                               _F(FONCTION=__moyya[i], LEGENDE ='Y',),
+                               _F(FONCTION=__moyza[i], LEGENDE ='Z',),),
+                      TITRE   =TITRE,
+                      **motscles)
+              elif IMPRESSION['TRI']=='DIRECTION' :
+                 lfonc=[]
+                 for dd in ('X','Y','Z') :
+                    TITRE   ='Spectres / Plancher = '+plancher+\
+                                       ' / direction = '+dd+\
+                                       ' / noeud = '+node
+                    if dd=='X' : l_fonc=[_F(FONCTION=__moyxa[i], LEGENDE ='amor='+str(AMOR_SPEC[i]),)\
+                                         for i in range(len(AMOR_SPEC))          ]
+                    if dd=='Y' : l_fonc=[_F(FONCTION=__moyya[i], LEGENDE ='amor='+str(AMOR_SPEC[i]),)\
+                                         for i in range(len(AMOR_SPEC))          ]
+                    if dd=='Z' : l_fonc=[_F(FONCTION=__moyza[i], LEGENDE ='amor='+str(AMOR_SPEC[i]),)\
+                                         for i in range(len(AMOR_SPEC))          ]
+                    IMPR_FONCTION(
+                      FORMAT=IMPRESSION['FORMAT'],
+                      UNITE =IMPRESSION['UNITE' ],
+                      COURBE=l_fonc,
+                      TITRE   =TITRE,
+                      **motscles)
+
+          ### increment de l'indice de noeud
+          indexn=indexn+1
+
+  ### fin boucle 2 sur les noeuds du plancher
+  ############################################################
+
+  ############################################################
+  ### Calcul des enveloppes des spectres ou des deplacements max
+      if NOM_CHAM=='ACCE' :
+         mcslx=[]
+         mcsly=[]
+         mcslz=[]
+         indexn=0
+         for node in planch_nodes[plancher] :
+             mcslx.append(__moy_x[indexn])
+             mcsly.append(__moy_y[indexn])
+             mcslz.append(__moy_z[indexn])
+             indexn=indexn+1
+         __snx=CALC_FONCTION(ENVELOPPE=_F(FONCTION=mcslx))
+         __sny=CALC_FONCTION(ENVELOPPE=_F(FONCTION=mcsly))
+         __snz=CALC_FONCTION(ENVELOPPE=_F(FONCTION=mcslz))
+         __snh=CALC_FONCTION(ENVELOPPE=_F(FONCTION=(__snx,__sny)))
+      if NOM_CHAM=='DEPL' :
+         DRmX = max([dicDmax[(node,'X')] for node in planch_nodes[plancher]])
+         DRmY = max([dicDmax[(node,'Y')] for node in planch_nodes[plancher]])
+         DRmZ = max([dicDmax[(node,'Z')] for node in planch_nodes[plancher]])
+         DRmH = max([DRmX,DRmY])
+
+  ############################################################
+  ### Renseignement de la table finale des résultats
+      if   NOM_CHAM=='ACCE' :
+           nbind=len(AMOR_SPEC)
+           for i in range(nbind) :  
+              dico_glob['FREQ'                    ]=__snx.Valeurs()[1][i][0]
+              dico_glob['eX_%d_%s' % (i, plancher)]=__snx.Valeurs()[1][i][1]
+              dico_glob['eY_%d_%s' % (i, plancher)]=__sny.Valeurs()[1][i][1]
+              dico_glob['eZ_%d_%s' % (i, plancher)]=__snz.Valeurs()[1][i][1]
+              dico_glob['eH_%d_%s' % (i, plancher)]=__snh.Valeurs()[1][i][1]
+      elif NOM_CHAM=='DEPL' :
+              dico_glob['DX_max'].append(DRmX)
+              dico_glob['DY_max'].append(DRmY)
+              dico_glob['DZ_max'].append(DRmZ)
+              dico_glob['DH_max'].append(DRmH)
+
+  ############################################################
+  ### Impression des courbes
+      if   NOM_CHAM=='ACCE' and IMPRESSION!=None :
+        motscles={}
+        dI = IMPRESSION[0].cree_dict_valeurs(IMPRESSION[0].mc_liste)
+        if dI.has_key('PILOTE') : motscles['PILOTE']=IMPRESSION['PILOTE']
+        if IMPRESSION['FORMAT']!='TABLEAU' : motscles['ECHELLE_X']='LOG'
+        __snxa=[None]*len(AMOR_SPEC)
+        __snya=[None]*len(AMOR_SPEC)
+        __snza=[None]*len(AMOR_SPEC)
+        __snha=[None]*len(AMOR_SPEC)
+        for i in range(nbind) : 
+           __snxa[i]=RECU_FONCTION(NAPPE          = __snx,
+                                   VALE_PARA_FONC = AMOR_SPEC[i], )
+           __snya[i]=RECU_FONCTION(NAPPE          = __sny,
+                                   VALE_PARA_FONC = AMOR_SPEC[i], )
+           __snza[i]=RECU_FONCTION(NAPPE          = __snz,
+                                   VALE_PARA_FONC = AMOR_SPEC[i], )
+           __snha[i]=RECU_FONCTION(NAPPE          = __snh,
+                                   VALE_PARA_FONC = AMOR_SPEC[i], )
+        if IMPRESSION['TRI']=='AMOR_SPEC' :
+           for i in range(nbind) : 
+              TITRE   ='Spectres moyens / Plancher = '+plancher+' / amor='+str(AMOR_SPEC[i])
+              IMPR_FONCTION(
+                 FORMAT=IMPRESSION['FORMAT'],
+                 UNITE =IMPRESSION['UNITE' ],
+                 COURBE=( _F(FONCTION=__snxa[i], LEGENDE ='X',),
+                          _F(FONCTION=__snya[i], LEGENDE ='Y',),
+                          _F(FONCTION=__snza[i], LEGENDE ='Z',),
+                          _F(FONCTION=__snha[i], LEGENDE ='H',),),
+                 TITRE   =TITRE,
+                 **motscles
+                 )
+        elif IMPRESSION['TRI']=='DIRECTION' :
+              for dd in ('X','Y','Z','H'):
+                TITRE   ='Spectres moyens / Plancher = '+plancher+' / direction = '+dd
+                l_fonc  =[]
+                if dd=='X' : l_fonc=[_F(FONCTION=__snxa[i], LEGENDE ='amor='+str(AMOR_SPEC[i]),)\
+                                     for i in range(len(AMOR_SPEC))          ]
+                if dd=='Y' : l_fonc=[_F(FONCTION=__snya[i], LEGENDE ='amor='+str(AMOR_SPEC[i]),)\
+                                     for i in range(len(AMOR_SPEC))          ]
+                if dd=='Z' : l_fonc=[_F(FONCTION=__snza[i], LEGENDE ='amor='+str(AMOR_SPEC[i]),)\
+                                     for i in range(len(AMOR_SPEC))          ]
+                if dd=='H' : l_fonc=[_F(FONCTION=__snha[i], LEGENDE ='amor='+str(AMOR_SPEC[i]),)\
+                                     for i in range(len(AMOR_SPEC))          ]
+                IMPR_FONCTION(
+                   FORMAT=IMPRESSION['FORMAT'],
+                   UNITE =IMPRESSION['UNITE' ],
+                   COURBE=l_fonc,
+                   TITRE =TITRE,
+                   **motscles
+                   )
+
+  ### fin boucle 1 sur les planchers
+  ############################################################
+
+  ############################################################
+  ### Renseignement de la table finale des résultats
+  lListe=[]
+  if   NOM_CHAM=='DEPL' :
+      lListe.append(_F(LISTE_K=l_plancher,PARA='PLANCHER'))
+      titre = 'Calcul des spectres enveloppes'
+  if   NOM_CHAM=='ACCE' :
+      titre = ['Calcul des spectres enveloppes par planchers pour les amortissements numérotés :',]
+      b=[' %d : %g ' % (i,AMOR_SPEC[i]) for i in range(len(AMOR_SPEC)) ]
+      titre.append('/'.join(b))
+  lkeys=dico_glob.keys()
+  lkeys.sort()
+  for key in lkeys :
+      lListe.append(_F(LISTE_R=dico_glob[key],PARA=key))
+  tab = CREA_TABLE(LISTE=lListe,TITRE=titre)
+  return ier
diff --git a/Aster/Cata/cataSTA10/Macro/macro_elas_mult_ops.py b/Aster/Cata/cataSTA10/Macro/macro_elas_mult_ops.py
new file mode 100644 (file)
index 0000000..6e05cae
--- /dev/null
@@ -0,0 +1,256 @@
+#@ MODIF macro_elas_mult_ops Macro  DATE 23/03/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+
+
+def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
+                        CHAR_MECA_GLOBAL,LIAISON_DISCRET,
+                        CAS_CHARGE,SOLVEUR,**args):
+  """
+     Ecriture de la macro MACRO_ELAS_MULT
+  """
+  ier=0
+  import types
+  from Accas import _F
+  from Utilitai.Utmess     import UTMESS
+
+  # On met le mot cle NUME_DDL dans une variable locale pour le proteger
+  numeddl=NUME_DDL
+  # On importe les definitions des commandes a utiliser dans la macro
+  CALC_MATR_ELEM  =self.get_cmd('CALC_MATR_ELEM')
+  NUME_DDL        =self.get_cmd('NUME_DDL')
+  ASSE_MATRICE    =self.get_cmd('ASSE_MATRICE')
+  FACTORISER      =self.get_cmd('FACTORISER')
+  CALC_VECT_ELEM  =self.get_cmd('CALC_VECT_ELEM')
+  ASSE_VECTEUR    =self.get_cmd('ASSE_VECTEUR')
+  RESOUDRE        =self.get_cmd('RESOUDRE')
+  CREA_RESU       =self.get_cmd('CREA_RESU')
+  CALC_ELEM       =self.get_cmd('CALC_ELEM')
+  CALC_NO         =self.get_cmd('CALC_NO')
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  # Le concept sortant (de type mult_elas ou fourier_elas) est nommé
+  # 'nomres' dans le contexte de la macro
+
+  self.DeclareOut('nomres',self.sd)
+
+  ielas = 0
+  ifour = 0
+  for m in CAS_CHARGE:
+     if m['NOM_CAS']:
+        ielas=1                 # mot clé NOM_CAS      présent sous CAS_CHARGE
+        tyresu = 'MULT_ELAS'
+     else:
+        ifour=1                 # mot clé MODE_FOURIER présent sous CAS_CHARGE
+        tyresu = 'FOURIER_ELAS'
+  if ielas==1 and ifour==1:
+     UTMESS('F','ELASMULT0_1')
+
+  if (numeddl in self.sdprods) or (numeddl==None):
+    # Si le concept numeddl est dans self.sdprods ou n est pas nommé
+    # il doit etre  produit par la macro
+    # il faudra donc appeler la commande NUME_DDL
+    lnume = 1
+  else:
+    lnume = 0
+
+  if ielas==1 :
+     motscles={}
+     if   CHAR_MECA_GLOBAL: motscles['CHARGE']    =CHAR_MECA_GLOBAL
+     if   CHAM_MATER      : motscles['CHAM_MATER']=CHAM_MATER
+     if   CARA_ELEM       : motscles['CARA_ELEM'] =CARA_ELEM
+     __nomrig=CALC_MATR_ELEM(OPTION='RIGI_MECA',MODELE=MODELE,**motscles)
+
+     if lnume:
+       # On peut passer des mots cles egaux a None. Ils sont ignores
+       motscles={}
+       if SOLVEUR:
+          motscles['METHODE'] =SOLVEUR['METHODE']
+          motscles['RENUM']   =SOLVEUR['RENUM']
+       else:
+          motscles['METHODE'] ='MULT_FRONT'
+          motscles['RENUM']   ='METIS'
+       if numeddl!=None:
+          self.DeclareOut('num',numeddl)
+          num=NUME_DDL(MATR_RIGI=__nomrig,**motscles)
+       else:
+          _num=NUME_DDL(MATR_RIGI=__nomrig,**motscles)
+          num=_num
+     else:
+       num=numeddl
+
+     __nomras=ASSE_MATRICE(MATR_ELEM=__nomrig,NUME_DDL=num)
+
+     __nomraf=FACTORISER(MATR_ASSE=__nomras,NPREC=SOLVEUR['NPREC'],STOP_SINGULIER=SOLVEUR['STOP_SINGULIER'])
+
+#####################################################################
+# boucle sur les items de CAS_CHARGE
+
+  nomchn=[]
+  lcharg=[]
+  iocc=0
+  for m in CAS_CHARGE:
+     iocc=iocc+1
+
+     # calcul de lcharg : liste des listes de char_meca (mots clé CHAR_MECA et CHAR_MECA_GLOBAL)
+     xx1=m['CHAR_MECA']
+     if type(xx1) != type((1,)) : xx1=(xx1,)
+     xx2=CHAR_MECA_GLOBAL
+     if type(xx2) != type((1,)) : xx2=(xx2,)
+     lchar1=[]
+     for chargt in (xx1+xx2) :
+        if chargt : lchar1.append(chargt)
+     lcharg.append(lchar1)
+     assert len(lchar1) > 0
+
+
+
+     if ifour:
+        motscles={}
+        if   CHAR_MECA_GLOBAL: motscles['CHARGE']       =CHAR_MECA_GLOBAL
+        if   CHAM_MATER      : motscles['CHAM_MATER']   =CHAM_MATER
+        if   CARA_ELEM       : motscles['CARA_ELEM']    =CARA_ELEM
+        motscles['MODE_FOURIER'] =m['MODE_FOURIER']
+        __nomrig=CALC_MATR_ELEM(OPTION='RIGI_MECA',MODELE=MODELE,**motscles)
+
+        if lnume:
+           _num=NUME_DDL(MATR_RIGI=__nomrig,METHODE=SOLVEUR['METHODE'],RENUM=SOLVEUR['RENUM'])
+           num=_num
+           lnume=0
+
+        __nomras=ASSE_MATRICE(MATR_ELEM=__nomrig,NUME_DDL=num)
+
+        __nomraf=FACTORISER(MATR_ASSE=__nomras,NPREC=SOLVEUR['NPREC'],STOP_SINGULIER=SOLVEUR['STOP_SINGULIER'])
+
+
+     if m['VECT_ASSE']==None :
+        motscles={}
+        if   CHAM_MATER      : motscles['CHAM_MATER']   =CHAM_MATER
+        if   CARA_ELEM       : motscles['CARA_ELEM']    =CARA_ELEM
+        if   ifour           : motscles['MODE_FOURIER'] =m['MODE_FOURIER']
+        if   len(lchar1) > 0 : motscles['CHARGE']       =lchar1
+        __nomvel=CALC_VECT_ELEM(OPTION='CHAR_MECA',**motscles)
+        __nomasv=ASSE_VECTEUR(VECT_ELEM=__nomvel,NUME_DDL=num)
+     else :
+        __nomasv=m['VECT_ASSE']
+
+
+     __nomchn=RESOUDRE(MATR=__nomraf,CHAM_NO=__nomasv,TITRE=m['SOUS_TITRE'])
+     nomchn.append(__nomchn)
+
+# fin de la boucle sur les items de CAS_CHARGE
+#####################################################################
+
+  motscles={}
+  iocc=0
+  motscle2={}
+  if CHAM_MATER : motscle2['CHAM_MATER']=CHAM_MATER
+  if CARA_ELEM  : motscle2['CARA_ELEM']=CARA_ELEM
+  if ielas :
+     motscles['AFFE']=[]
+     for m in CAS_CHARGE:
+        if len(lcharg[iocc]) > 0 :
+           motscles['AFFE'].append(_F(MODELE=MODELE,
+                                      CHAM_GD=nomchn[iocc],
+                                      NOM_CAS=m['NOM_CAS'],
+                                      CHARGE=lcharg[iocc],
+                                      **motscle2) )
+        else :
+           motscles['AFFE'].append(_F(MODELE=MODELE,
+                                      CHAM_GD=nomchn[iocc],
+                                      NOM_CAS=m['NOM_CAS'],
+                                      **motscle2) )
+        iocc=iocc+1
+  else :
+     motscles['AFFE']=[]
+     for m in CAS_CHARGE:
+        if len(lcharg[iocc]) > 0 :
+           motscles['AFFE'].append(_F(MODELE=MODELE,
+                                      CHAM_GD=nomchn[iocc],
+                                      NUME_MODE=m['MODE_FOURIER'],
+                                      TYPE_MODE=m['TYPE_MODE'],
+                                      CHARGE=lcharg[iocc],
+                                      **motscle2) )
+        else :
+           motscles['AFFE'].append(_F(MODELE=MODELE,
+                                      CHAM_GD=nomchn[iocc],
+                                      NUME_MODE=m['MODE_FOURIER'],
+                                      TYPE_MODE=m['TYPE_MODE'],
+                                      **motscle2) )
+        iocc=iocc+1
+
+  if self.reuse:
+    motscles['reuse'] = self.reuse
+  nomres=CREA_RESU(OPERATION='AFFE',TYPE_RESU=tyresu,NOM_CHAM='DEPL',**motscles)
+
+#####################################################################
+# boucle sur les items de CAS_CHARGE pour CALC_ELEM et CALC_NO
+
+  iocc=0
+  for m in CAS_CHARGE:
+     iocc=iocc+1
+
+     if m['OPTION']:
+        nbel=0
+        nbno=0
+        liste_el=[]
+        liste_no=[]
+        if type(m['OPTION'])==types.StringType:
+           liste_option=(m['OPTION'],)
+        else :
+           liste_option=m['OPTION']
+        for option in liste_option :
+           if option in (     'FORC_NODA','REAC_NODA',
+                              'EPSI_NOEU_DEPL','SIGM_NOEU_DEPL','EFGE_NOEU_DEPL',
+                              'EQUI_NOEU_SIGM','EQUI_NOEU_EPSI',):
+              nbno=nbno+1
+              liste_no.append(option)
+           else:
+              nbel=nbel+1
+              liste_el.append(option)
+
+        if nbel:
+           motscles={}
+           if ielas:
+              motscles['NOM_CAS']=m['NOM_CAS']
+           else:
+              motscles['NUME_MODE']=m['MODE_FOURIER']
+           CALC_ELEM(reuse=nomres,
+                     RESULTAT=nomres,
+                     REPE_COQUE=_F(NIVE_COUCHE=m['NIVE_COUCHE'],
+                                   NUME_COUCHE=m['NUME_COUCHE'],),
+                     OPTION=tuple(liste_el),
+                     **motscles)
+        if nbno:
+           motscles={}
+           if ielas:
+              motscles['NOM_CAS']=m['NOM_CAS']
+           else:
+              motscles['NUME_MODE']=m['MODE_FOURIER']
+           CALC_NO(reuse=nomres,
+                   RESULTAT=nomres,
+                   OPTION=tuple(liste_no),
+                     **motscles)
+
+# fin de la boucle sur les items de CAS_CHARGE
+#####################################################################
+  return ier
+
diff --git a/Aster/Cata/cataSTA10/Macro/macro_expans_ops.py b/Aster/Cata/cataSTA10/Macro/macro_expans_ops.py
new file mode 100644 (file)
index 0000000..44f99c6
--- /dev/null
@@ -0,0 +1,191 @@
+#@ MODIF macro_expans_ops Macro  DATE 28/01/2010   AUTEUR BODEL C.BODEL 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+
+def macro_expans_ops( self,
+                      MODELE_CALCUL,
+                      MODELE_MESURE,
+                      NUME_DDL,
+                      RESU_NX,
+                      RESU_EX,
+                      RESU_ET,
+                      RESU_RD,
+                      MODES_NUM=None,
+                      MODES_EXP=None,
+                      RESOLUTION=None,
+                      *args
+                     ):
+    """!macro MACRO_EXPANS """
+    from Accas import _F
+    from Cata.cata import CO, mode_meca, dyna_harmo
+    from Utilitai.Utmess import UTMESS
+    from types import ListType, TupleType
+    ier = 0
+
+    import aster
+    EXTR_MODE = self.get_cmd('EXTR_MODE')
+    PROJ_MESU_MODAL = self.get_cmd('PROJ_MESU_MODAL')
+    REST_GENE_PHYS = self.get_cmd('REST_GENE_PHYS')
+    PROJ_CHAMP = self.get_cmd('PROJ_CHAMP')
+    NORM_MODE = self.get_cmd('NORM_MODE')
+
+
+    # La macro compte pour 1 dans la numerotation des commandes
+    self.set_icmd(1)
+
+    is_nume_num = is_nume_exp = 0
+    if MODELE_CALCUL['NUME_MODE'] or  MODELE_CALCUL['NUME_ORDRE']:
+        # on cree un resultat RESU_NX par extraction de NUME_ORDREs
+        is_nume_num = 1
+    else:
+        if RESU_NX:
+            UTMESS('A','MEIDEE0_6',valk=['MODELE_MESURE','RESU_EX'])
+    if MODELE_MESURE['NUME_MODE'] or  MODELE_MESURE['NUME_ORDRE']:
+        # On cree un RESU_EX par extraction de NUME_ORDREs
+        is_nume_exp = 1
+    else:
+        if RESU_EX: UTMESS('A','MEIDEE0_6',valk=['MODELE_CALCUL','RESU_NX'])
+
+    RESU_NUM = MODELE_CALCUL['BASE']
+    RESU_EXP = MODELE_MESURE['MESURE']
+
+    MOD_CALCUL = MODELE_CALCUL['MODELE']
+    MOD_MESURE = MODELE_MESURE['MODELE']
+
+    NOM_CHAM = MODELE_MESURE['NOM_CHAM']
+
+    # Extraction des modes numériques
+    # -------------------------------
+    if not is_nume_num:
+        resu_nx = RESU_NUM
+    else:
+        if RESU_NX:
+            self.DeclareOut( "RESU_NX", RESU_NX )
+        mfact = {'MODE':RESU_NUM}
+        if MODELE_CALCUL['NUME_MODE']:
+            mfact.update({'NUME_MODE':MODELE_CALCUL['NUME_MODE']})
+        elif MODELE_CALCUL['NUME_ORDRE']:
+            mfact.update({'NUME_ORDRE':MODELE_CALCUL['NUME_ORDRE']})
+
+        RESU_NX = EXTR_MODE( FILTRE_MODE = mfact )
+        resu_nx = RESU_NX
+
+
+    # Extraction des modes expérimentaux
+    # ----------------------------------
+    if not is_nume_exp:
+        resu_ex = RESU_EXP
+    else:
+        if RESU_EX:
+            self.DeclareOut( "RESU_EX", RESU_EX )
+        mfact = {'MODE':RESU_EXP}
+        if MODELE_MESURE['NUME_MODE']:
+            mfact.update({'NUME_MODE':MODELE_MESURE['NUME_MODE']})
+        elif MODELE_MESURE['NUME_ORDRE']:
+            mfact.update({'NUME_ORDRE':MODELE_MESURE['NUME_ORDRE']})
+
+        RESU_EX = EXTR_MODE( FILTRE_MODE = mfact )
+        resu_ex = RESU_EX
+
+
+
+    # Projection des modes experimentaux - on passe le mot-cle
+    # RESOLUTION directement à PROJ_MESU_MODAL
+    # --------------------------------------------------------
+
+    # Mot-clé facteur de résolution
+    for m in RESOLUTION:
+        if m['METHODE'] == 'SVD':
+            mfact={'METHODE':'SVD','EPS':m['EPS']}
+            if m['REGUL'] != 'NON':
+                mfact.update({'REGUL':m['REGUL']})
+                if m['COEF_PONDER']:
+                    mfact.update({'COEF_PONDER':m['COEF_PONDER']})
+                if m['COEF_PONDER_F']:
+                    mfact.update({'COEF_PONDER_F':m['COEF_PONDER_F']})
+        elif m['METHODE'] == 'LU':
+            mfact = {'METHODE':'LU'}
+
+    # Paramètres à garder : si on étend des mode_meca, on conserve les
+    # freq propres, amortissements réduits, et masses généralisées. Pour
+    # les dyna_harmo, on conserve les fréquences uniquement
+    if isinstance(RESU_EXP, mode_meca):
+        paras = ('FREQ','AMOR_REDUIT','MASS_GENE',)
+    elif isinstance(RESU_EXP, dyna_harmo):
+        paras = ('FREQ')
+    else:
+        paras = None
+        #"LE MODELE MEDURE DOIT ETRE UN CONCEPT DE TYPE DYNA_HARMO OU MODE_MECA")
+        UTMESS('A','MEIDEE0_1')
+
+
+    try:
+        __PROJ = PROJ_MESU_MODAL(MODELE_CALCUL = _F( BASE=resu_nx,
+                                                     MODELE=MOD_CALCUL,
+                                                   ),
+                                 MODELE_MESURE = _F( MESURE=resu_ex,
+                                                     MODELE=MOD_MESURE,
+                                                     NOM_CHAM=NOM_CHAM,
+                                                   ),
+                                 RESOLUTION=mfact,
+                                 NOM_PARA=paras,
+                                 );
+    except Exception, err:
+        raise Exception, err
+
+    # Phase de reconstruction des donnees mesurees sur le maillage
+    # numerique
+    # ------------------------------------------------------------
+    if RESU_ET:
+        self.DeclareOut( "RESU_ET", RESU_ET )
+    RESU_ET = REST_GENE_PHYS( RESU_GENE  = __PROJ,
+                              TOUT_ORDRE  = 'OUI',
+                              NOM_CHAM    = NOM_CHAM);
+
+
+
+    # Restriction des modes mesures etendus sur le maillage capteur
+    # -------------------------------------------------------------
+    if RESU_RD:
+        self.DeclareOut( "RESU_RD", RESU_RD )
+
+    nume=None
+    if resu_ex.REFD.get():
+        tmp = resu_ex.REFD.get()[3]
+        if tmp.strip() :
+            nume = self.get_concept(tmp)
+    elif NUME_DDL:
+        nume = NUME_DDL
+    if not nume :
+        UTMESS('A','MEIDEE0_5')
+    RESU_RD = PROJ_CHAMP( METHODE    = 'ELEM',
+                          RESULTAT   = RESU_ET,
+                          MODELE_1   = MOD_CALCUL,
+                          MODELE_2   = MOD_MESURE,
+                          NOM_CHAM   = NOM_CHAM,
+                          TOUT_ORDRE = 'OUI',
+                          NUME_DDL   = nume,
+                          VIS_A_VIS  =_F( TOUT_1='OUI',
+                                          TOUT_2='OUI',),
+                          NOM_PARA   = paras,
+                        );
+
+
+    return ier
diff --git a/Aster/Cata/cataSTA10/Macro/macro_matr_ajou_ops.py b/Aster/Cata/cataSTA10/Macro/macro_matr_ajou_ops.py
new file mode 100644 (file)
index 0000000..aa8b0d6
--- /dev/null
@@ -0,0 +1,256 @@
+#@ MODIF macro_matr_ajou_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+
+def macro_matr_ajou_ops(self,MAILLAGE,GROUP_MA_FLUIDE,GROUP_MA_INTERF,MODELISATION,MODE_MECA,DEPL_IMPO,
+                             NUME_DDL_GENE,MODELE_GENE,MATR_MASS_AJOU,MATR_AMOR_AJOU,MATR_RIGI_AJOU,
+                             NOEUD_DOUBLE,FLUIDE,DDL_IMPO,DIST_REFE,SOLVEUR,INFO,AVEC_MODE_STAT,
+                             MODE_STAT,MONO_APPUI,
+                             FORC_AJOU,ECOULEMENT,**args):
+  """
+     Ecriture de la macro MACRO_MATR_AJOU
+  """
+  from Accas import _F
+  import types
+  import aster
+  from Utilitai.Utmess     import  UTMESS
+  ier=0
+  
+  # On importe les definitions des commandes a utiliser dans la macro
+  DEFI_MATERIAU      =self.get_cmd('DEFI_MATERIAU')
+  AFFE_MATERIAU      =self.get_cmd('AFFE_MATERIAU')
+  AFFE_MODELE        =self.get_cmd('AFFE_MODELE')
+  AFFE_CHAR_THER     =self.get_cmd('AFFE_CHAR_THER')
+  CALC_MATR_AJOU     =self.get_cmd('CALC_MATR_AJOU')
+  THER_LINEAIRE      =self.get_cmd('THER_LINEAIRE')
+  CALC_FORC_AJOU     =self.get_cmd('CALC_FORC_AJOU')
+
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+  if len(FLUIDE)==1 :
+     message=         '<I> <MACRO_MATR_AJOU> tout le domaine fluide specifie dans GROUP_MA_INTERF et GROUP_MA_FLUIDE \n'
+     message=message+ '                      sera affecte par la masse volumique RHO = '+str(FLUIDE['RHO'])+' \n'
+     aster.affiche('MESSAGE',message)
+     if FLUIDE['GROUP_MA']!=None :
+       message=         '<I> <MACRO_MATR_AJOU> cas fluide simple : le group_ma dans lequel vous affectez la masse \n'
+       message=message+ 'volumique RHO doit etre la reunion de GROUP_MA_INTERF et GROUP_MA_FLUIDE. \n'
+       aster.affiche('MESSAGE',message)
+  else :
+     for flu in FLUIDE :
+         if flu['GROUP_MA']==None :
+            UTMESS('F','MATRICE0_1')
+
+  IOCFLU=len(FLUIDE)
+
+#  ---------------------------------------------------------------
+#  definition du materiau fluide par caracteristique
+#  thermique equivalente
+
+# CAS FLUIDE SIMPLE
+  if IOCFLU==1 :
+     __NOMMAT=DEFI_MATERIAU( THER = _F( LAMBDA = 1.0,
+                                        RHO_CP = FLUIDE[0]['RHO']))
+     __NOMCMA=AFFE_MATERIAU( MAILLAGE = MAILLAGE,
+                             AFFE     = _F( GROUP_MA = (GROUP_MA_FLUIDE,GROUP_MA_INTERF),
+                                            MATER    =  __NOMMAT),    )
+
+#  ---------------------------------------------------------------
+#  cas fluides multiples
+  else :
+     affmat=[]
+     for flu in FLUIDE:
+        __NOMMAT=DEFI_MATERIAU( THER = _F( LAMBDA = 1.0,
+                                           RHO_CP = flu['RHO']))
+        mfact=_F(GROUP_MA=flu['GROUP_MA'],MATER=__NOMMAT)
+        affmat.append(mfact)
+
+     __NOMCMA=AFFE_MATERIAU( MAILLAGE = MAILLAGE,
+                             AFFE     = affmat  )
+
+#  ---------------------------------------------------------------
+#  commande AFFE_MODELE modele fluide
+  __NOMFLU=AFFE_MODELE( MAILLAGE = MAILLAGE,
+                        AFFE     = _F( GROUP_MA     = (GROUP_MA_FLUIDE,GROUP_MA_INTERF),
+                                       MODELISATION = MODELISATION,
+                                       PHENOMENE    = 'THERMIQUE'    ), )
+
+#  ---------------------------------------------------------------
+#  commande AFFE_MODELE modele interface
+  __NOMINT=AFFE_MODELE( MAILLAGE = MAILLAGE,
+                        AFFE     = _F( GROUP_MA     = GROUP_MA_INTERF,
+                                       MODELISATION = MODELISATION,
+                                       PHENOMENE    = 'THERMIQUE'    ), )
+
+#  ---------------------------------------------------------------
+#  commande AFFE_CHAR_THER condition de pression imposee
+#  en un point ou un groupe du fluide
+  affimp=[]
+  nflui=0
+  for DDL in DDL_IMPO :
+     if DDL['PRES_FLUIDE']!=None :
+        nflui=nflui+1
+        if DDL['NOEUD']   !=None : mfact=_F(NOEUD   =DDL['NOEUD'],   TEMP=DDL['PRES_FLUIDE'])
+        if DDL['GROUP_NO']!=None : mfact=_F(GROUP_NO=DDL['GROUP_NO'],TEMP=DDL['PRES_FLUIDE'])
+        affimp.append(mfact)
+  if nflui==0:
+     UTMESS('F','MATRICE0_2')
+
+  __CHARGE=AFFE_CHAR_THER( MODELE    = __NOMFLU,
+                           TEMP_IMPO = affimp )
+
+#  ---------------------------------------------------------------
+#  calcul des masses, rigidites et amortissements ajoutes en theorie
+#  potentielle
+#  commande CALC_MATR_AJOU, calcul de la masse ajoutee
+
+  if MATR_MASS_AJOU!=None :
+     self.DeclareOut('MASSAJ',MATR_MASS_AJOU)
+     solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
+     mostcles={}
+     if   NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
+     if   INFO         !=None : mostcles['INFO']          =INFO
+     if   MODE_MECA    !=None : mostcles['MODE_MECA']     =MODE_MECA
+     elif DEPL_IMPO    !=None : mostcles['CHAM_NO']       =DEPL_IMPO
+     elif MODELE_GENE  !=None :
+                                mostcles['MODELE_GENE']   =MODELE_GENE
+                                mostcles['AVEC_MODE_STAT']=AVEC_MODE_STAT
+                                mostcles['DIST_REFE']     =DIST_REFE
+     if   NOEUD_DOUBLE !=None : mostcles['NOEUD_DOUBLE']  =NOEUD_DOUBLE
+
+     MASSAJ = CALC_MATR_AJOU(MODELE_FLUIDE    = __NOMFLU,
+                             MODELE_INTERFACE = __NOMINT,
+                             CHARGE           = __CHARGE,
+                             CHAM_MATER       = __NOMCMA,
+                             OPTION           = 'MASS_AJOU',
+                             SOLVEUR          = solveur,
+                             **mostcles)
+
+#  ---------------------------------------------------------------
+#  calcul de l amortissement ajoute
+  if (MATR_AMOR_AJOU!=None ) or (MATR_RIGI_AJOU!=None ):
+
+#  ---------------------------------------------------------------
+#  on definit un nouveau modele fluide pour calculer
+#  le potentiel stationnaire - AFFE_MODELE
+     grma=[GROUP_MA_FLUIDE,]
+     if ECOULEMENT!=None :
+        grma.append(ECOULEMENT['GROUP_MA_1'])
+        grma.append(ECOULEMENT['GROUP_MA_2'])
+     __NOFLUI=AFFE_MODELE( MAILLAGE = MAILLAGE,
+                           AFFE     = _F( GROUP_MA     = grma,
+                                          MODELISATION = MODELISATION,
+                                          PHENOMENE    = 'THERMIQUE'    ), )
+     affimp=[]
+     for DDL in DDL_IMPO :
+        if DDL['PRES_SORTIE']!=None :
+           if DDL['NOEUD']   !=None : mfact=_F(NOEUD   =DDL['NOEUD'],   TEMP=DDL['PRES_SORTIE'])
+           if DDL['GROUP_NO']!=None : mfact=_F(GROUP_NO=DDL['GROUP_NO'],TEMP=DDL['PRES_SORTIE'])
+           affimp.append(mfact)
+
+     affecl=[]
+     for ECL in ECOULEMENT :
+           mfact=_F(GROUP_MA=ECL['GROUP_MA_1'],FLUN=ECL['VNOR_1'])
+           affecl.append(mfact)
+           mfact=_F(GROUP_MA=ECL['GROUP_MA_2'],FLUN=ECL['VNOR_2'])
+           affecl.append(mfact)
+     __CHARG2=AFFE_CHAR_THER( MODELE    = __NOFLUI,
+                              TEMP_IMPO = affimp ,
+                              FLUX_REP  = affecl )
+
+     __POTEN = THER_LINEAIRE( MODELE     = __NOFLUI,
+                              CHAM_MATER = __NOMCMA ,
+                              EXCIT      = _F( CHARGE = __CHARG2 ) )
+
+#  ---------------------------------------------------------------
+#  calcul amortissement proprement dit
+  if MATR_AMOR_AJOU!=None :
+     self.DeclareOut('AMORAJ',MATR_AMOR_AJOU)
+     solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
+     mostcles={}
+     if   NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
+     if   INFO         !=None : mostcles['INFO']          =INFO
+     if   MODE_MECA    !=None : mostcles['MODE_MECA']     =MODE_MECA
+     elif DEPL_IMPO    !=None : mostcles['CHAM_NO']       =DEPL_IMPO
+     else :
+       UTMESS('F','MATRICE0_3')
+
+     AMORAJ = CALC_MATR_AJOU(MODELE_FLUIDE    = __NOMFLU,
+                             MODELE_INTERFACE = __NOMINT,
+                             CHARGE           = __CHARGE,
+                             CHAM_MATER       = __NOMCMA,
+                             OPTION           = 'AMOR_AJOU',
+                             SOLVEUR          = solveur,
+                             POTENTIEL        = __POTEN,
+                             **mostcles)
+
+#  ---------------------------------------------------------------
+#  calcul de la rigidite ajoutee
+  if MATR_RIGI_AJOU!=None :
+     self.DeclareOut('RIGIAJ',MATR_RIGI_AJOU)
+     solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
+     mostcles={}
+     if   NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
+     if   INFO         !=None : mostcles['INFO']          =INFO
+     if   MODE_MECA    !=None : mostcles['MODE_MECA']     =MODE_MECA
+     elif DEPL_IMPO    !=None : mostcles['CHAM_NO']       =DEPL_IMPO
+     else :
+       UTMESS('F','MATRICE0_4')
+
+     RIGIAJ = CALC_MATR_AJOU(MODELE_FLUIDE    = __NOMFLU,
+                             MODELE_INTERFACE = __NOMINT,
+                             CHARGE           = __CHARGE,
+                             CHAM_MATER       = __NOMCMA,
+                             OPTION           = 'RIGI_AJOU',
+                             SOLVEUR          = solveur,
+                             POTENTIEL        = __POTEN,
+                             **mostcles)
+
+#  ---------------------------------------------------------------
+#  boucle sur le nombre de vecteurs a projeter, commande CALC_FORC_AJOU
+  if FORC_AJOU!=None :
+     for FORCAJ in FORC_AJOU:
+       self.DeclareOut('VECTAJ',FORCAJ['VECTEUR'])
+       solveur=SOLVEUR[0].cree_dict_valeurs(SOLVEUR[0].mc_liste)
+       mostcles={}
+       if   NUME_DDL_GENE!=None : mostcles['NUME_DDL_GENE'] =NUME_DDL_GENE
+       if   MODE_MECA    !=None : mostcles['MODE_MECA']     =MODE_MECA
+       elif MODELE_GENE  !=None :
+                                  mostcles['MODELE_GENE']   =MODELE_GENE
+                                  mostcles['AVEC_MODE_STAT']=AVEC_MODE_STAT
+                                  mostcles['DIST_REFE']     =DIST_REFE
+       if   NOEUD_DOUBLE !=None : mostcles['NOEUD_DOUBLE']  =NOEUD_DOUBLE
+       if   MODE_STAT    !=None :
+         mostcles['MODE_STAT']                                =MODE_STAT
+         if FORCAJ['NOEUD']    !=None : mostcles['NOEUD']     =FORCAJ['NOEUD']
+         if FORCAJ['GROUP_NO'] !=None : mostcles['GROUP_NO']  =FORCAJ['GROUP_NO']
+       else                     :
+                                  mostcles['MONO_APPUI']    =MONO_APPUI
+
+       VECTAJ = CALC_FORC_AJOU(DIRECTION        = FORCAJ['DIRECTION'],
+                               MODELE_FLUIDE    = __NOMFLU,
+                               MODELE_INTERFACE = __NOMINT,
+                               CHARGE           = __CHARGE,
+                               CHAM_MATER       = __NOMCMA,
+                               SOLVEUR          = solveur,
+                               **mostcles)
+
+
+  return ier
diff --git a/Aster/Cata/cataSTA10/Macro/macro_matr_asse_ops.py b/Aster/Cata/cataSTA10/Macro/macro_matr_asse_ops.py
new file mode 100644 (file)
index 0000000..81180d6
--- /dev/null
@@ -0,0 +1,129 @@
+#@ MODIF macro_matr_asse_ops Macro  DATE 13/04/2010   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+
+
+def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
+                        SOLVEUR,NUME_DDL,CHARGE,CHAR_CINE,INST,INFO,**args):
+  """
+     Ecriture de la macro MACRO_MATR_ASSE
+  """
+  ier=0
+  from Utilitai.Utmess     import  UTMESS
+
+  # On met le mot cle NUME_DDL dans une variable locale pour le proteger
+  numeddl=NUME_DDL
+  info=INFO
+  # On importe les definitions des commandes a utiliser dans la macro
+  # Le nom de la variable doit etre obligatoirement le nom de la commande
+  CALC_MATR_ELEM=self.get_cmd('CALC_MATR_ELEM')
+  NUME_DDL      =self.get_cmd('NUME_DDL')
+  ASSE_MATRICE  =self.get_cmd('ASSE_MATRICE')
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  # Les mots cles simples sous SOLVEUR sont par defaut MULT_FRONT/METIS
+  methode=SOLVEUR['METHODE']
+  renum=SOLVEUR['RENUM']
+
+  if numeddl in self.sdprods:
+    # Si le concept numeddl est dans self.sdprods
+    # il doit etre  produit par la macro
+    # il faudra donc appeler la commande NUME_DDL
+    lnume = 1
+  else:
+    lnume = 0
+  lrigel = 0
+  lmasel = 0
+
+# decalage eventuel en premiere position dans la liste de l occurence de MATR_ASSE contenant
+# l option de rigidite
+  try :
+    for m in MATR_ASSE:
+      option=m['OPTION']
+      if option in ('RIGI_MECA','RIGI_MECA_LAGR','RIGI_THER','RIGI_ACOU') :
+         decal=m
+         MATR_ASSE.remove(decal)
+         MATR_ASSE.insert(0,decal)
+         break
+  except: pass
+
+  iocc=0
+  for m in MATR_ASSE:
+    iocc=iocc+1
+    option=m['OPTION']
+    if iocc == 1 and lnume == 1 and option not in ('RIGI_MECA','RIGI_MECA_LAGR',
+                                                   'RIGI_THER','RIGI_ACOU')      :
+      UTMESS('F','MATRICE0_9')
+
+
+    motscles={'OPTION':option}
+    if option == 'RIGI_MECA_HYST':
+       if (not lrigel):
+          UTMESS('F','MATRICE0_10')
+       motscles['RIGI_MECA']   =rigel
+    if option == 'AMOR_MECA':
+       if (not lrigel or not lmasel):
+          UTMESS('F','MATRICE0_11')
+       if CHAM_MATER != None:
+          motscles['RIGI_MECA']   =rigel
+          motscles['MASS_MECA']   =masel
+    if CHARGE     != None:
+       if option[0:9] not in ('MASS_THER','RIGI_GEOM'):
+                           motscles['CHARGE']      =CHARGE
+    if CHAM_MATER != None and option != 'RIGI_GEOM' : motscles['CHAM_MATER']  =CHAM_MATER
+    if CARA_ELEM  != None: motscles['CARA_ELEM']   =CARA_ELEM
+    if INST       != None: motscles['INST']        =INST
+
+    try : motscles['SIEF_ELGA']   =m['SIEF_ELGA']
+    except IndexError : pass
+
+    try : motscles['MODE_FOURIER']   =m['MODE_FOURIER']
+    except IndexError : pass
+
+    try : motscles['THETA']   =m['THETA']
+    except IndexError : pass
+
+    try : motscles['PROPAGATION']   =m['PROPAGATION']
+    except IndexError : pass
+    _a=CALC_MATR_ELEM(MODELE=MODELE,**motscles)
+
+    if option == 'RIGI_MECA':
+      rigel  = _a
+      lrigel = 1
+    if option == 'MASS_MECA':
+      masel  = _a
+      lmasel = 1
+
+    if lnume and option in ('RIGI_MECA','RIGI_THER','RIGI_ACOU','RIGI_MECA_LAGR'):
+      self.DeclareOut('num',numeddl)
+      # On peut passer des mots cles egaux a None. Ils sont ignores
+      num=NUME_DDL(MATR_RIGI=_a,METHODE=methode,RENUM=renum,INFO=info)
+    else:
+      num=numeddl
+
+    self.DeclareOut('mm',m['MATRICE'])
+    motscles={'OPTION':option}
+    if CHAR_CINE != None:
+      mm=ASSE_MATRICE(MATR_ELEM=_a,NUME_DDL=num,CHAR_CINE=CHAR_CINE)
+    else:
+      mm=ASSE_MATRICE(MATR_ELEM=_a,NUME_DDL=num)
+
+  return ier
diff --git a/Aster/Cata/cataSTA10/Macro/macro_miss_3d_ops.py b/Aster/Cata/cataSTA10/Macro/macro_miss_3d_ops.py
new file mode 100644 (file)
index 0000000..c86c277
--- /dev/null
@@ -0,0 +1,162 @@
+#@ MODIF macro_miss_3d_ops Macro  DATE 16/02/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+
+
+def macro_miss_3d_ops(self,UNITE_IMPR_ASTER,UNITE_OPTI_MISS,
+                           UNITE_MODELE_SOL,UNITE_RESU_IMPE,
+                           PROJET,REPERTOIRE,OPTION,VERSION,
+                           UNITE_RESU_FORC,TABLE_SOL,PARAMETRE,**args):
+  """
+     Ecriture de la macro MACRO_MISS_3D
+  """
+  import types
+  from Accas import _F
+  from Utilitai.Utmess        import UTMESS, MessageError
+  from Utilitai.Table         import Table
+  from Miss.miss_fichier_sol  import fichier_sol
+
+  ier=0
+  # On importe les definitions des commandes a utiliser dans la macro
+  # Le nom de la variable doit etre obligatoirement le nom de la commande
+  DEFI_FICHIER  =self.get_cmd('DEFI_FICHIER')
+  EXEC_LOGICIEL =self.get_cmd('EXEC_LOGICIEL')
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  DEFI_FICHIER(ACTION='LIBERER',UNITE=UNITE_IMPR_ASTER)
+
+  import aster 
+  loc_fic=aster.repout()
+  tv = aster.__version__.split('.')
+  if len(tv) < 3:
+      tv.extend(['x']*(3-len(tv)))
+  elif len(tv) > 3:
+      tv = tv[:3]
+  vers = '%2s.%2s.%2s' % tuple(tv)
+
+  # if vers > ' 8. 3.11':
+  #    miss3d='/aster/logiciels/MISS3D/NEW/miss3d.csh'
+  # else:
+  #    miss3d=loc_fic+'miss3d'
+     
+  miss3d=loc_fic+'miss3d'
+  # miss3d='/aster/logiciels/MISS3D/miss3d.csh-beta-modif'
+  
+  # if VERSION=='V1_2':
+  #    if PARAMETRE != None and PARAMETRE['TYPE']=='BINAIRE':
+  #       raise AsException("MACRO_MISS_3D/PARAMETRE : type incompatible avec version")
+        
+  if OPTION['TOUT']!=None:
+      MODUL2='COMPLET'
+  elif OPTION['MODULE']=='MISS_IMPE':
+      MODUL2='CALC_IMPE'
+  elif OPTION['MODULE']=='MISS_EVOL':
+      MODUL2='MISS_PTAS'
+  elif OPTION['MODULE']=='PRE_MISS':
+      MODUL2='GTASTER'
+      
+
+  ETUDE = PROJET
+  BASE  = REPERTOIRE
+  paste = 'fort.'+str(UNITE_IMPR_ASTER)
+  popti = 'fort.'+str(UNITE_OPTI_MISS)
+  pdsol = 'fort.'+str(UNITE_MODELE_SOL)
+  primp = 'fort.'+str(UNITE_RESU_IMPE)
+  prfor = 'fort.'+str(UNITE_RESU_FORC)
+  
+  if TABLE_SOL != None :
+  
+    tabsol = TABLE_SOL.EXTR_TABLE()
+    try:
+        texte = fichier_sol(tabsol)
+    except MessageError, err:
+        UTMESS('F', err.id_message, valk=err.valk, vali=err.vali, valr=err.valr)
+    fdsol=open(pdsol,'w')
+    fdsol.write(texte)
+    fdsol.close()
+  
+  l_para = ['FREQ_MIN','FREQ_MAX','FREQ_PAS','Z0','RFIC','SURF',
+            'FICH_RESU_IMPE','FICH_RESU_FORC','TYPE','DREF','ALGO',
+            'OFFSET_MAX','OFFSET_NB','SPEC_MAX','SPEC_NB','ISSF',
+            'FICH_POST_TRAI','CONTR_NB','CONTR_LISTE','LFREQ_NB',
+            'LFREQ_LISTE','DIRE_ONDE']
+  if PARAMETRE != None and PARAMETRE['LFREQ_NB'] != None:
+    if len(PARAMETRE['LFREQ_LISTE']) != PARAMETRE['LFREQ_NB']:
+      UTMESS('F','MISS0_1')
+  if PARAMETRE != None and PARAMETRE['CONTR_NB'] != None:
+    if len(PARAMETRE['CONTR_LISTE']) != 3*PARAMETRE['CONTR_NB']:
+      UTMESS('F','MISS0_2')
+  
+  pndio = '0'
+  dpara = {}
+  for cle in l_para:
+    if cle in ('SURF', 'ISSF', ):
+      dpara[cle] = 'NON'
+    else:
+      dpara[cle] = '0'
+    if PARAMETRE != None and PARAMETRE[cle] != None:
+      if type(PARAMETRE[cle]) in (tuple, list):
+        dpara[cle] = repr(' '.join([str(s) for s in PARAMETRE[cle]]))
+      else:
+        dpara[cle] = str(PARAMETRE[cle])
+      if cle in ('DIRE_ONDE', ):
+        pndio = '1'
+        dpara['SURF'] = 'NON'
+        
+  EXEC_LOGICIEL(
+                LOGICIEL=miss3d,
+                ARGUMENT=(MODUL2,
+                          ETUDE,
+                          BASE,
+                          paste,
+                          popti,
+                          pdsol,
+                          primp,
+                          VERSION,
+                          dpara['FREQ_MIN'], 
+                          dpara['FREQ_MAX'],
+                          dpara['FREQ_PAS'],
+                          dpara['Z0'], 
+                          dpara['SURF'], 
+                          dpara['RFIC'],
+                          dpara['FICH_RESU_IMPE'],
+                          dpara['FICH_RESU_FORC'],
+                          dpara['DREF'], 
+                          dpara['ALGO'],
+                          dpara['OFFSET_MAX'],
+                          dpara['OFFSET_NB'],
+                          dpara['SPEC_MAX'],
+                          dpara['SPEC_NB'],
+                          dpara['ISSF'],
+                          dpara['FICH_POST_TRAI'],
+                          dpara['CONTR_NB'],
+                          dpara['CONTR_LISTE'],
+                          dpara['LFREQ_NB'],
+                          dpara['LFREQ_LISTE'],
+                          dpara['TYPE'], 
+                          prfor,
+                          pndio,
+                          dpara['DIRE_ONDE'],
+                         ),
+                INFO=1,)
+
+  return ier
diff --git a/Aster/Cata/cataSTA10/Macro/macro_mode_meca_ops.py b/Aster/Cata/cataSTA10/Macro/macro_mode_meca_ops.py
new file mode 100644 (file)
index 0000000..6da742f
--- /dev/null
@@ -0,0 +1,135 @@
+#@ MODIF macro_mode_meca_ops Macro  DATE 06/07/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+
+
+def macro_mode_meca_ops(self,MATR_A,MATR_B,INFO,METHODE,OPTION,CALC_FREQ,
+                        VERI_MODE,NORM_MODE,FILTRE_MODE,IMPRESSION,**args):
+  """
+     Ecriture de la macro MACRO_MODE_MECA
+  """
+  from Accas import _F
+  ier=0
+    
+  #  on protege le contenu du mot cle NORM_MODE pour eviter les confusions
+  #  avec la commande du meme nom
+  
+  normode=NORM_MODE
+  
+  # On importe les definitions des commandes a utiliser dans la macro
+  MODE_ITER_SIMULT  =self.get_cmd('MODE_ITER_SIMULT')
+  NORM_MODE         =self.get_cmd('NORM_MODE')
+  IMPR_RESU         =self.get_cmd('IMPR_RESU')
+  EXTR_MODE         =self.get_cmd('EXTR_MODE')
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  nompro=None
+  iocc=0
+  if CALC_FREQ['FREQ']:
+     nnfreq=len(CALC_FREQ['FREQ'])
+  else:
+     lborne=[]
+     nnfreq= CALC_FREQ['NB_BLOC_FREQ']+1
+     zlborn=(CALC_FREQ['FREQ_MAX']-CALC_FREQ['FREQ_MIN'])/(nnfreq-1)
+     for i in range(0,nnfreq):
+         lborne.append(CALC_FREQ['FREQ_MIN']+i*zlborn)
+
+  motscles={}
+  motscles['FILTRE_MODE']=[]
+  for i in range(0,nnfreq-1):
+     motscit={}
+     motscfa={}
+     if CALC_FREQ['DIM_SOUS_ESPACE']: motscfa['DIM_SOUS_ESPACE']=CALC_FREQ['DIM_SOUS_ESPACE']
+     if CALC_FREQ['COEF_DIM_ESPACE']: motscfa['COEF_DIM_ESPACE']=CALC_FREQ['COEF_DIM_ESPACE']
+     if CALC_FREQ['FREQ']:
+        motscfa['FREQ']=(CALC_FREQ['FREQ'][i],CALC_FREQ['FREQ'][i+1])
+     else:
+        motscfa['FREQ']=(lborne[i],lborne[i+1])
+     motscit['CALC_FREQ']=_F(OPTION          ='BANDE',
+                             SEUIL_FREQ      =CALC_FREQ['SEUIL_FREQ'],
+                             NPREC_SOLVEUR   =CALC_FREQ['NPREC_SOLVEUR'],
+                             NMAX_ITER_SHIFT =CALC_FREQ['NMAX_ITER_SHIFT'],
+                             PREC_SHIFT      =CALC_FREQ['PREC_SHIFT'],
+                             **motscfa)
+     motscit['VERI_MODE']=_F(STOP_ERREUR=VERI_MODE['STOP_ERREUR'],
+                             SEUIL      =VERI_MODE['SEUIL'],
+                             STURM      =VERI_MODE['STURM'],
+                             PREC_SHIFT =VERI_MODE['PREC_SHIFT'])
+     motscit['STOP_FREQ_VIDE']=CALC_FREQ['STOP_FREQ_VIDE']
+
+     if METHODE=='TRI_DIAG':
+        if args.has_key('NMAX_ITER_ORTHO'):
+           motscit['NMAX_ITER_ORTHO'] =args['NMAX_ITER_ORTHO']
+        if args.has_key('PREC_ORTHO'):
+           motscit['PREC_ORTHO']      =args['PREC_ORTHO']
+        if args.has_key('PREC_LANCZOS'):
+           motscit['PREC_LANCZOS']    =args['PREC_LANCZOS']
+        if args.has_key('MAX_ITER_QR'):
+           motscit['NMAX_ITER_QR']    =args['NMAX_ITER_QR']
+     elif METHODE=='JACOBI':
+        if args.has_key('NMAX_ITER_BATHE'):
+           motscit['NMAX_ITER_BATHE'] =args['NMAX_ITER_BATHE']
+        if args.has_key('PREC_BATHE'):
+           motscit['PREC_BATHE']      =args['PREC_BATHE']
+        if args.has_key('NMAX_ITER_JACOBI'):
+           motscit['NMAX_ITER_JACOBI']=args['NMAX_ITER_JACOBI']
+        if args.has_key('PREC_JACOBI'):
+           motscit['PREC_JACOBI']     =args['PREC_JACOBI']
+     elif METHODE=='SORENSEN':
+        if args.has_key('NMAX_ITER_SOREN'):
+           motscit['NMAX_ITER_SOREN'] =args['NMAX_ITER_SOREN']
+        if args.has_key('PARA_ORTHO_SOREN'):
+           motscit['PARA_ORTHO_SOREN']=args['PARA_ORTHO_SOREN']
+        if args.has_key('PREC_SOREN'):
+           motscit['PREC_SOREN']      =args['PREC_SOREN']
+
+     __nomre0=MODE_ITER_SIMULT(MATR_A  =MATR_A,
+                                  MATR_B  =MATR_B,
+                                  INFO    =INFO,
+                                  METHODE =METHODE,
+                                  OPTION  =OPTION,
+                                  **motscit)
+
+     __nomre0=NORM_MODE(reuse     =__nomre0,
+                        MODE      =__nomre0,
+                        NORME     =normode['NORME'],
+                        INFO      =normode['INFO'],)
+
+     if IMPRESSION['TOUT_PARA']=='OUI':
+        IMPR_RESU(RESU=_F(RESULTAT=__nomre0,
+                          TOUT_ORDRE='OUI',
+                          TOUT_CHAM ='NON',
+                          TOUT_PARA ='OUI',) )
+
+     if FILTRE_MODE :
+        motscles['FILTRE_MODE'].append(_F(MODE      =__nomre0,
+                                          CRIT_EXTR =FILTRE_MODE['CRIT_EXTR'],
+                                          SEUIL     =FILTRE_MODE['SEUIL'], ))
+     else:
+        motscles['FILTRE_MODE'].append(_F(MODE      =__nomre0,
+                                          TOUT_ORDRE='OUI',) )
+     
+
+  motscles['IMPRESSION']=_F(CUMUL    =IMPRESSION['CUMUL'],
+                            CRIT_EXTR=IMPRESSION['CRIT_EXTR'],)
+  self.DeclareOut('nomres',self.sd)
+  nomres=EXTR_MODE(**motscles)
+  return ier
diff --git a/Aster/Cata/cataSTA10/Macro/macro_proj_base_ops.py b/Aster/Cata/cataSTA10/Macro/macro_proj_base_ops.py
new file mode 100644 (file)
index 0000000..89ffe2c
--- /dev/null
@@ -0,0 +1,59 @@
+#@ MODIF macro_proj_base_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+
+
+def macro_proj_base_ops(self,BASE,NB_VECT,MATR_ASSE_GENE,VECT_ASSE_GENE,PROFIL,**args):
+  """
+     Ecriture de la macro MACRO_PROJ_BASE
+  """
+  ier=0
+  from Utilitai.Utmess     import  UTMESS
+  # On importe les definitions des commandes a utiliser dans la macro
+  NUME_DDL_GENE  =self.get_cmd('NUME_DDL_GENE')
+  PROJ_MATR_BASE =self.get_cmd('PROJ_MATR_BASE')
+  PROJ_VECT_BASE =self.get_cmd('PROJ_VECT_BASE')
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  _num=NUME_DDL_GENE(BASE=BASE,NB_VECT=NB_VECT,STOCKAGE=PROFIL)
+  if MATR_ASSE_GENE:
+    for m in MATR_ASSE_GENE:
+      motscles={}
+      if   m['MATR_ASSE']     :  motscles['MATR_ASSE']     =m['MATR_ASSE']
+      elif m['MATR_ASSE_GENE']:  motscles['MATR_ASSE_GENE']=m['MATR_ASSE_GENE']
+      else:
+          UTMESS('F','MODAL0_1')
+      self.DeclareOut('mm',m['MATRICE'])
+      mm=PROJ_MATR_BASE(BASE=BASE,NUME_DDL_GENE=_num,**motscles)
+
+  if VECT_ASSE_GENE:
+    _num=NUME_DDL_GENE(BASE=BASE,NB_VECT=NB_VECT,STOCKAGE=PROFIL)
+    for v in VECT_ASSE_GENE:
+      motscles={}
+      if   v['VECT_ASSE']     :  motscles['VECT_ASSE']     =v['VECT_ASSE']
+      elif v['VECT_ASSE_GENE']:  motscles['VECT_ASSE_GENE']=v['VECT_ASSE_GENE']
+      else:
+          UTMESS('F','MODAL0_1')
+      motscles['TYPE_VECT']=v['TYPE_VECT']
+      self.DeclareOut('vv',v['VECTEUR'])
+      vv=PROJ_VECT_BASE(BASE=BASE,NUME_DDL_GENE=_num,**motscles)
+
+  return ier
diff --git a/Aster/Cata/cataSTA10/Macro/observation_ops.py b/Aster/Cata/cataSTA10/Macro/observation_ops.py
new file mode 100644 (file)
index 0000000..06c6674
--- /dev/null
@@ -0,0 +1,1172 @@
+#@ MODIF observation_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+
+
+
+
+def observation_ops(self,
+                    PROJECTION   = None,
+                    MODELE_1     = None,
+                    MODELE_2     = None,
+                    RESULTAT     = None,
+                    NUME_DDL     = None,
+                    MODI_REPERE  = None,
+                    NOM_CHAM     = None,
+                    FILTRE       = None,
+                    EPSI_MOYENNE = None,
+                    **args):
+
+    """
+     Ecriture de la macro MACRO_OBSERVATION
+    """
+    ier=0
+
+
+    # La macro compte pour 1 dans la numerotation des commandes
+    self.set_icmd(1)
+
+    # on transforme le mc MODI_REPERE pour ne pas le confondre avec l'operateur
+    # du meme nom
+    MODIF_REPERE = MODI_REPERE
+
+    # importation de commandes
+    import aster
+    from Accas import _F
+    from Utilitai.UniteAster import UniteAster
+    from Utilitai.Utmess     import UTMESS
+    from Utilitai.Table      import Table
+    from Cata.cata import mode_meca, dyna_harmo, evol_elas,dyna_trans
+    MODI_REPERE = self.get_cmd('MODI_REPERE')
+    PROJ_CHAMP  = self.get_cmd('PROJ_CHAMP')
+    CREA_CHAMP  = self.get_cmd('CREA_CHAMP')
+    CREA_RESU   = self.get_cmd('CREA_RESU')
+    POST_RELEVE_T   = self.get_cmd('POST_RELEVE_T')
+    DETRUIRE = self.get_cmd('DETRUIRE')
+
+    # dans **args, on range les options de PROJ_CHAMP facultatives, et dont on
+    # ne sert pas par la suite
+    mcfact = args
+
+    if NOM_CHAM == 'DEPL':
+      if isinstance( RESULTAT, dyna_harmo):
+        TYPE_CHAM = 'NOEU_DEPL_C'
+      else:
+        TYPE_CHAM = 'NOEU_DEPL_R'
+    elif NOM_CHAM == 'EPSI_NOEU_DEPL':
+      if isinstance( RESULTAT, dyna_harmo):
+        TYPE_CHAM  = 'NOEU_EPSI_C'
+      else:
+        TYPE_CHAM  = 'NOEU_EPSI_R'
+    else:
+        UTMESS('F','ELEMENTS4_48',valk=[NOM_CHAM])
+
+    if isinstance( RESULTAT, evol_elas): TYPE_RESU='EVOL_ELAS'
+    if isinstance( RESULTAT, dyna_trans): TYPE_RESU='DYNA_TRANS'
+    if isinstance( RESULTAT, dyna_harmo): TYPE_RESU='DYNA_HARMO'
+    if isinstance( RESULTAT, mode_meca): TYPE_RESU='MODE_MECA'
+
+    self.DeclareOut( 'RESU', self.sd)
+    jdc = CONTEXT.get_current_step().jdc
+
+    # recuperation du maillage associe au modele numerique
+    _maillag = aster.getvectjev( MODELE_1.nom.ljust(8) + '.MODELE    .LGRF' )
+    maillage = _maillag[0].strip()
+    mayanum = self.get_concept(maillage)
+
+    # modele numerique 2D ou 3D
+    typmod= mayanum.DIME.get()
+    typmod = typmod[5]
+
+    # recuperation du maillage associe au modele experimental
+    _maillag = aster.getvectjev( MODELE_2.nom.ljust(8) + '.MODELE    .LGRF' )
+    maillage = _maillag[0].strip()
+    mayaexp = self.get_concept(maillage)
+
+    # cham_mater et cara_elem pour le resultat a projeter
+    iret,ibid,nom_cara_elem = aster.dismoi('F','CARA_ELEM',RESULTAT.nom,'RESULTAT')
+    if len(nom_cara_elem) > 0    :
+        assert nom_cara_elem.strip() != "#PLUSIEURS" , nom_cara_elem
+        if nom_cara_elem.strip() == "#AUCUN" :
+            cara_elem = None
+        else :
+            cara_elem = self.get_concept(nom_cara_elem.strip())
+    else:
+        cara_elem = None
+
+    iret,ibid,nom_cham_mater = aster.dismoi('F','CHAM_MATER',RESULTAT.nom,'RESULTAT')
+    if len(nom_cham_mater) > 0 :
+        assert nom_cham_mater.strip() != "#PLUSIEURS" , nom_cham_mater
+        if nom_cham_mater.strip() == "#AUCUN" :
+            cham_mater = None
+        else :
+            cham_mater = self.get_concept(nom_cham_mater.strip())
+    else:
+        cham_mater = None
+
+    # afreq pour les frequences propres
+    if isinstance( RESULTAT, mode_meca):
+        from Cata.cata import RECU_TABLE
+        __freq  = RECU_TABLE(CO=RESULTAT,
+                             NOM_PARA='FREQ',);
+        afreq  = __freq.EXTR_TABLE().Array('NUME_ORDRE','FREQ')
+    else:
+        afreq = None
+
+    nume_ordr_demande = mcfact['NUME_ORDRE']
+    if type(nume_ordr_demande) != tuple :
+        nume_ordr_demande = [nume_ordr_demande]
+
+    num_max = len(RESULTAT.LIST_VARI_ACCES()['NUME_ORDRE'])
+
+#***********************************************
+#  PHASE DE CALCUL DE LA DEFORMATION MOYENNE AUX NOEUDS
+#  CHAMP CALCULE SUR LE MODELE NUMERIQUE
+#***********************************************
+
+    if EPSI_MOYENNE != None :
+
+      if NOM_CHAM != 'EPSI_NOEU_DEPL':
+            __proj= RESULTAT
+            UTMESS('F','UTILITAI8_24',valk=['NOEU_EPSI',NOM_CHAM])
+      else:
+        if nume_ordr_demande[0]:
+            num_ordr = nume_ordr_demande
+        else:
+            num_ordr = RESULTAT.LIST_VARI_ACCES()['NUME_ORDRE']
+
+        if isinstance( RESULTAT, evol_elas):
+            list_inst = RESULTAT.LIST_VARI_ACCES()['INST']
+        if isinstance( RESULTAT, dyna_trans):
+            list_inst = RESULTAT.LIST_VARI_ACCES()['INST']
+        if isinstance( RESULTAT, dyna_harmo):
+            list_freq = RESULTAT.LIST_VARI_ACCES()['FREQ']
+
+        liste = []
+
+      # il faut calculer le champ complet
+        if typmod == 2:
+            nom_cmps = ['EPXX','EPYY','EPZZ','EPXY',]
+        else:
+            nom_cmps = ['EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ',]
+
+        argsi = {'ACTION' : [], }
+        lnoeuds = { }
+        nb_mcfact = 0
+        seuil = []
+        masque = []
+        for epsi_moye in EPSI_MOYENNE :
+            mcfactr = { }
+            mcfacti = { }
+            l_noeud = None
+            val_masque = []
+            seuil_lu = epsi_moye['SEUIL_VARI']
+            if type(seuil_lu) == tuple :
+                val_seuil = seuil_lu[0]
+            else:
+                val_seuil = seuil_lu
+            seuil.append(val_seuil)
+            masque_lu = epsi_moye['MASQUE']
+            if type(masque_lu) != tuple :
+                val_masque.append(masque_lu)
+            else:
+                val_masque = masque_lu
+            masque.append(val_masque)
+            for typ in ['NOEUD','GROUP_NO','MAILLE','GROUP_MA']:
+              if epsi_moye[typ] != None:
+                l_noeud = find_no(mayanum, {typ : epsi_moye[typ]})
+                nb_mcfact = nb_mcfact + 1
+                for i in range(len(l_noeud)):
+                    l_noeud[i]=l_noeud[i].strip()
+                lnoeuds[str(nb_mcfact)]=l_noeud
+
+            if l_noeud == None:
+                UTMESS('F','MODELISA3_13',valk=['EPSI_MOYENNE'])
+
+            if TYPE_CHAM[-1:] == 'C':
+              mcfactr = { 'NOM_CMP'   : nom_cmps,
+                         'OPERATION' : 'EXTRACTION',
+                         'INTITULE' : str('R'+str(nb_mcfact)),
+                         'FORMAT_C' : 'REEL',
+                         'NOEUD' : l_noeud,
+                        'NOM_CHAM'  : 'EPSI_NOEU_DEPL',
+                        'RESULTAT'  : RESULTAT,
+                        'NUME_ORDRE'  : num_ordr,
+                       }
+              argsi['ACTION'].append(mcfactr)
+              mcfacti = { 'NOM_CMP'   : nom_cmps,
+                         'OPERATION' : 'EXTRACTION',
+                         'INTITULE' : str('I'+str(nb_mcfact)),
+                         'FORMAT_C' : 'IMAG',
+                         'NOEUD' : l_noeud,
+                        'NOM_CHAM'  : 'EPSI_NOEU_DEPL',
+                        'RESULTAT'  : RESULTAT,
+                        'NUME_ORDRE'  : num_ordr,
+                       }
+              argsi['ACTION'].append(mcfacti)
+            else:
+              mcfactr = { 'NOM_CMP'   : nom_cmps,
+                         'OPERATION' : 'EXTRACTION',
+                         'INTITULE' : str(nb_mcfact),
+                         'NOEUD' : l_noeud,
+                        'NOM_CHAM'  : 'EPSI_NOEU_DEPL',
+                        'RESULTAT'  : RESULTAT,
+                        'NUME_ORDRE'  : num_ordr,
+                       }
+              argsi['ACTION'].append(mcfactr)
+
+        _tepsi=POST_RELEVE_T(
+                   **argsi)
+
+        table=_tepsi.EXTR_TABLE()
+
+        DETRUIRE( CONCEPT= _F( NOM = _tepsi ), INFO=1)
+
+        mcfact2 = { }
+        __chame = [None]*num_max
+        for ind in num_ordr:
+         argsa = {'AFFE' : [], }
+         for mcfacta in range(nb_mcfact):
+          l_noeud_mcfact = lnoeuds[str(mcfacta+1)]
+          l_vmoye=[]
+          l_cmp_vari=[]
+          seuil_mc=seuil[mcfacta]
+          masque_mc=masque[mcfacta]
+          for cmp in nom_cmps:
+           lur = 0
+           lui = 0
+           l_valr= []
+           l_vali= []
+           l_valc= []
+           l_val= []
+           for row in table.rows:
+            if TYPE_CHAM[-1:] == 'C':
+             if row['INTITULE'].strip() == str('R'+str(mcfacta+1))   \
+                      and row['NUME_ORDRE'] == ind :
+                l_valr.append(row[cmp])
+                lur = 1
+             elif row['INTITULE'].strip() == str('I'+str(mcfacta+1))   \
+                      and row['NUME_ORDRE'] == ind :
+                l_vali.append(row[cmp])
+                lui = 1
+                  
+            else:
+             if row['INTITULE'].strip() == str(mcfacta+1)   \
+                      and row['NUME_ORDRE'] == ind: 
+                  l_val.append(row[cmp])
+
+           if TYPE_CHAM[-1:] == 'C':
+             if lur and lui :
+                if len(l_valr) != len(l_vali):
+                  UTMESS('F','POSTRELE_59')
+                for i in range(len(l_valr)):
+                  l_valc.append(complex(l_valr[i],l_vali[i]))
+
+                lur = 0
+                lui = 0
+             else:
+                UTMESS('F','POSTRELE_59')
+
+          # on regarde a la fois la partie reelle et la partie imag pour les complexes
+             vmoyer = sum(l_valr)/len(l_valr)
+             vmoyei = sum(l_vali)/len(l_vali)
+             vmoye = sum(l_valc)/len(l_valc)
+             vminr = min(l_valr)  
+             vmini = min(l_vali)  
+             vmaxr = max(l_valr)
+             vmaxi = max(l_vali)
+             if vmoyer > 0:
+               if (vmaxr > vmoyer*(1.+seuil_mc)) or (vminr < vmoyer*(1-seuil_mc)):
+                 l_cmp_vari.append(cmp)
+             if vmoyei > 0:
+               if (vmaxi > vmoyei*(1.+seuil_mc)) or (vmini < vmoyei*(1-seuil_mc)):
+                 l_cmp_vari.append(cmp)
+             if vmoyer < 0:
+               if (vminr > vmoyer*(1.-seuil_mc)) or (vmaxr < vmoyer*(1+seuil_mc)):
+                 l_cmp_vari.append(cmp)
+             if vmoyei < 0:
+               if (vmini > vmoyei*(1.-seuil_mc)) or (vmaxi < vmoyei*(1+seuil_mc)):
+                 l_cmp_vari.append(cmp)
+           else:
+             vmoye = sum(l_val)/len(l_val)
+             vmin = min(l_val)
+             vmax = max(l_val)
+             if vmoye > 0:
+               if (vmax > vmoye*(1.+seuil_mc)) or (vmin < vmoye*(1-seuil_mc)):
+                 l_cmp_vari.append(cmp)
+             if vmoye < 0:
+               if (vmin > vmoye*(1.-seuil_mc)) or (vmax < vmoye*(1+seuil_mc)):
+                 l_cmp_vari.append(cmp)
+
+           l_vmoye.append(vmoye)
+
+          if len(l_cmp_vari) > 0:
+           for cmp in nom_cmps:
+            vu = 0
+            for cmp_vari in l_cmp_vari:
+             if cmp_vari not in masque_mc:
+              if cmp == cmp_vari and not vu:
+                if EPSI_MOYENNE[mcfacta]['MAILLE'] != None:
+                  entite = str('MAILLE : '+str(PSI_MOYENNE[mcfacta]['MAILLE']))
+                if EPSI_MOYENNE[mcfacta]['GROUP_MA'] != None:
+                  entite = str('GROUP_MA : '+str(EPSI_MOYENNE[mcfacta]['GROUP_MA']))
+                UTMESS('A','OBSERVATION_8',vali=[ind],valr=[seuil_mc],valk=[entite,cmp])
+                vu = 1
+
+
+          if TYPE_CHAM[-1:] == 'C':
+            mcfactc = { 'NOM_CMP'   : nom_cmps,
+                         'NOEUD' : l_noeud_mcfact,
+                        'VALE_C'  : l_vmoye,
+                       }
+          else:
+            mcfactc = { 'NOM_CMP'   : nom_cmps,
+                         'NOEUD' : l_noeud_mcfact,
+                        'VALE'  : l_vmoye,
+                       }
+
+          argsa['AFFE'].append(mcfactc)
+
+         __chame[ind-1] = CREA_CHAMP( OPERATION  = 'AFFE',
+                          MODELE = MODELE_1,
+                          PROL_ZERO = 'OUI',
+                          TYPE_CHAM  = TYPE_CHAM, 
+                          OPTION   = NOM_CHAM,
+                          **argsa
+                          );
+
+         if isinstance( RESULTAT, mode_meca):
+                  mcfact2 = {'CHAM_GD'    : __chame[ind-1],
+                       'MODELE'     : MODELE_1,
+                       'NUME_MODE'    : int(afreq[ind-1,0]),
+                       'FREQ'    : afreq[ind-1,1],
+                       }
+
+         if isinstance( RESULTAT, evol_elas):
+                    mcfact2 = {'CHAM_GD'    : __chame[ind-1],
+                       'MODELE'     : MODELE_1,
+                       'INST'    : list_inst[ind-1],
+                       }
+
+         if isinstance( RESULTAT, dyna_trans):
+                    mcfact2 = {'CHAM_GD'    : __chame[ind-1],
+                       'MODELE'     : MODELE_1,
+                       'INST'    : list_inst[ind],
+                       }
+
+         if isinstance( RESULTAT, dyna_harmo):
+                mcfact2 = {'CHAM_GD'    : __chame[ind-1],
+                       'MODELE'     : MODELE_1,
+                       'FREQ'    : list_freq[ind-1],
+                       }
+
+         if cham_mater is not None:
+                    mcfact2['CHAM_MATER'] = cham_mater
+         if cara_elem is not None:
+                    mcfact2['CARA_ELEM'] = cara_elem
+
+         liste.append(mcfact2)
+
+        __proj = CREA_RESU(
+                              OPERATION = 'AFFE',
+                              TYPE_RESU = TYPE_RESU,
+                              NOM_CHAM  = NOM_CHAM,
+                              AFFE      = liste,
+                             );
+    else:
+        __proj= RESULTAT
+
+
+#***********************************************
+#  PHASE DE PROJECTION
+#***********************************************
+
+    if PROJECTION == 'OUI':
+        __proj=PROJ_CHAMP(RESULTAT = __proj,
+                          MODELE_1 = MODELE_1,
+                          MODELE_2 = MODELE_2,
+                          NUME_DDL = NUME_DDL,
+                          NOM_CHAM = NOM_CHAM,
+                          **mcfact
+                         );
+
+        modele = MODELE_2
+    else:
+        modele = MODELE_1
+
+
+#***********************************************
+#  PHASE DE CHANGEMENT DE REPERE
+#***********************************************
+# Le changement de repere se fait dans les routines exterieures crea_normale et crea_repere
+
+# On range dans le mcfact MODI_REPERE une liste de modifications. ex :
+#     MODI_REPERE = ( _F( GROUP_NO  = toto,
+#                         REPERE    = 'NORMALE' ),
+#                         CONDITION = (1.0,0.0,0.0),
+#                         NOM_PARA  = 'X')
+#                     _F( NOEUD   = ('a','z','e'...),
+#                         REPERE  = 'CYLINDRIQUE',
+#                         ORIGINE = (0.,0.,0.),
+#                         AXE_Z   = (0.,1.,0.), ),
+#                     _F( GROUP_NO = titi,
+#                         REPERE   = 'UTILISATEUR',
+#                         ANGL_NAUT = (alpha, beta, gamma), )
+#                    )
+
+
+    if MODIF_REPERE != None :
+        if nume_ordr_demande[0]:
+            num_ordr = nume_ordr_demande
+        else:
+            num_ordr = __proj.LIST_VARI_ACCES()['NUME_ORDRE']
+
+        for modif_rep in MODIF_REPERE :
+            type_cham = modif_rep['TYPE_CHAM']
+            if type_cham == 'TENS_2D':
+                nom_cmp = ['EPXX','EPYY','EPZZ','EPXY',]
+            elif type_cham == 'TENS_3D':
+                nom_cmp = ['EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ',]
+            else:
+                nom_cmp = modif_rep['NOM_CMP']
+            mcfact1 = { 'NOM_CMP'   : nom_cmp,
+                        'TYPE_CHAM' : type_cham,
+                        'NOM_CHAM'  : NOM_CHAM }
+
+            mcfact2 = { }
+            modi_rep = modif_rep.val
+
+            if modi_rep['REPERE'] == 'DIR_JAUGE' :
+                vect_x = None
+                vect_y = None
+                if modi_rep.has_key('VECT_X'):
+                    vect_x = modi_rep['VECT_X']
+                if modi_rep.has_key('VECT_Y'):
+                    vect_y = modi_rep['VECT_Y']
+
+                # il faut des mailles pour les tenseurs d'ordre 2
+                taille = 0
+                for typ in ['MAILLE','GROUP_MA',]:
+                  if modi_rep.has_key(typ) :
+                    if PROJECTION == 'OUI':
+                      maya = mayaexp
+                    else:
+                      maya = mayanum
+                    list_ma = find_ma(maya, {typ : modi_rep[typ]})
+                taille = len(list_ma)
+
+                mcfact1.update({ 'MAILLE'    : list_ma })
+                angl_naut = crea_repere_xy(vect_x, vect_y)
+
+                mcfact2.update({ 'REPERE'    : 'UTILISATEUR',
+                                 'ANGL_NAUT' : angl_naut })
+
+                args = {'MODI_CHAM'   : mcfact1,
+                        'DEFI_REPERE' : mcfact2 }
+
+                __proj = MODI_REPERE( RESULTAT    = __proj,
+                                      NUME_ORDRE  = num_ordr, 
+                                      **args)
+
+            if modi_rep['REPERE'] == 'NORMALE' :
+                # Cas ou l'utilisateur choisit de creer les reperes locaux
+                # selon la normale. On fait un changement de repere local
+                # par noeud
+                for option in ['VECT_X','VECT_Y','CONDITION_X','CONDITION_Y'] :
+                    if modi_rep.has_key(option):
+                        vect = { option : modi_rep[option] }
+                if len(vect) != 1 :
+                    UTMESS('E','UTILITAI7_9')
+
+                chnorm = crea_normale(self, MODELE_1, MODELE_2, NUME_DDL,
+                                                      cham_mater, cara_elem)
+                modele = MODELE_2
+                chnormx = chnorm.EXTR_COMP('DX',[],1)
+                ind_noeuds = chnormx.noeud
+                nom_allno = [mayaexp.NOMNOE.get()[k-1] for k in ind_noeuds]
+
+                # on met les noeuds conernes sous forme de liste et on va
+                # chercher les noeuds des mailles pour 'MAILLE' et 'GROUP_MA'
+                for typ in ['NOEUD','GROUP_NO','MAILLE','GROUP_MA']:
+                    if modi_rep.has_key(typ) :
+                        list_no_exp = find_no(mayaexp, {typ : modi_rep[typ]})
+
+                # boucle sur les noeuds pour modifier les reperes.
+                __bid = [None]*(len(list_no_exp) + 1)
+                __bid[0] = __proj
+                k = 0
+                for nomnoe in list_no_exp:
+                    ind_no = nom_allno.index(nomnoe)
+                    angl_naut = crea_repere(chnorm, ind_no, vect)
+
+                    mcfact1.update({ 'NOEUD'     : nomnoe })
+                    mcfact2.update({ 'REPERE'    : 'UTILISATEUR',
+                                     'ANGL_NAUT' : angl_naut})
+                    args = {'MODI_CHAM'   : mcfact1,
+                            'DEFI_REPERE' : mcfact2 }
+                    __bid[k+1] = MODI_REPERE( RESULTAT    = __bid[k],
+                                              TOUT_ORDRE  = 'OUI',
+                                              CRITERE     = 'RELATIF',
+                                              **args)
+                    k = k + 1
+
+                __proj = __bid[-1:][0]
+
+
+            if modi_rep['REPERE'] == 'UTILISATEUR' or modi_rep['REPERE'] == 'CYLINDRIQUE':
+
+              if type_cham == 'TENS_2D' or type_cham == 'TENS_3D' :
+                  for typ in ['MAILLE','GROUP_MA',]:
+                    if modi_rep.has_key(typ) :
+                        mcfact1.update({typ : modi_rep[typ]})
+              else:
+                for typ in ['NOEUD','GROUP_NO','MAILLE','GROUP_MA']:
+                    if modi_rep.has_key(typ) :
+                        mcfact1.update({typ : modi_rep[typ]})
+
+              if modi_rep['REPERE'] == 'CYLINDRIQUE' :
+                    origine = modi_rep['ORIGINE']
+                    axe_z   = modi_rep['AXE_Z']
+                    mcfact2.update({ 'REPERE'  : 'CYLINDRIQUE',
+                                     'ORIGINE' : origine,
+                                     'AXE_Z'   : axe_z })
+
+              elif modi_rep['REPERE'] == 'UTILISATEUR' :
+                    angl_naut = modi_rep['ANGL_NAUT']
+                    mcfact2.update({ 'REPERE'    : 'UTILISATEUR',
+                                     'ANGL_NAUT' : angl_naut })
+
+              args = {'MODI_CHAM'   : mcfact1,
+                        'DEFI_REPERE' : mcfact2 }
+
+              __bidon = MODI_REPERE( RESULTAT    = __proj,
+                                     CRITERE     = 'RELATIF',
+                                     **args)
+              DETRUIRE( CONCEPT= _F( NOM = __proj ), INFO=1)
+              __proj = __bidon
+
+
+#*************************************************
+# Phase de selection des DDL de mesure
+#*************************************************
+
+    if FILTRE != None:
+        if nume_ordr_demande[0]:
+            num_ordr = nume_ordr_demande
+        else:
+            num_ordr = __proj.LIST_VARI_ACCES()['NUME_ORDRE']
+
+        __chamf = [None]*num_max
+        if isinstance( RESULTAT, evol_elas):
+            list_inst_ini = RESULTAT.LIST_VARI_ACCES()['INST']
+        if isinstance( RESULTAT, dyna_trans):
+            list_inst_ini = RESULTAT.LIST_VARI_ACCES()['INST']
+        if isinstance( RESULTAT, dyna_harmo):
+            list_freq_ini = RESULTAT.LIST_VARI_ACCES()['FREQ']
+
+        liste = []
+
+        for ind in num_ordr:
+            mcfact2 = { }
+            filtres = []
+            __chamex = CREA_CHAMP(TYPE_CHAM  = TYPE_CHAM,
+                                  OPERATION  = 'EXTR',
+                                  RESULTAT   = __proj,
+                                  NOM_CHAM   = NOM_CHAM,
+                                  NUME_ORDRE = ind,);
+
+            for mcfiltre in FILTRE :
+                mcfact1 = {}
+                filtre = mcfiltre.val
+                for typ in ['NOEUD','GROUP_NO','MAILLE','GROUP_MA']:
+                    if filtre.has_key(typ) :
+                        mcfact1.update({typ : filtre[typ]})
+                mcfact1.update({'NOM_CMP' : filtre['DDL_ACTIF'],
+                                'CHAM_GD' : __chamex })
+                filtres.append(mcfact1)
+
+            if NOM_CHAM == 'DEPL':
+                __chamf[ind-1] = CREA_CHAMP(TYPE_CHAM = TYPE_CHAM,
+                                       OPERATION = 'ASSE',
+                                       MODELE    = modele,
+                                       ASSE      = filtres
+                                       );
+
+            elif NOM_CHAM == 'EPSI_NOEU_DEPL':
+                __chamf[ind-1] = CREA_CHAMP(TYPE_CHAM = TYPE_CHAM,
+                                       OPERATION = 'ASSE',
+                                       PROL_ZERO = 'OUI',
+                                       MODELE    = modele,
+                                       ASSE      = filtres,
+                                       );
+
+            else:
+                valk = []
+                valk.append(NOM_CHAM)
+                valk.append('DEPL')
+                valk.append('EPSI_NOEU_DEPL')
+                UTMESS('F','OBSERVATION_6',valk) 
+
+            if isinstance( RESULTAT, mode_meca):
+                mcfact2 = {'CHAM_GD'    : __chamf[ind-1],
+                       'MODELE'     : modele,
+                       'NUME_MODE'    : int(afreq[ind-1,0]),
+                       'FREQ'    : afreq[ind-1,1],
+                       }
+
+            if isinstance( RESULTAT, evol_elas):
+                mcfact2 = {'CHAM_GD'    : __chamf[ind-1],
+                       'MODELE'     : modele,
+                       'INST'    : list_inst_ini[ind-1],
+                       }
+
+            if isinstance( RESULTAT, dyna_trans):
+                mcfact2 = {'CHAM_GD'    : __chamf[ind-1],
+                       'MODELE'     : modele,
+                       'INST'    : list_inst_ini[ind-1],
+                       }
+
+            if isinstance( RESULTAT, dyna_harmo):
+                mcfact2 = {'CHAM_GD'    : __chamf[ind-1],
+                       'MODELE'     : MODELE_2,
+                       'FREQ'    : list_freq_ini[ind-1],
+                       }
+
+
+            if cham_mater is not None:
+                mcfact2['CHAM_MATER'] = cham_mater
+            if cara_elem is not None:
+                mcfact2['CARA_ELEM'] = cara_elem
+
+            liste.append(mcfact2)
+            DETRUIRE( CONCEPT= _F( NOM = __chamex ), INFO=1)
+
+        __proj = CREA_RESU(
+                              OPERATION = 'AFFE',
+                              TYPE_RESU = TYPE_RESU,
+                              NOM_CHAM  = NOM_CHAM,
+                              AFFE      = liste,
+                             );
+
+#*************************************************
+# Recopie des resultats (__proj) dans RESU
+#*************************************************
+
+    if nume_ordr_demande[0]:
+        num_ordr = nume_ordr_demande
+    else:
+        num_ordr = __proj.LIST_VARI_ACCES()['NUME_ORDRE']
+
+    __chamf = [None]*num_max
+    if isinstance( RESULTAT, evol_elas):
+        list_inst = __proj.LIST_VARI_ACCES()['INST']
+    if isinstance( RESULTAT, dyna_trans):
+        list_inst = __proj.LIST_VARI_ACCES()['INST']
+    if isinstance( RESULTAT, dyna_harmo):
+        list_freq = __proj.LIST_VARI_ACCES()['FREQ']
+
+    liste = []
+
+    for ind in num_ordr:
+        mcfact2 = { }
+        filtres = []
+        __chamex = CREA_CHAMP(TYPE_CHAM  = TYPE_CHAM,
+                              OPERATION  = 'EXTR',
+                              RESULTAT   = __proj,
+                              NOM_CHAM   = NOM_CHAM,
+                              NUME_ORDRE = ind,);
+
+        mcfact1 = {}
+        mcfact1.update({'TOUT' : 'OUI',
+                        'CHAM_GD' : __chamex })
+        filtres.append(mcfact1)
+
+        if NOM_CHAM == 'DEPL':
+            __chamf[ind-1] = CREA_CHAMP(TYPE_CHAM = TYPE_CHAM,
+                                       OPERATION = 'ASSE',
+                                       MODELE    = modele,
+                                       ASSE      = filtres
+                                       );
+
+        elif NOM_CHAM == 'EPSI_NOEU_DEPL':
+            __chamf[ind-1] = CREA_CHAMP(TYPE_CHAM = TYPE_CHAM,
+                                       OPERATION = 'ASSE',
+                                       PROL_ZERO = 'OUI',
+                                       MODELE    = modele,
+                                       ASSE      = filtres,
+                                       );
+
+        else:
+            valk = []
+            valk.append(NOM_CHAM)
+            valk.append('DEPL')
+            valk.append('EPSI_NOEU_DEPL')
+            UTMESS('F','OBSERVATION_6',valk) 
+
+        if isinstance( RESULTAT, mode_meca):
+            mcfact2 = {'CHAM_GD'    : __chamf[ind-1],
+                       'MODELE'     : modele,
+                       'NUME_MODE'    : int(afreq[ind-1,0]),
+                       'FREQ'    : afreq[ind-1,1],
+                       }
+
+        if isinstance( RESULTAT, evol_elas):
+            mcfact2 = {'CHAM_GD'    : __chamf[ind-1],
+                       'MODELE'     : modele,
+                       'INST'    : list_inst[ind-1],
+                       }
+
+        if isinstance( RESULTAT, dyna_trans):
+            mcfact2 = {'CHAM_GD'    : __chamf[ind-1],
+                       'MODELE'     : modele,
+                       'INST'    : list_inst[ind-1],
+                       }
+
+        if isinstance( RESULTAT, dyna_harmo):
+            mcfact2 = {'CHAM_GD'    : __chamf[ind-1],
+                       'MODELE'     : MODELE_2,
+                       'FREQ'    : list_freq[ind-1],
+                       }
+
+
+        if cham_mater is not None:
+            mcfact2['CHAM_MATER'] = cham_mater
+        if cara_elem is not None:
+            mcfact2['CARA_ELEM'] = cara_elem
+
+        liste.append(mcfact2)
+        DETRUIRE( CONCEPT= _F( NOM = __chamex ), INFO=1)
+
+    RESU = CREA_RESU(
+                      OPERATION = 'AFFE',
+                      TYPE_RESU = TYPE_RESU,
+                      NOM_CHAM  = NOM_CHAM,
+                      AFFE      = liste,
+                     );
+
+    return ier
+
+
+
+
+#**********************************************
+# RECUPERATION DES NORMALES
+#**********************************************
+
+def crea_normale(self, modele_1, modele_2,
+                 nume_ddl, cham_mater=None, cara_elem=None):
+    """Cree un champ de vecteurs normaux sur le maillage experimental, par
+       projection du champ de normales cree sur le maillage numerique
+       les mailles doivent etre des elements de <peau> (facettes)
+    """
+    PROJ_CHAMP  = self.get_cmd('PROJ_CHAMP')
+    CREA_CHAMP  = self.get_cmd('CREA_CHAMP')
+    CREA_RESU   = self.get_cmd('CREA_RESU')
+    DEFI_GROUP  = self.get_cmd('DEFI_GROUP')
+    import aster
+    from Accas import _F
+    # recherche du maillage associe au modele numerique
+    nom_modele_num = modele_1.nom
+    _maillag = aster.getvectjev( nom_modele_num.ljust(8) + '.MODELE    .LGRF' )
+    maillage = _maillag[0].strip()
+    jdc = CONTEXT.get_current_step().jdc
+    mayanum = self.get_concept(maillage)
+
+
+    DEFI_GROUP( reuse = mayanum,
+                MAILLAGE      = mayanum,
+                CREA_GROUP_MA = _F( NOM  = '&&TOUMAI',
+                                    TOUT = 'OUI' )
+               );
+
+    __norm1 = CREA_CHAMP( MODELE    = modele_1,
+                          OPERATION = 'NORMALE',
+                          TYPE_CHAM = 'NOEU_GEOM_R',
+                          GROUP_MA  = '&&TOUMAI',
+                         );
+
+    DEFI_GROUP( reuse = mayanum,
+                MAILLAGE      = mayanum,
+                DETR_GROUP_MA = _F( NOM  = '&&TOUMAI' )
+               );
+
+
+    __norm2 = CREA_CHAMP( OPERATION = 'ASSE',
+                          TYPE_CHAM = 'NOEU_DEPL_R',
+                          MODELE    = modele_1,
+                          ASSE      = _F( TOUT='OUI',
+                                          CHAM_GD=__norm1,
+                                          NOM_CMP=('X','Y','Z'),
+                                          NOM_CMP_RESU=('DX','DY','DZ')
+                                         )
+                         );
+
+    affe_dct = {'CHAM_GD' : __norm2,
+                'INST' : 1,
+                'MODELE' : modele_1}
+    if cham_mater is not None:
+        affe_dct["CHAM_MATER"] = cham_mater
+    if cara_elem is not None:
+        affe_dct["CARA_ELEM"] = cara_elem
+
+    __norm3 = CREA_RESU( OPERATION = 'AFFE',
+                         TYPE_RESU = 'EVOL_ELAS',
+                         NOM_CHAM  = 'DEPL',
+                         AFFE      = _F(**affe_dct)
+                       );
+
+
+    __norm4 = PROJ_CHAMP( RESULTAT   = __norm3,
+                          MODELE_1   = modele_1,
+                          MODELE_2   = modele_2,
+                          NOM_CHAM   = 'DEPL',
+                          TOUT_ORDRE = 'OUI',
+                          NUME_DDL   = nume_ddl,
+                          );
+
+    # __norm5 : toutes les normales au maillage au niveau des capteurs
+    __norm5 = CREA_CHAMP( RESULTAT   = __norm4,
+                          OPERATION  = 'EXTR',
+                          NUME_ORDRE = 1,
+                          NOM_CHAM   = 'DEPL',
+                          TYPE_CHAM  = 'NOEU_DEPL_R',
+                          );
+
+
+    return __norm5
+
+#**********************************************************************
+# Calcul des angles nautiques pour le repere local associe a la normale
+#**********************************************************************
+
+def crea_repere(chnorm, ind_no, vect):
+
+    """Creation d'un repere orthonormal a partir du vecteur normale et
+       d'une equation supplementaire donnee par l'utilisateur sous forme
+       de trois parametres et du vecteur de base concerne.
+    """
+
+    import numpy
+
+    nom_para = vect.keys()[0] # nom_para = 'VECT_X' ou 'VECT_Y'
+    condition = list(vect[nom_para])
+
+    # 1) pour tous les noeuds du maillage experimental, recuperer la normale
+    #    calculee a partir du maillage numerique
+    chnormx = chnorm.EXTR_COMP('DX',[],1)
+    chnormy = chnorm.EXTR_COMP('DY',[],1)
+    chnormz = chnorm.EXTR_COMP('DZ',[],1)
+
+    noeuds = chnormx.noeud
+    nbno = len(noeuds)
+
+    normale = [chnormx.valeurs[ind_no],
+               chnormy.valeurs[ind_no],
+               chnormz.valeurs[ind_no]]
+
+    # 2.1) soit l'utilisateur a donne un deuxieme vecteur explicitement
+    # (option VECT_X Ou VECT_Y). Dans ce cas la, le 3e est le produit
+    # vectoriel des deux premiers.
+    if nom_para == 'VECT_X' :
+        vect1 = numpy.array(list(vect[nom_para])) # vect x du reploc
+        vect2 = numpy.cross(normale,vect1)
+        reploc = numpy.array([vect1.tolist(), vect2.tolist(), normale])
+        reploc = numpy.transpose(reploc)
+
+    elif nom_para == 'VECT_Y' :
+        vect2 = numpy.array(list(vect[nom_para])) # vect y du reploc
+        vect1 = numpy.cross(vect2, normale)
+        reploc = numpy.array([vect1.tolist(), vect2.tolist(), normale])
+        reploc = numpy.transpose(reploc)
+
+    # 2.2) TODO : plutot que de donner explicitement un vecteur du repere
+    # local avec VECT_X/Y, on devrait aussi pouvoir donner une condition
+    # sous forme d'une equation sur un de ces vecteurs. Par exemple,
+    # CONDITION_X = (0.,1.,0.) signifierait que le vecteur X1 verifie
+    #x(X1) + y(X1) + z(X1) = 0
+    elif nom_para == 'CONDITION_X':
+        pass
+    elif nom_para == 'CONDITION_Y':
+        pass
+
+    # 3) Calcul de l'angle nautique associe au repere local
+    angl_naut = anglnaut(reploc)
+
+    return angl_naut
+
+
+#**********************************************************************
+# Calcul des angles nautiques pour le repere associe a VECT_X et VECT_Y
+#**********************************************************************
+
+def crea_repere_xy(vect_x, vect_y):
+
+    """Calcul des angles nautiques a partir des directions vect_x et vect_y.
+       Si vect_x != None et vect_y != None alors on impose le premier vecteur de base
+           colineaire a vect_x et le deuxieme vecteur dans le plan (vect_x,vect_y)
+       Si vect_x != None et vect_y == None alors on impose le premier vecteur de base
+           colineaire a vect_x
+       Si vect_x == None et vect_y != None alors on impose le deuxieme vecteur de base
+           colineaire a vect_y
+       Si vect_x == None et vect_y == None alors on ne fait rien
+    """
+
+    import numpy
+    from Utilitai.Utmess import UTMESS
+
+    if vect_x == None and vect_y == None:
+      angl_naut = (0.,0.,0.)
+    else:
+      if vect_x and vect_y:
+        vx = numpy.array(list(vect_x))
+        vy = numpy.array(list(vect_y))
+        vect1 = vx
+        vect3 = numpy.cross(vx,vy)
+        vect2 = numpy.cross(vect3,vx)
+
+      elif vect_x:
+        vx = numpy.array(list(vect_x))
+        vy1 = numpy.cross((1.,0.,0.),vx)
+        vy2 = numpy.cross((0.,1.,0.),vx)
+        vy3 = numpy.cross((0.,0.,1.),vx)
+        n1 = norm(vy1)
+        n2 = norm(vy2)
+        n3 = norm(vy3)
+        nmax = max(n1,n2,n3)
+        if nmax == n1:
+            vy = vy1
+        elif nmax == n2:
+            vy = vy2
+        elif nmax == n3:
+            vy = vy3
+        else:
+            UTMESS('F','UTILITAI_7')
+        vect3 = numpy.cross(vx,vy)
+        vect1 = vx
+        vect2 = numpy.cross(vect3,vect1)
+
+      elif vect_y:
+        vy = numpy.array(list(vect_y))
+        vx1 = numpy.cross((1.,0.,0.),vy)
+        vx2 = numpy.cross((0.,1.,0.),vy)
+        vx3 = numpy.cross((0.,0.,1.),vy)
+        n1 = norm(vx1)
+        n2 = norm(vx2)
+        n3 = norm(vx3)
+        nmax = max(n1,n2,n3)
+        if nmax == n1:
+            vx = vx1
+        elif nmax == n2:
+            vx = vx2
+        elif nmax == n3:
+            vx = vx3
+        else:
+            UTMESS('F','UTILITAI_7')
+        vect3 = numpy.cross(vx,vy)
+        vect2 = vy
+        vect1 = numpy.cross(vect2, vect3)
+
+      
+      norm12=numpy.dot(vect1,vect1)
+      norm22=numpy.dot(vect2,vect2)
+      norm32=numpy.dot(vect3,vect3)
+      if norm12 == 0 or norm22 == 0 or norm32 == 0:
+          UTMESS('F','UTILITAI_7')
+      else:
+          reploc = numpy.array([vect1.tolist(),vect2.tolist(),vect3.tolist()])
+          reploc = numpy.transpose(reploc)
+          angl_naut = anglnaut(reploc)
+
+    return angl_naut
+
+#*****************************************************************************
+# Aller chercher une liste de noeuds pour un mot cle 'NOEUD', 'GROUP_NO'
+# 'MAILLE' ou 'GROUP_MA'
+#*****************************************************************************
+
+def find_no(maya,mcsimp):
+    """ Si on demande une liste de noeuds, c'est simple, on retourne les noeuds
+        Si on demande une liste de groupes de noeuds, on va chercher les noeuds
+          dans ces groupes, en faisant attention a ne pas etre redondant
+        Si on demande un liste de mailles, on va chercher dans le .CONNEX
+          du maillage les indices, puis les noms des noeuds concernes
+        etc...
+    """
+
+    import numpy
+
+    list_no = []
+    if mcsimp.has_key('GROUP_NO') and type(mcsimp['GROUP_NO']) != tuple :
+        mcsimp['GROUP_NO'] = [mcsimp['GROUP_NO']]
+    if mcsimp.has_key('MAILLE') and type(mcsimp['MAILLE']) != tuple :
+        mcsimp['MAILLE'] = [mcsimp['MAILLE']]
+    if mcsimp.has_key('GROUP_MA') and type(mcsimp['GROUP_MA']) != tuple :
+        mcsimp['GROUP_MA'] = [mcsimp['GROUP_MA']]
+
+    if mcsimp.has_key('NOEUD') :
+        list_no = list(mcsimp['NOEUD'])
+    elif mcsimp.has_key('GROUP_NO') :
+        for group in mcsimp['GROUP_NO'] :
+            list_ind_no = list(numpy.array(maya.GROUPENO.get()[group.ljust(8)])-1)
+            for ind_no in list_ind_no :
+                nomnoe = maya.NOMNOE.get()[ind_no]
+                if nomnoe not in list_no :
+                    list_no.append(nomnoe)
+    elif mcsimp.has_key('MAILLE') :
+        for mail in mcsimp['MAILLE'] :
+            for index in range(len(maya.NOMMAI.get())):
+                if maya.NOMMAI.get()[index].strip() == mail:
+                    nu_ma = index
+            for ind_no in maya.CONNEX.get()[nu_ma+1]:
+                    nomnoe = maya.NOMNOE.get()[ind_no-1]
+                    if nomnoe not in list_no:
+                        list_no.append(nomnoe)
+    elif mcsimp.has_key('GROUP_MA') :
+        for group in mcsimp['GROUP_MA'] :
+            list_nu_ma = list(numpy.array(maya.GROUPEMA.get()
+                                            [group.ljust(8)]) - 1)
+            for nu_ma in list_nu_ma:
+                for ind_no in maya.CONNEX.get()[nu_ma+1]:
+                    nomnoe = maya.NOMNOE.get()[ind_no-1]
+                    if nomnoe not in list_no:
+                        list_no.append(nomnoe)
+
+    return list_no
+
+#*****************************************************************************
+# Aller chercher une liste de mailles pour un mot cle 'MAILLE' ou 'GROUP_MA'
+#*****************************************************************************
+
+def find_ma(maya,mcsimp):
+    """ Si mot cle MAILLE, on retourne la liste des mailles
+        Si mot cle GROUP_MA, on va chercher les mailles dans ces groupes
+    """
+
+    import numpy
+
+    list_ma = []
+    if mcsimp.has_key('GROUP_MA') and type(mcsimp['GROUP_MA']) != tuple :
+        mcsimp['GROUP_MA'] = [mcsimp['GROUP_MA']]
+    if mcsimp.has_key('MAILLE') and type(mcsimp['MAILLE']) != tuple :
+        mcsimp['MAILLE'] = [mcsimp['MAILLE']]
+
+    if mcsimp.has_key('MAILLE') :
+        for mail in mcsimp['MAILLE'] :
+            list_ma.append(mail)
+    elif mcsimp.has_key('GROUP_MA') :
+        for group in mcsimp['GROUP_MA'] :
+            list_ind_ma = list(numpy.array(maya.GROUPEMA.get()[group.ljust(8)])-1)
+            for ind_ma in list_ind_ma :
+                nommail = maya.NOMMAI.get()[ind_ma]
+                if nommail not in list_ma :
+                    list_ma.append(nommail)
+
+    return list_ma
+
+
+#************************************************************************************
+# Quelques utilitaires de calculs d'angles nautiques (viennent de zmat004a.comm
+#************************************************************************************
+
+def norm(x):
+    """Calcul de la norme euclidienne d'un vecteur"""
+    import numpy
+    tmp = numpy.sqrt(numpy.dot(x,x))
+    return tmp
+
+
+def anglnaut(P):
+
+
+    """Calcule les angles nautiques correspondant a un repere local
+       NB : seuls les deux premiers vecteurs de P (les images respectives
+       de X et Y) sont utiles pour le calcul des angles
+    """
+
+    import copy
+    import numpy
+    # expression des coordonnees globales des 3 vecteurs de base locale
+    x = numpy.array([1.,0.,0.])
+    y = numpy.array([0.,1.,0.])
+    z = numpy.array([0.,0.,1.])
+
+    xg = P[:,0]
+    yg = P[:,1]
+    zg = P[:,2]
+
+    # calcul des angles nautiques
+    x1=copy.copy(xg)
+    # x1 projection de xg sur la plan xy, non norme
+    x1[2]=0.
+    # produit scalaire X xg
+    normx = norm(x1)
+    if normx == 0.: # on impose alpha = 0 pour lever l'indetermination
+        COSA=1.
+        SINA=0.
+    else:
+        COSA=x1[0]/normx
+        #produit vectoriel X xg
+        SINA=x1[1]/normx
+    ar=numpy.arctan2(SINA,COSA)
+    alpha=ar*180/numpy.pi
+
+    COSB=norm(x1)
+    SINB=-xg[2]
+    beta=numpy.arctan2(SINB,COSB)*180/numpy.pi
+
+    P2=numpy.zeros((3,3))
+    P2[0,0]=numpy.cos(ar)
+    P2[1,0]=numpy.sin(ar)
+    P2[1,1]=numpy.cos(ar)
+    P2[0,1]=-numpy.sin(ar)
+    y1=numpy.dot(P2,y)
+    y1n=y1/norm(y1)
+
+    # calcul de gamma
+    COSG=numpy.dot(y1n,yg)
+    SING=numpy.dot(xg,numpy.cross(y1n,yg))
+    gamma=numpy.arctan2(SING,COSG)*180/numpy.pi
+
+    return alpha,beta,gamma
+
+
+##  NB : Equations de passage : un vecteur de coordonnees globales (X,Y,Z) a pour
+##  coordonnees locales (X1,Y1,Z1) avec
+##  _                  _  _                   _  _                   _  _ _     _  _
+## | 1     0      0     || cos(B) 0    -sin(B) ||  cos(A)  sin(A)   0 || X |   | X1 |
+## | 0   cos(G)  sin(G) ||   0    1      0     || -sin(A)  cos(A)   0 || Y | = | Y1 |
+## |_0  -sin(G)  cos(G)_||_sin(B) 0     cos(B)_||_   0       0      1_||_Z_|   |_Z1_|
+##
+##  A (alpha), B(beta), gamma (G) sont les angle nautiques que l'on donne habituellemet
+##  dans les MODI_REPERE. Les equations a resoudre sont les suivantes :
+##       cos(A)cos(B)                      = reploc[0][0]
+##      -cos(G)sin(A) + sin(G)cos(A)sin(B) = reploc[0][1]
+##       sin(A)sin(G) + cos(A)sin(B)cos(G) = reploc[0][2]
+##
+##       sin(A)cos(B)                      = reploc[1][0]
+##       cos(A)cos(G) + sin(A)sin(B)sin(G) = reploc[1][1]
+##      -cos(A)sin(G) + sin(A)sin(B)cos(G) = reploc[1][2]
+##
+##                                 -sin(B) = reploc[2][0]
+##                            cos(B)sin(G) = reploc[2][1]
+##                            cos(B)cos(G) = reploc[2][2]
+
+
+
diff --git a/Aster/Cata/cataSTA10/Macro/post_coque_ops.py b/Aster/Cata/cataSTA10/Macro/post_coque_ops.py
new file mode 100644 (file)
index 0000000..40f7400
--- /dev/null
@@ -0,0 +1,172 @@
+#@ MODIF post_coque_ops Macro  DATE 08/02/2010   AUTEUR DESROCHES X.DESROCHES 
+
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+def post_coque_ops(self,RESULTAT,COOR_POINT,CHAM,NUME_ORDRE,INST,
+                     **args):
+    """
+    macro post_coque
+    """
+    import aster
+    import os, string
+    import Accas 
+    from Accas import _F
+    from Utilitai.Utmess import  UTMESS, MasquerAlarme, RetablirAlarme
+    from Utilitai.Table      import Table
+    from Noyau.N_utils import AsType
+    ier=0
+
+    # On importe les definitions des commandes a utiliser dans la macro
+    MACR_LIGN_COUPE  =self.get_cmd('MACR_LIGN_COUPE')
+    CREA_CHAMP      =self.get_cmd('CREA_CHAMP')
+    CREA_TABLE      =self.get_cmd('CREA_TABLE')
+    CALC_ELEM       =self.get_cmd('CALC_ELEM')
+
+
+    # La macro compte pour 1 dans la numerotation des commandes
+    self.set_icmd(1)
+    MasquerAlarme('MODELISA4_9')
+    
+  # Le concept sortant (de type table) est nomme
+  # 'tabout' dans le contexte de la macro
+  
+    self.DeclareOut('tabout',self.sd)
+    assert AsType(RESULTAT).__name__ in ('evol_elas','evol_noli',)
+    dico = RESULTAT.LIST_CHAMPS()
+    dico2 = RESULTAT.LIST_VARI_ACCES()
+    iret,ibid,n_modele = aster.dismoi('F','MODELE',RESULTAT.nom,'RESULTAT')
+    MODEL = self.get_concept(n_modele)
+    if INST != 0.0 :
+      if not INST in dico2['INST'] :
+          UTMESS('F','POST0_20',valr=INST)
+    else :
+      if not NUME_ORDRE in dico['SIEF_ELNO_ELGA'] :
+        if NUME_ORDRE in dico['DEPL'] :        
+          CALC_ELEM(RESULTAT=RESULTAT,reuse=RESULTAT,OPTION='SIEF_ELNO_ELGA',
+                    NUME_ORDRE=NUME_ORDRE)
+        else :
+          UTMESS('F','POST0_19',vali=NUME_ORDRE)
+    dico = RESULTAT.LIST_CHAMPS()
+
+  # Calcul des deformations sur les peaux inf et sup :
+    if CHAM=='DEFORMATION':
+      if NUME_ORDRE:
+        __ressup=CALC_ELEM(RESULTAT=RESULTAT,
+                  OPTION='EPSI_ELNO_DEPL',REPE_COQUE=_F(NIVE_COUCHE='SUP'),
+                  NUME_ORDRE=NUME_ORDRE)
+        __resinf=CALC_ELEM(RESULTAT=RESULTAT,
+                  OPTION='EPSI_ELNO_DEPL',REPE_COQUE=_F(NIVE_COUCHE='INF'),
+                  NUME_ORDRE=NUME_ORDRE)
+        __epssup=CREA_CHAMP(RESULTAT=__ressup,TYPE_CHAM='ELNO_EPSI_R',
+                  OPERATION='EXTR',NOM_CHAM='EPSI_ELNO_DEPL',
+                  NUME_ORDRE=NUME_ORDRE)
+        __epsinf=CREA_CHAMP(RESULTAT=__resinf,TYPE_CHAM='ELNO_EPSI_R',
+                  OPERATION='EXTR',NOM_CHAM='EPSI_ELNO_DEPL',
+                  NUME_ORDRE=NUME_ORDRE)
+      else :
+        __ressup=CALC_ELEM(RESULTAT=RESULTAT,
+                  OPTION='EPSI_ELNO_DEPL',REPE_COQUE=_F(NIVE_COUCHE='SUP'),
+                  INST=INST)
+        __resinf=CALC_ELEM(RESULTAT=RESULTAT,
+                  OPTION='EPSI_ELNO_DEPL',REPE_COQUE=_F(NIVE_COUCHE='INF'),
+                  INST=INST)
+        __epssup=CREA_CHAMP(RESULTAT=__ressup,TYPE_CHAM='ELNO_EPSI_R',
+                  OPERATION='EXTR',NOM_CHAM='EPSI_ELNO_DEPL',
+                  INST=INST)
+        __epsinf=CREA_CHAMP(RESULTAT=__resinf,TYPE_CHAM='ELNO_EPSI_R',
+                  OPERATION='EXTR',NOM_CHAM='EPSI_ELNO_DEPL',
+                  INST=INST)
+
+                                                                     
+    # Appel MACR_LIGN_COUPE :
+    motscles={}
+    if   CHAM=='EFFORT'      : motscles['NOM_CHAM']   ='SIEF_ELNO_ELGA'
+    if   CHAM=='DEFORMATION' : motscles['NOM_CHAM']   ='EPSI_ELNO_DEPL'
+
+    if CHAM=='EFFORT' :
+      motscles['LIGN_COUPE']=[]
+      iocc=0
+      for m in COOR_POINT:
+        iocc=iocc+1
+        lst=m['COOR']
+        if len(lst)==4 :
+          if lst[3]!=0. :
+            UTMESS('A','POST0_21',vali=iocc,valr=lst[3])
+          lst=lst[0:3]
+        motscles['LIGN_COUPE'].append(_F(TYPE='SEGMENT',
+                                 NB_POINTS=2,
+                                 COOR_ORIG=lst,
+                                 COOR_EXTR=lst,
+                                 DISTANCE_MAX=10.0,),)
+      __tabl=MACR_LIGN_COUPE(RESULTAT=RESULTAT,**motscles)
+
+    if CHAM=='DEFORMATION' :
+      tab2=Table()
+      iocc=0
+      for m in COOR_POINT:
+        motscles['LIGN_COUPE']=[]
+        iocc=iocc+1
+        lst=m['COOR']
+        if len(lst)!=4 :
+          UTMESS('F','POST0_22',vali=iocc,)
+        elif (lst[3]>1.) or (lst[3]<-1.) :
+          UTMESS('F','POST0_23',vali=iocc,valr=lst[3],)
+        coesup=0.5+lst[3]*0.5
+        coeinf=0.5-lst[3]*0.5
+        __epsz=CREA_CHAMP(TYPE_CHAM='ELNO_EPSI_R',OPERATION='ASSE',
+                MODELE=MODEL,
+                ASSE=(
+                _F(TOUT='OUI',
+                   CHAM_GD=__epsinf,
+                   CUMUL='OUI',
+                   COEF_R=coeinf,),
+                _F(TOUT='OUI',
+                   CHAM_GD=__epssup,
+                   CUMUL='OUI',
+                   COEF_R=coesup,),),);
+        lst=lst[0:3]
+        motscles['LIGN_COUPE'].append(_F(TYPE='SEGMENT',
+                                 NB_POINTS=2,
+                                 COOR_ORIG=lst,
+                                 COOR_EXTR=lst,
+                                 DISTANCE_MAX=10.0,),)
+        __tab=MACR_LIGN_COUPE(CHAM_GD=__epsz,MODELE=MODEL,**motscles)
+        __tab2=__tab.EXTR_TABLE()
+        for ligne in __tab2:
+          tab2.append(ligne)
+        tab2=tab2[__tab2.para]
+
+    if CHAM=='EFFORT' :
+      tab2=__tabl.EXTR_TABLE()
+      tab3=(tab2.INST==INST)
+      tab2=tab3
+
+    tab4=Table()
+    ilig=0
+    for ligne in tab2:
+       ilig=ilig+1
+       if(ilig%2)==0:
+         tab4.append(ligne)       
+    tab4=tab4[tab2.para]
+    dprod = tab4.dict_CREA_TABLE()
+    tabout = CREA_TABLE(TYPE_TABLE='TABLE',
+                       **dprod)
+    RetablirAlarme('MODELISA4_9')
+    return ier                                                           
+
diff --git a/Aster/Cata/cataSTA10/Macro/post_dyna_alea_ops.py b/Aster/Cata/cataSTA10/Macro/post_dyna_alea_ops.py
new file mode 100644 (file)
index 0000000..0d3f671
--- /dev/null
@@ -0,0 +1,431 @@
+#@ MODIF post_dyna_alea_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+import random
+from types import ListType, TupleType
+from math  import pi,sqrt,log,exp
+
+EnumTypes = (ListType, TupleType)
+
+
+def post_dyna_alea_ops(self,INTE_SPEC, FRAGILITE,TITRE,INFO,**args):
+   import numpy as NP
+   import aster
+   from Accas                 import _F
+   from Utilitai.Utmess       import UTMESS
+   from Cata_Utils.t_fonction import t_fonction
+   from Utilitai.Table        import Table
+
+   commande='POST_DYNA_ALEA'
+
+   ier = 0
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+
+   # Le concept sortant (de type table_sdaster ou dérivé) est tab
+   self.DeclareOut('tabout', self.sd)
+
+   # On importe les definitions des commandes a utiliser dans la macro
+   # Le nom de la variable doit etre obligatoirement le nom de la commande
+   CREA_TABLE    = self.get_cmd('CREA_TABLE')
+   CALC_TABLE    = self.get_cmd('CALC_TABLE')
+   IMPR_TABLE    = self.get_cmd('IMPR_TABLE')
+   RECU_FONCTION = self.get_cmd('RECU_FONCTION')
+   IMPR_FONCTION = self.get_cmd('IMPR_FONCTION')
+   DEFI_LIST_REEL = self.get_cmd('DEFI_LIST_REEL')
+   DEFI_FONCTION  = self.get_cmd('DEFI_FONCTION')
+   CALC_FONCTION  = self.get_cmd('CALC_FONCTION')
+
+
+#  ------------------------------------------------------------------
+#---------algorithme d'optimisation pour le  maximum de vraisemblance
+   def vrais(x):
+      am=x[0]
+      beta=x[1]
+#       assert am >0.000, 'optimize.py: beta negatif'
+#       assert am >0.000, 'optimize.py: am negatif'
+      if am <=0.000:
+          am=0.01
+      if beta <=0.000:
+          beta=0.001          
+      res=1.0
+      for k in range(Nbval):
+         ai=liste_indic[k]
+         xi=float(liste_def[k])
+         val=log(ai/am)
+         pfa=normcdf(val/beta)
+         f0=pfa**xi*(1.-pfa)**(1-xi)
+         res=res*f0
+      return -res
+
+   def boot_vrais(x):
+      am=x[0]
+      beta=x[1]
+      res=1.0
+      for k in range(Nbval):
+         ai=liste_indic[list_rand[k]]
+         xi=float(liste_def[list_rand[k]])
+         val=log(ai/am)
+         pfa=normcdf(val/beta)
+         f0=pfa**xi*(1.-pfa)**(1-xi)
+         res=res*f0
+      return -res
+
+#  ------------------------------------------------------------------
+#  OPTION FRAGILITE
+# ------------------------------------------------------------------
+   if FRAGILITE !=None :
+      from Utilitai.optimize   import fmin
+      from Utilitai.stats   import normcdf
+
+      if FRAGILITE['LIST_PARA'] != None :
+         liste_a = FRAGILITE['LIST_PARA'].VALE.get()
+      elif FRAGILITE['VALE'] != None :
+         liste_a =FRAGILITE['VALE']
+
+
+      Nba=len(liste_a)
+      lpfa=[]
+      tab2 = FRAGILITE['TABL_RESU'].EXTR_TABLE()
+      dicta = tab2.values()
+
+      if dicta.has_key('DEFA') :
+         liste_def = dicta['DEFA']
+      else:
+         UTMESS('F','TABLE0_1',valk=('DEFA'))
+      if dicta.has_key('PARA_NOCI') :
+        liste_indic = dicta['PARA_NOCI']
+      else:
+        UTMESS('F','TABLE0_1',valk=('PARA_NOCI'))
+
+      Nbval=len(liste_indic)
+
+      test1 = NP.equal(None,liste_indic)
+      test2 = NP.equal(None,liste_def)
+      if test1.any() or test2.any():
+         UTMESS('F','TABLE0_15')
+
+      # estimation paramètres
+      x0 = [FRAGILITE['AM_INI'],FRAGILITE['BETA_INI']]
+      xopt = fmin(vrais,x0)
+
+      texte='PARAMETRES Am, beta ESTIMES : '+str(xopt)+'\n'
+      aster.affiche('MESSAGE',texte)      #print 'parametres Am, beta estimes: ', xopt
+
+      #courbe de fragilité
+      vec_a=NP.array(liste_a)
+      vecval=(NP.log(vec_a/xopt[0]))/xopt[1]
+      for m in range(Nba):
+         lpfa.append(normcdf(vecval[m]))
+
+      # table sortie
+
+      mcfact=[]
+      if  TITRE !=None :
+           mcfact.append(_F(PARA= 'TITRE' , LISTE_K= TITRE  ))
+
+      mcfact.append(_F(PARA= 'AM' ,LISTE_R=xopt[0] ))
+      mcfact.append(_F(PARA= 'BETA' ,LISTE_R=xopt[1] ))
+      mcfact.append(_F(PARA= 'PARA_NOCI' ,LISTE_R =liste_a  ))
+      mcfact.append(_F(PARA= 'PFA' ,LISTE_R = lpfa ))
+
+
+      # si calcul de fractiles (intervalles de confiance) par bootstrap
+
+      x0 = xopt
+      if FRAGILITE['FRACTILE']!= None :
+         if INFO==2 :
+            texte='FRACTILES A CALCULER PAR BOOTSTRAP '+ str(FRAGILITE['FRACTILE']) +'\n'
+            aster.affiche('MESSAGE',texte)
+         if FRAGILITE['NB_TIRAGE']!= None :
+            Nboot = FRAGILITE['NB_TIRAGE']
+            if Nboot > Nbval :
+               UTMESS('F','PROBA0_11')     #assert Nboot <= Nbval , 'ERREUR: nombre de tirages demandes trop grand'
+         else:
+            Nboot = Nbval
+
+         list_fonc = []
+         lfract =FRAGILITE['FRACTILE']
+         __F1=[None]*Nbval
+         __ABS=[None]*Nbval
+         __ORDO=[None]*Nbval
+
+         for kb in range(Nboot) : #in range(Nbval)
+
+            lpfa = []
+            list_rand = []
+
+            for kb2 in range(Nbval) :
+               list_rand.append(random.randint(0,Nbval-1))
+
+            xopt = fmin(boot_vrais,x0)
+            if INFO==2 :
+               texte1='BOOTSTRAP TIRAGE '+ str(kb+1)
+               texte2='  PARAMETRES Am, beta ESTIMES : '+str(xopt)+'\n'
+               aster.affiche('MESSAGE',texte1) 
+               aster.affiche('MESSAGE',texte2)
+            vecval=(NP.log(vec_a/xopt[0]))/xopt[1]
+            for m in range(Nba):
+               lpfa.append(normcdf(vecval[m]))
+
+            __ABS[kb]=DEFI_LIST_REEL( VALE = liste_a  );
+            __ORDO[kb]=DEFI_LIST_REEL( VALE = lpfa );
+
+            __F1[kb]=DEFI_FONCTION(  NOM_PARA='PGAZ',
+                                     NOM_RESU = 'PFA',
+                                     VALE_PARA = __ABS[kb],
+                                     VALE_FONC = __ORDO[kb],);
+            list_fonc.append(__F1[kb],)
+
+
+         #__FRACTILE = [None]*len(lfract)
+         liste = [None]*len(lfract)
+         for kb in range(len(lfract)):
+            __FRACTILE=CALC_FONCTION(FRACTILE=_F(FONCTION=(list_fonc),
+                             FRACT=lfract[kb]), );
+            liste[kb]= __FRACTILE.Ordo()
+            mcfact.append(_F(PARA= str(lfract[kb]) ,LISTE_R =liste[kb]  ))
+
+
+      #   fin FRAGILITE
+      tabout = CREA_TABLE(LISTE=mcfact,TITRE = 'POST_DYNA_ALEA concept : '+self.sd.nom)
+
+#  ------------------------------------------------------------------
+
+
+#  ------------------------------------------------------------------
+#  OPTION INTESPEC
+# ------------------------------------------------------------------
+   if INTE_SPEC !=None :
+
+      TOUT_ORDRE = args['TOUT_ORDRE']
+      NUME_VITE_FLUI=args['NUME_VITE_FLUI']
+
+      NUME_ORDRE_I=args['NUME_ORDRE_I']
+      NOEUD_I=args['NOEUD_I']
+      OPTION=args['OPTION']
+
+      MOMENT=args['MOMENT']
+
+      intespec=INTE_SPEC.EXTR_TABLE()
+      # pour la clarté !
+      NUME_VITE_FLUI_present = 'NUME_VITE_FLUI' in intespec.para
+      NUME_ORDRE_I_present   = 'NUME_ORDRE_I'   in intespec.para
+      NOEUD_I_present        = 'NOEUD_I'        in intespec.para
+
+      # table résultat
+      tabres = Table(titr='POST_DYNA_ALEA concept : %s' % self.sd.nom)
+
+#     ------------------------------------------------------------------
+#     Liste des moments spectraux
+#     repérer le type de l'interspectre et son nom
+#                   1- concept interspectre
+#                   2- table de table d interspectre
+
+      if NUME_VITE_FLUI_present :
+         if TOUT_ORDRE != None :
+            jvite = list(set(intespec.NUME_VITE_FLUI.not_none_values()))
+            jvite.sort()
+         else :
+            jvite=[NUME_VITE_FLUI,]
+      else :
+         jvite  =[None]
+
+#     ------------------------------------------------------------------
+#     Repérer les couples d'indices selectionnés
+#     vérification de l'égalité du nombre d indices en i et j
+
+      if NUME_ORDRE_I!=None :
+        l_ind_i=NUME_ORDRE_I
+        l_ind_j=args['NUME_ORDRE_J']
+        if type(l_ind_i) not in EnumTypes : l_ind_i=[l_ind_i]
+        if type(l_ind_j) not in EnumTypes : l_ind_j=[l_ind_j]
+        if len(l_ind_i)!=len(l_ind_j) :
+           UTMESS('F','PROBA0_8')
+        # paramètres fixes de la table
+        tabres.add_para(['NUME_ORDRE_I','NUME_ORDRE_J'], 'I')
+      elif NOEUD_I!=None :
+        l_ind_i=NOEUD_I
+        l_ind_j=args['NOEUD_J']
+        l_cmp_i=args['NOM_CMP_I']
+        l_cmp_j=args['NOM_CMP_J']
+        if type(l_cmp_i) not in EnumTypes : l_cmp_i=[l_cmp_i]
+        if type(l_cmp_j) not in EnumTypes : l_cmp_j=[l_cmp_j]
+        if type(l_ind_i) not in EnumTypes : l_ind_i=[l_ind_i]
+        if type(l_ind_j) not in EnumTypes : l_ind_j=[l_ind_j]
+        if len(l_ind_i)!=len(l_ind_j) :
+           UTMESS('F','PROBA0_8')
+        if len(l_cmp_i)!=len(l_cmp_j) :
+           UTMESS('F','PROBA0_9')
+        if len(l_ind_i)!=len(l_cmp_i) :
+           UTMESS('F','PROBA0_10')
+        # paramètres fixes de la table
+        tabres.add_para(['NOEUD_I','NOEUD_J','NOM_CMP_I','NOM_CMP_J'], 'K8')
+
+#     ------------------------------------------------------------------
+#     Cas de tous les indices centraux
+
+      elif OPTION!=None :
+         if NUME_VITE_FLUI_present :
+               intespec = intespec.NUME_VITE_FLUI == jvite[0]
+
+         if NUME_ORDRE_I_present :
+            imode = list(set(intespec.NUME_ORDRE_I.not_none_values()))
+            l_ind_i=imode
+            l_ind_j=imode
+            # paramètres fixes de la table
+            tabres.add_para(['NUME_ORDRE_I','NUME_ORDRE_J'], 'I')
+         else :
+            l_ind_i = intespec.NOEUD_I.values()
+            l_ind_j = intespec.NOEUD_J.values()
+            if len(l_ind_i) != len(l_ind_j) :
+               UTMESS('F','PROBA0_8')
+            l_cmp_i = intespec.NOM_CMP_I.values()
+            l_cmp_j = intespec.NOM_CMP_J.values()
+            if (len(l_ind_i) != len(l_cmp_i) or len(l_ind_j) != len(l_cmp_j)) :
+               UTMESS('F','PROBA0_10')
+            l_l=zip(zip(l_ind_i,l_cmp_i),zip(l_ind_j,l_cmp_j))
+            l_ind_i=[]
+            l_ind_j=[]
+            l_cmp_i=[]
+            l_cmp_j=[]
+            for ai,aj in l_l :
+                if ai==aj :
+                   l_ind_i.append(ai[0])
+                   l_ind_j.append(aj[0])
+                   l_cmp_i.append(ai[1])
+                   l_cmp_j.append(aj[1])
+            # paramètres fixes de la table
+            tabres.add_para(['NOEUD_I','NOEUD_J','NOM_CMP_I','NOM_CMP_J'], 'K8')
+
+      if jvite[0]!=None :
+         tabres.add_para('NUME_VITE_FLUI', 'I')
+
+
+#     ------------------------------------------------------------------
+#     Liste des moments spectraux
+
+      l_moments=[0,1,2,3,4]
+      if MOMENT!=None :
+         l_moments.extend(list(MOMENT))
+         l_moments=list(set(l_moments))
+
+#     ------------------------------------------------------------------
+#     Boucle sur les fonctions
+
+      if NOEUD_I_present :
+         l_ind=zip(l_ind_i,l_ind_j, l_cmp_i,l_cmp_j)
+      else :
+         l_ind=zip(l_ind_i, l_ind_j )
+
+
+      # pour la présentation de la table finale, on stocke le nbre de paramètres "initiaux"
+      nbpara0 = len(tabres.para)
+
+      for vite in jvite :
+        if INFO==2 :
+           texte='POUR LA MATRICE INTERSPECTRALE '+INTE_SPEC.nom+'\n'
+           aster.affiche('MESSAGE',texte)
+        for ind in l_ind :
+           dlign = {}
+           mcfact=[]
+           if vite!=None :
+             dlign['NUME_VITE_FLUI'] = vite
+             mcfact.append(_F(NOM_PARA='NUME_VITE_FLUI',VALE_I=vite))
+           if NOEUD_I_present :
+             i_foncstat = ind[0] == ind[1] and  ind[2] == ind[3]
+             dlign['NOEUD_I'], dlign['NOEUD_J'], dlign['NOM_CMP_I'], dlign['NOM_CMP_J'] = \
+                  ind[0], ind[1], ind[2], ind[3]
+             mcfact.append(_F(NOM_PARA='NOEUD_I',VALE_K=ind[0]))
+             mcfact.append(_F(NOM_PARA='NOEUD_J',VALE_K=ind[1]))
+             mcfact.append(_F(NOM_PARA='NOM_CMP_I',VALE_K=ind[2]))
+             mcfact.append(_F(NOM_PARA='NOM_CMP_J',VALE_K=ind[3]))
+             if INFO==2 :
+                aster.affiche('MESSAGE','INDICES :'+ind[0]+' - '+ind[1])
+                aster.affiche('MESSAGE','INDICES :'+ind[2]+' - '+ind[3]+'\n')                
+           else :
+             i_foncstat = ind[0] == ind[1]
+             dlign['NUME_ORDRE_I'], dlign['NUME_ORDRE_J'] = ind[0], ind[1]
+             mcfact.append(_F(NOM_PARA='NUME_ORDRE_I',VALE_I=ind[0]))
+             mcfact.append(_F(NOM_PARA='NUME_ORDRE_J',VALE_I=ind[1]))
+             if INFO==2 :
+                aster.affiche('MESSAGE','INDICES :'+str(ind[0])+' - '\
+                                                   +str(ind[1])+'\n')
+                                                   
+           __fon1=RECU_FONCTION(TABLE        = INTE_SPEC,
+                                NOM_PARA_TABL= 'FONCTION_C',
+                                FILTRE       = mcfact, )
+
+           val  = __fon1.Valeurs()
+           fvalx= NP.array(val[0])
+           fvaly= NP.array(val[1])
+           frez = fvalx[0]
+
+           # -- moments spectraux
+
+           val_mom={}
+           for i_mom in l_moments :
+               n         = len(fvaly)
+               trapz     = NP.zeros(n)
+               trapz[0]  = 0.
+               valy      = fvaly*(2*pi*fvalx)**i_mom
+               trapz[1:n] = (valy[1:n]+valy[:-1])/2*(fvalx[1:n]-fvalx[:-1])
+               prim_y    = NP.cumsum(trapz)
+               val_mom[i_mom] = prim_y[-1]
+           for i_mom in l_moments :
+             chmo='LAMBDA_'+str(i_mom).zfill(2)
+             dlign[chmo] = val_mom[i_mom]
+
+        #--- si auto-spectre:
+           if i_foncstat:
+              # test si le spectre est bien à valeurs positives                    
+              if min(fvaly) < 0.0 :
+                 aster.affiche('MESSAGE', str(ind)+'\n')
+                 UTMESS('F','MODELISA9_95')
+              # -- fonctions statistiques              
+              if NUME_VITE_FLUI or frez >= 0. :
+                  # -- cas NUME_VITE_FLUI, seule la partie positive du spectre est utilisée
+                  # -- Il faut donc doubler lambda  pour calculer le bon écart type
+                  dlign['ECART'] = sqrt(val_mom[0]*2.)
+              else :
+                  dlign['ECART'] = sqrt(val_mom[0])
+              if abs(val_mom[2])>=1e-20 :
+                    dlign['NB_EXTREMA_P_S'] = 1./pi*sqrt(val_mom[4]/val_mom[2])
+              if abs(val_mom[0])>=1e-20 :
+                 dlign['NB_PASS_ZERO_P_S'] = 1./pi*sqrt(val_mom[2]/val_mom[0])
+                 dlign['FREQ_APPAR'] = 0.5*dlign['NB_PASS_ZERO_P_S']
+                 if abs(val_mom[4])>=1e-20 :
+                    dlign['FACT_IRRE'] = sqrt( val_mom[2]*val_mom[2]/val_mom[0]/val_mom[4])
+
+           # ajoute la ligne à la Table
+           tabres.append(dlign)
+
+#--- construction de la table produite
+
+      # tri des paramètres
+      ord_para = tabres.para[nbpara0:]
+      ord_para.sort()
+      ord_para = tabres.para[:nbpara0] + ord_para
+      dprod = tabres[ord_para].dict_CREA_TABLE()
+
+      tabout = CREA_TABLE(**dprod)
+
+   return ier
+
diff --git a/Aster/Cata/cataSTA10/Macro/post_endo_fiss_ops.py b/Aster/Cata/cataSTA10/Macro/post_endo_fiss_ops.py
new file mode 100644 (file)
index 0000000..e5a282e
--- /dev/null
@@ -0,0 +1,868 @@
+#@ MODIF post_endo_fiss_ops Macro  DATE 31/05/2010   AUTEUR COURTOIS M.COURTOIS 
+
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE BOTTONI M.BOTTONI
+# ---------------------------------------------------------------------------
+#                  POST_ENDO_FISS
+# PROCEDURE PYTHON DU RECHERCHE DU TRAJET DE FISSURATION SUR UN
+#  CHAMP SCALAIRE 2D
+
+
+
+# ----------------------------
+#
+# FONCTIONS UTILES
+#
+# ----------------------------
+
+# FIND IN A VECTOR :
+#   Fonction qui trouve tous les valeurs dans "Vect"
+#    egal au scalaire "a".
+#    On retourne tous les indices des valeurs cherchees
+#    Vect doit etre un vecteur unidimensionnel
+def vfind(Vect,a) :
+  import numpy as NP
+  Vect0 = Vect-a
+  lst0  = NP.nonzero(Vect0)[0]
+  NP.put(Vect0,lst0, NP.ones(lst0.shape))
+  Vect0 = Vect0-1
+  lst0 = NP.nonzero(Vect0)[0]
+  return lst0
+
+# DELETE ELEMENT IN A VECTOR :
+#   Fonction qui sert a effacer des elements d'un vecteur Vect
+#   (element array unidimmensionnel ou matrice avec la deuxieme dimension 1)
+#   a: vecteur d'indices avec le meme cahracteristiques que Vect
+def delEl(Vect,a) :
+  import numpy as NP
+  class LengthError(Exception):
+    pass
+
+  shapeV = Vect.shape
+  if type(a) == list :
+    a=NP.array(a)
+  shapea = a.shape
+
+  lenErr = True
+  if len(shapeV)==1 :
+    lenErr = False
+  if len(shapea)==1 :
+    lenErr = False
+  if  len(shapea)==2 and (shapea[0]==1 or shapea[1]==1) :
+    lenErr = False
+  if lenErr :
+    raise LengthError
+
+  Vect = Vect.tolist()
+  a    = NP.ravel(a)
+  a    = NP.sort(a)
+
+  for i in range(len(a)) :
+    idx = a[i]
+    try :
+      del Vect[idx]
+    except TypeError :
+      raise TypeError
+    a = a-1
+
+  Vect = NP.array(Vect)
+  return Vect
+
+
+# RETURN A UNIQUE VECTOR
+# Fonction qui elimine les doublons dans un vecteur Vect
+#   Vect doit etre un vecteur unidimensionnel
+def unique(Vect):
+  i = 0
+  while i < len(Vect) :
+    num = Vect[i]
+    idxDou = vfind(Vect, num)
+    if len(idxDou)>1 :
+      idxDou = idxDou[1:len(idxDou)]
+      Vect = delEl(Vect,idxDou)
+    i = i+1
+  return Vect
+
+
+
+# CREATE A 1D-MESH :
+#  Cree un maillage SEG2 en 2D
+#    Coorx  : liste des coordonnees x des noeuds
+#    Coory  : liste des coordonnees y des noeuds
+#    Connex : connectivites entre les noeuds
+#             (liste de tuples d'entiers)
+#
+
+def crea_mail_lin(XcreteTot,YcreteTot,ConnTot,dime):
+  resu  = 'TITRE\n'
+  titre = 'Maillage lineaire'+'\n'
+  resu  = resu + titre
+  resu  = resu+'FINSF\n'
+
+  # creation des noeuds
+  resu  = resu+'COOR_'+str(dime)+'D\n'
+  CoorX = XcreteTot[0]
+  CoorY = YcreteTot[0]
+  for i in range(1,len(XcreteTot)) :
+    CoorX = CoorX + XcreteTot[i]
+    CoorY = CoorY + YcreteTot[i]
+  nbNoeu = len(CoorX)
+  for i in range(nbNoeu):
+    nbno = i+1
+    x = CoorX[i]
+    y = CoorY[i]
+    noeud = '  N'+str(nbno)+'   '+str(x)+'    '+str(y)+'\n'
+    resu  = resu + noeud
+  resu = resu+'FINSF\n'
+
+  # creation des mailles
+  resu = resu+'SEG2\n'
+  nbmailTot = 0
+  nbNoTot   = 0
+  for j in range(len(ConnTot)) :
+    Connex = ConnTot[j]
+    nbmail = len(Connex)
+    for i in range(nbmail) :
+      nbma   = i+1+nbmailTot
+      ma     = Connex[i]
+      maille = '  M'+str(nbma)+' N'+str(ma[0]+nbNoTot)+' N'+str(ma[1]+nbNoTot)+'\n'
+      resu   = resu+maille
+    nbmailTot = nbmailTot + len(Connex)
+    nbNoTot   = nbNoTot   + len(XcreteTot[j])
+  resu = resu+'FINSF\n'
+
+  # creation des groupes de mailles "fissure"
+  nbmailTot = 0
+  for j in range(len(ConnTot)):
+    resu = resu+'GROUP_MA\n'
+    resu = resu+'FISSURE'+str(j+1)+'\n'
+    Connex = ConnTot[j]
+    nbmail = len(Connex)
+    for i in range(nbmail):
+      nbma = i+1+nbmailTot
+      resu = resu +'  M'+str(nbma)+'\n'
+    resu = resu+'\n'
+    resu = resu+'FINSF\n'
+    nbmailTot = nbmailTot + len(Connex)
+
+  resu = resu+'FIN\n'
+  return resu
+
+
+
+
+
+
+
+
+
+
+
+# ------------------------------------------
+#
+# ROUTINE POUR LA RECHERCHE DE LA CRETE
+#  POST ENDO FISS
+#
+# ------------------------------------------
+
+def post_endo_fiss_ops(self,
+                       TABLE,
+                       NOM_CMP,
+                       NOM_CHAM,
+                       RECHERCHE,
+                       **args) :
+
+  from Macro.macr_lign_coupe_ops import crea_noeu_lig_coup
+  from Macro.macr_lign_coupe_ops import crea_mail_lig_coup
+  from Utilitai.Utmess     import  UTMESS, MasquerAlarme, RetablirAlarme
+  from Utilitai.UniteAster import  UniteAster
+  from Accas import _F
+  from math import radians
+  import os
+  import numpy as NP
+
+
+  ier = 0
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  MasquerAlarme('CALCULEL5_48')
+
+  # --------------------------------------------------
+  # IMPORTATION COMMANDES ASTER
+  #
+  LIRE_MAILLAGE  = self.get_cmd('LIRE_MAILLAGE')
+  AFFE_MODELE    = self.get_cmd('AFFE_MODELE')
+  PROJ_CHAMP     = self.get_cmd('PROJ_CHAMP')
+  CREA_TABLE     = self.get_cmd('CREA_TABLE')
+  CREA_RESU      = self.get_cmd('CREA_RESU')
+  CREA_CHAMP     = self.get_cmd('CREA_CHAMP')
+
+
+  # --------------------------------------------------
+  # DECLARATION SORTIES
+  #
+  self.DeclareOut('__MAIFI',self.sd)
+  self.DeclareOut('__tabRes',TABLE)
+
+
+  # --------------------------------------------------
+  # RECUPERATION ENTREES
+  #
+  l_dRECHERCHE = []
+  for recherche in RECHERCHE :
+    dRECHERCHE = recherche.cree_dict_valeurs(recherche.mc_liste)
+    for i in dRECHERCHE.keys():
+      if dRECHERCHE[i]==None : del dRECHERCHE[i]
+    l_dRECHERCHE.append(dRECHERCHE)
+
+  # --------------------------------------------------
+  # TEST SUR LE TYPE DE CHAMP
+  #
+  ltyP_cham = ['NOEU_DEPL_R','ELGA_EPSI_R','ELNO_EPSI_R','NOEU_SIEF_R','ELGA_VARI_R','ELNO_VARI_R','ELNO_VARI_R','NOEU_VAR2_R']
+  lnoM_cham = ['DEPL','EPSI_ELGA_DEPL','EPSI_ELNO_DEPL','EPSI_NOEU_DEPL','VARI_ELGA','VARI_ELNO','VARI_ELNO_ELGA','VARI_NOEU_ELGA']
+
+  if NOM_CHAM in lnoM_cham :
+    Xtype_cham = ltyP_cham[lnoM_cham.index(NOM_CHAM)]
+  else :
+    UTMESS('F','POST0_35')
+
+
+  # --------------------------------------------------
+  # RECUPERATION ENTREES, MODELE ET MAILLAGE
+  #
+  motscles = {}
+
+  if args['CHAM_GD'] != None :
+    build    = 'champ'
+    __YBARTO = args['CHAM_GD']
+    __modtot = args['MODELE']
+    #n_modele = (__modtot.nom).strip()
+    inst = 1.
+    motscles['INST'] = inst
+
+  else :
+    build    = 'resu'
+    __RESUIN = args['RESULTAT']
+    nomresu  = __RESUIN.nom
+    dicResu  = __RESUIN.LIST_PARA()
+
+    if args['NUME_ORDRE'] != None :
+      inst = 1.
+      nume_ordre             = args['NUME_ORDRE']
+      motscles['NUME_ORDRE'] = nume_ordre
+    else :
+      inst             = args['INST']
+      motscles['INST'] = inst
+      dicVarAcc        = __RESUIN.LIST_VARI_ACCES()
+      nume_ordre       = dicVarAcc['INST'].index(inst) + 1
+
+    if args['MODELE'] != None :
+      __modtot = args['MODELE']
+    elif dicResu['MODELE'][0] is not None:
+      lst_n_modele = dicResu['MODELE']
+      n_modele     = lst_n_modele[nume_ordre-1]
+      n_modele = n_modele.strip()
+      __modtot = self.get_concept(n_modele)
+    else :
+      UTMESS('F','POST0_33')
+
+
+  n_mail = __modtot.MODELE.LGRF.get()
+  n_mail = n_mail[0].strip()
+  __mail = self.get_concept(n_mail)
+  Coortot  = __mail.COORDO.VALE.get()
+  Xtot     = Coortot[0:len(Coortot):3]
+  Ytot     = Coortot[1:len(Coortot):3]
+
+  dime = __mail.DIME.get()[5]
+  if dime != 2 :
+    UTMESS('F','POST0_34')
+
+
+  if build == 'resu' :
+    __YBARTO = CREA_CHAMP(TYPE_CHAM = Xtype_cham,
+                      OPERATION = 'EXTR',
+                      RESULTAT  = __RESUIN,
+                      NOM_CHAM  = NOM_CHAM,
+                      **motscles)
+
+
+
+  # --------------------------------------------------
+  # BOUCLE SUR L'OCCURRENCE DU MOT-CLEF RECHERCHE
+  #
+  XcreteTot    = []
+  YcreteTot    = []
+  ConnTot      = []
+  YbarcreteTot = []
+  lstFissure   = []
+
+
+  for idxRech in range(len(l_dRECHERCHE)) :
+
+    dRECHERCHE = l_dRECHERCHE[idxRech]
+
+    # ---------------------------------
+    # Recuperation valeurs d'entrees
+    #
+    lort     = dRECHERCHE['LONG_ORTH']
+    nbPoints = dRECHERCHE['NB_POINT']
+    pas      = dRECHERCHE['PAS']
+    lreg     = dRECHERCHE['LONG_REG']
+    seuil    = dRECHERCHE['SEUIL']
+    alpha    = dRECHERCHE['ANGL_MAX']
+    seuil    = dRECHERCHE['SEUIL']
+
+    if 'GROUP_MA' in dRECHERCHE.keys() :
+      groupma = dRECHERCHE['GROUP_MA']
+
+    # --------------------------------------------------
+    # Construction du concept resultat de travail
+    #
+    if build == 'champ' :
+      if 'GROUP_MA' in dRECHERCHE.keys() :
+        __YBARNO = CREA_CHAMP(OPERATION = 'ASSE',
+                              TYPE_CHAM  = Xtype_cham,
+                              MODELE    = __modtot,
+                              ASSE      = _F(CHAM_GD  = __YBARTO,
+                                            GROUP_MA = groupma,
+                                            NOM_CMP  = NOM_CMP,
+                                            ),)
+      else :
+        __YBARNO = __YBARTO
+
+
+    if build == 'resu' :
+      if 'GROUP_MA' in dRECHERCHE.keys() :
+        __YBARNO = CREA_CHAMP(OPERATION = 'ASSE',
+                              TYPE_CHAM = Xtype_cham,
+                              MODELE    = __modtot,
+                              ASSE      = _F(CHAM_GD  = __YBARTO,
+                                             GROUP_MA = groupma,
+                                             NOM_CMP  = NOM_CMP,
+                                            ),)
+      else :
+        __YBARNO = __YBARTO
+
+
+    __resu   = CREA_RESU( OPERATION  = 'AFFE',
+                          TYPE_RESU  = 'EVOL_NOLI',
+                          NOM_CHAM   = NOM_CHAM,
+                          AFFE = (_F( CHAM_GD  = __YBARNO,
+                                      #MODELE  = __modtot,
+                                      INST     = inst),),)
+
+
+    # --------------------------------------------------------------
+    # Recuperation dans Python des valeurs du champ et du maillage
+    #
+    Ybarno   = __YBARNO.EXTR_COMP(NOM_CMP,[],1)
+    Ybar     = Ybarno.valeurs
+    Noeybar  = Ybarno.noeud
+    IdxNoeud = NP.array(Noeybar)-1
+    Coorx    = NP.take(Xtot,IdxNoeud)
+    Coory    = NP.take(Ytot,IdxNoeud)
+
+
+    # --------------------------------------------------
+    # Amorcage de la procedure de recherche de la crete
+    #
+
+    # Point ou la Ybar est maximale
+    #
+    idxmax  = NP.argmax(Ybar)
+    xmax    = Coorx[idxmax]
+    ymax    = Coory[idxmax]
+    ybarmax = Ybar[idxmax]
+
+    CoxAmm  = NP.array([xmax], float)
+    CoyAmm  = NP.array([ymax], float)
+    YbarAmm = NP.array([ybarmax], float)
+
+    # Creation d'un circle autour du point de max
+    #  et projection sur le circle
+    #
+    lignes = []
+    groups = []
+    arcs   = []
+    arcs.append(([xmax+pas,ymax],[xmax,ymax],nbPoints,180.))
+    arcs.append(([xmax-pas,ymax],[xmax,ymax],nbPoints,180.))
+    resu_mail0,arcgma0,angles0,nbno0 = crea_mail_lig_coup(dime,lignes,groups,arcs)
+
+
+    nomFichierSortie = os.path.join(os.getcwd(),'maillage.mail')
+    fproc            = open(nomFichierSortie, 'w')
+    fproc.write(resu_mail0)
+    fproc.close()
+    UL               = UniteAster()
+    uniteMail        = UL.Libre(action = 'ASSOCIER', nom = nomFichierSortie)
+
+    __MAI = LIRE_MAILLAGE(UNITE = uniteMail)
+    UL.EtatInit(uniteMail)
+
+
+    __MO = AFFE_MODELE(MAILLAGE = __MAI,
+                        AFFE    = _F(TOUT          = 'OUI',
+                                      PHENOMENE    = 'MECANIQUE',
+                                      MODELISATION = 'BARRE'),)
+
+    __YBARPR = PROJ_CHAMP(METHODE        = 'ELEM',
+                            RESULTAT     = __resu,
+                            MODELE_1     = __modtot,
+                            MODELE_2     = __MO,
+                            DISTANCE_MAX = 0.,
+                            TYPE_CHAM    = 'NOEU',
+                            NOM_CHAM     = NOM_CHAM,
+                            NUME_ORDRE   = 1, )
+
+    __YBARCH = CREA_CHAMP(TYPE_CHAM    = Xtype_cham,
+                          OPERATION    = 'EXTR',
+                          NOM_CHAM     = NOM_CHAM,
+                          RESULTAT     = __YBARPR,
+                          NUME_ORDRE   = 1,)
+
+    dx0 = __YBARCH.EXTR_COMP(NOM_CMP,[],1)
+
+    # Nonvide : liste de noeud du profil orthogonal
+    #   avec des valeurs associes
+    # idxpred : connections entres les 2 demi-circle
+    Nonvide  = NP.array(list(dx0.noeud))
+    idxpred1 = vfind(Nonvide,2*nbPoints-1)
+    idxpred2 = vfind(Nonvide,nbPoints)
+
+    Ybarort  = dx0.valeurs
+    Coor0    = __MAI.COORDO.VALE.get()
+    Coorxort = NP.array(Coor0[0:len(Coor0):3] , float)
+    Cooryort = NP.array(Coor0[1:len(Coor0):3] , float)
+
+    # On elimine les noeuds sans valeurs associes
+    Coorxort = NP.take(Coorxort,Nonvide-1)
+    Cooryort = NP.take(Cooryort,Nonvide-1)
+    Coorxort = delEl(Coorxort,idxpred1)
+    Coorxort = delEl(Coorxort,idxpred2)
+    Cooryort = delEl(Cooryort,idxpred1)
+    Cooryort = delEl(Cooryort,idxpred2)
+    Ybarort  = delEl(Ybarort,idxpred1)
+    Ybarort  = delEl(Ybarort,idxpred2)
+
+    # Regularisation sur le circle
+    YbarReg = NP.zeros((len(Ybarort),), float)
+    X1 = NP.concatenate((Coorxort[1:len(Coorxort)], NP.array([Coorxort[0]])))
+    Y1 = NP.concatenate((Cooryort[1:len(Coorxort)], NP.array([Cooryort[0]])))
+    DX = X1-Coorxort
+    DY = Y1-Cooryort
+    DS = NP.sqrt(DX**2+DY**2)
+    for l in range(len(Ybarort)):
+      DSa   = DS[(l-1):len(DS)]
+      DSb   = DS[0:(l-1)]
+      DS1   = NP.concatenate((DSa,DSb))
+      Dist  = NP.zeros((len(Ybarort),), float)
+      Gauss = NP.zeros((len(Ybarort),), float)
+      for k in range(len(Ybarort)/2):
+        Dist[k+1]  = Dist[k]  + DS1[k]
+        Dist[-k-1] = Dist[-k] + DS1[-k-1]
+      for k in range(len(Ybarort)):
+        Gauss[k]   = NP.e**(-(2*Dist[k]/(pas/5))**2)
+
+      Gauss2 = NP.concatenate((Gauss[1:len(Gauss)], NP.array([Gauss[0]])))
+      Den    = DS1 * ((Gauss + Gauss2)/2)
+
+      YbarortShft = NP.concatenate((Ybarort[l:len(Ybarort)],Ybarort[0:(l)]))
+      Ybargauss   = YbarortShft * Gauss
+      Ybargauss2  = NP.concatenate((Ybargauss[1:len(Ybargauss)], NP.array([Ybargauss[0]])))
+      Num         = DS1 * ((Ybargauss + Ybargauss2)/2)
+
+      YbarReg[l]  = NP.sum(Num)/NP.sum(Den)
+
+    # Deuxieme point de la crete
+    idxmax   = NP.argmax(YbarReg)
+    valmax   = Ybarort[idxmax]
+    cox      = Coorxort[idxmax]
+    coy      = Cooryort[idxmax]
+
+    CoxAmm   = NP.concatenate((CoxAmm, NP.array([cox])))
+    CoyAmm   = NP.concatenate((CoyAmm, NP.array([coy])))
+    YbarAmm  = NP.concatenate((YbarAmm, NP.array([valmax])))
+
+
+    # On re-calcule le premier point
+    #
+    CoxLast  = NP.array([ CoxAmm[1] , CoxAmm[0] ])
+    CoyLast  = NP.array([ CoyAmm[1] , CoyAmm[0] ])
+    VersAvan = NP.array([CoxLast[1] - CoxLast[0], CoyLast[1] - CoyLast[0]])
+    VersAvan = VersAvan / (NP.sqrt((VersAvan[0])**2 + (VersAvan[1])**2))
+
+    Ppred    = NP.array([CoxLast[0] + VersAvan[0]*pas, CoyLast[0] + VersAvan[1]*pas ])
+    VersNorm = (1 / NP.sqrt((VersAvan[0])**2 + (VersAvan[1])**2)) * NP.array([ -VersAvan[1] , VersAvan[0] ])
+    PPlus    = NP.array([ Ppred[0] + (lort/2)*VersNorm[0] , Ppred[1] + (lort/2)*VersNorm[1] ])
+    PMoin    = NP.array([ Ppred[0] - (lort/2)*VersNorm[0] , Ppred[1] - (lort/2)*VersNorm[1] ])
+
+    # creation du profil orthogonal
+    lignes = []
+    groups = []
+    arcs   = []
+    lignes = []
+    lignes.append((PMoin.tolist(),Ppred.tolist(),nbPoints))
+    lignes.append((Ppred.tolist(),PPlus.tolist(),nbPoints))
+    resu_mail0,arcgma0,angles0,nbno0 = crea_mail_lig_coup(dime,lignes,groups,arcs)
+
+    fproc            = open(nomFichierSortie, 'w')
+    fproc.write(resu_mail0)
+    fproc.close()
+    UL               = UniteAster()
+    uniteMail        = UL.Libre(action = 'ASSOCIER', nom = nomFichierSortie)
+
+    __MAI = LIRE_MAILLAGE(UNITE = uniteMail)
+    UL.EtatInit(uniteMail)
+
+    __MO = AFFE_MODELE(MAILLAGE = __MAI,
+                       AFFE     = _F(TOUT         = 'OUI',
+                                     PHENOMENE    = 'MECANIQUE',
+                                     MODELISATION = 'BARRE'),)
+
+    __YBARPR = PROJ_CHAMP(METHODE      = 'ELEM',
+                          RESULTAT     = __resu,
+                          MODELE_1     = __modtot,
+                          MODELE_2     = __MO,
+                          DISTANCE_MAX = 0.,
+                          TYPE_CHAM    = 'NOEU',
+                          NOM_CHAM     = NOM_CHAM,
+                          NUME_ORDRE   = 1, )
+
+
+    __YBARCH = CREA_CHAMP(TYPE_CHAM  = Xtype_cham,
+                          OPERATION  = 'EXTR',
+                          NOM_CHAM   = NOM_CHAM,
+                          RESULTAT   = __YBARPR,
+                          NUME_ORDRE = 1,)
+
+    dx0 = __YBARCH.EXTR_COMP(NOM_CMP,[],1)
+
+
+    # Pas de cas ou le point de prediction est hors de matiere!
+    #  Recherche du point de prediction parmis les points projetes
+    #  et elimination du double point au milieu
+    Nonvide  = NP.array(list(dx0.noeud))
+    idxpred  = vfind(Nonvide,nbPoints)
+    Ybarort  = dx0.valeurs
+
+    Coor0    = __MAI.COORDO.VALE.get()
+    Coorxort = NP.array(Coor0[0:len(Coor0):3] , float)
+    Cooryort = NP.array(Coor0[1:len(Coor0):3] , float)
+    Coorxort = NP.take(Coorxort,Nonvide-1)
+    Cooryort = NP.take(Cooryort,Nonvide-1)
+    Coorxort = delEl(Coorxort,idxpred)
+    Cooryort = delEl(Cooryort,idxpred)
+    Ybarort  = delEl(Ybarort,idxpred)
+
+    # Regularisation du profil orthogonal
+    YbarReg = NP.zeros((len(Ybarort),), float)
+    for l in range(len(Ybarort)):
+      xcentre = Coorxort[l]
+      ycentre = Cooryort[l]
+      Dist    = ((Coorxort-xcentre)**2 + (Cooryort-ycentre)**2)**0.5
+      Gauss = NP.zeros((len(Dist),), float)
+      for m in range(len(Dist)) :
+        Gauss[m] = NP.e**(-(2*Dist[m]/lreg)**2)
+      Ybargauss = Ybarort * Gauss
+      DeltaL = NP.absolute(Dist[0:len(Dist)-1] - Dist[1:len(Dist)])
+      Num = DeltaL * (Ybargauss[0:len(Dist)-1] + Ybargauss[1:len(Dist)])/2
+      Den = DeltaL * (Gauss[0:len(Dist)-1] + Gauss[1:len(Dist)])/2
+
+      YbarReg[l] = NP.sum(Num)/NP.sum(Den)
+
+    # Premier point de la crete
+    idxmax    = NP.argmax(YbarReg)
+    valmax    = Ybarort[idxmax]
+    cox       = Coorxort[idxmax]
+    coy       = Cooryort[idxmax]
+    CoxAmm[0] = cox
+    CoyAmm[0] = coy
+    YbarAmm[0]= valmax
+
+
+
+    # --------------------------------------------------
+    # Recherche de la crete apres amorcage
+    #
+
+
+    # Definition des deux directions d'avancement possibles
+    #
+    VersAvn1 = NP.array([CoxAmm[1]-CoxAmm[0],CoyAmm[1]-CoyAmm[0]])
+    module   = ((VersAvn1[0])**2 + (VersAvn1[1])**2)**0.5
+    VersAvn1 = VersAvn1 * (1/module)
+    VersAvn2 = -VersAvn1
+
+    # Initialisation vecteurs
+    #
+    Coxcrete1  = NP.array([CoxAmm[1]])
+    Coycrete1  = NP.array([CoyAmm[1]])
+    Ybarcrete1 = NP.array([YbarAmm[1]])
+
+    Coxcrete2  = NP.array([CoxAmm[0]])
+    Coycrete2  = NP.array([CoyAmm[0]])
+    Ybarcrete2 = NP.array([YbarAmm[0]])
+
+    # Boucle sur les points de la crete
+    #     Variables du boucle :
+    #       dirRech   --> direction de recherche, 1,2
+    #       condSort  --> condition de sortie du boucle
+    dirRech = 1
+    i = 0
+    condSort = 1. + seuil
+    while (condSort > seuil and dirRech<=2) :
+      i = i+1
+      # Determination du vecteur d'avancement
+      if i==1:
+        if dirRech == 1:
+          VersAvan = VersAvn1
+        else:
+          VersAvan = VersAvn2
+      else:
+        if dirRech == 1:
+          CoxLast = NP.array( [Coxcrete1[i-2] , Coxcrete1[i-1] ])
+          CoyLast = NP.array([ Coycrete1[i-2] , Coycrete1[i-1] ])
+        else :
+          CoxLast = NP.array( [Coxcrete2[i-2] , Coxcrete2[i-1] ])
+          CoyLast = NP.array([ Coycrete2[i-2] , Coycrete2[i-1] ])
+        VersAvan  = NP.array([CoxLast[1]-CoxLast[0],CoyLast[1]-CoyLast[0]])
+        module    = ((VersAvan[0])**2. + (VersAvan[1])**2.)**0.5
+        VersAvan  = VersAvan * (1/module)
+
+      if dirRech == 1:
+        PStart = NP.array([Coxcrete1[i-1],Coycrete1[i-1]])
+      else:
+        PStart = NP.array([Coxcrete2[i-1],Coycrete2[i-1]])
+
+      # point de prediction
+      Ppred    = NP.array([PStart[0] + VersAvan[0]*pas, PStart[1] + VersAvan[1]*pas ])
+      VersNorm = (1. / NP.sqrt((VersAvan[0])**2. + (VersAvan[1])**2.)) * NP.array([ -VersAvan[1] , VersAvan[0] ])
+      PPlus    = NP.array([ Ppred[0] + (lort/2.)*VersNorm[0] , Ppred[1] + (lort/2.)*VersNorm[1] ])
+      PMoin    = NP.array([ Ppred[0] - (lort/2.)*VersNorm[0] , Ppred[1] - (lort/2.)*VersNorm[1] ])
+
+      # creation du profil orthogonal
+      lignes = []
+      groups = []
+      arcs   = []
+      lignes.append((PMoin.tolist(),Ppred.tolist(),nbPoints))
+      lignes.append((Ppred.tolist(),PPlus.tolist(),nbPoints))
+      resu_mail0,arcgma0,angles0,nbno0 = crea_mail_lig_coup(dime,lignes,groups,arcs)
+
+      fproc            = open(nomFichierSortie, 'w')
+      fproc.write(resu_mail0)
+      fproc.close()
+      UL               = UniteAster()
+      uniteMail        = UL.Libre(action = 'ASSOCIER', nom = nomFichierSortie)
+
+      __MAI = LIRE_MAILLAGE(UNITE = uniteMail)
+      UL.EtatInit(uniteMail)
+
+      __MO = AFFE_MODELE(MAILLAGE = __MAI,
+                        AFFE      = _F(TOUT      = 'OUI',
+                                       PHENOMENE = 'MECANIQUE',
+                                       MODELISATION = 'BARRE'),)
+
+
+      try:
+        # on essaie de projeter, exception: il n'y a pas des points "dans la matiere"
+        __YBARPR = PROJ_CHAMP(METHODE      = 'ELEM',
+                              RESULTAT     = __resu,
+                              MODELE_1     = __modtot,
+                              MODELE_2     = __MO,
+                              DISTANCE_MAX = 0.,
+                              TYPE_CHAM    = 'NOEU',
+                              NOM_CHAM     = NOM_CHAM,
+                              NUME_ORDRE   = 1,)
+
+      except :
+        print "#MC dans EXCEPT"
+        # Attention!! Ici on gere seulement le cas d'aucun point dans la matiere!
+        # Il faudra gerer tous les possibles erreurs de proj_champ, ou trouver nom
+        # a l'erreur specifique!
+        if dirRech == 1 :
+          dirRech = 2
+          i = 0
+        else:
+          condSort = seuil * 0.1
+
+      else :
+      # si la projection est possible
+        __YBARCH = CREA_CHAMP(TYPE_CHAM  = Xtype_cham,
+                              OPERATION  = 'EXTR',
+                              NOM_CHAM   = NOM_CHAM,
+                              RESULTAT   = __YBARPR,
+                              NUME_ORDRE = 1,)
+
+        dx0     = __YBARCH.EXTR_COMP(NOM_CMP,[],1)
+        Nonvide = NP.array(list(dx0.noeud))
+
+        # recherche du point de prediction parmis les points projetes
+        idxpred = vfind(Nonvide,nbPoints)
+
+        # cas ou le point de prediction est hors matiere
+        if len(idxpred)==0:
+          if dirRech == 1:
+            dirRech = 2
+            i = 0
+            continue
+          else:
+            condSort = seuil*0.1
+            break
+
+        Ybarort = dx0.valeurs
+        Coor0    = __MAI.COORDO.VALE.get()
+        Coorxort = NP.array(Coor0[0:len(Coor0):3] , float)
+        Cooryort = NP.array(Coor0[1:len(Coor0):3] , float)
+        Coorxort = NP.take(Coorxort,Nonvide-1)
+        Cooryort = NP.take(Cooryort,Nonvide-1)
+        Coorxort = delEl(Coorxort,idxpred)
+        Cooryort = delEl(Cooryort,idxpred)
+        Ybarort  = delEl(Ybarort,idxpred)
+
+        # Regularisation sur le profil orthogonal
+        #
+        YbarReg = NP.zeros((len(Ybarort),), float)
+        for l in range(len(Ybarort)):
+          xcentre = Coorxort[l]
+          ycentre = Cooryort[l]
+          Dist    = ((Coorxort-xcentre)**2 + (Cooryort-ycentre)**2)**0.5
+          Gauss   = NP.zeros((len(Dist),), float)
+          for m in range(len(Dist)) :
+            Gauss[m] = NP.e**(-(2*Dist[m]/lreg)**2)
+
+          Ybargauss = Ybarort * Gauss
+          DeltaL = NP.absolute(Dist[0:len(Dist)-1] - Dist[1:len(Dist)])
+          Num = DeltaL * (Ybargauss[0:len(Dist)-1] + Ybargauss[1:len(Dist)])/2
+          Den = DeltaL * (Gauss[0:len(Dist)-1] + Gauss[1:len(Dist)])/2
+          YbarReg[l] = NP.sum(Num)/NP.sum(Den)
+
+
+        # Nouveau point de la crete
+        #
+        idxmax  = NP.argmax(YbarReg)
+        valmax  = Ybarort[idxmax]
+        cox     = Coorxort[idxmax]
+        coy     = Cooryort[idxmax]
+
+
+        # on controle que l'angle forme par le point trouve
+        #   et la direction de recherche ne soit pas plus grand
+        #   du seuil "ANGL_MAX"
+
+        if round(alpha) != 180. :
+          alphar = radians(alpha)
+          blim   = pas * NP.tan(alphar/2.)
+          btest  = ((cox-Ppred[0])**2. + (coy-Ppred[1])**2.)**0.5
+          if btest > blim :
+            if dirRech == 1 :
+              dirRech = 2
+              i = 0
+              continue
+            else:
+              condSort = seuil*0.1
+              break
+
+        if dirRech == 1:
+          Coxcrete1  = NP.concatenate((Coxcrete1,NP.array([cox])))
+          Coycrete1  = NP.concatenate((Coycrete1,NP.array([coy])))
+          Ybarcrete1 = NP.concatenate((Ybarcrete1,NP.array([valmax])))
+        else:
+          Coxcrete2  = NP.concatenate((Coxcrete2,NP.array([cox])))
+          Coycrete2  = NP.concatenate((Coycrete2,NP.array([coy])))
+          Ybarcrete2 = NP.concatenate((Ybarcrete2,NP.array([valmax])))
+
+        condSort = valmax
+        if condSort <= seuil and dirRech == 1 :
+          dirRech = 2
+          i = 0
+
+    Coxcrete1 = Coxcrete1.tolist()
+    Coxcrete2 = Coxcrete2.tolist()
+    Coycrete1 = Coycrete1.tolist()
+    Coycrete2 = Coycrete2.tolist()
+    Ybarcrete1 = Ybarcrete1.tolist()
+    Ybarcrete2 = Ybarcrete2.tolist()
+    Coxcrete2.reverse()
+    Coycrete2.reverse()
+    Ybarcrete2.reverse()
+    Coxcrete2.extend(Coxcrete1)
+    Coycrete2.extend(Coycrete1)
+    Ybarcrete2.extend(Ybarcrete1)
+
+
+    nbNoeud = len(Coxcrete2)
+    Connex  = []
+    for idxNo in range(nbNoeud-1) :
+      no1 = idxNo+1
+      no2 = idxNo+2
+      ma  = (no1,no2)
+      Connex.append(ma)
+
+    XcreteTot.append(Coxcrete2)
+    YcreteTot.append(Coycrete2)
+    YbarcreteTot.append(Ybarcrete2)
+    ConnTot.append(Connex)
+    lstFissure = lstFissure + ( ['FISS'+str(idxRech+1)]*len(Coxcrete2) )
+
+    lstX    = []
+    lstY    = []
+    lstYbar = []
+    for i in range(len(XcreteTot)) :
+      lstX       = lstX    + XcreteTot[i]
+      lstY       = lstY    + YcreteTot[i]
+      lstYbar    = lstYbar + YbarcreteTot[i]
+
+
+
+  # --------------------------------------------------
+  # CREATION D'UNE TABLE POUR LE STOCKAGE DE POINTS DE
+  #   LA CRETE ET DE L'OUVERTURE DE FISSURE
+  #
+
+  __tabRes = CREA_TABLE(LISTE = (
+              _F(PARA = 'FISSURE'    , LISTE_K = lstFissure ),
+              _F(PARA = 'COORX'      , LISTE_R = lstX ),
+              _F(PARA = 'COORY'      , LISTE_R = lstY ),
+              _F(PARA = 'CHAMP'      , LISTE_R = lstYbar),
+                    ),)
+
+
+  # --------------------------------------------------
+  # CREATION D'UNE SD MAILLAGE DE LA CRETE
+  #
+  resu_mail0 = crea_mail_lin(XcreteTot,YcreteTot,ConnTot,dime)
+
+
+  fproc            = open(nomFichierSortie, 'w')
+  fproc.write(resu_mail0)
+  fproc.close()
+  UL               = UniteAster()
+  uniteMail        = UL.Libre(action = 'ASSOCIER', nom = nomFichierSortie)
+  __MAIFI = LIRE_MAILLAGE(UNITE = uniteMail)
+  UL.EtatInit(uniteMail)
+
+
+  # --------------------------------------------------
+  # SORTIE DE LA MACRO
+  #
+  RetablirAlarme('CALCULEL5_48')
+  return ier
+
diff --git a/Aster/Cata/cataSTA10/Macro/post_gp_ops.py b/Aster/Cata/cataSTA10/Macro/post_gp_ops.py
new file mode 100644 (file)
index 0000000..875a37f
--- /dev/null
@@ -0,0 +1,930 @@
+#@ MODIF post_gp_ops Macro  DATE 16/11/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                   
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+EnumTypes = (list, tuple)
+
+# -----------------------------------------------------------------------------
+def post_gp_ops(self, **args):
+   """
+      Corps de la macro POST_GP
+   """
+   import pdb
+   macro = 'POST_GP'
+   ier=0
+   from Accas import _F
+   from Utilitai.Utmess       import UTMESS
+   from Utilitai.Table        import Table, merge, Colonne
+   from Cata_Utils.t_fonction import t_fonction
+   from Cata.cata             import evol_noli
+   import aster
+   
+   # ----- On importe les definitions des commandes a utiliser dans la macro
+   CALC_THETA    = self.get_cmd('CALC_THETA')
+   CALC_G        = self.get_cmd('CALC_G')
+   POST_ELEM     = self.get_cmd('POST_ELEM')
+   POST_RELEVE_T = self.get_cmd('POST_RELEVE_T')
+   CREA_TABLE    = self.get_cmd('CREA_TABLE')
+   DEFI_LIST_ENTI= self.get_cmd('DEFI_LIST_ENTI')
+   CALC_ELEM     = self.get_cmd('CALC_ELEM')
+   RECU_FONCTION = self.get_cmd('RECU_FONCTION')
+   DEFI_GROUP    = self.get_cmd('DEFI_GROUP')
+   FIN           = self.get_cmd('FIN')
+   
+   # ----- Comptage, commandes + déclaration concept sortant
+   self.set_icmd(1)
+   self.DeclareOut('result', self.sd)
+   self.DeclareOut('tabresult', self['TABL_RESU'])
+   info = self['INFO']
+   
+   # 0. ----- Type de calcul
+   identification = self['IDENTIFICATION'] != None
+   if identification:
+      # 0.1. --- identification : on boucle sur les valeurs de TEMP.
+      #          Pour chaque couple (T, Kjc(T)), on évalue les Ki, Kmoy et
+      #          les valeurs de Gpmax, DeltaLmax, inst.max correspondantes.
+      mccalc = self['IDENTIFICATION']
+      l_crit = mccalc['KJ_CRIT']
+      lv_ident = []
+      l_temp = mccalc['TEMP']
+   else:
+      # 0.2. --- prédiction : on ne fait qu'une itération.
+      #          Il faut un RESU_THER (sinon on utilise la température du
+      #          premier Gpcrit et cà n'a pas trop d'intéret).
+      #          A chaque instant, on regarde à quelle température est le
+      #          fond d'entaille et on compare Gpmax à cet instant au Gpcrit.
+      mccalc = self['PREDICTION']
+      l_crit = mccalc['GP_CRIT']
+      lv_pred = []
+      l_temp = mccalc['TEMP'][0]
+   
+   if not type(l_temp) in EnumTypes:
+      l_temp = [l_temp,]
+   if not type(l_crit) in EnumTypes:
+      l_crit = [l_crit,]
+   
+
+   # Maillage associe au modele
+   __MAIL = aster.getvectjev( self['MODELE'].nom.ljust(8) + '.MODELE    .LGRF        ' )
+   nom_maillage = __MAIL[0].strip()
+   
+   maya = self.get_concept(nom_maillage)
+   
+   # Excitation 
+   args={}                    
+   if self['EXCIT']:args={'EXCIT'   : self['EXCIT'].List_F()}
+
+   # 1. ----- calcul de G-theta
+   
+   # Cas 2D
+   if self['THETA_2D'] is not None:
+      is_2D = True
+   else:
+      is_2D = False
+   
+   if is_2D:
+      nbcour = len(self['THETA_2D'])
+      nb_tranches = 1
+      ep_z = 1
+      l_tab = []
+      for occ in self['THETA_2D']:
+         dMC = occ.cree_dict_valeurs(occ.mc_liste)
+         
+         __theta = CALC_THETA(MODELE=self['MODELE'],
+                              DIRECTION=self['DIRECTION'],
+                              THETA_2D=_F(GROUP_NO=dMC['GROUP_NO'],
+                                          MODULE=1.0,
+                                          R_INF=dMC['R_INF'],
+                                          R_SUP=dMC['R_SUP']),)
+   
+         __gtheta = CALC_G(THETA=_F(THETA=__theta),
+                           RESULTAT=self['RESULTAT'],
+                           TOUT_ORDRE='OUI',
+                           SYME_CHAR=self['SYME_CHAR'],
+                           COMP_ELAS=self['COMP_ELAS'].List_F(),
+                           **args)
+   
+         tab = __gtheta.EXTR_TABLE()
+         
+         # une Table par couronne
+         l_tab.append(tab)
+         
+   else:
+      #Cas 3D
+      nbcour = len(self['THETA_3D'])
+      nb_tranches = self['NB_TRANCHES']
+      l_tab = []
+      l_noeuds_fissure, pas = getFondFissInfo(self['FOND_FISS'])
+      nb_noeuds_fissure = len(l_noeuds_fissure)
+      
+      for occ in self['THETA_3D']:
+         dMC = occ.cree_dict_valeurs(occ.mc_liste)
+         
+         # on met les mots-clés facultatifs dans des dictionnaires
+         dpar_theta = {}
+         if self['DIRECTION'] is not None:
+            dpar_theta['DIRECTION'] = self['DIRECTION']
+         
+         __gtheta = CALC_G(
+                           THETA=_F(R_INF=dMC['R_INF'],
+                                    R_SUP=dMC['R_SUP'],
+                                    MODULE=1.0,
+                                    FOND_FISS=self['FOND_FISS'],
+                                    **dpar_theta),
+                           RESULTAT=self['RESULTAT'],
+                           TOUT_ORDRE='OUI',
+                           SYME_CHAR=self['SYME_CHAR'],
+                           COMP_ELAS=self['COMP_ELAS'].List_F(),
+                           LISSAGE=self['LISSAGE'].List_F(),
+                           **args)
+
+         tab = __gtheta.EXTR_TABLE()
+         
+         # une Table par couronne
+         l_tab.append(tab)
+
+   
+
+   # 2. ----- Calcul de l'energie élastique en exploitant les groupes de
+   #          mailles fournis par la procedure de maillage
+
+   l_copo_tot = [grma.strip() for grma in self['GROUP_MA']]
+   nbcop_tot = len(l_copo_tot)
+   nbcop = nbcop_tot/nb_tranches
+   
+   if self['LIST_EP_COPEAUX'] is not None:
+      l_ep_copeaux_tot = self['LIST_EP_COPEAUX']
+   
+   l_t_enel = []
+   
+   if self['TRAC_COMP']=='OUI':
+      # prise en compte de la traction-compression dans le calcul de l'energie
+      resu2=CALC_ELEM(OPTION=('EQUI_ELNO_SIGM'),
+                     RESULTAT=self['RESULTAT'],
+                     )
+                     
+      # indices des mailles du dernier group_ma
+      # (pour avoir le nombre de mailles par tranche)
+      l_mailles_last_gm = maya.GROUPEMA.get()[l_copo_tot[-1].ljust(8)]
+      
+      # initialisation des concepts reutilises dans la boucle
+      # on suppose que chaque tranche a le meme nombre de mailles
+      
+      kk = 0
+      
+      E_el = [None]*len(l_mailles_last_gm)*nb_tranches
+
+      T_el = [None]*len(l_mailles_last_gm)*nb_tranches
+      
+      # on recupere les sd en dehors de la boucle
+      maya_GROUPEMA = maya.GROUPEMA.get()
+      maya_NOMMAI = maya.NOMMAI.get()
+      maya_CONNEX = maya.CONNEX.get()
+      maya_NOMNOE = maya.NOMNOE.get()
+
+   # liste des tables tb_Gpmax repartie aux noeuds
+   l_tb_Gpmax_noeuds = []
+      
+   # Charges 
+   args={}
+   if self['EXCIT']:args={'CHARGE': [charg['CHARGE'] for charg in self['EXCIT']]}
+   for i in range(0,nb_tranches):
+      l_copo = l_copo_tot[i*nbcop:(i+1)*nbcop]   
+      
+      if info >= 2 and not is_2D:
+         print "<I> Calcul de la tranche %i"%(i+1)
+      
+      if self['TRAC_COMP']=='OUI':
+         
+         # l_copo est une liste commulative de mailles
+         # il faut lancer POST_ELEM sur chaque maille de chaque copeau
+         # puis regarder la trace de SIEF_ELGA sur ce copeau
+         
+         # on fera attention a ne pas lancer POST_ELEM sur une maille qui 
+         # a deja ete calculee en stockant son resultat pour la maille en question
+         d_groupma={}
+         d_nomma={}
+         
+         # indices des mailles des copeaux
+         for group_ma in l_copo:
+            d_groupma[group_ma] = maya_GROUPEMA[group_ma.ljust(8)]
+         
+         # le dernier copeau contient tous les elements
+         # on calcule l energie de chaque element de ce copeau
+         last_copo = l_copo[-1]
+         
+         d_ener = {}
+         
+         d_nomma = {}
+         
+         for k, id_elem in enumerate(d_groupma[last_copo]):
+            
+            
+            # les id des elements dans Aster commencent a 1
+            # la liste python commence a 0
+            elem = maya_NOMMAI[id_elem-1]
+            d_nomma[id_elem]=elem
+            
+            E_el[kk] = POST_ELEM(MODELE=self['MODELE'],
+                                 RESULTAT=self['RESULTAT'],
+                                 TOUT_ORDRE='OUI',
+                                 ENER_ELAS=_F(MAILLE=elem),
+                                 TITRE='Energie élastique',
+                                 **args)
+            
+            T_el[kk] = E_el[kk].EXTR_TABLE()
+            
+            l_enel = T_el[kk].TOTALE.values()
+            
+            # signe de la trace <=> signe de la composante VMIS_SG du tenseur EQUI_ELNO_SIGM,
+            # mais E_enel est par element => on fait une moyenne sur les noeuds de l'element
+            
+            list_no = []
+            for ind_no in maya_CONNEX[id_elem] :
+               nomnoe = maya_NOMNOE[ind_no-1]
+               if nomnoe not in list_no :
+                  list_no.append(nomnoe)
+            
+            # print "liste des noeuds de la maille ", id_elem, ": ", list_no
+            
+            l_inst = T_el[kk].INST.values()
+            nb_inst = len(l_inst)
+            
+            T_noeuds = Table()
+            T_noeuds['INST']=l_inst
+               
+            # pour chaque noeud de l'element on recupere sa trace
+            for noeud in list_no:
+               
+               __VM=RECU_FONCTION(RESULTAT=resu2,
+                                    TOUT_INST='OUI',
+                                    NOM_CHAM='EQUI_ELNO_SIGM',
+                                    NOM_CMP='VMIS_SG',
+                                    MAILLE=elem,
+                                    NOEUD=noeud);
+   
+               T_noeuds[noeud]=__VM.Ordo()
+               
+            T_noeuds.fromfunction('VM_MAIL', moyenne, list_no)
+            
+            l_VM_MAIL = T_noeuds.VM_MAIL.values()
+            
+            for j, vm in enumerate(l_VM_MAIL):
+               if vm < 0:
+                  l_enel[j]=-l_enel[j]
+                  
+            del T_el[kk]['TOTALE']
+            T_el[kk][elem]=l_enel
+   
+            if k==0:
+            
+               # Table de l'energie elastique sur le GROUP_MA
+               T_el_gm = Table()
+               T_el_gm['NUME_ORDRE'] = T_el[kk].NUME_ORDRE.values()
+               T_el_gm['INST'] = T_el[kk].INST.values()
+               T_el_gm['LIEU'] = [last_copo]*nb_inst
+               T_el_gm['ENTITE'] = ['GROUP_MA']*nb_inst
+               
+            T_el_gm[elem]=l_enel
+            
+            kk+=1
+         
+         # sommation sur les mailles du group_ma:
+         l_nomma = d_nomma.values()
+         T_el_gm.fromfunction('TOTALE', mysum, l_nomma)
+         
+         # Table totale
+         t_enel=Table(titr="Energie élastique")
+         t_enel['NUME_ORDRE']=T_el_gm.NUME_ORDRE.values()
+         t_enel['INST']=T_el_gm.INST.values()
+         t_enel['LIEU']=T_el_gm.LIEU.values()
+         t_enel['ENTITE']=T_el_gm.ENTITE.values()
+         t_enel['TOTALE']=T_el_gm.TOTALE.values()
+   
+         # t_enel ne contient jusqu'ici que l'energie elastique du dernier copeau
+         
+         # calcul de l'energie elastique pour les autres copeaux
+         T_el_sub = T_el_gm.copy()
+         
+         for k in range(len(l_copo)-2,-1,-1):
+            group_ma = l_copo[k]
+            T_el_sub = T_el_sub.copy()
+            del T_el_sub['LIEU']
+            del T_el_sub['TOTALE']
+            T_el_sub['LIEU']=[group_ma]*nb_inst
+            l_id_elem = d_groupma[group_ma]
+            l_nom_elem = []
+            
+            for id_elem, nom_elem in d_nomma.items():
+               if not id_elem in l_id_elem:
+                  # colonne a supprimer
+                  del T_el_sub[nom_elem]
+                  del d_nomma[id_elem]
+               else:
+                  l_nom_elem.append(nom_elem)
+            
+            T_el_sub.fromfunction('TOTALE', sum_and_check, l_nom_elem)
+            
+            # Table de l'energie elastique sur le GROUP_MA               
+            T_el_gm_k = Table()
+            T_el_gm_k['NUME_ORDRE'] =T_el_sub.NUME_ORDRE.values()
+            T_el_gm_k['INST'] = T_el_sub.INST.values()
+            T_el_gm_k['LIEU'] = [group_ma]*nb_inst
+            T_el_gm_k['ENTITE'] = ['GROUP_MA']*nb_inst
+            T_el_gm_k['TOTALE'] = T_el_sub.TOTALE.values()
+            
+            # contribution du group_ma a la table totale:
+            t_enel = merge(t_enel, T_el_gm_k)
+   
+         t_enel.sort('NUME_ORDRE')
+      
+      else:
+         # si self['TRAC_COMP']!='OUI'
+         # calcul classique de l'energie elastique
+      
+         __ener = POST_ELEM(MODELE=self['MODELE'],
+                                 RESULTAT=self['RESULTAT'],
+                                 TOUT_ORDRE='OUI',
+                                 ENER_ELAS=_F(GROUP_MA=l_copo),
+                                 TITRE='Energie élastique',
+                                 **args)
+      
+         t_enel = __ener.EXTR_TABLE()
+   
+      # 2.1. ----- Indice de chaque copeau et deltaL
+      d_icop = dict(zip(l_copo, range(1, nbcop + 1)))
+      
+      l_lieu = [grma.strip() for grma in t_enel.LIEU.values()]
+      
+      l_icop = [d_icop[grma] for grma in l_lieu]
+      
+      t_enel['ICOP'] = l_icop
+   
+      l_numord = list(set(t_enel.NUME_ORDRE.values()))
+      l_numord.sort()
+
+      if self['PAS_ENTAILLE'] is not None:
+         t_enel.fromfunction('DELTAL', fDL, 'ICOP', { 'pascop' : self['PAS_ENTAILLE'] })
+      else:
+         l_ep_copeaux_tranche = l_ep_copeaux_tot[i*nbcop:(i+1)*nbcop]
+         t_enel['DELTAL'] = l_ep_copeaux_tranche*len(l_numord)
+
+      # 2.2. ----- Calcul de Gp fonction de Ener.Totale et de deltaL
+      if is_2D:
+         t_enel.fromfunction('GP', fGp_Etot, ('TOTALE', 'DELTAL'),
+            {'syme'   : self['SYME_CHAR'] != 'SANS',
+             'R'      : self['RAYON_AXIS'],})
+      else:
+         ep_tranche = largeur_tranche(nom_maillage, l_noeuds_fissure, pas, i)
+         #print "ep_tranche %i: "%i, ep_tranche
+         t_enel.fromfunction('GP', fGp_Etot, ('TOTALE', 'DELTAL'),
+               {'syme'   : self['SYME_CHAR'] != 'SANS',
+                'R'      : ep_tranche })
+      
+      #if info >= 2:
+      #   print "Table de l'énergie élastique: ", t_enel
+      
+      l_t_enel.append(t_enel)
+      # 2.3. ----- Tableau de Gp = f(icop) pour chaque instant
+      if info >= 2:
+         tGp_t_icop = t_enel['INST', 'DELTAL', 'GP']
+         tGp_t_icop.titr = "Gp à chaque instant en fonction de la distance au " \
+                           "fond d'entaille"
+         tGp_t_icop.ImprTabCroise()
+   
+      # 2.4. ----- Table Gpmax
+      ttmp = t_enel['NUME_ORDRE', 'INST', 'ICOP', 'DELTAL', 'GP']
+
+      for j in l_numord:
+         tj = ttmp.NUME_ORDRE == j
+         
+         ## pour tester le comportement de Gpmax quand GP est identiquement nul
+         #del tj['GP']
+         #tj['GP']=[0]*len(tj.GP.values())
+         
+         if self['CRIT_MAXI_GP'] == 'ABSOLU':
+            t = tj.GP.MAXI()
+         else:
+            t = MaxRelatif(tj, 'GP')
+         
+         # cas GP identiquement nul: plusieurs max de GP
+         # on prend le DELTAL minimum
+         if len(t.GP.values())>1:
+            t = t.DELTAL.MINI()
+         
+         if j == 1:
+            tb_Gpmax_i = t
+         else:
+            tb_Gpmax_i = tb_Gpmax_i | t
+      
+      
+      tb_Gpmax_i.Renomme('GP', 'GPMAX')
+      tb_Gpmax_i.Renomme('ICOP', 'ICOPMAX')
+      tb_Gpmax_i.Renomme('DELTAL', 'DELTALMAX')
+      tb_Gpmax_i.titr = 'Gpmax à chaque instant'
+      
+      # On transfert Gpmax au noeud sommet à gauche et au milieu (si cas quadratique)
+      # sauf pour la dernière tranche où on transfère également au noeud sommet de droite.
+      # Tout cela pour pouvoir avoir une table complète avec les G et les Gpmax.
+      if not is_2D:
+         tb_Gpmax_i['NUME_TRANCHE']=[i+1]*len(tb_Gpmax_i['GPMAX'])
+         if i==0:
+            l_inst = tb_Gpmax_i.INST.values()
+            nb_inst = len(l_inst)
+         if pas==1:
+            tb_Gpmax_i_noeuds = tb_Gpmax_i.copy()
+            tb_Gpmax_i_noeuds['NOEUD']=[l_noeuds_fissure[i]]*nb_inst
+            l_tb_Gpmax_noeuds.append(tb_Gpmax_i_noeuds)
+         else:
+            tb_Gpmax_i_noeuds_1 = tb_Gpmax_i.copy()
+            tb_Gpmax_i_noeuds_1['NOEUD'] = [l_noeuds_fissure[pas*i]]*nb_inst
+            l_tb_Gpmax_noeuds.append(tb_Gpmax_i_noeuds_1)
+            tb_Gpmax_i_noeuds_2 = tb_Gpmax_i.copy()
+            tb_Gpmax_i_noeuds_2['NOEUD'] = [l_noeuds_fissure[pas*i+1]]*nb_inst
+            l_tb_Gpmax_noeuds.append(tb_Gpmax_i_noeuds_2)
+         if i==nb_tranches-1:
+            tb_Gpmax_i_noeuds_3 = tb_Gpmax_i.copy()
+            tb_Gpmax_i_noeuds_3['NOEUD'] = [l_noeuds_fissure[-1]]*nb_inst
+            l_tb_Gpmax_noeuds.append(tb_Gpmax_i_noeuds_3)
+            
+
+      
+      if i == 0:
+         tb_Gpmax = tb_Gpmax_i
+      else:
+         tb_Gpmax = merge(tb_Gpmax, tb_Gpmax_i)
+   
+   # FIN BOUCLE SUR LES TRANCHES
+   
+   if not is_2D:
+      tb_Gpmax_noeuds = Table(para=tb_Gpmax.para+['NOEUD'])
+      for j, tb in enumerate(l_tb_Gpmax_noeuds):
+         if j==0:
+            tb_Gpmax_noeuds = tb
+         else:
+            tb_Gpmax_noeuds = merge(tb_Gpmax_noeuds, tb)
+   
+   
+   # 2.5. ----- extraction de la température en fond d'entaille
+   #voir le cas 3D => THETA_3D, mais qu'en est-il des tranches?
+   if self['RESU_THER']:
+      #sur un seul noeud ou sur tous les noeuds du fond d'entaille?
+      
+      if is_2D:
+         grno_fond = self['THETA_2D'][0]['GROUP_NO']
+      else:
+         grma_fond = self['THETA_3D'][0]['GROUP_MA']
+         grno_fond = "GRNOFOND"
+         DEFI_GROUP(reuse =maya,
+                    MAILLAGE=maya,
+                    CREA_GROUP_NO=_F(GROUP_MA=grma_fond,
+                                     NOM=grno_fond,),);
+      
+      l_ordres = DEFI_LIST_ENTI(VALE=l_numord)
+      __relev = POST_RELEVE_T(ACTION=_F(RESULTAT=self['RESU_THER'],
+                                        OPERATION='EXTRACTION',
+                                        INTITULE='Temperature',
+                                        NOM_CHAM='TEMP',
+                                        LIST_ORDRE=l_ordres,
+                                        NOM_CMP='TEMP',
+                                        GROUP_NO=grno_fond,),)
+
+      t_relev = __relev.EXTR_TABLE()['NUME_ORDRE', 'NOEUD', 'TEMP']
+   
+   # 3. ----- boucle sur les mots-clés facteurs
+   #          opérations dépendant de la température
+   MATER = self['MATER']
+   flag_mat = True
+   
+   for iocc, TEMP in enumerate(l_temp):
+      # 3.0. ----- Temperature fonction du temps : si on n'a pas de RESU_THER,
+      #            on prend la température d'identification.
+      if not self['RESU_THER']:
+         l_rows = [{'NUME_ORDRE' : j, 'TEMP' : TEMP} for j in l_numord]
+         t_relev = Table(rows=l_rows, para=('NUME_ORDRE', 'TEMP'), typ=('R', 'R'))
+         flag_mat = True
+      
+      # 3.1. ----- extrait du matériau E(TEMP) et NU(TEMP) (si nécessaire)
+      if flag_mat:
+         t_relev.fromfunction('YOUNG', CallRCVALE, 'TEMP',
+               { 'para' : 'E', 'MATER' : MATER })
+         t_relev.fromfunction('NU', CallRCVALE, 'TEMP',
+               { 'para' : 'NU', 'MATER' : MATER })
+         flag_mat = False
+      
+      # 3.2. ----- paramètres
+      dict_constantes = {
+         'YOUNG' : CallRCVALE(TEMP, 'E', MATER),
+         'NU'    : CallRCVALE(TEMP, 'NU', MATER),
+      }
+      
+      # 3.3. ----- calcul de Kj(G)
+      l_tabi = []
+      for k, tab in enumerate(l_tab):
+         #tab: table de la couronne k
+         
+         # calcul de Kj(G) = K_i
+         new_para = 'K_%d' % (k + 1)
+         if is_2D:
+            # fusion avec TEMP, E et nu
+            tab = merge(tab, t_relev, 'NUME_ORDRE')
+            tab.fromfunction(new_para, fKj, ('G', 'YOUNG', 'NU'))
+            # renomme G en G_i
+            tab.Renomme('G', 'G_%d' % (k + 1))
+         else:
+            if self['RESU_THER']:
+               tab=merge(tab, t_relev, ['NUME_ORDRE', 'NOEUD'])
+            else:
+               tab=mergeLineInTable(tab, t_relev, nb_noeuds_fissure)
+
+            # en 3D, le paramètre R n'intervient pas
+            tab.fromfunction(new_para, fKj, ('G_LOCAL', 'YOUNG', 'NU'))
+            tab.Renomme('G_LOCAL', 'G_%d' % (k + 1))
+
+         l_tabi.append(tab)
+      
+      # 3.4 ----- Table des Gi, Ki sur les differentes couronnes + Kmoyen
+      if is_2D:
+         tabK_G = l_tabi[0]['NUME_ORDRE']
+         for tab in l_tabi:
+            tabK_G = merge(tabK_G, tab, 'NUME_ORDRE')
+      else:
+         tabK_G=l_tabi[0]
+         for i in range(1,len(l_tabi)):
+            tabK_G = merge(tabK_G, l_tabi[i], ['NUME_ORDRE', 'NOEUD'])
+      tabK_G.titr = 'G et K sur les differentes couronnes + moyennes'
+      tabK_G.fromfunction('GMOY', moyenne_positive, ['G_%d' % (k + 1) for k in range(nbcour)])
+      tabK_G.fromfunction('KMOY', moyenne, ['K_%d' % (k + 1) for k in range(nbcour)])
+      
+      # 3.5. ----- Contribution à la table globale
+      
+      if is_2D:
+         tabres = merge(tabK_G, tb_Gpmax, 'NUME_ORDRE')
+         tabres['OCCURRENCE'] = [iocc + 1] * len(l_numord)
+      else:
+         # tb_Gpmax est une table sur les tranches, 
+         # on l'ajoute dans la table aux noeuds tabres avec la convention:
+         # au 1er noeud et noeud milieu de la tranche on affecte la valeur de la tranche
+         # sauf pour la derniere tranche où on affecte la valeur sur les 3 noeuds de la tranche
+         tabres = tabK_G         
+         tabres = merge(tabK_G, tb_Gpmax_noeuds, ['NUME_ORDRE', 'NOEUD'])
+         tabres['OCCURRENCE'] = [iocc + 1] * len(l_numord) * nb_noeuds_fissure
+      #if info >= 2:
+      #   print tabres
+      
+      # 3.5.1. --- Table globale
+      if iocc == 0:
+         tabl_glob = tabres
+      else:
+         tabl_glob = merge(tabl_glob, tabres)
+      tabl_glob.titr = 'G, K sur les differentes couronnes, Gmoy, Kmoy et ' \
+                       'Gpmax fonctions du temps'
+      
+      # 3.6. ----- traitement selon identification / prédiction
+      d_para = {
+         'INTERPOL' : ['LIN', 'LIN'],
+         'NOM_PARA' : 'INST',
+         'PROL_DROITE' : 'CONSTANT',
+         'PROL_GAUCHE' : 'CONSTANT',
+      }
+      
+      # 3.6.1. --- identification
+      if identification:
+         KJ_CRIT = l_crit[iocc]
+         # on verifie que KJ_CRIT soit compris dans l'intervalle [KMOY_min, KMOY_max]
+         valkmoy = tabres.KMOY.values()            
+         if not (min(valkmoy) <= KJ_CRIT <= max(valkmoy)):
+#                               'constant utilisé).')
+            UTMESS('A','RUPTURE0_1')
+         if is_2D:
+            # définition des fonctions pour faire les interpolations
+            d_para.update({ 'NOM_RESU' : 'DELTALMAX' })
+            # DeltaMax en fonction du temps
+            fdL = t_fonction(tb_Gpmax.INST.values(), tb_Gpmax.DELTALMAX.values(), d_para)
+            # Gpmax fonction du temps
+            d_para.update({ 'NOM_RESU' : 'GPMAX' })
+            fGp = t_fonction(tb_Gpmax.INST.values(), tb_Gpmax.GPMAX.values(), d_para)
+            
+            d_para.update({ 'NOM_PARA' : 'KMOY',
+                           'NOM_RESU' : 'INST', })
+            valkmoy = tabres.KMOY.values()
+            # temps en fonction de Kmoy
+            finv = t_fonction(valkmoy, tabres.INST.values(), d_para)
+
+            # valeurs à mettre dans la table
+            # temps correspondant à KJ_CRIT
+            ti   = finv(KJ_CRIT)
+            # GP correspondant au temps critique
+            Gpi  = fGp(ti)
+            d_ident = {
+               'KJ_CRIT'   : KJ_CRIT,
+               'INST'      : ti,
+               'GPMAX'     : Gpi,
+               'KGPMAX'    : fKj(Gpi, **dict_constantes),
+               'DELTALMAX' : fdL(ti),
+            }
+            lv_ident.append(d_ident)
+         else:
+            
+            l_i_noeuds_sommets = range(0,len(l_noeuds_fissure),pas)
+            t_noeud_Kcrit = Table(para=tabres.para)
+            
+            # On determine quel noeud sommet maximise KMOY au cours du temps:
+            
+            row_KMOY_max = tabres.KMOY.MAXI()
+            noeud_KMOY_max = row_KMOY_max.NOEUD.values()[0]
+            
+            # avec le noeud ou KJ_CRIT est atteint, on regarde GP a gauche et a droite. 
+            # le GP le plus grand correspond au GPmax
+            # on garde la tranche ou GP est le plus grand            
+            
+            id_noeud_KMOY_max = list(l_noeuds_fissure).index(noeud_KMOY_max)
+            if id_noeud_KMOY_max==0:
+               # "Gpmax sur la 1ere tranche"
+               nume_tranche_Gpmax = 1
+            elif id_noeud_KMOY_max==(len(l_noeuds_fissure)-1):
+               # "Gpmax sur la derniere tranche"
+               nume_tranche_Gpmax = nb_tranches
+            else:
+               # "Gpmax sur une tranche intermediaire"
+               Gpi_tot = Table(para=tb_Gpmax.para)
+               Gpi_gauche = tb_Gpmax.NUME_TRANCHE==(id_noeud_KMOY_max/pas)
+               Gpi_tot.append(Gpi_gauche.rows[0])
+               Gpi_droite = tb_Gpmax.NUME_TRANCHE==(id_noeud_KMOY_max/pas+1)
+               Gpi_tot.append(Gpi_droite.rows[0])
+               Gpi_tab = Gpi_tot.GPMAX.MAXI()
+               nume_tranche_Gpmax = Gpi_tab.NUME_TRANCHE.values()[0]
+            
+            # tb_Gpmax_TrancheCrit est une table de la meme nature que la table 2D tb_Gpmax
+            # i.e. valeurs sur la seule tranche qui nous interesse (ou on sait
+            # que KJ_CRIT sera atteint)
+            
+            tb_Gpmax_TrancheCrit = tb_Gpmax.NUME_TRANCHE==nume_tranche_Gpmax
+            
+            # avec le noeud ou KJ_CRIT est atteint, on determine le temps
+            # critique par interpolation            
+            tabres_NoeudCrit = tabres.NOEUD==noeud_KMOY_max
+            
+            # la suite est idem 2D, seuls les noms des tables changent
+    
+            # définition des fonctions pour faire les interpolations
+            d_para.update({ 'NOM_RESU' : 'DELTALMAX' })
+            # DeltaMax en fonction du temps
+            fdL = t_fonction(tb_Gpmax_TrancheCrit.INST.values(),
+                              tb_Gpmax_TrancheCrit.DELTALMAX.values(),
+                              d_para)
+            
+            # Gpmax fonction du temps
+            d_para.update({ 'NOM_RESU' : 'GPMAX' })
+            fGp = t_fonction(tb_Gpmax_TrancheCrit.INST.values(),
+                              tb_Gpmax_TrancheCrit.GPMAX.values(),
+                              d_para)
+            
+    
+            d_para.update({ 'NOM_PARA' : 'KMOY',
+                           'NOM_RESU' : 'INST', })
+            valkmoy = tabres_NoeudCrit.KMOY.values()
+            # temps en fonction de Kmoy
+            finv = t_fonction(valkmoy, tabres_NoeudCrit.INST.values(), d_para)
+   
+            # valeurs à mettre dans la table
+            # temps correspondant a KJ_CRIT
+            ti   = finv(KJ_CRIT)
+            # GP correspondant au temps critique
+            Gpi  = fGp(ti)
+            # par rapport a 2D, on ajoute 'NUME_TRANCHE'
+            d_ident = {
+               'KJ_CRIT'      : KJ_CRIT,
+               'INST'         : ti,
+               'NUME_TRANCHE' : int(nume_tranche_Gpmax),
+               'GPMAX'        : Gpi,
+               'KGPMAX'       : fKj(Gpi, **dict_constantes),
+               'DELTALMAX'    : fdL(ti),
+            }
+            lv_ident.append(d_ident)
+            
+      # 3.6.2. --- prédiction
+      else:
+         pass
+   
+   # 4. ----- Construction de la table résultat si demandée
+   # 4.1. --- identification
+   if identification:
+      if is_2D:
+         para_tab_ident=('KJ_CRIT', 'INST', 'GPMAX', 'KGPMAX', 'DELTALMAX')
+      else:
+         para_tab_ident=('KJ_CRIT', 'INST', 'NUME_TRANCHE', 'GPMAX', 'KGPMAX', 'DELTALMAX')
+      tab_ident = Table(rows=lv_ident,
+                        para=para_tab_ident,
+                        typ = ('R')*len(para_tab_ident),
+                        titr='Identification aux valeurs de tenacités critiques')
+      dprod_result = tab_ident.dict_CREA_TABLE()
+      if info >= 2:
+         print tab_ident
+   
+   # 4.2. --- prédiction
+   else:
+      # définition de la fonction GPcrit = f(TEMP)
+      d_para.update({ 'NOM_PARA' : 'TEMP',
+                      'NOM_RESU' : 'GP_CRIT', })
+      fGpc = t_fonction(mccalc['TEMP'], mccalc['GP_CRIT'], d_para)
+      
+      # en 3D, GPMAX et DELTALMAX ne sont pas dans tab_glob: les recuperer de tb_Gpmax
+      
+      if is_2D:
+         tab_pred = tabl_glob['NUME_ORDRE', 'INST', 'TEMP', 'DELTALMAX', 'GPMAX']
+      else:
+         tab_pred = tb_Gpmax['NUME_ORDRE', 'INST', 'NUME_TRANCHE', 'DELTALMAX', 'GPMAX']
+         # on recupere TEMP de tabl_glob
+         tab_temp_tranche=Table(para=['NUME_ORDRE', 'NUME_TRANCHE', 'TEMP'])
+         # on fait une moyenne de la temperature sur les noeuds d'une tranche
+         for ordre in l_numord:
+            tabl_glob_ORDRE_i = tabl_glob.NUME_ORDRE==ordre
+            temp_ORDRE_i = tabl_glob_ORDRE_i.TEMP.values()
+            for i_tranche in range(nb_tranches):
+               l_temp_noeuds_tranche_i = temp_ORDRE_i[i_tranche : i_tranche+pas+1]
+               temp_tranche_i = moyenne(*l_temp_noeuds_tranche_i)
+               d = {'NUME_ORDRE': ordre, 'NUME_TRANCHE': i_tranche+1, 'TEMP': temp_tranche_i}
+               tab_temp_tranche.append(d)
+         tab_pred = merge(tab_pred, tab_temp_tranche, ['NUME_ORDRE', 'NUME_TRANCHE'])
+      
+      tab_pred.fromfunction('GP_CRIT', fGpc, 'TEMP')
+      tab_pred.fromfunction('PREDICTION', crit, ('GP_CRIT', 'GPMAX'))
+      tab_pred.titr = 'Comparaison Gpmax à Gpcrit(T)'
+      dprod_result = tab_pred.dict_CREA_TABLE()
+   
+   # 9. ----- création de la table_sdaster résultat
+   dprod = tabl_glob.dict_CREA_TABLE()
+   result = CREA_TABLE(**dprod)
+   tabresult = CREA_TABLE(**dprod_result)
+
+
+
+# -----------------------------------------------------------------------------
+def CallRCVALE(TEMP, para, MATER):
+   """Fonction appelant RCVALE et retourne la valeur d'un paramètre.
+   """
+   valres, flag_ok = MATER.RCVALE('ELAS', 'TEMP', TEMP, para)
+   assert list(flag_ok).count('OK') != 1, \
+         'Erreur lors de la récupération des valeurs du matériau.'
+   return valres
+
+# -----------------------------------------------------------------------------
+def fKj(G, YOUNG, NU):
+   """Calcul de Kj à partir de G (formule d'Irwin)
+   """
+   Kj=(abs(G * YOUNG / (1.0 - NU**2)))**0.5
+   return Kj
+
+# -----------------------------------------------------------------------------
+def fDL(ICOP, pascop):
+   """DeltaL = numéro copeau * pas d'entaille
+   """
+   return ICOP * pascop
+
+# -----------------------------------------------------------------------------
+def fGp_Etot(TOTALE, DELTAL, R, syme=False):
+   """Gp(Etotale, K), deltal pris dans le context global.
+      ICOP      : numéro du copeau,
+      DELTAL    : liste des epaisseurs des copeaux
+      R         : rayon en axisymetrique,
+                  longueur de l'élément 1D situé sur le front d'entaille si modèle 3D.
+      syme      : True s'il y a symétrie.
+   """
+   import types
+   fact_syme = 1.
+   if syme:
+      fact_syme = 2.
+   Gp_Etot = fact_syme * TOTALE / (DELTAL * R )
+   return Gp_Etot
+
+# -----------------------------------------------------------------------------
+def MaxRelatif(table, nom_para):
+   """Extrait le dernier maxi du champ `nom_para` de la table.
+   """
+   l_val = getattr(table, nom_para).values()
+   l_val.reverse()
+   Vlast = l_val[0]
+   for val in l_val:
+      if val < Vlast:
+         break
+      Vlast = val
+   return getattr(table, nom_para) == Vlast
+
+# -----------------------------------------------------------------------------
+def crit(GP_CRIT, GPMAX):
+   """Retourne 1 quand GP_CRIT > GPMAX
+   """
+   if GPMAX > GP_CRIT:
+      return 1
+   else:
+      return 0
+
+# -----------------------------------------------------------------------------
+def moyenne(*args):
+   """Fonction moyenne
+   """
+   return sum(args)/len(args)
+
+def moyenne_positive(*args):
+   """Fonction moyenne
+   """
+   return sum([abs(a) for a in args])/len(args)
+
+def mysum(*args):
+   """Fonction sum.
+      La fonction sum ne peut pas etre appelee sur une liste de parametre
+      d'une table via fromfunction
+   """
+   return sum(args)
+
+def sum_and_check(*args):
+   """Fonction sum.
+      Verifie si la somme est positive.
+      Si la somme est negative, on la met egale a zero
+   """
+   somme = sum(args)
+   if somme<0:
+      somme=0
+   return somme
+
+# On recupere des infos sur le fond de fissure
+def getFondFissInfo(fondfiss):
+   # >FONFISS .FOND      .NOEU        <
+   # >FONFISS .FOND      .TYPE        < 
+   import aster
+   l_noeuds_fissure = aster.getvectjev(fondfiss.nom.ljust(8)+'.FOND      .NOEU        ')
+   type_mailles = aster.getvectjev(fondfiss.nom.ljust(8)+'.FOND      .TYPE        ')
+   if (type_mailles[0].strip() == 'SEG3' ):
+      pas = 2
+   else:
+      pas = 1
+   return l_noeuds_fissure, pas
+
+########################################################################
+# determination de la distance min entre 2 points consécutifs de la ligne de coupe
+
+def largeur_tranche(nom_maillage, l_noms_noeuds_fissure, pas, i_tranche):
+   # >MA      .COORDO    .VALE        <
+   from math import sqrt
+   import aster
+   
+   # tuple des noms des noeuds du maillage
+   t_noms_noeuds_maillage = aster.getvectjev(nom_maillage.ljust(8)+'.NOMNOE')
+   # on convertit en liste pour utiliser la methode index
+   # qui est plus optimal qu'une boucle sur les indices du tuple
+   l_noms_noeuds_maillage = list(t_noms_noeuds_maillage)
+   
+   l_numeros_noeuds_fissure = []
+   for i in range(0,len(l_noms_noeuds_fissure),pas):
+      nom = l_noms_noeuds_fissure[i]
+      index = l_noms_noeuds_maillage.index(nom)
+      l_numeros_noeuds_fissure.append(index)
+   
+   coor1=aster.getvectjev(nom_maillage.ljust(8)+'.COORDO    .VALE        ',
+                        l_numeros_noeuds_fissure[i_tranche]*3,3)
+   coor2=aster.getvectjev(nom_maillage.ljust(8)+'.COORDO    .VALE        ',
+                        l_numeros_noeuds_fissure[i_tranche+1]*3,3)
+   
+   d=sqrt( (coor1[0]-coor2[0])**2+(coor1[1]-coor2[1])**2+(coor1[2]-coor2[2])**2)
+   return d
+   
+def mergeLineInTable(multiTable, lineTable, nb_noeuds):
+   # on ajoute a la table multiTable les colonnes de lineTable
+   # pour chaque nume_ordre autant de fois qu'il y a de nb_noeuds
+   from Utilitai.Table      import Table, merge
+   
+   l_ordre = lineTable.NUME_ORDRE
+   l_para = lineTable.copy().para
+   l_para.remove('NUME_ORDRE')
+   for i, ordre in enumerate(l_ordre):
+      multiTable_i = multiTable.NUME_ORDRE==ordre
+      row_i = lineTable.rows[i]
+      for para in l_para:
+         valeur_i = row_i[para]
+         multiTable_i[para] = [valeur_i] * nb_noeuds
+      if i==0:
+         newTable=multiTable_i
+      else:
+         newTable = merge(newTable, multiTable_i)
+         
+   return newTable
diff --git a/Aster/Cata/cataSTA10/Macro/post_k1_k2_k3_ops.py b/Aster/Cata/cataSTA10/Macro/post_k1_k2_k3_ops.py
new file mode 100644 (file)
index 0000000..2cf042f
--- /dev/null
@@ -0,0 +1,1294 @@
+#@ MODIF post_k1_k2_k3_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+def veri_tab(tab,nom,ndim) :
+   from Utilitai.Utmess     import  UTMESS
+   macro = 'POST_K1_K2_K3'
+   for label in ('DX','DY','COOR_X','COOR_Y','ABSC_CURV') :
+       if label not in tab.para :
+          UTMESS('F','RUPTURE0_2',valk=[label,nom])
+   if ndim==3 :
+      if 'DZ'     not in tab.para :
+          label='DZ'
+          UTMESS('F','RUPTURE0_2',valk=[label,nom])
+      if 'COOR_Z' not in tab.para :
+          label='COOR_Z'
+          UTMESS('F','RUPTURE0_2',valk=[label,nom])
+
+#TODO prefer use numpy.cross
+def cross_product(a,b):
+    cross = [0]*3
+    cross[0] = a[1]*b[2]-a[2]*b[1]
+    cross[1] = a[2]*b[0]-a[0]*b[2]
+    cross[2] = a[0]*b[1]-a[1]*b[0]
+    return cross
+
+def complete(Tab):
+    n = len(Tab)
+    for i in range(n) :
+      if Tab[i]==None : Tab[i] = 0.
+    return Tab
+def moy(t):
+    m = 0
+    for value in t :
+      m += value
+    return (m/len(t))
+
+def InterpolFondFiss(s0, Coorfo) :
+# Interpolation des points du fond de fissure (xfem)
+# s0     = abscisse curviligne du point considere 
+# Coorfo = Coordonnees du fond (extrait de la sd fiss_xfem)
+# en sortie : xyza = Coordonnees du point et abscisse
+   n = len(Coorfo) / 4
+   if ( s0 < Coorfo[3] )  :
+     xyz =  [Coorfo[0],Coorfo[1],Coorfo[2],s0]
+     return xyz
+   if ( s0 > Coorfo[-1]  ) :
+     xyz =  [Coorfo[-4],Coorfo[-3],Coorfo[-2],s0]
+     return xyz
+   i = 1
+   while s0 > Coorfo[4*i+3]:
+      i = i+1
+   xyz = [0.]*4
+   xyz[0] = (s0-Coorfo[4*(i-1)+3]) * (Coorfo[4*i+0]-Coorfo[4*(i-1)+0]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Coorfo[4*(i-1)+0]
+   xyz[1] = (s0-Coorfo[4*(i-1)+3]) * (Coorfo[4*i+1]-Coorfo[4*(i-1)+1]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Coorfo[4*(i-1)+1]
+   xyz[2] = (s0-Coorfo[4*(i-1)+3]) * (Coorfo[4*i+2]-Coorfo[4*(i-1)+2]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Coorfo[4*(i-1)+2]
+   xyz[3] = s0
+   return xyz
+
+def InterpolBaseFiss(s0, Basefo, Coorfo) :
+# Interpolation de la base locale en fond de fissure
+# s0     = abscisse curviligne du point considere     
+# Basefo = base locale du fond (VNx,VNy,VNz,VPx,VPy,VPz)
+# Coorfo = Coordonnees et abscisses du fond (extrait de la sd fiss_xfem)
+# en sortie : VPVNi = base locale au point considere (6 coordonnes)
+   n = len(Coorfo) / 4
+   if ( s0 < Coorfo[3] )  :
+     VPVNi =  Basefo[0:6]
+     return VPVNi
+   if ( s0 > Coorfo[-1]  ) :
+     VPVNi = [Basefo[i] for i in range(-6,0)] 
+     return VPVNi
+   i = 1
+   while s0 > Coorfo[4*i+3]:
+      i = i+1
+   VPVNi = [0.]*6
+   for k in range(6) :
+      VPVNi[k] = (s0-Coorfo[4*(i-1)+3]) * (Basefo[6*i+k]-Basefo[6*(i-1)+k]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Basefo[6*(i-1)+k]
+   return VPVNi
+    
+     
+def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
+                   TABL_DEPL_SUP,TABL_DEPL_INF,ABSC_CURV_MAXI,PREC_VIS_A_VIS,
+                   TOUT_ORDRE,NUME_ORDRE,LIST_ORDRE,INST,LIST_INST,SYME_CHAR,
+                   INFO,VECT_K1,TITRE,**args):
+   """
+   Macro POST_K1_K2_K3
+   Calcul des facteurs d'intensité de contraintes en 2D et en 3D
+   par extrapolation des sauts de déplacements sur les lèvres de
+   la fissure. Produit une table.
+   """
+   import aster
+   import string
+   import copy
+   import math
+   import numpy as NP
+   from math import pi
+   from types import ListType, TupleType
+   from Accas import _F
+   from Utilitai.Table      import Table, merge
+   from SD.sd_l_charges import sd_l_charges
+   from SD.sd_mater     import sd_compor1
+   EnumTypes = (ListType, TupleType)
+
+   macro = 'POST_K1_K2_K3'
+   from Accas               import _F
+   from Utilitai.Utmess     import  UTMESS
+
+   ier = 0
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+
+   # Le concept sortant (de type table_sdaster ou dérivé) est tab
+   self.DeclareOut('tabout', self.sd)
+   
+   # On importe les definitions des commandes a utiliser dans la macro
+   # Le nom de la variable doit etre obligatoirement le nom de la commande
+   CREA_TABLE    = self.get_cmd('CREA_TABLE')
+   CALC_TABLE    = self.get_cmd('CALC_TABLE')
+   POST_RELEVE_T    = self.get_cmd('POST_RELEVE_T')
+   DETRUIRE      = self.get_cmd('DETRUIRE')
+   DEFI_GROUP      = self.get_cmd('DEFI_GROUP')
+   MACR_LIGN_COUPE      = self.get_cmd('MACR_LIGN_COUPE')
+
+   AFFE_MODELE      = self.get_cmd('AFFE_MODELE')
+   PROJ_CHAMP      = self.get_cmd('PROJ_CHAMP')
+      
+#   ------------------------------------------------------------------
+#                         CARACTERISTIQUES MATERIAUX
+#   ------------------------------------------------------------------
+   matph = MATER.NOMRC.get()  
+   phenom=None
+   for cmpt in matph :
+       if cmpt[:4]=='ELAS' :
+          phenom=cmpt
+          break
+   if phenom==None : UTMESS('F','RUPTURE0_5')
+#   --- RECHERCHE SI LE MATERIAU DEPEND DE LA TEMPERATURE:
+   compor = sd_compor1('%-8s.%s' % (MATER.nom, phenom))
+   valk = [s.strip() for s in compor.VALK.get()]
+   valr = compor.VALR.get()
+   dicmat=dict(zip(valk,valr))
+#   --- PROPRIETES MATERIAUX DEPENDANTES DE LA TEMPERATURE
+   Tempe3D = False
+   if FOND_FISS and args['EVOL_THER'] : 
+# on recupere juste le nom du resultat thermique (la température est variable de commande)
+      ndim   = 3
+      Tempe3D=True
+      resuth=string.ljust(args['EVOL_THER'].nom,8).rstrip()
+   if dicmat.has_key('TEMP_DEF') and not args['EVOL_THER'] :
+      nompar = ('TEMP',)
+      valpar = (dicmat['TEMP_DEF'],)
+      UTMESS('A','RUPTURE0_6',valr=valpar)
+      nomres=['E','NU']
+      valres,codret = MATER.RCVALE('ELAS',nompar,valpar,nomres,'F')
+      e = valres[0]
+      nu = valres[1]
+      
+
+#   --- PROPRIETES MATERIAUX INDEPENDANTES DE LA TEMPERATURE
+   else :
+      e  = dicmat['E']
+      nu = dicmat['NU']  
+   
+   if not Tempe3D :
+      coefd3 = 0.
+      coefd  = e * NP.sqrt(2.*pi)
+      unmnu2 = 1. - nu**2
+      unpnu  = 1. + nu
+      if MODELISATION=='3D' :
+         coefk='K1 K2 K3'
+         ndim   = 3
+         coefd  = coefd      / ( 8.0 * unmnu2 )
+         coefd3 = e*NP.sqrt(2*pi) / ( 8.0 * unpnu )
+         coefg  = unmnu2 / e
+         coefg3 = unpnu  / e
+      elif MODELISATION=='AXIS' :
+         ndim   = 2
+         coefd  = coefd  / ( 8. * unmnu2 )
+         coefg  = unmnu2 / e
+         coefg3 = unpnu  / e
+      elif MODELISATION=='D_PLAN' :
+         coefk='K1 K2'
+         ndim   = 2
+         coefd  = coefd / ( 8. * unmnu2 )
+         coefg  = unmnu2 / e
+         coefg3 = unpnu  / e
+      elif MODELISATION=='C_PLAN' :
+         coefk='K1 K2'
+         ndim   = 2
+         coefd  = coefd / 8.
+         coefg  = 1. / e
+         coefg3 = unpnu / e
+      else :
+         UTMESS('F','RUPTURE0_10')
+
+
+#   ------------------------------------------------------------------
+#                        CAS FOND_FISS
+#   ------------------------------------------------------------------
+   if FOND_FISS : 
+      MAILLAGE = args['MAILLAGE']
+      NOEUD = args['NOEUD']
+      SANS_NOEUD = args['SANS_NOEUD']
+      GROUP_NO = args['GROUP_NO']
+      SANS_GROUP_NO = args['SANS_GROUP_NO']
+      TOUT = args['TOUT']
+      TYPE_MAILLAGE = args['TYPE_MAILLAGE']
+      NB_NOEUD_COUPE = args['NB_NOEUD_COUPE']
+      if NB_NOEUD_COUPE ==None : NB_NOEUD_COUPE = 5
+      LNOFO = FOND_FISS.FOND_______NOEU.get()
+      RECOL = False
+# Cas double fond de fissure : par convention les noeuds sont ceux de fond_inf
+      if LNOFO==None :
+         RECOL = True
+         LNOFO = FOND_FISS.FONDINF____NOEU.get()
+         if LNOFO==None : UTMESS('F','RUPTURE0_11')
+      LNOFO = map(string.rstrip,LNOFO)
+      Nbfond = len(LNOFO)
+
+      if MODELISATION=='3D' :
+#   ----------Mots cles TOUT, NOEUD, SANS_NOEUD -------------
+        Typ = FOND_FISS.FOND_______TYPE.get()
+        if (Typ[0]=='SEG2    ') or (Typ[0]=='SEG3    ' and TOUT=='OUI') :
+           pas = 1
+        elif (Typ[0]=='SEG3    ') : 
+           pas = 2
+        else :
+           UTMESS('F','RUPTURE0_12')
+####
+        NO_SANS = []
+        NO_AVEC = []
+        if GROUP_NO!=None :
+          collgrno = MAILLAGE.GROUPENO.get()
+          cnom = MAILLAGE.NOMNOE.get()
+          if type(GROUP_NO) not in EnumTypes : GROUP_NO = (GROUP_NO,)
+          for m in range(len(GROUP_NO)) :
+            ngrno=GROUP_NO[m].ljust(8).upper()
+            if ngrno not in collgrno.keys() :
+              UTMESS('F','RUPTURE0_13',valk=ngrno)
+            for i in range(len(collgrno[ngrno])) : NO_AVEC.append(cnom[collgrno[ngrno][i]-1])
+          NO_AVEC= map(string.rstrip,NO_AVEC)
+        if NOEUD!=None : 
+          if type(NOEUD) not in EnumTypes : NO_AVEC = (NOEUD,)
+          else : NO_AVEC = NOEUD
+        if SANS_GROUP_NO!=None :
+          collgrno = MAILLAGE.GROUPENO.get()
+          cnom = MAILLAGE.NOMNOE.get()
+          if type(SANS_GROUP_NO) not in EnumTypes : SANS_GROUP_NO = (SANS_GROUP_NO,)
+          for m in range(len(SANS_GROUP_NO)) :
+            ngrno=SANS_GROUP_NO[m].ljust(8).upper()
+            if ngrno not in collgrno.keys() :
+              UTMESS('F','RUPTURE0_13',valk=ngrno)
+            for i in range(len(collgrno[ngrno])) : NO_SANS.append(cnom[collgrno[ngrno][i]-1])
+          NO_SANS= map(string.rstrip,NO_SANS)
+        if SANS_NOEUD!=None : 
+          if type(SANS_NOEUD) not in EnumTypes : NO_SANS = (SANS_NOEUD,)
+          else : NO_SANS = SANS_NOEUD
+# Creation de la liste des noeuds du fond a traiter : Lnf1
+        Lnf1 = []
+        Nbf1 = 0
+        if len(NO_AVEC)!=0 :
+          for i in range(len(NO_AVEC)) :
+            if NO_AVEC[i] in LNOFO : 
+              Lnf1.append(NO_AVEC[i])
+              Nbf1 = Nbf1 +1
+            else : 
+              UTMESS('F','RUPTURE0_15',valk=NO_AVEC[i])
+        else :
+           for i in range(0,Nbfond,pas) :
+              if not (LNOFO[i] in NO_SANS) :
+                 Lnf1.append(LNOFO[i])
+                 Nbf1 = Nbf1 +1
+      else :
+        Lnf1 = LNOFO
+        Nbf1 = 1
+        
+##### Cas maillage libre###########
+# creation des directions normales et macr_lign_coup
+      if TYPE_MAILLAGE =='LIBRE':
+        if not RESULTAT : UTMESS('F','RUPTURE0_16')
+        Lnofon = Lnf1
+        Nbnofo = Nbf1
+        ListmaS = FOND_FISS.LEVRESUP___MAIL.get()
+        if ListmaS==None :  UTMESS('F','RUPTURE0_19')
+        if SYME_CHAR=='SANS':
+          ListmaI = FOND_FISS.LEVREINF___MAIL.get()
+        __NCOFON=POST_RELEVE_T(ACTION=_F(INTITULE='Tab pour coordonnees noeuds du fond',
+                                            NOEUD=LNOFO,
+                                            RESULTAT=RESULTAT,
+                                            NOM_CHAM='DEPL',NUME_ORDRE=1,NOM_CMP=('DX',),
+                                            OPERATION='EXTRACTION',),);
+        tcoorf=__NCOFON.EXTR_TABLE()
+        DETRUIRE(CONCEPT=_F(NOM=__NCOFON),INFO=1) 
+        nbt = len(tcoorf['NOEUD'].values()['NOEUD'])
+        xs=NP.array(tcoorf['COOR_X'].values()['COOR_X'][:nbt])
+        ys=NP.array(tcoorf['COOR_Y'].values()['COOR_Y'][:nbt])
+        if ndim==2 : zs=NP.zeros(nbt)
+        elif ndim==3 : zs=NP.array(tcoorf['COOR_Z'].values()['COOR_Z'][:nbt])
+        ns = tcoorf['NOEUD'].values()['NOEUD'][:nbt]
+        ns = map(string.rstrip,ns)
+        l_coorf =  [[ns[i],xs[i],ys[i],zs[i]] for i in range(0,nbt)]
+        l_coorf = [(i[0],i[1:]) for i in l_coorf]
+        d_coorf = dict(l_coorf) 
+# Coordonnee d un pt quelconque des levres pr determination sens de propagation
+        cmail=MAILLAGE.NOMMAI.get()
+        for i in range(len(cmail)) :
+            if cmail[i] == ListmaS[0] : break
+        colcnx=MAILLAGE.CONNEX.get()
+        cnom = MAILLAGE.NOMNOE.get()
+        NO_TMP = []
+        for k in range(len(colcnx[i+1])) : NO_TMP.append(cnom[colcnx[i+1][k]-1])
+        __NCOLEV=POST_RELEVE_T(ACTION=_F(INTITULE='Tab pour coordonnees pt levre',
+                                          NOEUD = NO_TMP,
+                                           RESULTAT=RESULTAT,
+                                           NOM_CHAM='DEPL',NUME_ORDRE=1,NOM_CMP=('DX',),
+                                           OPERATION='EXTRACTION',),);
+        tcoorl=__NCOLEV.EXTR_TABLE()
+        DETRUIRE(CONCEPT=_F(NOM=__NCOLEV),INFO=1) 
+        nbt = len(tcoorl['NOEUD'].values()['NOEUD'])
+        xl=moy(tcoorl['COOR_X'].values()['COOR_X'][:nbt])
+        yl=moy(tcoorl['COOR_Y'].values()['COOR_Y'][:nbt])
+        zl=moy(tcoorl['COOR_Z'].values()['COOR_Z'][:nbt])
+        Plev = NP.array([xl, yl, zl])
+# Calcul des normales a chaque noeud du fond
+        v1 =  NP.array(VECT_K1)
+        VN = [None]*Nbfond
+        absfon = [0,]
+        if MODELISATION=='3D' :
+          DTANOR = FOND_FISS.DTAN_ORIGINE.get()
+          Pfon2 = NP.array([d_coorf[LNOFO[0]][0],d_coorf[LNOFO[0]][1],d_coorf[LNOFO[0]][2]])
+          VLori = Pfon2 - Plev
+          if DTANOR != None :
+            VN[0] = NP.array(DTANOR)
+          else :
+            Pfon3 = NP.array([d_coorf[LNOFO[1]][0],d_coorf[LNOFO[1]][1],d_coorf[LNOFO[1]][2]])
+            VT = (Pfon3 - Pfon2)/NP.sqrt(NP.dot(NP.transpose(Pfon3-Pfon2),Pfon3-Pfon2))
+            VN[0] = NP.array(cross_product(VT,v1))
+          for i in range(1,Nbfond-1):
+            Pfon1 = NP.array([d_coorf[LNOFO[i-1]][0],d_coorf[LNOFO[i-1]][1],d_coorf[LNOFO[i-1]][2]])
+            Pfon2 = NP.array([d_coorf[LNOFO[i]][0],d_coorf[LNOFO[i]][1],d_coorf[LNOFO[i]][2]])
+            Pfon3 = NP.array([d_coorf[LNOFO[i+1]][0],d_coorf[LNOFO[i+1]][1],d_coorf[LNOFO[i+1]][2]])
+            absf = NP.sqrt(NP.dot(NP.transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1]
+            absfon.append(absf)
+            VT = (Pfon3 - Pfon2)/NP.sqrt(NP.dot(NP.transpose(Pfon3-Pfon2),Pfon3-Pfon2))
+            VT = VT+(Pfon2 - Pfon1)/NP.sqrt(NP.dot(NP.transpose(Pfon2-Pfon1),Pfon2-Pfon1))
+            VN[i] = NP.array(cross_product(VT,v1)) 
+            VN[i] = VN[i]/NP.sqrt(NP.dot(NP.transpose(VN[i]),VN[i]))
+          i = Nbfond-1
+          Pfon1 = NP.array([d_coorf[LNOFO[i-1]][0],d_coorf[LNOFO[i-1]][1],d_coorf[LNOFO[i-1]][2]])
+          Pfon2 = NP.array([d_coorf[LNOFO[i]][0],d_coorf[LNOFO[i]][1],d_coorf[LNOFO[i]][2]])
+          VLextr = Pfon2 - Plev
+          absf = NP.sqrt(NP.dot(NP.transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i-1]
+          absfon.append(absf)
+          DTANEX = FOND_FISS.DTAN_EXTREMITE.get()
+          if DTANEX != None :
+            VN[i] = NP.array(DTANEX)
+          else :
+            VT = (Pfon2 - Pfon1)/NP.sqrt(NP.dot(NP.transpose(Pfon2-Pfon1),Pfon2-Pfon1))
+            VN[i] = NP.array(cross_product(VT,v1))
+          dicoF = dict([(LNOFO[i],absfon[i]) for i in range(Nbfond)])  
+          dicVN = dict([(LNOFO[i],VN[i]) for i in range(Nbfond)])
+#Sens de la tangente       
+          v = cross_product(VLori,VLextr)
+          sens = NP.sign(NP.dot(NP.transpose(v),v1))
+#Cas 2D              
+        if MODELISATION!='3D' :
+          DTANOR = False
+          DTANEX = False
+          VT = NP.array([0.,0.,1.])
+          VN = NP.array(cross_product(v1,VT))
+          dicVN = dict([(LNOFO[0],VN)])
+          Pfon = NP.array([d_coorf[LNOFO[0]][0],d_coorf[LNOFO[0]][1],d_coorf[LNOFO[0]][2]])
+          VLori = Pfon - Plev
+          sens = NP.sign(NP.dot(NP.transpose(VN),VLori))
+#Extraction dep sup/inf sur les normales          
+        TlibS = [None]*Nbf1
+        TlibI = [None]*Nbf1
+        if NB_NOEUD_COUPE < 3 : 
+          UTMESS('A','RUPTURE0_17')
+          NB_NOEUD_COUPE = 5
+        iret,ibid,n_modele = aster.dismoi('F','MODELE',RESULTAT.nom,'RESULTAT')
+        n_modele=n_modele.rstrip()
+        if len(n_modele)==0 : UTMESS('F','RUPTURE0_18')
+        MODEL = self.get_concept(n_modele)
+        dmax  = PREC_VIS_A_VIS * ABSC_CURV_MAXI
+        for i in range(Nbf1):
+          Porig = NP.array(d_coorf[Lnf1[i]] )
+          if Lnf1[i]==LNOFO[0] and DTANOR : Pextr = Porig - ABSC_CURV_MAXI*dicVN[Lnf1[i]]
+          elif Lnf1[i]==LNOFO[Nbfond-1] and DTANEX : Pextr = Porig - ABSC_CURV_MAXI*dicVN[Lnf1[i]]
+          else : Pextr = Porig - ABSC_CURV_MAXI*dicVN[Lnf1[i]]*sens
+          TlibS[i] = MACR_LIGN_COUPE(RESULTAT=RESULTAT,
+                NOM_CHAM='DEPL',MODELE=MODEL, VIS_A_VIS=_F(MAILLE_1 = ListmaS),
+                LIGN_COUPE=_F(NB_POINTS=NB_NOEUD_COUPE,COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
+                               TYPE='SEGMENT', COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
+                               DISTANCE_MAX=dmax),);
+          if SYME_CHAR=='SANS':
+            TlibI[i] = MACR_LIGN_COUPE(RESULTAT=RESULTAT,
+                  NOM_CHAM='DEPL',MODELE=MODEL, VIS_A_VIS=_F(MAILLE_1 = ListmaI),
+                LIGN_COUPE=_F(NB_POINTS=NB_NOEUD_COUPE,COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
+                               TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
+                               DISTANCE_MAX=dmax),);
+
+
+##### Cas maillage regle###########
+      else:
+#   ---------- Dictionnaires des levres  -------------  
+        NnormS = FOND_FISS.SUPNORM____NOEU.get()
+        if NnormS==None : 
+          UTMESS('F','RUPTURE0_19')
+        NnormS = map(string.rstrip,NnormS)
+        if LNOFO[0]==LNOFO[-1] and MODELISATION=='3D' : Nbfond=Nbfond-1  # Cas fond de fissure ferme
+        NnormS = [[LNOFO[i],NnormS[i*20:(i+1)*20]] for i in range(0,Nbfond)]
+        NnormS = [(i[0],i[1][0:]) for i in NnormS]
+        dicoS = dict(NnormS)
+        if SYME_CHAR=='SANS':
+           NnormI = FOND_FISS.INFNORM____NOEU.get()
+           if NnormI==None : 
+             UTMESS('F','RUPTURE0_20')
+           NnormI = map(string.rstrip,NnormI)
+           NnormI = [[LNOFO[i],NnormI[i*20:(i+1)*20]] for i in range(0,Nbfond)]
+           NnormI = [(i[0],i[1][0:]) for i in NnormI]
+           dicoI = dict(NnormI)
+
+#   ---------- Dictionnaire des coordonnees  -------------  
+        if RESULTAT :
+          Ltot = LNOFO
+          for i in range(Nbf1) :
+            for k in range(0,20) :
+              if dicoS[Lnf1[i]][k] !='': Ltot.append(dicoS[Lnf1[i]][k])
+          if SYME_CHAR=='SANS':
+            for i in range(Nbf1) :
+              for k in range(0,20) :
+                if dicoI[Lnf1[i]][k] !='': Ltot.append(dicoI[Lnf1[i]][k])
+          Ltot=dict([(i,0) for i in Ltot]).keys()
+          __NCOOR=POST_RELEVE_T(ACTION=_F(INTITULE='Tab pour coordonnees noeuds des levres',
+                                            NOEUD=Ltot,
+                                            RESULTAT=RESULTAT,
+                                            NOM_CHAM='DEPL',NUME_ORDRE=1,NOM_CMP=('DX',),
+                                            OPERATION='EXTRACTION',),);
+          tcoor=__NCOOR.EXTR_TABLE()
+          DETRUIRE(CONCEPT=_F(NOM=__NCOOR),INFO=1)  
+        else :  
+          if SYME_CHAR=='SANS':
+            __NCOOR=CALC_TABLE(TABLE=TABL_DEPL_SUP,
+                        ACTION=_F(OPERATION = 'COMB',NOM_PARA='NOEUD',TABLE=TABL_DEPL_INF,))
+            tcoor=__NCOOR.EXTR_TABLE()
+            DETRUIRE(CONCEPT=_F(NOM=__NCOOR),INFO=1)  
+          else :
+            tcoor=TABL_DEPL_SUP.EXTR_TABLE()
+        nbt = len(tcoor['NOEUD'].values()['NOEUD'])
+        xs=NP.array(tcoor['COOR_X'].values()['COOR_X'][:nbt])
+        ys=NP.array(tcoor['COOR_Y'].values()['COOR_Y'][:nbt])
+        if ndim==2 : zs=NP.zeros(nbt)
+        elif ndim==3 : zs=NP.array(tcoor['COOR_Z'].values()['COOR_Z'][:nbt])
+        ns = tcoor['NOEUD'].values()['NOEUD'][:nbt]
+        ns = map(string.rstrip,ns)
+        l_coor =  [[ns[i],xs[i],ys[i],zs[i]] for i in range(0,nbt)]
+        l_coor = [(i[0],i[1:]) for i in l_coor]
+        d_coor = dict(l_coor)
+
+#   ---------- Abscisse curviligne du fond  -------------  
+        absfon = [0,]
+        for i in range(Nbfond-1) :
+          Pfon1 = NP.array([d_coor[LNOFO[i]][0],d_coor[LNOFO[i]][1],d_coor[LNOFO[i]][2]])
+          Pfon2 = NP.array([d_coor[LNOFO[i+1]][0],d_coor[LNOFO[i+1]][1],d_coor[LNOFO[i+1]][2]])
+          absf = NP.sqrt(NP.dot(NP.transpose(Pfon1-Pfon2),Pfon1-Pfon2)) + absfon[i]
+          absfon.append(absf)
+        dicoF = dict([(LNOFO[i],absfon[i]) for i in range(Nbfond)])
+
+     
+# ---Noeuds LEVRE_SUP et LEVRE_INF: ABSC_CURV_MAXI et PREC_VIS_A_VIS-----
+   
+        NBTRLS = 0
+        NBTRLI = 0
+        Lnosup = [None]*Nbf1
+        Lnoinf = [None]*Nbf1
+        Nbnofo = 0
+        Lnofon = []
+        precv = PREC_VIS_A_VIS
+        if ABSC_CURV_MAXI!=None : rmax = ABSC_CURV_MAXI
+        else                   : rmax = 100
+        precn = precv * rmax
+        rmprec= rmax*(1.+precv/10.)
+        for i in range(0,Nbf1) :
+           Pfon = NP.array([d_coor[Lnf1[i]][0],d_coor[Lnf1[i]][1],d_coor[Lnf1[i]][2]])
+           Tmpsup = []
+           Tmpinf = []
+           itots = 0
+           itoti = 0
+           NBTRLS = 0
+           NBTRLI = 0
+           for k in range(0,20) :
+              if dicoS[Lnf1[i]][k] !='':
+                 itots = itots +1
+                 Nsup =  dicoS[Lnf1[i]][k]
+                 Psup = NP.array([d_coor[Nsup][0],d_coor[Nsup][1],d_coor[Nsup][2]])
+                 abss = NP.sqrt(NP.dot(NP.transpose(Pfon-Psup),Pfon-Psup))
+                 if abss<rmprec :
+                    NBTRLS = NBTRLS +1
+                    Tmpsup.append(dicoS[Lnf1[i]][k])
+              if SYME_CHAR=='SANS':
+                 if dicoI[Lnf1[i]][k] !='':
+                    itoti = itoti +1
+                    Ninf =  dicoI[Lnf1[i]][k]
+                    Pinf = NP.array([d_coor[Ninf][0],d_coor[Ninf][1],d_coor[Ninf][2]])
+                    absi = NP.sqrt(NP.dot(NP.transpose(Pfon-Pinf),Pfon-Pinf))
+# On verifie que les noeuds sont en vis a vis
+                    if abss<rmprec :
+                      dist = NP.sqrt(NP.dot(NP.transpose(Psup-Pinf),Psup-Pinf))
+                      if dist>precn : 
+                        UTMESS('A','RUPTURE0_21',valk=Lnf1[i])
+                      else :
+                        NBTRLI = NBTRLI +1
+                        Tmpinf.append(dicoI[Lnf1[i]][k])
+# On verifie qu il y a assez de noeuds
+           if NBTRLS < 3 : 
+              UTMESS('A+','RUPTURE0_22',valk=Lnf1[i])
+              if Lnf1[i]==LNOFO[0] or Lnf1[i]==LNOFO[-1]: UTMESS('A+','RUPTURE0_23')
+              if itots<3 : UTMESS('A','RUPTURE0_24')
+              else : UTMESS('A','RUPTURE0_25')
+           elif (SYME_CHAR=='SANS') and (NBTRLI < 3) :
+              UTMESS('A+','RUPTURE0_26',valk=Lnf1[i])
+              if Lnf1[i]==LNOFO[0] or Lnf1[i]==LNOFO[-1]: UTMESS('A+','RUPTURE0_23')
+              if itoti<3 : UTMESS('A','RUPTURE0_24')
+              else :UTMESS('A','RUPTURE0_25')
+#              UTMESS('A','RUPTURE0_23')
+           else :
+              Lnosup[Nbnofo] = Tmpsup
+              if SYME_CHAR=='SANS' : Lnoinf[Nbnofo] = Tmpinf
+              Lnofon.append(Lnf1[i])
+              Nbnofo = Nbnofo+1
+        if Nbnofo == 0 :
+          UTMESS('F','RUPTURE0_30')
+
+#------------- Cas X-FEM ---------------------------------
+   elif FISSURE :
+     MAILLAGE = args['MAILLAGE']
+     DTAN_ORIG = args['DTAN_ORIG']
+     DTAN_EXTR = args['DTAN_EXTR']
+     dmax  = PREC_VIS_A_VIS * ABSC_CURV_MAXI
+#Projection du resultat sur le maillage lineaire initial     
+     iret,ibid,n_modele = aster.dismoi('F','MODELE',RESULTAT.nom,'RESULTAT')
+     n_modele=n_modele.rstrip()
+     if len(n_modele)==0 : UTMESS('F','RUPTURE0_18')
+     MODEL = self.get_concept(n_modele)
+     xcont = MODEL.xfem.XFEM_CONT.get()
+     if xcont[0] == 0 :
+       __RESX = RESULTAT
+# Si XFEM + contact : il faut reprojeter sur le maillage lineaire
+     if xcont[0] != 0 :
+       __MODLINE=AFFE_MODELE(MAILLAGE=MAILLAGE,
+                           AFFE=(_F(TOUT='OUI',
+                            PHENOMENE='MECANIQUE',
+                            MODELISATION=MODELISATION,),),);        
+       __RESX=PROJ_CHAMP(METHODE='ELEM',TYPE_CHAM='NOEU',NOM_CHAM='DEPL',
+                     RESULTAT=RESULTAT,
+                     MODELE_1=MODEL,
+                     MODELE_2=__MODLINE, );   
+#Recuperation des coordonnees des points du fond de fissure (x,y,z,absc_curv)
+     Listfo = FISSURE.FONDFISS.get()
+     Basefo = FISSURE.BASEFOND.get()
+     NB_POINT_FOND = args['NB_POINT_FOND']
+#Traitement du cas fond multiple
+     Fissmult = FISSURE.FONDMULT.get()
+     Nbfiss = len(Fissmult)/2
+     Numfiss = args['NUME_FOND']
+     if  Numfiss <= Nbfiss and Nbfiss > 1 :
+       Ptinit = Fissmult[2*(Numfiss-1)]
+       Ptfin = Fissmult[2*(Numfiss-1)+1]
+       Listfo2 = Listfo[((Ptinit-1)*4):(Ptfin*4)]
+       Listfo = Listfo2
+       Basefo2 = Basefo[((Ptinit-1)*(2*ndim)):(Ptfin*(2*ndim))]
+       Basefo = Basefo2
+     elif  Numfiss > Nbfiss :
+       UTMESS('F','RUPTURE1_38',vali=[Nbfiss,Numfiss])
+####     
+     
+     if NB_POINT_FOND != None and MODELISATION=='3D' :
+       Nbfond = NB_POINT_FOND
+       absmax = Listfo[-1]
+       Coorfo = [None]*4*Nbfond
+       Vpropa = [None]*3*Nbfond
+       for i in range(0,Nbfond) :
+         absci = i*absmax/(Nbfond-1)
+         Coorfo[(4*i):(4*(i+1))] = InterpolFondFiss(absci, Listfo)
+         Vpropa[(6*i):(6*(i+1))] = InterpolBaseFiss(absci,Basefo, Listfo)
+     else :
+       Coorfo = Listfo
+       Vpropa = Basefo
+       Nbfond = len(Coorfo)/4
+# Calcul de la direction de propagation en chaque point du fond
+     VP = [None]*Nbfond
+     VN = [None]*Nbfond
+     absfon = [0,]
+# Cas fissure non necessairement plane     
+     if VECT_K1 == None :
+       i = 0
+       if MODELISATION=='3D' :
+         if DTAN_ORIG != None :
+           VP[0] = NP.array(DTAN_ORIG)
+           VP[0] = VP[0]/NP.sqrt(VP[0][0]**2+VP[0][1]**2+VP[0][2]**2)
+           VN[0] = NP.array([Vpropa[0],Vpropa[1],Vpropa[2]])
+           verif = NP.dot(NP.transpose(VP[0]),VN[0]) 
+           if abs(verif) > 0.01:
+             UTMESS('A','RUPTURE1_33',valr=[VN[0][0],VN[0][1],VN[0][2]])
+         else :
+           VN[0] = NP.array([Vpropa[0],Vpropa[1],Vpropa[2]])
+           VP[0] = NP.array([Vpropa[3+0],Vpropa[3+1],Vpropa[3+2]])
+         for i in range(1,Nbfond-1):
+           absf = Coorfo[4*i+3]
+           absfon.append(absf)
+           VN[i] = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+           VP[i] = NP.array([Vpropa[3+6*i],Vpropa[3+6*i+1],Vpropa[3+6*i+2]])
+           verif = NP.dot(NP.transpose(VN[i]),VN[i-1]) 
+           if abs(verif) < 0.98:
+             UTMESS('A','RUPTURE1_35',vali=[i-1,i])
+         i = Nbfond-1
+         absf =  Coorfo[4*i+3]
+         absfon.append(absf)
+         if DTAN_EXTR != None :
+           VP[i] = NP.array(DTAN_EXTR)
+           VN[i] = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+           verif = NP.dot(NP.transpose(VP[i]),VN[0]) 
+           if abs(verif) > 0.01:
+             UTMESS('A','RUPTURE1_34',valr=[VN[i][0],VN[i][1],VN[i][2]])
+         else :
+           VN[i] = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+           VP[i] = NP.array([Vpropa[3+6*i],Vpropa[3+6*i+1],Vpropa[3+6*i+2]])
+       else : 
+         for i in range(0,Nbfond):
+           VP[i] = NP.array([Vpropa[2+4*i],Vpropa[3+4*i],0.])
+           VN[i] = NP.array([Vpropa[0+4*i],Vpropa[1+4*i],0.])
+# Cas fissure plane (VECT_K1 donne)
+     if VECT_K1 != None :
+       v1 =  NP.array(VECT_K1)
+       v1  = v1/NP.sqrt(v1[0]**2+v1[1]**2+v1[2]**2)
+       v1 =  NP.array(VECT_K1)
+       i = 0
+       if MODELISATION=='3D' :
+# Sens du vecteur VECT_K1       
+         v1x =NP.array([Vpropa[0],Vpropa[1],Vpropa[2]])
+         verif = NP.dot(NP.transpose(v1),v1x) 
+         if verif < 0 : v1 = -v1
+         VN = [v1]*Nbfond
+         if DTAN_ORIG != None :
+           VP[i] = NP.array(DTAN_ORIG)
+           VP[i] = VP[i]/NP.sqrt(VP[i][0]**2+VP[i][1]**2+VP[i][2]**2)
+           verif = NP.dot(NP.transpose(VP[i]),VN[0]) 
+           if abs(verif) > 0.01:
+             UTMESS('A','RUPTURE1_36')
+         else :
+           Pfon2 = NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
+           Pfon3 = NP.array([Coorfo[4*(i+1)],Coorfo[4*(i+1)+1],Coorfo[4*(i+1)+2]])
+           VT = (Pfon3 - Pfon2)/NP.sqrt(NP.dot(NP.transpose(Pfon3-Pfon2),Pfon3-Pfon2))
+           VP[0] = NP.array(cross_product(VT,v1))
+           VNi = NP.array([Vpropa[3],Vpropa[4],Vpropa[5]])
+           verif = NP.dot(NP.transpose(VP[i]),VNi) 
+           if abs(verif) < 0.99:
+             vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
+             UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
+         for i in range(1,Nbfond-1):
+           Pfon1 = NP.array([Coorfo[4*(i-1)],Coorfo[4*(i-1)+1],Coorfo[4*(i-1)+2]])
+           Pfon2 = NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
+           Pfon3 = NP.array([Coorfo[4*(i+1)],Coorfo[4*(i+1)+1],Coorfo[4*(i+1)+2]])
+           absf =  Coorfo[4*i+3]
+           absfon.append(absf)
+           VT = (Pfon3 - Pfon2)/NP.sqrt(NP.dot(NP.transpose(Pfon3-Pfon2),Pfon3-Pfon2))
+           VT = VT+(Pfon2 - Pfon1)/NP.sqrt(NP.dot(NP.transpose(Pfon2-Pfon1),Pfon2-Pfon1))
+           VP[i] = NP.array(cross_product(VT,v1)) 
+           VP[i] = VP[i]/NP.sqrt(NP.dot(NP.transpose(VP[i]),VP[i]))
+           VNi = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+           verif = NP.dot(NP.transpose(VN[i]),VNi) 
+           if abs(verif) < 0.99:
+             vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
+             UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
+         i = Nbfond-1
+         Pfon1 = NP.array([Coorfo[4*(i-1)],Coorfo[4*(i-1)+1],Coorfo[4*(i-1)+2]])
+         Pfon2 = NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
+         absf =  Coorfo[4*i+3]
+         absfon.append(absf)
+         if DTAN_EXTR != None :
+           VP[i] = NP.array(DTAN_EXTR)
+           VP[i] = VP[i]/NP.sqrt(VP[i][0]**2+VP[i][1]**2+VP[i][2]**2)
+           verif = NP.dot(NP.transpose(VP[i]),VN[i]) 
+           if abs(verif) > 0.01:
+             UTMESS('A','RUPTURE1_37')
+         else :
+           VT = (Pfon2 - Pfon1)/NP.sqrt(NP.dot(NP.transpose(Pfon2-Pfon1),Pfon2-Pfon1))
+           VP[i] = NP.array(cross_product(VT,v1))
+           VNi = NP.array([Vpropa[6*i],Vpropa[6*i+1],Vpropa[6*i+2]])
+           verif = NP.dot(NP.transpose(VN[i]),VNi) 
+           if abs(verif) < 0.99 :
+             vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
+             UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
+       else :  
+         VT = NP.array([0.,0.,1.])
+         for i in range(0,Nbfond):
+           VP[i] = NP.array(cross_product(v1,VT))  
+           VN[i] = v1
+           VNi = NP.array([Vpropa[0+4*i],Vpropa[1+4*i],0.])
+           verif = NP.dot(NP.transpose(VN[i]),VNi) 
+           if abs(verif) < 0.99 :
+             vv =[VNi[0],VNi[1],VNi[2],VN[i][0],VN[i][1],VN[i][2],]
+             UTMESS('A','RUPTURE0_32',vali=[i],valr=vv)
+#Sens de la tangente   
+     if MODELISATION=='3D' : i = Nbfond/2
+     else : i = 0
+     Po =  NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
+     Porig = Po + ABSC_CURV_MAXI*VP[i]
+     Pextr = Po - ABSC_CURV_MAXI*VP[i]
+     __Tabg = MACR_LIGN_COUPE(RESULTAT=__RESX,NOM_CHAM='DEPL',
+                   LIGN_COUPE=_F(NB_POINTS=3,COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
+                                  TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
+                                  DISTANCE_MAX=dmax),);
+     tmp=__Tabg.EXTR_TABLE()
+#     a sam
+     test = getattr(tmp,'H1X').values()
+#     test = getattr(tmp,'E1X').values()
+     if test==[None]*3 : 
+        UTMESS('F','RUPTURE0_33')
+     if test[0]!=None :
+       sens = 1
+     else :
+       sens = -1
+     DETRUIRE(CONCEPT=_F(NOM=__Tabg),INFO=1) 
+# Extraction des sauts sur la fissure          
+     NB_NOEUD_COUPE = args['NB_NOEUD_COUPE']
+     if NB_NOEUD_COUPE < 3 : 
+       UTMESS('A','RUPTURE0_34')
+       NB_NOEUD_COUPE = 5
+     mcfact=[]
+     for i in range(Nbfond):
+        Porig = NP.array([Coorfo[4*i],Coorfo[4*i+1],Coorfo[4*i+2]])
+        if i==0 and DTAN_ORIG!=None : Pextr = Porig - ABSC_CURV_MAXI*VP[i]
+        elif i==(Nbfond-1) and DTAN_EXTR!=None : Pextr = Porig - ABSC_CURV_MAXI*VP[i]
+        else : Pextr = Porig + ABSC_CURV_MAXI*VP[i]*sens
+        mcfact.append(_F(NB_POINTS=NB_NOEUD_COUPE,COOR_ORIG=(Porig[0],Porig[1],Porig[2],),
+                          TYPE='SEGMENT',COOR_EXTR=(Pextr[0],Pextr[1],Pextr[2]),
+                          DISTANCE_MAX=dmax),)
+     TSo = MACR_LIGN_COUPE(RESULTAT=__RESX,NOM_CHAM='DEPL',
+                         LIGN_COUPE=mcfact);
+
+     TTSo = TSo.EXTR_TABLE()
+     DETRUIRE(CONCEPT=_F(NOM=TSo),INFO=1) 
+     Nbnofo = Nbfond
+     if xcont[0] != 0 :  
+       DETRUIRE(CONCEPT=_F(NOM=__MODLINE),INFO=1) 
+       DETRUIRE(CONCEPT=_F(NOM=__RESX),INFO=1) 
+   
+     if INFO==2 :
+        mcfact=[]
+        mcfact.append(_F(PARA='PT_FOND',LISTE_I=range(Nbfond)))
+        mcfact.append(_F(PARA='VN_X'        ,LISTE_R=[VN[i][0] for i in range(Nbfond)]))
+        mcfact.append(_F(PARA='VN_Y'        ,LISTE_R=[VN[i][1] for i in range(Nbfond)]))
+        mcfact.append(_F(PARA='VN_Z'        ,LISTE_R=[VN[i][2] for i in range(Nbfond)]))
+        mcfact.append(_F(PARA='VP_X'        ,LISTE_R=[VP[i][0] for i in range(Nbfond)]))
+        mcfact.append(_F(PARA='VP_Y'        ,LISTE_R=[VP[i][1] for i in range(Nbfond)]))
+        mcfact.append(_F(PARA='VP_Z'        ,LISTE_R=[VP[i][2] for i in range(Nbfond)]))
+        __resu2=CREA_TABLE(LISTE=mcfact,TITRE='             VECTEUR NORMAL A LA FISSURE    -    DIRECTION DE PROPAGATION')
+        aster.affiche('MESSAGE',__resu2.EXTR_TABLE().__repr__())
+        DETRUIRE(CONCEPT=_F(NOM=__resu2),INFO=1)
+   
+   else :
+     Nbnofo = 1 
+     
+#   ----------Recuperation de la temperature au fond -------------  
+   if Tempe3D :
+      Rth = self.get_concept(resuth)
+      __TEMP=POST_RELEVE_T(ACTION=_F(INTITULE='Temperature fond de fissure',
+                                       NOEUD=Lnofon,TOUT_CMP='OUI',
+                                       RESULTAT=Rth,NOM_CHAM='TEMP',TOUT_ORDRE='OUI',
+                                       OPERATION='EXTRACTION',),);
+      tabtemp=__TEMP.EXTR_TABLE()
+      DETRUIRE(CONCEPT=_F(NOM=__TEMP),INFO=1) 
+   
+
+#   ------------------------------------------------------------------
+#                         BOUCLE SUR NOEUDS DU FOND
+#   ------------------------------------------------------------------
+   for ino in range(0,Nbnofo) :
+      if FOND_FISS and INFO==2 :
+            texte="\n\n--> TRAITEMENT DU NOEUD DU FOND DE FISSURE: %s"%Lnofon[ino]
+            aster.affiche('MESSAGE',texte)
+      if FISSURE and INFO==2 :
+            texte="\n\n--> TRAITEMENT DU POINT DU FOND DE FISSURE NUMERO %s"%(ino+1)
+            aster.affiche('MESSAGE',texte)
+#   ------------------------------------------------------------------
+#                         TABLE 'DEPSUP'
+#   ------------------------------------------------------------------
+      if FOND_FISS : 
+         if TYPE_MAILLAGE =='LIBRE':
+            tabsup=TlibS[ino].EXTR_TABLE()
+            DETRUIRE(CONCEPT=_F(NOM=TlibS[ino]),INFO=1)
+         elif RESULTAT :
+            if MODELISATION=='AXIS' or MODELISATION=='C_PLAN' or MODELISATION=='D_PLAN':
+                __TSUP=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement SUP',
+                                              NOEUD=Lnosup[ino],
+                                              RESULTAT=RESULTAT,
+                                              NOM_CHAM='DEPL',
+                                              TOUT_ORDRE='OUI',
+                                              NOM_CMP=('DX','DY',),
+                                              OPERATION='EXTRACTION',),);
+            else :
+                __TSUP=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement SUP',
+                                              NOEUD=Lnosup[ino],
+                                              RESULTAT=RESULTAT,
+                                              NOM_CHAM='DEPL',
+                                              TOUT_ORDRE='OUI',
+                                              NOM_CMP=('DX','DY','DZ',),
+                                              OPERATION='EXTRACTION',),);
+            tabsup=__TSUP.EXTR_TABLE()
+            DETRUIRE(CONCEPT=_F(NOM=__TSUP),INFO=1)      
+         else :
+            tabsup=TABL_DEPL_SUP.EXTR_TABLE()
+            veri_tab(tabsup,TABL_DEPL_SUP.nom,ndim)
+            Ls = [string.ljust(Lnosup[ino][i],8) for i in range(len(Lnosup[ino]))]
+            tabsup=tabsup.NOEUD==Ls
+      elif FISSURE :
+         tabsup = TTSo.INTITULE=='l.coupe%i'%(ino+1)
+      else :
+         tabsup=TABL_DEPL_SUP.EXTR_TABLE()
+         veri_tab(tabsup,TABL_DEPL_SUP.nom,ndim)
+
+#   ------------------------------------------------------------------
+#                          TABLE 'DEPINF'
+#   ------------------------------------------------------------------
+      if SYME_CHAR=='SANS' and not FISSURE : 
+         if FOND_FISS : 
+            if TYPE_MAILLAGE =='LIBRE':
+               tabinf=TlibI[ino].EXTR_TABLE()
+               DETRUIRE(CONCEPT=_F(NOM=TlibI[ino]),INFO=1)
+            elif RESULTAT :
+               if MODELISATION=='AXIS' or MODELISATION=='C_PLAN' or MODELISATION=='D_PLAN':
+                  __TINF=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement INF',
+                                             NOEUD=Lnoinf[ino],
+                                             RESULTAT=RESULTAT,
+                                             NOM_CHAM='DEPL',
+                                             TOUT_ORDRE='OUI',
+                                             NOM_CMP=('DX','DY'),
+                                             OPERATION='EXTRACTION',),);
+               else :
+                  __TINF=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement INF',
+                                             NOEUD=Lnoinf[ino],
+                                             RESULTAT=RESULTAT,
+                                             NOM_CHAM='DEPL',
+                                             TOUT_ORDRE='OUI',
+                                             NOM_CMP=('DX','DY','DZ',),
+                                             OPERATION='EXTRACTION',),);
+               tabinf=__TINF.EXTR_TABLE()   
+               DETRUIRE(CONCEPT=_F(NOM=__TINF),INFO=1)                 
+            else :
+               tabinf=TABL_DEPL_INF.EXTR_TABLE()
+               if TABL_DEPL_INF==None : UTMESS('F','RUPTURE0_35')
+               veri_tab(tabinf,TABL_DEPL_INF.nom,ndim)
+               Li = [string.ljust(Lnoinf[ino][i],8) for i in range(len(Lnoinf[ino]))]
+               tabinf=tabinf.NOEUD==Li
+         else :
+            if TABL_DEPL_INF==None : UTMESS('F','RUPTURE0_35')
+            tabinf=TABL_DEPL_INF.EXTR_TABLE()
+            veri_tab(tabinf,TABL_DEPL_INF.nom,ndim)
+
+
+#   ------------------------------------------------------------------
+#               LES INSTANTS DE POST-TRAITEMENT
+#   ------------------------------------------------------------------
+      if 'INST' in tabsup.para : 
+         l_inst=None
+         l_inst_tab=tabsup['INST'].values()['INST']
+         l_inst_tab=dict([(i,0) for i in l_inst_tab]).keys() #elimine les doublons
+         l_inst_tab.sort()
+         if LIST_ORDRE !=None or NUME_ORDRE !=None :
+           l_ord_tab = tabsup['NUME_ORDRE'].values()['NUME_ORDRE']
+           l_ord_tab.sort()
+           l_ord_tab=dict([(i,0) for i in l_ord_tab]).keys() 
+           d_ord_tab= [[l_ord_tab[i],l_inst_tab[i]] for i in range(0,len(l_ord_tab))]
+           d_ord_tab= [(i[0],i[1]) for i in d_ord_tab]
+           d_ord_tab = dict(d_ord_tab)
+           if NUME_ORDRE !=None : 
+             if type(NUME_ORDRE) not in EnumTypes : NUME_ORDRE=(NUME_ORDRE,)
+             l_ord=list(NUME_ORDRE)
+           elif LIST_ORDRE !=None : 
+              l_ord = LIST_ORDRE.VALE.get() 
+           l_inst = []
+           for ord in l_ord :
+             if ord in l_ord_tab : l_inst.append(d_ord_tab[ord])
+             else :  
+               UTMESS('F','RUPTURE0_37',vali=ord)
+           PRECISION = 1.E-6
+           CRITERE='ABSOLU'
+         elif INST !=None or LIST_INST !=None :
+            CRITERE = args['CRITERE']
+            PRECISION = args['PRECISION']
+            if  INST !=None : 
+              if type(INST) not in EnumTypes : INST=(INST,)
+              l_inst=list(INST)
+            elif LIST_INST !=None : l_inst=LIST_INST.Valeurs()
+            for inst in l_inst  :
+               if CRITERE=='RELATIF' and inst!=0.: match=[x for x in l_inst_tab if abs((inst-x)/inst)<PRECISION]
+               else                              : match=[x for x in l_inst_tab if abs(inst-x)<PRECISION]
+               if len(match)==0 : 
+                 UTMESS('F','RUPTURE0_38',valr=inst)
+               if len(match)>=2 :
+                 UTMESS('F','RUPTURE0_39',valr=inst)
+         else :
+            l_inst=l_inst_tab
+            PRECISION = 1.E-6
+            CRITERE='ABSOLU'
+      else :
+         l_inst  = [None,]
+   
+#   ------------------------------------------------------------------
+#                         BOUCLE SUR LES INSTANTS
+#   ------------------------------------------------------------------
+      for iord in range(len(l_inst)) :
+        inst=l_inst[iord]
+        if INFO==2 and inst!=None:
+            texte="#=================================================================================\n"
+            texte=texte+"==> INSTANT: %f"%inst
+            aster.affiche('MESSAGE',texte)
+        if inst!=None:
+           if PRECISION == None : PRECISION = 1.E-6
+           if CRITERE == None : CRITERE='ABSOLU'
+           if inst==0. :
+             tabsupi=tabsup.INST.__eq__(VALE=inst,CRITERE='ABSOLU',PRECISION=PRECISION)
+             if SYME_CHAR=='SANS'and not FISSURE: tabinfi=tabinf.INST.__eq__(VALE=inst,CRITERE='ABSOLU',PRECISION=PRECISION)
+           else :
+             tabsupi=tabsup.INST.__eq__(VALE=inst,CRITERE=CRITERE,PRECISION=PRECISION)
+             if SYME_CHAR=='SANS' and not FISSURE: tabinfi=tabinf.INST.__eq__(VALE=inst,CRITERE=CRITERE,PRECISION=PRECISION)
+        else :
+           tabsupi=tabsup
+           if SYME_CHAR=='SANS' and not FISSURE : tabinfi=tabinf
+
+#     --- LEVRE SUP :  "ABSC_CURV" CROISSANTES, < RMAX ET DEP ---
+        abscs = getattr(tabsupi,'ABSC_CURV').values()
+        if not FISSURE :
+          if not FOND_FISS :
+            refs=copy.copy(abscs)
+            refs.sort()
+            if refs!=abscs :
+               mctabl='TABL_DEPL_INF' 
+               UTMESS('F','RUPTURE0_40',valk=mctabl)
+            if ABSC_CURV_MAXI!=None : rmax = ABSC_CURV_MAXI
+            else                    : rmax = abscs[-1]
+            precv = PREC_VIS_A_VIS
+            rmprec= rmax*(1.+precv/10.)
+            refsc=[x for x in refs if x<rmprec]
+            nbval = len(refsc)
+          else :
+            nbval=len(abscs)
+          abscs=NP.array(abscs[:nbval])
+          coxs=NP.array(tabsupi['COOR_X'].values()['COOR_X'][:nbval])
+          coys=NP.array(tabsupi['COOR_Y'].values()['COOR_Y'][:nbval])
+          if ndim==2 :  cozs=NP.zeros(nbval)
+          elif ndim==3 :  cozs=NP.array(tabsupi['COOR_Z'].values()['COOR_Z'][:nbval])
+          
+          if FOND_FISS and not RESULTAT : #tri des noeuds avec abscisse
+            Pfon = NP.array([d_coor[Lnofon[ino]][0],d_coor[Lnofon[ino]][1],d_coor[Lnofon[ino]][2]])
+            abscs = NP.sqrt((coxs-Pfon[0])**2+(coys-Pfon[1])**2+(cozs-Pfon[2])**2)
+            tabsupi['Abs_fo'] = abscs
+            tabsupi.sort('Abs_fo')
+            abscs = getattr(tabsupi,'Abs_fo').values()
+            abscs=NP.array(abscs[:nbval])
+            coxs=NP.array(tabsupi['COOR_X'].values()['COOR_X'][:nbval])
+            coys=NP.array(tabsupi['COOR_Y'].values()['COOR_Y'][:nbval])
+            if ndim==2 :  cozs=NP.zeros(nbval)
+            elif ndim==3 :  cozs=NP.array(tabsupi['COOR_Z'].values()['COOR_Z'][:nbval])
+            
+          if FOND_FISS and INFO==2 and iord==0 and not TYPE_MAILLAGE =='LIBRE':
+            for ks in range(0,nbval) :
+              texte="NOEUD RETENU POUR LA LEVRE SUP: %s  %f"%(Lnosup[ino][ks],abscs[ks])
+              aster.affiche('MESSAGE',texte)
+          dxs=NP.array(tabsupi['DX'].values()['DX'][:nbval])
+          dys=NP.array(tabsupi['DY'].values()['DY'][:nbval])
+          if ndim==2 : dzs=NP.zeros(nbval)
+          elif ndim==3 : dzs=NP.array(tabsupi['DZ'].values()['DZ'][:nbval])
+          
+#     --- LEVRE INF :  "ABSC_CURV" CROISSANTES et < RMAX ---
+        if SYME_CHAR=='SANS' and not FISSURE : 
+          absci = getattr(tabinfi,'ABSC_CURV').values()
+          if not FOND_FISS :
+            refi=copy.copy(absci)
+            refi.sort()
+            if refi!=absci :
+                mctabl='TABL_DEPL_SUP' 
+                UTMESS('F','RUPTURE0_40',valk=mctabl)
+            refic=[x for x in refi if x<rmprec]
+            nbvali=len(refic)
+          else :
+            nbvali=len(absci)
+          if nbvali!=nbval :
+             if FOND_FISS : 
+                UTMESS('A+','RUPTURE0_42')
+                UTMESS('A','RUPTURE0_43',valk=Lnofon[i],vali=[len(refsc),len(refic)])
+             else:
+                UTMESS('A','RUPTURE0_42')
+          nbval=min(nbval,nbvali)
+          absci=NP.array(absci[:nbval])
+          coxi=NP.array(tabinfi['COOR_X'].values()['COOR_X'][:nbval])
+          coyi=NP.array(tabinfi['COOR_Y'].values()['COOR_Y'][:nbval])
+          if ndim==2 : cozi=NP.zeros(nbval)
+          elif ndim==3 : cozi=NP.array(tabinfi['COOR_Z'].values()['COOR_Z'][:nbval])
+#     --- ON VERIFIE QUE LES NOEUDS SONT EN VIS_A_VIS  (SYME=SANS)   ---
+          if not FOND_FISS :
+            precn = precv * rmax
+            dist=(coxs-coxi)**2+(coys-coyi)**2+(cozs-cozi)**2
+            dist=NP.sqrt(dist)
+            for d in dist :
+               if d>precn : UTMESS('F','RUPTURE0_44')
+          
+          if FOND_FISS and not RESULTAT :#tri des noeuds avec abscisse
+            Pfon = NP.array([d_coor[Lnofon[ino]][0],d_coor[Lnofon[ino]][1],d_coor[Lnofon[ino]][2]])
+            absci = NP.sqrt((coxi-Pfon[0])**2+(coyi-Pfon[1])**2+(cozi-Pfon[2])**2)
+            tabinfi['Abs_fo'] = absci
+            tabinfi.sort('Abs_fo')
+            absci = getattr(tabinfi,'Abs_fo').values()
+            absci=NP.array(abscs[:nbval])
+            coxi=NP.array(tabinfi['COOR_X'].values()['COOR_X'][:nbval])
+            coyi=NP.array(tabinfi['COOR_Y'].values()['COOR_Y'][:nbval])
+            if ndim==2 :  cozi=NP.zeros(nbval)
+            elif ndim==3 :  cozi=NP.array(tabinfi['COOR_Z'].values()['COOR_Z'][:nbval])
+
+          dxi=NP.array(tabinfi['DX'].values()['DX'][:nbval])
+          dyi=NP.array(tabinfi['DY'].values()['DY'][:nbval])
+          if ndim==2 : dzi=NP.zeros(nbval)
+          elif ndim==3 : dzi=NP.array(tabinfi['DZ'].values()['DZ'][:nbval])
+          
+          if FOND_FISS and INFO==2 and iord==0 and not TYPE_MAILLAGE =='LIBRE':
+            for ki in range(0,nbval) :
+               texte="NOEUD RETENU POUR LA LEVRE INF: %s  %f"%(Lnoinf[ino][ki],absci[ki])
+               aster.affiche('MESSAGE',texte)
+
+#     --- CAS FISSURE X-FEM ---
+        if  FISSURE : 
+           H1 = getattr(tabsupi,'H1X').values()
+           nbval = len(H1)
+           H1 = complete(H1)
+           E1 = getattr(tabsupi,'E1X').values()
+           E1 = complete(E1)
+           dxs = 2*(H1 + NP.sqrt(abscs)*E1)
+           H1 = getattr(tabsupi,'H1Y').values()
+           E1 = getattr(tabsupi,'E1Y').values()
+           H1 = complete(H1)
+           E1 = complete(E1)
+           dys = 2*(H1 + NP.sqrt(abscs)*E1)
+           H1 = getattr(tabsupi,'H1Z').values()
+           E1 = getattr(tabsupi,'E1Z').values()
+           H1 = complete(H1)
+           E1 = complete(E1)
+           dzs = 2*(H1 + NP.sqrt(abscs)*E1)
+           abscs=NP.array(abscs[:nbval])
+
+#   ---------- CALCUL PROP. MATERIAU AVEC TEMPERATURE -----------  
+        if Tempe3D :
+           tempeno=tabtemp.NOEUD==Lnofon[ino]
+           tempeno=tempeno.INST.__eq__(VALE=inst,CRITERE='ABSOLU',PRECISION=PRECISION)
+           nompar = ('TEMP',)
+           valpar = (tempeno.TEMP.values()[0],)
+           nomres=['E','NU']
+           valres,codret = MATER.RCVALE('ELAS',nompar,valpar,nomres,'F')
+           e = valres[0]
+           nu = valres[1] 
+           coefd  = e * NP.sqrt(2.*pi)      / ( 8.0 * (1. - nu**2))
+           coefd3 = e*NP.sqrt(2*pi) / ( 8.0 * (1. + nu))
+           coefg  = (1. - nu**2) / e
+           coefg3 = (1. + nu)  / e
+
+#     --- TESTS NOMBRE DE NOEUDS---
+        if nbval<3 :
+           UTMESS('A+','RUPTURE0_46')
+           if FOND_FISS :
+               UTMESS('A+','RUPTURE0_47',valk=Lnofon[ino])
+           if FISSURE :
+               UTMESS('A+','RUPTURE0_99',vali=ino)
+           UTMESS('A','RUPTURE0_25')
+           kg1 = [0.]*8
+           kg2 =[0.]*8
+           kg3 =[0.]*8
+         
+        else :  
+#     SI NBVAL >= 3 : 
+
+#     ------------------------------------------------------------------
+#                    CHANGEMENT DE REPERE
+#     ------------------------------------------------------------------
+#
+#       1 : VECTEUR NORMAL AU PLAN DE LA FISSURE
+#           ORIENTE LEVRE INFERIEURE VERS LEVRE SUPERIEURE
+#       2 : VECTEUR NORMAL AU FOND DE FISSURE EN M
+#       3 : VECTEUR TANGENT AU FOND DE FISSURE EN M
+#
+         if FISSURE :
+            v2 = VP[ino]
+            v1 = VN[ino]
+         elif SYME_CHAR=='SANS' :
+            vo =  NP.array([( coxs[-1]+coxi[-1] )/2.,( coys[-1]+coyi[-1] )/2.,( cozs[-1]+cozi[-1] )/2.])
+            ve =  NP.array([( coxs[0 ]+coxi[0 ] )/2.,( coys[0 ]+coyi[0 ] )/2.,( cozs[0 ]+cozi[0 ] )/2.])
+            v2 =  ve-vo
+         else :
+            vo = NP.array([ coxs[-1], coys[-1], cozs[-1]])
+            ve = NP.array([ coxs[0], coys[0], cozs[0]])
+            v2 =  ve-vo
+         if not FISSURE :  v1 =  NP.array(VECT_K1)
+         v2 =  v2/NP.sqrt(v2[0]**2+v2[1]**2+v2[2]**2)
+         v1p = sum(v2*v1)
+         if SYME_CHAR=='SANS' : v1  = v1-v1p*v2
+         else : v2  = v2-v1p*v1 
+         v1  = v1/NP.sqrt(v1[0]**2+v1[1]**2+v1[2]**2)
+         v2 =  v2/NP.sqrt(v2[0]**2+v2[1]**2+v2[2]**2)
+         v3  = NP.array([v1[1]*v2[2]-v2[1]*v1[2],v1[2]*v2[0]-v2[2]*v1[0],v1[0]*v2[1]-v2[0]*v1[1]])
+         pgl  = NP.asarray([v1,v2,v3])
+         dpls = NP.asarray([dxs,dys,dzs])
+         dpls = NP.dot(pgl,dpls)
+         if SYME_CHAR!='SANS' and abs(dpls[0][0]) > 1.e-10 :
+           UTMESS('A','RUPTURE0_49',valk=[Lnofon[ino],SYME_CHAR])
+         if FISSURE :
+            saut=dpls
+         elif SYME_CHAR=='SANS' :
+            dpli = NP.asarray([dxi,dyi,dzi])
+            dpli = NP.dot(pgl,dpli)
+            saut=(dpls-dpli)
+         else :
+            dpli = [NP.multiply(dpls[0],-1.),dpls[1],dpls[2]]
+            saut=(dpls-dpli)
+         if INFO==2 :
+           mcfact=[]
+           mcfact.append(_F(PARA='ABSC_CURV'  ,LISTE_R=abscs.tolist() ))
+           if not FISSURE :
+             mcfact.append(_F(PARA='DEPL_SUP_1',LISTE_R=dpls[0].tolist() ))
+             mcfact.append(_F(PARA='DEPL_INF_1',LISTE_R=dpli[0].tolist() ))
+           mcfact.append(_F(PARA='SAUT_1'    ,LISTE_R=saut[0].tolist() ))
+           if not FISSURE :
+             mcfact.append(_F(PARA='DEPL_SUP_2',LISTE_R=dpls[1].tolist() ))
+             mcfact.append(_F(PARA='DEPL_INF_2',LISTE_R=dpli[1].tolist() ))
+           mcfact.append(_F(PARA='SAUT_2'    ,LISTE_R=saut[1].tolist() ))
+           if ndim==3 :
+             if not FISSURE :
+               mcfact.append(_F(PARA='DEPL_SUP_3',LISTE_R=dpls[2].tolist() ))
+               mcfact.append(_F(PARA='DEPL_INF_3',LISTE_R=dpli[2].tolist() ))
+             mcfact.append(_F(PARA='SAUT_3'    ,LISTE_R=saut[2].tolist() ))
+           __resu0=CREA_TABLE(LISTE=mcfact,TITRE='--> SAUTS')
+           aster.affiche('MESSAGE',__resu0.EXTR_TABLE().__repr__())
+           DETRUIRE(CONCEPT=_F(NOM=__resu0),INFO=1)
+#     ------------------------------------------------------------------
+#                           CALCUL DES K1, K2, K3
+#     ------------------------------------------------------------------
+         isig=NP.sign(NP.transpose(NP.resize(saut[:,-1],(nbval-1,3))))
+         isig=NP.sign(isig+0.001)
+         saut=saut*NP.array([[coefd]*nbval,[coefd]*nbval,[coefd3]*nbval])
+         saut=saut**2
+         ksig = isig[:,1]
+         ksig = NP.array([ksig,ksig])
+         ksig = NP.transpose(ksig)
+         kgsig=NP.resize(ksig,(1,6))[0]
+#     ------------------------------------------------------------------
+#                           --- METHODE 1 ---
+#     ------------------------------------------------------------------
+         nabs = len(abscs)
+         x1 = abscs[1:-1]
+         x2 = abscs[2:nabs]
+         y1 = saut[:,1:-1]/x1
+         y2 = saut[:,2:nabs]/x2
+         k  = abs(y1-x1*(y2-y1)/(x2-x1))
+         g  = coefg*(k[0]+k[1])+coefg3*k[2]
+         kg1 = [max(k[0]),min(k[0]),max(k[1]),min(k[1]),max(k[2]),min(k[2])]
+         kg1 = NP.sqrt(kg1)*kgsig
+         kg1=NP.concatenate([kg1,[max(g),min(g)]])
+         vk  = NP.sqrt(k)*isig[:,:-1]
+         if INFO==2 :
+           mcfact=[]
+           mcfact.append(_F(PARA='ABSC_CURV_1' ,LISTE_R=x1.tolist() ))
+           mcfact.append(_F(PARA='ABSC_CURV_2' ,LISTE_R=x2.tolist() ))
+           mcfact.append(_F(PARA='K1'          ,LISTE_R=vk[0].tolist() ))
+           mcfact.append(_F(PARA='K2'          ,LISTE_R=vk[1].tolist() ))
+           if ndim==3 :
+             mcfact.append(_F(PARA='K3'        ,LISTE_R=vk[2].tolist() ))
+           mcfact.append(_F(PARA='G'           ,LISTE_R=g.tolist() ))
+           __resu1=CREA_TABLE(LISTE=mcfact,TITRE='--> METHODE 1')
+           aster.affiche('MESSAGE',__resu1.EXTR_TABLE().__repr__())
+           DETRUIRE(CONCEPT=_F(NOM=__resu1),INFO=1)
+#     ------------------------------------------------------------------
+#                           --- METHODE 2 ---
+#     ------------------------------------------------------------------
+         nabs = len(abscs)
+         x1 = abscs[1:nabs]
+         y1 = saut[:,1:nabs]
+         k  = abs(y1/x1)
+         g  = coefg*(k[0]+k[1])+coefg3*k[2]
+         kg2= [max(k[0]),min(k[0]),max(k[1]),min(k[1]),max(k[2]),min(k[2])]
+         kg2 = NP.sqrt(kg2)*kgsig
+         kg2=NP.concatenate([kg2,[max(g),min(g)]])
+         vk = NP.sqrt(k)*isig
+         if INFO==2 :
+           mcfact=[]
+           mcfact.append(_F(PARA='ABSC_CURV' ,LISTE_R=x1.tolist() ))
+           mcfact.append(_F(PARA='K1'        ,LISTE_R=vk[0].tolist() ))
+           mcfact.append(_F(PARA='K2'        ,LISTE_R=vk[1].tolist() ))
+           if ndim==3 :
+             mcfact.append(_F(PARA='K3'      ,LISTE_R=vk[2].tolist() ))
+           mcfact.append(_F(PARA='G'         ,LISTE_R=g.tolist() ))
+           __resu2=CREA_TABLE(LISTE=mcfact,TITRE='--> METHODE 2')
+           aster.affiche('MESSAGE',__resu2.EXTR_TABLE().__repr__())
+           DETRUIRE(CONCEPT=_F(NOM=__resu2),INFO=1)
+#     ------------------------------------------------------------------
+#                           --- METHODE 3 ---
+#     ------------------------------------------------------------------
+         nabs = len(abscs)
+         x1 = abscs[:-1]
+         x2 = abscs[1:nabs]
+         y1 = saut[:,:-1]
+         y2 = saut[:,1:nabs]
+         k  = (NP.sqrt(y2)*NP.sqrt(x2)+NP.sqrt(y1)*NP.sqrt(x1))*(x2-x1)
+         k  = NP.sum(NP.transpose(k), axis=0)
+         de = abscs[-1]
+         vk = (k/de**2)*isig[:,0]
+         g  = coefg*(vk[0]**2+vk[1]**2)+coefg3*vk[2]**2
+         kg3=NP.concatenate([[vk[0]]*2,[vk[1]]*2,[vk[2]]*2,[g]*2])
+         if INFO==2 :
+           mcfact=[]
+           mcfact.append(_F(PARA='K1'        ,LISTE_R=vk[0] ))
+           mcfact.append(_F(PARA='K2'        ,LISTE_R=vk[1] ))
+           if ndim==3 :
+             mcfact.append(_F(PARA='K3'      ,LISTE_R=vk[2] ))
+           mcfact.append(_F(PARA='G'         ,LISTE_R=g ))
+           __resu3=CREA_TABLE(LISTE=mcfact,TITRE='--> METHODE 3')
+           aster.affiche('MESSAGE',__resu3.EXTR_TABLE().__repr__())
+           DETRUIRE(CONCEPT=_F(NOM=__resu3),INFO=1)
+#     ------------------------------------------------------------------
+#                           CREATION DE LA TABLE 
+#     ------------------------------------------------------------------
+        kg=NP.array([kg1,kg2,kg3])
+        kg=NP.transpose(kg)
+        mcfact=[]
+        if TITRE != None :
+          titre = TITRE
+        else :
+          v = aster.__version__
+          titre = 'ASTER %s - CONCEPT CALCULE PAR POST_K1_K2_K3 LE &DATE A &HEURE \n'%v
+        if FOND_FISS and MODELISATION=='3D': 
+          mcfact.append(_F(PARA='NOEUD_FOND',LISTE_K=[Lnofon[ino],]*3))
+          mcfact.append(_F(PARA='ABSC_CURV',LISTE_R=[dicoF[Lnofon[ino]]]*3))
+        if FISSURE and MODELISATION=='3D': 
+          mcfact.append(_F(PARA='PT_FOND',LISTE_I=[ino+1,]*3))
+          mcfact.append(_F(PARA='ABSC_CURV',LISTE_R=[absfon[ino],]*3))
+        if FISSURE  and MODELISATION!='3D' and Nbfond!=1 :
+          mcfact.append(_F(PARA='PT_FOND',LISTE_I=[ino+1,]*3))
+        mcfact.append(_F(PARA='METHODE',LISTE_I=(1,2,3)))
+        mcfact.append(_F(PARA='K1_MAX' ,LISTE_R=kg[0].tolist() ))
+        mcfact.append(_F(PARA='K1_MIN' ,LISTE_R=kg[1].tolist() ))
+        mcfact.append(_F(PARA='K2_MAX' ,LISTE_R=kg[2].tolist() ))
+        mcfact.append(_F(PARA='K2_MIN' ,LISTE_R=kg[3].tolist() ))
+        if ndim==3 :
+          mcfact.append(_F(PARA='K3_MAX' ,LISTE_R=kg[4].tolist() ))
+          mcfact.append(_F(PARA='K3_MIN' ,LISTE_R=kg[5].tolist() ))
+        mcfact.append(_F(PARA='G_MAX'  ,LISTE_R=kg[6].tolist() ))
+        mcfact.append(_F(PARA='G_MIN'  ,LISTE_R=kg[7].tolist() ))
+        if  (ino==0 and iord==0) and inst==None :
+           tabout=CREA_TABLE(LISTE=mcfact,TITRE = titre)
+        elif iord==0 and ino==0 and inst!=None :
+           mcfact=[_F(PARA='INST'  ,LISTE_R=[inst,]*3      )]+mcfact
+           tabout=CREA_TABLE(LISTE=mcfact,TITRE = titre)
+        else :
+           if inst!=None : mcfact=[_F(PARA='INST'  ,LISTE_R=[inst,]*3     )]+mcfact
+           __tabi=CREA_TABLE(LISTE=mcfact,)
+           npara = ['K1_MAX','METHODE']
+           if inst!=None : npara.append('INST')
+           if FOND_FISS and MODELISATION=='3D' : npara.append('NOEUD_FOND')
+           tabout=CALC_TABLE(reuse=tabout,TABLE=tabout,TITRE = titre,
+                              ACTION=_F(OPERATION = 'COMB',NOM_PARA=npara,TABLE=__tabi,))
+
+# Tri de la table
+   if len(l_inst)!=1 and MODELISATION=='3D':
+      tabout=CALC_TABLE(reuse=tabout,TABLE=tabout,
+                      ACTION=_F(OPERATION = 'TRI',NOM_PARA=('INST','ABSC_CURV','METHODE'),ORDRE='CROISSANT'))
+
+   return ier
diff --git a/Aster/Cata/cataSTA10/Macro/post_k_trans_ops.py b/Aster/Cata/cataSTA10/Macro/post_k_trans_ops.py
new file mode 100644 (file)
index 0000000..d0a3b89
--- /dev/null
@@ -0,0 +1,240 @@
+#@ MODIF post_k_trans_ops Macro  DATE 07/10/2008   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+def post_k_trans_ops(self,RESU_TRANS,K_MODAL,TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE, 
+                 INST, LIST_INST,INFO,**args):          
+  """
+     Ecriture de la macro post_k_trans
+  """
+  import aster
+  import string
+  from Accas import _F
+  from Utilitai.Utmess     import  UTMESS
+  from types import ListType, TupleType
+  from Utilitai.Table      import Table, merge
+  EnumTypes = (ListType, TupleType)
+  
+  macro = 'POST_K_TRANS'
+  ier=0
+#------------------------------------------------------------------
+  # On importe les definitions des commandes a utiliser dans la macro
+  CALC_G           =self.get_cmd('CALC_G'  )
+  IMPR_TABLE       =self.get_cmd('IMPR_TABLE'      )
+  CREA_TABLE       =self.get_cmd('CREA_TABLE'      )
+  
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+  
+  # Le concept sortant (de type table_sdaster ou dérivé) est tab
+  self.DeclareOut('tabout', self.sd)
+
+#------------------------------------------------------------------
+  TABK = K_MODAL['TABL_K_MODA']
+  F2D = K_MODAL['FOND_FISS']
+  F3D = K_MODAL['FISSURE']
+#
+# Calcul du tableau des K modaux
+#
+  if TABK == None :
+    montit = 'Calcul des K modaux'
+    resumod = K_MODAL['RESU_MODA']
+    thet = K_MODAL['THETA']
+
+    motscles={}
+    motscles2={}
+    motscles['THETA'] = []
+    mcthet = {}
+    if F2D != None :    mcthet['FOND_FISS'] = F2D
+    if thet != None :   mcthet['THETA'] = thet
+    if F3D != None :   mcthet['FISSURE'] = F3D
+    if K_MODAL['DIRECTION']!=None :  mcthet['DIRECTION'] = K_MODAL['DIRECTION']
+    if K_MODAL['DIRE_THETA']!=None: mcthet['DIRE_THETA'] = K_MODAL['DIRE_THETA']
+    if K_MODAL['R_SUP']!=None : mcthet['R_SUP'] = K_MODAL['R_SUP']
+    if K_MODAL['R_SUP_FO']!=None : mcthet['R_SUP_FO'] = K_MODAL['R_SUP_FO']
+    if K_MODAL['R_INF']!=None : mcthet['R_INF'] = K_MODAL['R_INF']
+    if K_MODAL['R_INF_FO']!=None : mcthet['R_INF_FO'] = K_MODAL['R_INF_FO']
+    if K_MODAL['MODULE']!=None : mcthet['MODULE'] = K_MODAL['MODULE']
+    if K_MODAL['MODULE']==None and  F2D : mcthet['MODULE'] = 1
+    if K_MODAL['MODULE_FO']!=None : mcthet['MODULE_FO'] = K_MODAL['MODULE_FO']
+    
+    if thet == None and F3D :  
+        motscles2['LISSAGE'] = [] 
+        if K_MODAL['LISSAGE_G'] == None :  K_MODAL['LISSAGE_G']='LEGENDRE'
+        if K_MODAL['LISSAGE_THETA'] == None :  K_MODAL['LISSAGE_THETA']='LEGENDRE'
+        if K_MODAL['DEGRE'] :   K_MODAL['DEGRE'] = 5
+        motscles2['LISSAGE'].append(_F(LISSAGE_G =K_MODAL['LISSAGE_G'],
+                        LISSAGE_THETA =K_MODAL['LISSAGE_G'], 
+                        DEGRE = K_MODAL['DEGRE'] ))
+    
+    __kgtheta = CALC_G(       RESULTAT   = resumod,
+                            OPTION = 'K_G_MODA',
+                            TOUT_MODE = 'OUI',
+                            INFO       = INFO, 
+                            TITRE      = montit, 
+                            THETA=mcthet,
+                            **motscles2)
+
+
+#
+# Recuperation du tableau des K modaux
+#
+  else :
+    __kgtheta=TABK
+    
+#-----------------------------------------
+#  
+# Verification de cohérence sur le nombre de modes
+#  
+# RESULTAT TRANSITOIRE
+  nomresu=RESU_TRANS.nom
+  coef=aster.getvectjev(nomresu.ljust(19)+'.DEPL')
+  nmodtr=aster.getvectjev(nomresu.ljust(19)+'.DESC')[1]
+# BASE MODALE
+  if F2D : 
+    n_mode = len((__kgtheta.EXTR_TABLE())['K1'])
+    nbno = 1
+  if F3D : 
+    n_mode = max((__kgtheta.EXTR_TABLE())['NUME_MODE'].values()['NUME_MODE'])
+    nbno = max((__kgtheta.EXTR_TABLE())['NUM_PT'].values()['NUM_PT'])
+    labsc = (__kgtheta.EXTR_TABLE())['ABSC_CURV'].values()['ABSC_CURV'][0:nbno]
+      
+  if nmodtr != n_mode : 
+      n_mode = min(nmodtr,n_mode)
+      UTMESS('A','RUPTURE0_50',valk=nomresu,vali=n_mode)
+
+#  
+# Traitement des mots clés ORDRE/INST/LIST_INST et LIST_ORDRE
+#  
+  l0_inst = aster.getvectjev(nomresu.ljust(19)+'.INST')
+  l0_ord = aster.getvectjev(nomresu.ljust(19)+'.ORDR')
+  nbtrans = len(l0_ord)
+  li =  [[l0_ord[i],l0_inst[i]] for i in range(nbtrans)]
+  ln =  [[l0_ord[i],i] for i in range(nbtrans)]
+  lo =  [[l0_inst[i],l0_ord[i]] for i in range(nbtrans)]
+  li = [(i[0],i[1:]) for i in li]
+  ln = [(i[0],i[1:]) for i in ln]
+  lo = [(i[0],i[1:]) for i in lo]
+  d_ord = dict(lo) 
+  d_ins = dict(li) 
+  d_num = dict(ln) 
+
+
+  l_ord =[]
+  l_inst =[]
+  if LIST_ORDRE or NUME_ORDRE :
+    if  NUME_ORDRE  :
+      if type(NUME_ORDRE) not in EnumTypes : NUME_ORDRE=(NUME_ORDRE,)
+      ltmp = list(NUME_ORDRE)
+    elif LIST_ORDRE :
+      ltmp = aster.getvectjev(string.ljust(LIST_ORDRE.nom,19)+'.VALE') 
+    for ord in ltmp :
+      if ord in l0_ord :
+         l_ord.append(ord)
+         l_inst.append(d_ins[ord][0])
+      else :
+         UTMESS('A','RUPTURE0_51',vali=ord,valk=nomresu)
+  elif LIST_INST or INST :
+    CRITERE = args['CRITERE']
+    PRECISION = args['PRECISION']
+    if INST :
+      if type(INST) not in EnumTypes : INST=(INST,)
+      ltmp = list(INST)
+    elif LIST_INST :
+      ltmp = aster.getvectjev(string.ljust(LIST_INST.nom,19)+'.VALE') 
+    for ins in ltmp :
+      if CRITERE=='RELATIF' and ins!=0.: match=[x for x in l0_inst if abs((ins-x)/ins)<PRECISION]
+      else                             : match=[x for x in l0_inst if abs(ins-x)<PRECISION]
+      if len(match)==0 : 
+         UTMESS('A','RUPTURE0_38',valr=ins)
+      elif len(match)>=2 :
+         UTMESS('A','RUPTURE0_39',valr=ins)
+      else :
+         l_inst.append(match[0])
+         l_ord.append(d_ord[match[0]][0])
+  else :
+      l_ord = l0_ord
+      l_inst = l0_inst
+  nbarch = len(l_ord)
+  if nbarch ==0 : UTMESS('F','RUPTURE0_54')
+  
+
+#  
+# Calcul des K(t)
+#  
+
+  K1mod = [None]*n_mode*nbno
+  K2mod = [None]*n_mode*nbno
+  K1t = [None]*nbarch*nbno
+  K2t = [None]*nbarch*nbno
+  if F3D : 
+    K3mod = [None]*n_mode*nbno
+    K3t = [None]*nbarch*nbno
+    k1 = 'K1_LOCAL'
+    k2 = 'K2_LOCAL'
+    k3 = 'K3_LOCAL'
+  else :
+    k1 = 'K1'
+    k2 = 'K2'
+  
+  
+  for x in range(0,nbno) :
+    for k in range(0,n_mode) :
+      K1mod[k*nbno + x] = __kgtheta[k1,k*nbno + x+1]
+      K2mod[k*nbno + x] = __kgtheta[k2,k*nbno + x+1]
+      if F3D : K3mod[k*nbno + x] = __kgtheta[k3,k*nbno + x+1]
+   
+    for num in range(0,nbarch) :
+      K1t[num*nbno + x] = 0.0
+      K2t[num*nbno + x] = 0.0
+      if F3D : K3t[num*nbno + x] = 0.0
+      for k in range(0,n_mode) :
+        num_ord = d_num[l_ord[num]][0]
+        alpha = coef[n_mode*num_ord+k]
+        K1t[num*nbno + x] = K1t[num*nbno + x] + alpha*K1mod[k*nbno + x]
+        K2t[num*nbno + x] = K2t[num*nbno + x] + alpha*K2mod[k*nbno + x]
+        if F3D : K3t[num*nbno + x] = K3t[num*nbno + x] + alpha*K3mod[k*nbno + x]
+  v = aster.__version__
+  titre = 'ASTER %s - CONCEPT CALCULE PAR POST_K_TRANS LE &DATE A &HEURE \n'%v
+  if F2D :
+    tabout = CREA_TABLE(LISTE = (_F(LISTE_I =l_ord, PARA = 'NUME_ORDRE'),
+                           _F(LISTE_R =l_inst, PARA = 'INST'),
+                           _F(LISTE_R =K1t, PARA = k1),
+                           _F(LISTE_R =K2t, PARA = k2),),
+                        TITRE = titre,  );
+  if F3D : 
+   lo = []
+   li = []
+   for i in range(nbarch) :
+     for j in range(nbno) :
+        lo.append(l_ord[i])
+        li.append(l_inst[i])
+   tabout = CREA_TABLE(LISTE = (_F(LISTE_I =lo, PARA = 'NUME_ORDRE'),
+                           _F(LISTE_R =li, PARA = 'INST'),
+                           _F(LISTE_I =range(nbno)*nbarch, PARA ='NUM_PT' ),
+                           _F(LISTE_R =labsc*nbarch, PARA = 'ABSC_CURV'),
+                           _F(LISTE_R =K1t, PARA = k1),
+                           _F(LISTE_R =K2t, PARA = k2),
+                           _F(LISTE_R =K3t, PARA = k3),),
+                        TITRE = titre,
+                  );
+   
+#------------------------------------------------------------------
+  return ier
diff --git a/Aster/Cata/cataSTA10/Macro/propa_fiss_ops.py b/Aster/Cata/cataSTA10/Macro/propa_fiss_ops.py
new file mode 100644 (file)
index 0000000..6dbe737
--- /dev/null
@@ -0,0 +1,975 @@
+#@ MODIF propa_fiss_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from math import atan, atan2, cos, sin, sqrt
+
+import numpy as NP
+
+
+def InterpolationLineaire(x0, points) :
+   """
+       Interpolation Lineaire de x0 sur la fonction discretisee yi=points(xi) i=1,..,n
+   """
+   # x0     = Une abscisse        (1 colonne, 1 ligne)
+   # points = Tableau de n points (2 colonnes, n lignes)
+   # on suppose qu'il existe au moins 2 points, 
+   # et que les points sont classes selon les abscisses croissantes
+
+   n = len(points)
+   if ( x0 < points[0][0] )  :
+     y0 =  points[0][1]
+     return y0
+   if ( x0 > points[n-1][0] ) :
+     y0 =  points[n-1][1]
+     return y0
+   i = 1
+   while x0 > points[i][0]:
+      i = i+1
+   y0 = (x0-points[i-1][0]) * (points[i][1]-points[i-1][1]) / (points[i][0]-points[i-1][0]) + points[i-1][1]
+   return y0
+
+def InterpolFondFiss(s0, Coorfo) :
+   """
+       Interpolation des points du fond de fissure
+   """
+   # s0     = abscisse curviligne du point considere      (0 < s0 > 1)
+   # Coorfo = Coordonnees du fond (extrait de la sd fiss_xfem)
+   # xyz = Coordonnees du point
+
+   n = len(Coorfo) / 4
+   if ( s0 < Coorfo[3] )  :
+     xyz =  [Coorfo[0],Coorfo[1],Coorfo[2]]
+     return xyz
+   if ( s0 > Coorfo[-1]  ) :
+     xyz =  [Coorfo[-4],Coorfo[-3],Coorfo[-2]]
+     return xyz
+   i = 1
+   while s0 > Coorfo[4*i+3]:
+      i = i+1
+   xyz = [0.]*3
+   xyz[0] = (s0-Coorfo[4*(i-1)+3]) * (Coorfo[4*i+0]-Coorfo[4*(i-1)+0]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Coorfo[4*(i-1)+0]
+   xyz[1] = (s0-Coorfo[4*(i-1)+3]) * (Coorfo[4*i+1]-Coorfo[4*(i-1)+1]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Coorfo[4*(i-1)+1]
+   xyz[2] = (s0-Coorfo[4*(i-1)+3]) * (Coorfo[4*i+2]-Coorfo[4*(i-1)+2]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Coorfo[4*(i-1)+2]
+   return xyz
+
+def InterpolBaseFiss(s0, Basefo, Coorfo) :
+# Interpolation de la base locale en fond de fissure
+# s0     = abscisse curviligne du point considere     
+# Basefo = base locale du fond (VNx,VNy,VNz,VPx,VPy,VPz)
+# Coorfo = Coordonnees et abscisses du fond (extrait de la sd fiss_xfem)
+# en sortie : VPVNi = base locale au point considere (6 coordonnes)
+   n = len(Coorfo) / 4
+   if ( s0 < Coorfo[3] )  :
+     VPVNi =  Basefo[0:6]
+     return VPVNi
+   if ( s0 > Coorfo[-1]  ) :
+     VPVNi = [Basefo[i] for i in range(-6,0)] 
+     return VPVNi
+   i = 1
+   while s0 > Coorfo[4*i+3]:
+      i = i+1
+   VPVNi = [0.]*6
+   for k in range(6) :
+      VPVNi[k] = (s0-Coorfo[4*(i-1)+3]) * (Basefo[6*i+k]-Basefo[6*(i-1)+k]) / (Coorfo[4*i+3]-Coorfo[4*(i-1)+3]) + Basefo[6*(i-1)+k]
+   return VPVNi
+
+
+def dadN(C,N,M,DK,R) :
+# Calcul de la vitesse de propagation
+   v = C/((1-R)**N)*abs(DK)**M
+   return v
+   
+def betaf(k1,k2) :
+  if k2 == 0:
+     beta = 0.
+  else :
+     beta = 2*atan(0.25*(k1/k2-abs(k2)/k2*sqrt((k1/k2)**2+8)))
+  return beta
+
+#TODO prefer use numpy.cross
+def cross_product(a,b):
+    cross = [0]*3
+    cross[0] = a[1]*b[2]-a[2]*b[1]
+    cross[1] = a[2]*b[0]-a[0]*b[2]
+    cross[2] = a[0]*b[1]-a[1]*b[0]
+    return cross
+    
+#def propa_fiss_ops(self,METHODE_PROPA,TEST_MAIL,INFO,**args):
+def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
+  """
+  Macro PROPA_FISS
+  Propagation de fissure pour les modeles X-FEM : propagation par la methode de HAMILTON 
+  ou par projection sur un maillage
+  """
+  import aster
+  import string
+  import copy
+  from Accas import _F
+  from Utilitai.Utmess     import  UTMESS
+  from types import ListType, TupleType
+  from Utilitai.Table      import Table, merge
+  from Utilitai.partition import MAIL_PY
+  from SD.sd_mater     import sd_compor1
+  from Cata.cata import table_sdaster,fiss_xfem,modele_sdaster
+
+
+  EnumTypes = (ListType, TupleType)
+  
+  macro = 'PROPA_FISS'
+  ier=0
+#------------------------------------------------------------------
+  # On importe les definitions des commandes a utiliser dans la macro
+  ASSE_MAILLAGE         =self.get_cmd('ASSE_MAILLAGE'  )
+  LIRE_MAILLAGE    =self.get_cmd('LIRE_MAILLAGE'  )
+  DEFI_FICHIER = self.get_cmd('DEFI_FICHIER'  )
+  CREA_TABLE    =self.get_cmd('CREA_TABLE'  )
+  CALC_TABLE    =self.get_cmd('CALC_TABLE'  )
+  PROPA_XFEM = self.get_cmd('PROPA_XFEM'  )
+  DEFI_FISS_XFEM = self.get_cmd('DEFI_FISS_XFEM'  )
+  MODI_MODELE_XFEM = self.get_cmd('MODI_MODELE_XFEM'  )
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+#------------------------------------------------------------------
+# CAS 1 : METHODE_PROPA = 'SIMPLEXE' OU 'UPWIND'
+#
+
+  if (METHODE_PROPA == 'SIMPLEXE') or (METHODE_PROPA == 'UPWIND'):
+
+    TEST_MAIL=args['TEST_MAIL']
+    
+    if (TEST_MAIL == 'NON' ) :
+      LOI= args['LOI_PROPA']
+      if LOI == None :
+         UTMESS('F','RUPTURE1_50') 
+      dLoi=LOI[0].cree_dict_valeurs(LOI[0].mc_liste)
+      mat = dLoi['MATER']
+      matph = mat.NOMRC.get()  
+      phenom=None
+      for cmpt in matph :
+         if cmpt[:4]=='ELAS' :
+            phenom=cmpt
+            break
+      if phenom==None : UTMESS('F','RUPTURE0_5')
+      compor = sd_compor1('%-8s.%s' % (mat.nom, phenom))
+      valk = [s.strip() for s in compor.VALK.get()]
+      valr = compor.VALR.get()
+      dicmat=dict(zip(valk,valr))
+      if dicmat.has_key('TEMP_DEF')  :
+        nompar = ('TEMP',)
+        valpar = (dicmat['TEMP_DEF'],)
+        UTMESS('A','XFEM2_85',valr=valpar)
+        nomres=['E','NU']
+        valres,codret = MATER.RCVALE('ELAS',nompar,valpar,nomres,'F')
+        e = valres[0]
+        nu = valres[1]
+      else :
+        e  = dicmat['E']
+        nu = dicmat['NU']  
+# Construction catalogue PROPA_XFEM
+      dLoix = {}
+      dLoix['LOI'] = 'PARIS'
+      dLoix['E'] = e
+      dLoix['NU'] = nu
+      dLoix['C'] = dLoi['C']
+      dLoix['M'] = dLoi['M']
+      dLoix['N'] = dLoi['N']
+     
+    # Retreive all the parameters of PROPA_FISS
+    mcsimp = {}
+    mcsimp['MODELE'] =  args['MODELE']
+    mcsimp['RAYON'] =  args['RAYON']
+    mcsimp['DA_MAX'] =  args['DA_MAX']
+    mcsimp['TEST_MAIL']=TEST_MAIL
+    mcsimp['ZONE_MAJ']=args['ZONE_MAJ']
+    if mcsimp['ZONE_MAJ'] == 'TORE' :
+       if args['RAYON_TORE']!=None :
+          mcsimp['RAYON_TORE']=args['RAYON_TORE']
+    Fissures = args['FISSURE']
+
+#   Build the list for the PROPA_XFEM operateur
+    Table = []
+    GrilleAux = []
+    FissAct = []
+    FissNou = []
+    NbPointFond = []
+    
+    for Fiss in Fissures :
+        if Fiss['GRILLE_AUX']!=None :
+           GrilleAux.append(Fiss['GRILLE_AUX'])
+        else :
+           GrilleAux.append(args['MODELE'])
+        FissAct.append(Fiss['FISS_ACTUELLE'])
+        FissNou.append(Fiss['FISS_PROPAGEE'])
+        if TEST_MAIL == 'NON':
+            Table.append(Fiss['TABLE'])
+            if Fiss['NB_POINT_FOND']!=None :
+               if isinstance(Fiss['NB_POINT_FOND'],int) :
+                  NbPointFond.append(Fiss['NB_POINT_FOND'])
+               else :
+                  for nbptfo in range(0,len(Fiss['NB_POINT_FOND'])) :
+                      NbPointFond.append(Fiss['NB_POINT_FOND'][nbptfo])
+            else :
+               NbPointFond.append(-1)
+        
+    mcsimp['LISTE_FISS'] = FissAct
+    
+    if TEST_MAIL == 'NON':
+       mcsimp['TABLE'] = Table
+       mcsimp['NB_POINT_FOND'] = NbPointFond
+       mcsimp['LOI_PROPA'      ] =dLoix
+       
+       COMP_LINE = args['COMP_LINE']
+       if  COMP_LINE !=None : 
+           dcomp=COMP_LINE[0].cree_dict_valeurs(COMP_LINE[0].mc_liste)
+           mcsimp  ['COMP_LINE'      ] =dcomp
+
+    if TEST_MAIL == 'NON' :
+#      Ok. It's time for propagation! Let's call PROPA_XFEM for each
+#      propagating crack.
+       for NumFiss in range(0,len(FissAct)) :
+           mcsimp['FISS_PROP'] = FissAct[NumFiss]
+           mcsimp['GRILLE_AUX'] = 123
+           if GrilleAux[NumFiss]!=args['MODELE'] : 
+               mcsimp['GRILLE_AUX'] = GrilleAux[NumFiss]
+           else :
+               del mcsimp['GRILLE_AUX']
+           self.DeclareOut('nomfiss',FissNou[NumFiss])
+           nomfiss = PROPA_XFEM(METHODE=METHODE_PROPA,INFO=INFO,**mcsimp )
+           
+    else :
+#      Ok. I should make several crack propagation and check for the
+#      distance between each propagated front and the corresponding one
+#      at the beginning of the propagation.
+       UTMESS('A','XFEM2_60')
+       StepTot = args['ITERATIONS']
+       __Fis = [None]*(StepTot*len(FissAct))
+       __Mod = [None]*StepTot
+       mcsimp['TOLERANCE'] = args['TOLERANCE']
+       for NumStep in range(0,StepTot) :
+         
+           aster.affiche('MESSAGE',' ------------------------')
+           texte=' TEST_MAIL - ITERATION %d'%(NumStep+1)
+           aster.affiche('MESSAGE',texte)
+           aster.affiche('MESSAGE',' ------------------------')
+           
+           ListeFiss = []
+           mcsimp['DISTANCE'] = args['DA_MAX']*(NumStep+1)
+
+           for NumFiss in range(0,len(FissAct)) :
+              if NumStep==0 :
+                 mcsimp['FISS_PROP'] = FissAct[NumFiss]
+              else :
+                 mcsimp['MODELE'] = __Mod[NumStep-1]
+                 mcsimp['FISS_PROP'] = __Fis[(NumStep-1)*len(FissAct)+NumFiss]
+              mcsimp['FISS_INITIALE'] = FissAct[NumFiss]
+              mcsimp['GRILLE_AUX'] = 123
+              if GrilleAux[NumFiss]!=args['MODELE'] : 
+                 mcsimp['GRILLE_AUX'] = GrilleAux[NumFiss]
+              else :
+                  del mcsimp['GRILLE_AUX']
+              if NumStep==StepTot-1 :
+                 self.DeclareOut('nomfiss',FissNou[NumFiss])
+                 nomfiss = PROPA_XFEM(METHODE=METHODE_PROPA,INFO=INFO,**mcsimp )
+              else:
+                 __Fis[NumFiss+NumStep*len(FissAct)] = PROPA_XFEM(METHODE=METHODE_PROPA,INFO=INFO,**mcsimp )
+                 ListeFiss.append(__Fis[NumFiss+NumStep*len(FissAct)])
+              
+           if NumStep<StepTot-1 :
+              aster.affiche('MESSAGE',' ------------------------')
+              aster.affiche('MESSAGE',' CREATION DU MODELE FISSURE TEMPORAIRE')
+              aster.affiche('MESSAGE',' ')
+              __Mod[NumStep] = MODI_MODELE_XFEM(MODELE_IN=args['MODELE'],FISSURE=(ListeFiss))
+              mcsimp['LISTE_FISS'] = ListeFiss
+              aster.affiche('MESSAGE',' ')
+              aster.affiche('MESSAGE',' ------------------------')
+              aster.affiche('MESSAGE',' ')
+
+
+#------------------------------------------------------------------
+# CAS 2 : METHODE_PROPA = 'MAILLAGE'
+#
+# il faudrait rendre cela plus automatique pour lever la limite a 52 points
+  ALPHABET=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
+#            'AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ'];
+  
+  if METHODE_PROPA == 'MAILLAGE' :
+    Fissures =  args['FISSURE']
+
+    LOI_PROPA = args['LOI_PROPA']
+    if LOI_PROPA != None :
+      coef_paris =  LOI_PROPA['M']
+      coef_M =  LOI_PROPA['M']
+      coef_C =  LOI_PROPA['C']
+      coef_N =  LOI_PROPA['N']
+      YOUNG = 2.E11
+    it = args['ITERATION']
+    Damax =  args['DA_MAX']
+    COMP_LINE = args['COMP_LINE']
+
+    Nbfissure=len(Fissures)
+    mm = [None]*Nbfissure
+    __MMX = [None]*Nbfissure
+    BETA = [None]*Nbfissure
+    DKeq = [None]*Nbfissure
+    R = [None]*Nbfissure
+    RmM = [None]*Nbfissure
+    VMAX = 0.
+    
+    numfis=0
+    print '-------------------------------------------'
+    print 'NOMBRE DE FISSURES A TRAITER : ',Nbfissure
+    for Fiss in Fissures :
+      print 'FISSURE ',numfis+1,'  : ',Fiss['FISS_ACTUELLE'].get_name()
+      numfis=numfis+1
+    print '-------------------------------------------'
+    
+    numfis=0
+    DKmax = 0
+# PREMIERE BOUCLE SUR LES FISSURES : DK, DKmax    
+    for Fiss in Fissures :
+      fiss0 =    Fiss['FISS_ACTUELLE']
+      MAIL_FISS1 =  Fiss['MAIL_ACTUEL']
+      dime= MAIL_FISS1.DIME.get()
+      dime = dime[5]
+    
+#    Verification qu on a bien un fond unique
+      Fissmult = fiss0.FONDMULT.get()
+      Nbfiss = len(Fissmult)/2
+      if Nbfiss >1 :
+         UTMESS('F','RUPTURE1_48',vali=Nbfiss)
+
+# Recuperation des K et calcul de DeltaK
+      Nmeth = Fiss['METHODE_POSTK']
+      SIF = Fiss['TABLE']
+      nbinst = 1
+# A- TABLEAU ISSSU DE POST_K1_K2_K3    
+      if  (Nmeth != None) :
+         __TABN = CALC_TABLE(TABLE=SIF,ACTION=_F(OPERATION='FILTRE',
+                                           NOM_PARA='METHODE',VALE_I=Nmeth),);
+         __tabp = __TABN.EXTR_TABLE()
+         if ('K1_MAX' not in __tabp.para) or ('G_MAX' not in __tabp.para):
+            UTMESS('F','RUPTURE1_44')
+         __tab1 = __tabp.values()
+         nbinst = 1
+         if 'INST' in __tabp.para : 
+           l_inst_tab=__tabp['INST'].values()['INST']
+           l_inst_tab=dict([(i,0) for i in l_inst_tab]).keys()
+           nbinst = len(l_inst_tab)
+         nbptfon = len(__tab1['K1_MAX']) / nbinst
+         R[numfis] = [None]*nbptfon
+         RmM[numfis] = [None]*nbptfon
+         DKeq[numfis] = [None]*nbptfon
+         BETA[numfis] = [None]*nbptfon
+         absc = [0.]*nbptfon
+         if nbinst > 1 :
+           for k in range(nbptfon) :
+             if (dime == 2) : __tmp = __tabp
+             if (dime == 3) : __tmp = __tabp.PT_FOND==(k+1)
+             if (dime == 3) : absc[k]=__tmp['ABSC_CURV'][k]
+             ddkeq = sqrt(YOUNG)*(sqrt(max(__tmp.values()['G_MAX'])) 
+                          - sqrt(min(__tmp.values()['G_MAX']))) 
+             rminmax = sqrt(min(__tmp.values()['G_MAX'])) / sqrt(max(__tmp.values()['G_MAX']))
+             DKeq[numfis][k] = [absc[k], ddkeq ]
+             RmM[numfis][k]  =   [absc[k], rminmax ]
+             k1 = __tmp.values()['K1_MAX']
+             k2 = __tmp.values()['K2_MAX']
+             betat = [0.]*nbinst
+             for jt in range(nbinst) :
+               betat[jt] = betaf(k1[jt],k2[jt])
+# ANGLE BETA NE DOIT PAS TROP VARIER ENTRE LES PAS DE TEMPS
+             dbeta = max(betat) - min(betat) 
+             if dbeta > (5./180.*3.1415) :
+                  UTMESS('F','XFEM2_72')
+             BETA[numfis][k] = [absc[k], betat[0] ]
+             VMAX0 = dadN(coef_C,coef_N,coef_M,DKeq[numfis][k][1],RmM[numfis][k][1]) 
+             VMAX = max(VMAX,VMAX0 )
+         else :
+            if COMP_LINE == None :
+              UTMESS('A','XFEM2_76')
+              CMIN = 0.
+              CMAX = 1.
+            else :
+              CMIN = COMP_LINE['COEF_MULT_MINI']
+              CMAX = COMP_LINE['COEF_MULT_MAXI']
+            if (min(__tab1['G_MAX']) < 0.) :
+              UTMESS('F','RUPTURE1_46')
+            DKmax0 = max(NP.sqrt(__tab1['G_MAX']))
+            DKmax = max(DKmax,DKmax0)
+            for k in range(nbptfon) :
+              k1 = __tab1['K1_MAX'][k]
+              k2 = __tab1['K2_MAX'][k]
+              if (dime == 3) : absc[k]=__tab1['ABSC_CURV'][k]
+              BETA[numfis][k] = [absc[k] , betaf(k1,k2)] 
+              DKeq[numfis][k] = [absc[k],sqrt(YOUNG)*NP.sqrt(__tab1['G_MAX'][k])]
+              RmM[numfis][k] = [absc[k], CMIN/CMAX]
+              VMAX0 = dadN(coef_C,coef_N,coef_M,DKeq[numfis][k][1],RmM[numfis][k][1]) 
+              VMAX = max(VMAX,VMAX0 )
+# B- TABLEAU ISSSU DE CALC_G (option CALC_K_G)
+      else :
+         __tabp = SIF.EXTR_TABLE()
+         if (dime == 3) and (('K1_LOCAL' not in __tabp.para) or ('G_LOCAL' not in __tabp.para) or ('BETA_LOCAL' not in __tabp.para)):
+            UTMESS('F','RUPTURE1_45')
+         if (dime == 2) and (('K1' not in __tabp.para) or ('G' not in __tabp.para)) :
+            UTMESS('F','RUPTURE1_45')
+         __tab1= __tabp.values()
+         if 'INST' in __tabp.para : 
+           l_inst_tab=__tabp['INST'].values()['INST']
+           l_inst_tab=dict([(i,0) for i in l_inst_tab]).keys()
+           nbinst = len(l_inst_tab)
+         if (dime == 2) : nbptfon = 1
+         if (dime == 3) : nbptfon = len(__tab1['G_LOCAL']) / nbinst
+         RmM[numfis] = [None]*nbptfon
+         DKeq[numfis] = [None]*nbptfon
+         BETA[numfis] = [None]*nbptfon
+         if nbinst > 1 :
+           for k in range(nbptfon) :
+              if (dime == 3) : 
+                __tmp = __tabp.NUM_PT==(k+1)
+                if (min(__tmp['G_LOCAL']) < 0.) :
+                  UTMESS('F','RUPTURE1_46')
+                absc = __tmp.values()['ABSC_CURV'][0]
+                DKeq[numfis][k]=[absc, sqrt(YOUNG)*(sqrt(max(__tmp.values()['G_LOCAL']))-sqrt(min(__tmp.values()['G_LOCAL'])))]
+                RmM[numfis][k] = [absc, sqrt(min(__tmp.values()['G_LOCAL'])) / sqrt(max(__tmp.values()['G_LOCAL']))]
+                dbeta = max(__tmp.values()['BETA_LOCAL'])-min(__tmp.values()['BETA_LOCAL'])
+                if dbeta > (5./180.*3.1415) :
+                  UTMESS('F','XFEM2_72')
+                BETA[numfis][k] = [absc, __tmp.values()['BETA_LOCAL'][0] ]
+              else :
+                if (min(__tabp.values()['G']) < 0.) :
+                  UTMESS('F','RUPTURE1_46')
+                DKeq[numfis][k]=[0.,sqrt(YOUNG)*(sqrt(max(__tabp.values()['G']))-sqrt(min(__tabp.values()['G'])))]
+                RmM[numfis][k] = [0., sqrt(min(__tabp.values()['G'])) / sqrt(max(__tabp.values()['G'])) ]
+                k1 = __tabp.values()['K1'][0]
+                k2 = __tabp.values()['K2'][0]
+                BETA[numfis][k]=[0., betaf(k1,k2)]
+              VMAX0 = dadN(coef_C,coef_N,coef_M,DKeq[numfis][k][1],RmM[numfis][k][1])
+              VMAX = max(VMAX,VMAX0 )
+         elif dime == 3 :
+            nbptfon = len(__tab1['G_LOCAL'])
+            if COMP_LINE == None :
+              UTMESS('A','XFEM2_76')
+              CMIN = 0.
+              CMAX = 1.
+            else :
+              CMIN = COMP_LINE['COEF_MULT_MINI']
+              CMAX = COMP_LINE['COEF_MULT_MAXI']
+            if (min(__tab1['G_LOCAL']) < 0.) :
+              UTMESS('F','RUPTURE1_46')
+            DKeq[numfis] = [[__tab1['ABSC_CURV'][i],NP.sqrt(__tab1['G_LOCAL'][i])*sqrt(YOUNG) ] for i in range(nbptfon)]
+            RmM[numfis] = [[__tab1['ABSC_CURV'][i], CMIN/CMAX] for i in range(nbptfon)]
+            BETA[numfis] = [[__tab1['ABSC_CURV'][i],__tab1['BETA_LOCAL'][i]] for i in range(nbptfon)]
+            for i in range(nbptfon) :
+              VMAX0 = dadN(coef_C,coef_N,coef_M,DKeq[numfis][i][1],RmM[numfis][i][1])
+              VMAX = max(VMAX,VMAX0 )
+         else :
+            nbptfon = 1
+            if COMP_LINE == None :
+              UTMESS('A','XFEM2_76')
+              CMIN = 0.
+              CMAX = 1.
+            else :
+              CMIN = COMP_LINE['COEF_MULT_MINI']
+              CMAX = COMP_LINE['COEF_MULT_MAXI']
+            if (min(__tab1['G']) < 0.) :
+              UTMESS('F','RUPTURE1_46')
+            DKeq[numfis][0] = [0.,sqrt(YOUNG)*max(NP.sqrt(__tab1['G']))]
+            k1 = __tab1['K1'][0]
+            k2 = __tab1['K2'][0]
+            BETA[numfis][0] = [0.,betaf(k1,k2)] 
+            RmM[numfis][0] = [0.,CMIN/CMAX] 
+            VMAX0 = dadN(coef_C,coef_N,coef_M,DKeq[numfis][0][1],RmM[numfis][0][1])
+            VMAX = max(VMAX,VMAX0 )
+
+      numfis = numfis + 1
+      
+# CALCUL DU NOMBRE DE CYCLES EQUIVALENTS      
+    NBCYCL = Damax / VMAX  
+    print 'AVANCE MAXIMALE DU FOND DE FISSURE',Damax
+    print 'NOMBRE DE CYCLES DE FATIGUE',NBCYCL
+    
+# DEUXIEME BOUCLE SUR LES FISSURES : PROPAGATION    
+    numfis = 0
+    for Fiss in Fissures :
+      fiss0 =    Fiss['FISS_ACTUELLE']
+      print '-------------------------------------------'
+      print 'TRAITEMENT DE LA FISSURE ',fiss0.get_name()
+      print '-------------------------------------------'
+      MAIL_FISS1 =  Fiss['MAIL_ACTUEL']
+      MFOND = Fiss['GROUP_MA_FOND']
+      MFISS = Fiss['GROUP_MA_FISS']
+  
+#------------------------------------------------------------------
+# CAS 2a : MODELE 3D
+#
+      if dime == 3 :
+        mm[numfis] = MAIL_PY()
+        mm[numfis].FromAster(MAIL_FISS1)
+  
+# Recuperation des informations sur le maillage
+        nbno = mm[numfis].dime_maillage[0]
+        nbma = mm[numfis].dime_maillage[2]
+        collgrma = mm[numfis].gma
+        gmafon = MFOND+str('_')+str(it-1)
+  
+# Recuperation de la liste des noeuds du fond
+        connex = mm[numfis].co
+        linomma  = list(mm[numfis].correspondance_mailles)
+        groupma = mm[numfis].gma
+        lmafo = groupma[gmafon]
+        lisnofo = []
+        for i in range(len(lmafo)) :
+          ma_i = linomma[lmafo[i]]
+          no_i = connex[lmafo[i]]
+          if i == 0 :
+            lisnofo.append(no_i[0])
+            lisnofo.append(no_i[1])
+          else :
+            if lisnofo[i] != no_i[0] :
+              UTMESS('F','RUPTURE1_51')
+            lisnofo.append(no_i[1]) 
+  
+        nbnofo = len(lisnofo)
+  
+# Correction de la position des noeuds (equirepartition)
+        Coorfo = fiss0.FONDFISS.get()
+        absmax = Coorfo[-1]
+        abscf = [0.]*nbnofo
+        for i in range(nbnofo) :
+          abscf[i] = i * absmax / (nbnofo-1)
+          xyzi = InterpolFondFiss(abscf[i], Coorfo)
+          mm[numfis].cn[nbno-nbnofo+i][0] = xyzi[0]
+          mm[numfis].cn[nbno-nbnofo+i][1] = xyzi[1]
+          mm[numfis].cn[nbno-nbnofo+i][2] = xyzi[2]
+  
+# Maillage apres correction
+        coord    = mm[numfis].cn
+        linomno  = list(mm[numfis].correspondance_noeuds)
+        linomno = map(string.rstrip,linomno)
+        l_coorf =  [[linomno[i],coord[i]] for i in range(0,nbno)]
+        d_coorf = dict(l_coorf)     
+      
+# Boucle sur le fond : coordonnees du point propage            
+        Basefo = fiss0.BASEFOND.get()
+        Listfo = fiss0.FONDFISS.get()
+        Vorig = Fiss['DTAN_ORIG']
+        Vextr = Fiss['DTAN_EXTR']
+        if (Damax ==None) :
+           DKmax = 1
+        if (coef_C ==None) :
+           coef_C = Damax
+        for ifond in range(nbnofo) :
+           Xf =  d_coorf['NX%s%i' %(ALPHABET[ifond],it)][0]   
+           Yf =  d_coorf['NX%s%i' %(ALPHABET[ifond],it)][1]     
+           Zf =  d_coorf['NX%s%i' %(ALPHABET[ifond],it)][2]  
+            
+           VPVNi = InterpolBaseFiss(abscf[ifond],Basefo, Listfo)
+           DKeqloc = InterpolationLineaire(abscf[ifond], DKeq[numfis])
+           Rloc  = InterpolationLineaire(abscf[ifond], RmM[numfis])
+           if DKeqloc<=0 :
+             UTMESS('F','RUPTURE1_49')
+   
+# Tangentes aux extremites     
+           if (ifond == 0) and (Vorig != None) :
+             VPVNi[3] = Vorig[0]
+             VPVNi[4] = Vorig[1]
+             VPVNi[5] = Vorig[2]
+           if (ifond == nbnofo-1) and (Vextr != None) :
+             VPVNi[3] = Vextr[0]
+             VPVNi[4] = Vextr[1]
+             VPVNi[5] = Vextr[2]
+           
+           beta = InterpolationLineaire(abscf[ifond], BETA[numfis])
+           Vloc = NBCYCL*dadN(coef_C,coef_N,coef_M,DKeqloc,Rloc)
+           Xf2 = Xf + (VPVNi[3]*cos(beta)+VPVNi[0]*sin(beta))*Vloc
+           Yf2 = Yf + (VPVNi[4]*cos(beta)+VPVNi[1]*sin(beta))*Vloc
+           Zf2 = Zf + (VPVNi[5]*cos(beta)+VPVNi[2]*sin(beta))*Vloc
+           
+           LesNoeudsEnPlus = NP.array([[Xf2,Yf2,Zf2]])
+           if ifond ==0 :
+              Pini = (Xf2,Yf2,Zf2)
+              vectorie = (VPVNi[0],VPVNi[1],VPVNi[2],)
+           NomNoeudsEnPlus =     ['NX%s%i' %(ALPHABET[ifond],it+1)]
+           mm[numfis].cn = NP.concatenate((mm[numfis].cn,LesNoeudsEnPlus))
+           mm[numfis].correspondance_noeuds = tuple( list(mm[numfis].correspondance_noeuds) + NomNoeudsEnPlus )
+    
+  # Ajout Maille levre (quad4)      
+        nbnotot = len(mm[numfis].correspondance_noeuds)
+        NomMaillesEnPlus = []
+        num_maille = []
+        NoeudsMailles = []
+        for ifond in range(nbnofo-1) :
+           NomMaillesEnPlus.append( 'MX%s%i' %(ALPHABET[ifond], it+1) )
+           num_maille.append( [ nbma + ifond +1 ] )
+           num_maille.append( nbma +ifond + 1 )
+           i1 = nbnotot - 2*nbnofo  + ifond
+           i2 = nbnotot - 2*nbnofo  + ifond +1
+           i3 = nbnotot - nbnofo  + ifond +1
+           i4 = nbnotot - nbnofo  + ifond 
+           NoeudsMailles.append( NP.array([i1,i2,i3,i4]))
+  
+        typ_maille = mm[numfis].dic['QUAD4']
+        NbMailleAjoute = nbnofo-1
+        mm[numfis].tm = NP.concatenate((mm[numfis].tm,NP.array([typ_maille]*NbMailleAjoute)))
+        mm[numfis].correspondance_mailles += tuple(NomMaillesEnPlus)
+        mm[numfis].co += NoeudsMailles
+        #XXX utilise resize/arange... (MC)
+        fsi = mm[numfis].gma['%s_%i' %(MFISS,it-1)]
+        for ifond in range(nbnofo-1) :
+          fsi = NP.concatenate((fsi,NP.array([nbma+ifond])))
+        mm[numfis].gma['%s_%i' %(MFISS,it)] = fsi.astype(int)
+       
+# Ajout Maille fond (SEG2)      
+        NomMaillesEnPlus = []
+        num_maille = []
+        NoeudsMailles = []
+        for ifond in range(nbnofo-1) :
+           NomMaillesEnPlus.append( 'MF%s%i' %(ALPHABET[ifond], it+1) )
+           num_maille.append( [ nbma + ifond +nbnofo ] )
+           num_maille.append( nbma + ifond + nbnofo )
+           i3 = nbnotot - nbnofo  + ifond 
+           i4 = nbnotot - nbnofo  + ifond +1
+           NoeudsMailles.append( NP.array([i3,i4]))
+  
+        typ_maille = mm[numfis].dic['SEG2']
+        NbMailleAjoute = nbnofo-1
+        mm[numfis].tm = NP.concatenate((mm[numfis].tm,NP.array([typ_maille]*NbMailleAjoute)))
+        mm[numfis].correspondance_mailles += tuple(NomMaillesEnPlus)
+        mm[numfis].co += NoeudsMailles
+        mm[numfis].gma['%s_%i' %(MFOND,it)] = NP.arange(nbma+nbnofo-1, nbma+2*(nbnofo-1))
+       
+#------------------------------------------------------------------
+# CAS 2b : MODELE 2D
+#
+      if dime == 2 :
+        mm[numfis] = MAIL_PY()
+        mm[numfis].FromAster(MAIL_FISS1)
+        
+        (nno,ndim) = mm[numfis].cn.shape
+  
+  # Recuperation des informations sur le maillage
+        nbno = mm[numfis].dime_maillage[0]
+        nbma = mm[numfis].dime_maillage[2]
+        coord    = mm[numfis].cn
+        linomno  = list(mm[numfis].correspondance_noeuds)
+        linomno = map(string.rstrip,linomno)
+        l_coorf =  [[linomno[i],coord[i]] for i in range(0,nbno)]
+        d_coorf = dict(l_coorf) 
+        
+  # Coordonnees du point propage       
+        Xf =  d_coorf['NXA%i' %(it)][0]    
+        Yf =  d_coorf['NXA%i' %(it)][1]
+  
+        VPVNi = fiss0.BASEFOND.get()
+        V = NBCYCL*dadN(coef_C,coef_N,coef_M,DKeq[numfis][0][1],RmM[numfis][0][1])
+        beta = BETA[numfis][0][1]
+        Xf2 = Xf +V*(VPVNi[2]*cos(beta)+VPVNi[0]*sin(beta))
+        Yf2 = Yf + V*(VPVNi[3]*cos(beta)+VPVNi[1]*sin(beta))
+        
+        LesNoeudsEnPlus = NP.array([[Xf2,Yf2]])
+        NomNoeudsEnPlus =     ['NXA%i' %(it+1)]
+        mm[numfis].cn = NP.concatenate((mm[numfis].cn,LesNoeudsEnPlus))
+        mm[numfis].correspondance_noeuds = tuple(linomno + NomNoeudsEnPlus )
+        
+  # Ajout Maille levre (SEG2)
+        NomMaillesEnPlus =     ['MX%s%i' %(ALPHABET[0], it+1)]
+        num_maille = [ nbma + 1 ]
+        num_maille.append( nbma + 1 )
+        NoeudsMailles = [NP.array([nbno-1,nbno])]
+        typ_maille = mm[numfis].dic['SEG2']
+        NbMailleAjoute = 1
+        mm[numfis].tm = NP.concatenate((mm[numfis].tm,NP.array([typ_maille]*NbMailleAjoute)))
+        mm[numfis].correspondance_mailles += tuple(NomMaillesEnPlus)
+        mm[numfis].co += NoeudsMailles
+        fsi = mm[numfis].gma['%s_%i' %(MFISS,it-1)]
+        fsi = NP.concatenate((fsi,NP.array([nbma])))
+        mm[numfis].gma['%s_%i' %(MFISS,it)] = fsi.astype(int)
+  
+# Ajout Maille fond (POI1)
+        NomMaillesEnPlus =     ['MF%s%i' %(ALPHABET[0], it+1)]
+        num_maille = [ nbma + 2 ]
+        NoeudsMailles = [NP.array([nbno])]
+        typ_maille = mm[numfis].dic['POI1']
+        mm[numfis].tm = NP.concatenate((mm[numfis].tm,NP.array([typ_maille]*1)))
+        mm[numfis].correspondance_mailles += tuple(NomMaillesEnPlus)
+        mm[numfis].co += NoeudsMailles
+        mm[numfis].gma['%s_%i' %(MFOND,it)] = NP.array([nbma+1], dtype=int)
+# Fin du 2D      
+
+      if INFO==2 :
+        texte="Maillage produit par l operateur PROPA_FISS"
+        aster.affiche('MESSAGE',texte)
+        print mm[numfis]
+             
+# Sauvegarde maillage xfem 
+      MAIL_FISS2 = Fiss['MAIL_PROPAGE']
+      if MAIL_FISS2 != None : self.DeclareOut('ma_xfem2',MAIL_FISS2)
+      
+      unit = mm[numfis].ToAster()
+      DEFI_FICHIER(UNITE=unit, ACTION="LIBERER")
+      ma_xfem2=LIRE_MAILLAGE(UNITE=unit);
+
+      if numfis == 0 :
+        __MMX[0]=LIRE_MAILLAGE(UNITE=unit);
+      else:
+        __MMX[numfis]=ASSE_MAILLAGE(MAILLAGE_1 = __MMX[numfis-1],
+                      MAILLAGE_2 = ma_xfem2,
+                      OPERATION='SUPERPOSE')
+      
+      numfis = numfis+1
+  
+# Sauvegarde maillage concatene
+    MAIL_TOTAL = args['MAIL_TOTAL']
+    if MAIL_TOTAL != None : self.DeclareOut('ma_tot',MAIL_TOTAL)
+    MAIL_STRUC = args['MAIL_STRUC']
+    ma_tot = ASSE_MAILLAGE(MAILLAGE_1 = MAIL_STRUC,
+                      MAILLAGE_2 = __MMX[Nbfissure-1],
+                      OPERATION='SUPERPOSE',)
+#------------------------------------------------------------------
+# CAS 3 : METHODE_PROPA = 'INITIALISATION'
+#
+  if METHODE_PROPA == 'INITIALISATION' :
+    form = args['FORM_FISS']
+    MFOND = args['GROUP_MA_FOND']
+    MFISS = args['GROUP_MA_FISS']
+    
+# 3-a : demi-droite    
+    if form == 'DEMI_DROITE' :
+      PF = args['PFON']
+      DTAN = args['DTAN']
+      PI = NP.array([[PF[0]-DTAN[0],PF[1]-DTAN[1]],])
+
+      ndim = 2
+      mm = MAIL_PY()
+      mm.__init__()
+     
+# Ajout des noeuds 
+      LesNoeudsEnPlus = NP.concatenate((PI,NP.array([PF[0:2]])))
+      NomNoeudsEnPlus =     ['NXA0','NXA1']
+      mm.cn = LesNoeudsEnPlus
+      mm.correspondance_noeuds = tuple( NomNoeudsEnPlus )
+
+# Ajout Maille levre (SEG2)
+      it = 1
+      nbma = 0
+      nbno = 0
+      NomMaillesEnPlus =     ['MX%s%i' %(ALPHABET[0], it)]
+      num_maille = [ nbma + 1 ]
+      num_maille.append( nbma + 1 )
+      NoeudsMailles = [NP.array([nbno,nbno+1])]
+      typ_maille = mm.dic['SEG2']
+      NbMailleAjoute = 1
+      mm.tm = NP.concatenate((mm.tm,NP.array([typ_maille]*NbMailleAjoute)))
+      mm.correspondance_mailles += tuple(NomMaillesEnPlus)
+      mm.co += NoeudsMailles
+      mm.gma['%s_0' %(MFISS)] = NP.array([nbma], dtype=int)
+
+# Ajout Maille fond (POI1)
+      NomMaillesEnPlus =     ['MF%s%i' %(ALPHABET[0], it)]
+      num_maille = [ nbma + 2 ]
+      NoeudsMailles = [NP.array([nbno+1])]
+      typ_maille = mm.dic['POI1']
+      mm.tm = NP.concatenate((mm.tm,NP.array([typ_maille]*1)))
+      mm.correspondance_mailles += tuple(NomMaillesEnPlus)
+      mm.co += NoeudsMailles
+      mm.gma['%s_0' %(MFOND)] = NP.array([nbma+1], dtype=int)
+
+
+# 3-b : demi-plan    
+    if form == 'DEMI_PLAN' :
+      P0 = args['POINT_ORIG']
+      P1 = args['POINT_EXTR']
+      dpropa = args['DTAN']
+      nbpt = args['NB_POINT_FOND']
+      Q0 = NP.array([[P0[0]-dpropa[0],P0[1]-dpropa[1],P0[2]-dpropa[2]]])
+      
+      mm = MAIL_PY()
+      mm.__init__()
+      x=[None]*nbpt
+      y=[None]*nbpt
+      z=[None]*nbpt
+      xx=[None]*nbpt
+      yy=[None]*nbpt
+      zz=[None]*nbpt
+      LesNoeudsEnPlus = Q0
+      NomNoeudsEnPlus =     ['NXA0']
+      mm.cn = LesNoeudsEnPlus
+      mm.correspondance_noeuds = tuple( NomNoeudsEnPlus )
+
+      for i in range(1,nbpt) :
+        x[i] = P0[0]+i*(P1[0]-P0[0])/(nbpt-1)
+        y[i] = P0[1]+i*(P1[1]-P0[1])/(nbpt-1)
+        z[i] = P0[2]+i*(P1[2]-P0[2])/(nbpt-1)
+        xx[i] = x[i] - dpropa[0]
+        yy[i] = y[i] - dpropa[1]
+        zz[i] = z[i] - dpropa[2]
+        LesNoeudsEnPlus = NP.array([[xx[i],yy[i],zz[i]]])
+        NomNoeudsEnPlus =     ['NX%s0' %(ALPHABET[i]) ]
+        mm.cn = NP.concatenate((mm.cn,LesNoeudsEnPlus))
+        mm.correspondance_noeuds = tuple(list(mm.correspondance_noeuds)  +NomNoeudsEnPlus )
+      LesNoeudsEnPlus = NP.array([P0])
+      NomNoeudsEnPlus =     ['NXA1']
+      mm.cn = NP.concatenate((mm.cn,LesNoeudsEnPlus))
+      mm.correspondance_noeuds = tuple(list(mm.correspondance_noeuds)  + NomNoeudsEnPlus )
+      for i in range(1,nbpt) :
+        LesNoeudsEnPlus = NP.array([[x[i],y[i],z[i]]])
+        NomNoeudsEnPlus =     ['NX%s1' %(ALPHABET[i]) ]
+        mm.cn = NP.concatenate((mm.cn,LesNoeudsEnPlus))
+        mm.correspondance_noeuds = tuple(list(mm.correspondance_noeuds)  +NomNoeudsEnPlus )
+
+# Ajout Maille levre (quad4)      
+      NomMaillesEnPlus = []
+      num_maille = []
+      NoeudsMailles = []
+      for ifond in range(nbpt-1) :
+         NomMaillesEnPlus.append( 'MX%s1' %(ALPHABET[ifond]) )
+         num_maille.append( [ ifond +1 ] )
+         num_maille.append( ifond + 1 )
+         i1 = ifond
+         i2 = ifond+1
+         i3 = nbpt+ifond
+         i4 = nbpt+ifond+1
+         NoeudsMailles.append( NP.array([i1,i2,i4,i3]))
+
+      typ_maille = mm.dic['QUAD4']
+      NbMailleAjoute = nbpt-1
+      mm.tm = NP.concatenate((mm.tm,NP.array([typ_maille]*NbMailleAjoute)))
+      mm.correspondance_mailles += tuple(NomMaillesEnPlus)
+      mm.co += NoeudsMailles
+      mm.gma['%s_0' %(MFISS) ] = NP.arange(nbpt-1)
+    
+# Ajout Maille fond (SEG2)      
+      NomMaillesEnPlus = []
+      num_maille = []
+      NoeudsMailles = []
+      for ifond in range(nbpt-1) :
+         NomMaillesEnPlus.append( 'MF%s1' %(ALPHABET[ifond]) )
+         num_maille.append( [ ifond +nbpt ] )
+         num_maille.append( ifond + nbpt )
+         i3 = nbpt+ifond
+         i4 = nbpt+ifond+1
+         NoeudsMailles.append( NP.array([i3,i4]))
+
+      typ_maille = mm.dic['SEG2']
+      NbMailleAjoute = nbpt-1
+      mm.tm = NP.concatenate((mm.tm,NP.array([typ_maille]*NbMailleAjoute)))
+      mm.correspondance_mailles += tuple(NomMaillesEnPlus)
+      mm.co += NoeudsMailles
+      mm.gma['%s_0' %(MFOND)] = NP.arange(nbpt-1, 2*(nbpt-1))
+        
+# 3-c : ellipse    
+    if form == 'ELLIPSE' :
+      P0 = args['CENTRE']
+      alpha0 = args['ANGLE_ORIG']
+      alpha1 = args['ANGLE_EXTR']
+      vect_x = args['VECT_X']
+      vect_y = args['VECT_Y']
+      gdax = args['DEMI_GRAND_AXE']
+      ptax = args['DEMI_PETIT_AXE']
+      normale = cross_product(vect_x,vect_y)
+      verif = NP.dot(vect_x,vect_y)
+      if abs(verif) > 0.01:
+          UTMESS('F','RUPTURE1_52')
+      nbpt = args['NB_POINT_FOND']
+
+      mm = MAIL_PY()
+      mm.__init__()      
+      LesNoeudsEnPlus = NP.array([[P0[0],P0[1],P0[2]]])
+      NomNoeudsEnPlus =     ['NXA0']
+      mm.cn = LesNoeudsEnPlus
+      mm.correspondance_noeuds = tuple( NomNoeudsEnPlus )
+      
+# Coordonnees des noeuds  
+      matr = NP.asarray([vect_x,vect_y,normale])
+      matr2 = NP.transpose(matr)
+      alpha0 = alpha0*NP.pi/180. 
+      alpha1 = alpha1*NP.pi/180. 
+      for i in range(nbpt) :
+         alphai = alpha0 + i*(alpha1-alpha0) / (nbpt-1)
+         coor_r1 = NP.asarray([gdax*cos(alphai), ptax*sin(alphai), 0])
+         coor_r0 = NP.dot(matr2,coor_r1) + P0
+         LesNoeudsEnPlus = NP.array([[coor_r0[0],coor_r0[1],coor_r0[2]]])
+         NomNoeudsEnPlus =     ['NX%s1' %(ALPHABET[i]) ]
+         mm.cn = NP.concatenate((mm.cn,LesNoeudsEnPlus))
+         mm.correspondance_noeuds = tuple(list(mm.correspondance_noeuds)  +NomNoeudsEnPlus )
+
+# Ajout Maille levre (TRIA3)      
+      NomMaillesEnPlus = []
+      num_maille = []
+      NoeudsMailles = []
+      typ_maille = mm.dic['TRIA3']
+      for ifond in range(nbpt-1) :
+         NomMaillesEnPlus.append( 'MX%s1' %(ALPHABET[ifond]) )
+         num_maille.append( [ ifond +1 ] )
+         num_maille.append( ifond + 1 )
+         i1 = 0
+         i2 = ifond + 1
+         i3 = ifond + 2
+         NoeudsMailles.append( NP.array([i1,i2,i3]))
+      NbMailleAjoute = nbpt-1
+      mm.tm = NP.concatenate((mm.tm,NP.array([typ_maille]*NbMailleAjoute)))
+      mm.correspondance_mailles += tuple(NomMaillesEnPlus)
+      mm.co += NoeudsMailles
+      mm.gma['%s_0' %(MFISS) ] = NP.arange(NbMailleAjoute)
+      
+      
+
+# Ajout Maille fond (SEG2)      
+      NomMaillesEnPlus = []
+      num_maille = []
+      NoeudsMailles = []
+      typ_maille = mm.dic['SEG2']
+      for ifond in range(nbpt-1) :
+         NomMaillesEnPlus.append( 'MF%s1' %(ALPHABET[ifond]) )
+         num_maille.append( [ ifond +nbpt ] )
+         num_maille.append( ifond + nbpt )
+         i3 = ifond + 1
+         i4 = ifond + 2
+         NoeudsMailles.append( NP.array([i3,i4]))
+
+      NbMailleAjoute = nbpt-1
+      mm.tm = NP.concatenate((mm.tm,NP.array([typ_maille]*NbMailleAjoute)))
+      mm.correspondance_mailles += tuple(NomMaillesEnPlus)
+      mm.co += NoeudsMailles
+      mm.gma['%s_0' %(MFOND)] = NP.arange(nbpt-1, 2*(nbpt-1))
+    
+    
+    if INFO==2 :
+      texte="Maillage produit par l operateur PROPA_FISS"
+      aster.affiche('MESSAGE',texte)
+      print mm
+           
+# Sauvegarde (maillage xfem et maillage concatene)
+    MAIL_FISS2 = args['MAIL_FISS']
+    if MAIL_FISS2 != None : self.DeclareOut('ma_xfem2',MAIL_FISS2)
+    unit = mm.ToAster()
+    DEFI_FICHIER(UNITE=unit, ACTION="LIBERER")
+    self.DeclareOut('ma_xfem2',MAIL_FISS2)
+    ma_xfem2=LIRE_MAILLAGE(UNITE=unit);
+
+    MAIL_TOTAL = args['MAIL_TOTAL']
+    if MAIL_TOTAL != None : self.DeclareOut('ma_tot',MAIL_TOTAL)
+    MAIL_STRUC = args['MAIL_STRUC']
+    ma_tot = ASSE_MAILLAGE(MAILLAGE_1 = MAIL_STRUC,
+                      MAILLAGE_2 = ma_xfem2,
+                      OPERATION='SUPERPOSE')
+                      
+  return                    
diff --git a/Aster/Cata/cataSTA10/Macro/raff_xfem_ops.py b/Aster/Cata/cataSTA10/Macro/raff_xfem_ops.py
new file mode 100644 (file)
index 0000000..c427fa6
--- /dev/null
@@ -0,0 +1,198 @@
+#@ MODIF raff_xfem_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+
+     
+def raff_xfem_ops(self,FISSURE,INFO,**args):
+   """
+   Macro RAFF_XFEM
+   Calcul de la distance au fond de fissure le plus proche
+   """
+   import aster
+   import string
+   import copy
+   import math
+   from types import ListType, TupleType
+   from Accas import _F
+   from SD.sd_xfem import sd_fiss_xfem
+   from Execution.E_JDC import JDC
+   EnumTypes = (ListType, TupleType)
+
+   macro = 'RAFF_XFEM'
+   from Accas               import _F
+   from Utilitai.Utmess     import  UTMESS
+
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+
+   # Le concept sortant (de type cham_no_sdaster ou derive)
+   self.DeclareOut('chamout', self.sd)
+   
+   # On importe les definitions des commandes a utiliser dans la macro
+   # Le nom de la variable doit etre obligatoirement le nom de la commande
+   FORMULE       = self.get_cmd('FORMULE')
+   CREA_CHAMP    = self.get_cmd('CREA_CHAMP')
+   DETRUIRE      = self.get_cmd('DETRUIRE')
+
+#  recuperation de la liste des fissures
+   if type(FISSURE) == tuple :
+      nbfiss = len(FISSURE)
+   else :
+      nbfiss = 1
+
+#  formule distance pour une fissure: 1/exp(r)
+   __MDISTF=FORMULE(NOM_PARA=('X1','X2'),VALE= '1./exp(sqrt(X1**2+X2**2))');
+#  formule distance pour une interface: 1/exp(lsn)
+   __MDISTI=FORMULE(NOM_PARA=('X1'),VALE= '1./exp(sqrt(X1**2))');
+
+   __CERR= [None]*nbfiss
+   list_err=[]
+   list_nom_cmp=[]
+   for_max = 'max('
+
+   for i in range(0,nbfiss) :
+
+      if nbfiss == 1 :
+         fiss = FISSURE
+      else :
+         fiss = FISSURE[i]
+
+      # recuperation du type de discontinuite :'FISSURE' ou 'INTERFACE'
+      # si FISSURE   : l'erreur est la distance au fond de fissure
+      # si INTERFACE : l'erreur est la distance a l'interface 
+      iret,ibid,typ_ds = aster.dismoi('F','TYPE_DISCONTINUITE',fiss.nom,'FISS_XFEM')
+      typ_ds=typ_ds.rstrip()
+
+      # extraction des champs level sets
+      __CHLN=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_R',
+                      OPERATION='EXTR',
+                      NOM_CHAM='LNNO',
+                      FISSURE=fiss);
+
+      # on recupere le concept maillage associe a la level set normale
+      iret,ibid,nom_ma = aster.dismoi('F','NOM_MAILLA',__CHLN.nom,'CHAM_NO')
+      nom_ma=nom_ma.strip()
+      MA = self.get_concept(nom_ma)
+
+      if typ_ds == 'FISSURE' : 
+         __CHLTB=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_R',
+                          OPERATION='EXTR',
+                          NOM_CHAM='LTNO',
+                          FISSURE=fiss);
+
+         # on renomme le composante X1 en X2
+         __CHLT=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_R',
+                         OPERATION='ASSE',
+                         MAILLAGE=MA,
+                         ASSE=_F(TOUT='OUI',
+                                 CHAM_GD = __CHLTB,
+                                 NOM_CMP='X1',
+                                 NOM_CMP_RESU='X2',),
+                           );
+
+         DETRUIRE(CONCEPT=_F(NOM=__CHLTB),INFO=1) 
+
+      # On affecte à chaque noeud du maillage MA la formule __MDISTF ou __MDISTI
+      if typ_ds == 'FISSURE' : 
+         __CHFOR=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_F',
+                           OPERATION='AFFE',
+                           MAILLAGE=MA,
+                           AFFE=_F(TOUT='OUI',
+                                   NOM_CMP='X1',
+                                   VALE_F=__MDISTF,),
+                          );
+      elif typ_ds == 'INTERFACE' : 
+         __CHFOR=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_F',
+                           OPERATION='AFFE',
+                           MAILLAGE=MA,
+                           AFFE=_F(TOUT='OUI',
+                                   NOM_CMP='X1',
+                                   VALE_F=__MDISTI,),
+                          );  
+      
+      # on evalue en tout noeud le champ de formules
+      if typ_ds == 'FISSURE' : 
+         __CERRB=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_R',
+                       OPERATION='EVAL',
+                       CHAM_F=__CHFOR,
+                       CHAM_PARA=(__CHLN,__CHLT,));
+
+         DETRUIRE(CONCEPT=_F(NOM=__CHLT),INFO=1) 
+
+      elif typ_ds == 'INTERFACE' : 
+         __CERRB=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_R',
+                       OPERATION='EVAL',
+                       CHAM_F=__CHFOR,
+                       CHAM_PARA=(__CHLN,));
+
+      DETRUIRE(CONCEPT=_F(NOM=__CHLN),INFO=1) 
+      DETRUIRE(CONCEPT=_F(NOM=__CHFOR),INFO=1) 
+
+      # champ d'Erreur de la fissure i
+      __CERR[i]=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_R',
+                          OPERATION='ASSE',
+                          MAILLAGE=MA,
+                          ASSE=_F(TOUT='OUI',
+                                  CHAM_GD = __CERRB,
+                                  NOM_CMP='X1',
+                                  NOM_CMP_RESU='X'+str(i+1),
+                                ),
+                        ); 
+
+      list_err.append(__CERR[i])
+      list_nom_cmp.append('X'+str(i+1))
+      for_max = for_max+'X'+str(i+1)+','
+
+      DETRUIRE(CONCEPT=_F(NOM=__CERRB),INFO=1) 
+
+   # si nbfiss = 1, c'est directement X1
+   # si nbfiss > 1 : on prend le max des erreurs de chaque fissure 
+   for_max = for_max+')'
+
+   if nbfiss == 1 :
+      __Erreur=FORMULE(NOM_PARA=(list_nom_cmp),VALE= 'X1');
+   else :
+      __Erreur=FORMULE(NOM_PARA=(list_nom_cmp),VALE= for_max);
+
+   # Définition de l'erreur en chaque noeud du maillage           
+   __CHFORM=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_F',
+                     OPERATION='AFFE',
+                     MAILLAGE=MA,
+                     AFFE=_F(TOUT='OUI',
+                             NOM_CMP='X1',
+                             VALE_F=__Erreur,),
+                    );
+
+   # champ de sortie
+   chamout=CREA_CHAMP(TYPE_CHAM='NOEU_NEUT_R',
+                     OPERATION='EVAL',
+                     CHAM_F=__CHFORM,
+                     CHAM_PARA=(list_err));
+
+   for i in range(0,nbfiss) :
+      DETRUIRE(CONCEPT=_F(NOM=__CERR[i]),INFO=1) 
+
+   DETRUIRE(CONCEPT=_F(NOM=__MDISTF),INFO=1) 
+   DETRUIRE(CONCEPT=_F(NOM=__MDISTI),INFO=1) 
+   DETRUIRE(CONCEPT=_F(NOM=__Erreur),INFO=1) 
+   DETRUIRE(CONCEPT=_F(NOM=__CHFORM),INFO=1) 
+
+   return
diff --git a/Aster/Cata/cataSTA10/Macro/reca_algo.py b/Aster/Cata/cataSTA10/Macro/reca_algo.py
new file mode 100644 (file)
index 0000000..7b884a6
--- /dev/null
@@ -0,0 +1,296 @@
+#@ MODIF reca_algo Macro  DATE 26/05/2010   AUTEUR ASSIRE A.ASSIRE 
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE ASSIRE A.ASSIRE
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import os
+import copy
+
+import numpy as NP
+import numpy.linalg as linalg
+
+try:
+  import aster
+  from Cata.cata import INFO_EXEC_ASTER
+  from Cata.cata import DETRUIRE
+  from Accas import _F
+  from Utilitai.Utmess import UTMESS
+except: pass
+
+
+# ------------------------------------------------------------------------------
+def calcul_gradient(A,erreur):
+   grad = NP.dot(NP.transpose(A),erreur)
+   return grad
+
+# ------------------------------------------------------------------------------
+def calcul_norme2(V):
+   a = NP.array(V)
+   return NP.dot(a,NP.transpose(a))**0.5
+
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+class Dimension:
+   """
+      Classe gérant l'adimensionnement et le dimensionnement
+   """
+
+   def __init__(self,val_initiales):
+      """
+         Le constructeur calcul la matrice D et son inverse
+      """
+      self.val_init = val_initiales
+      dim =len(self.val_init)
+      self.D = NP.zeros((dim,dim), float)
+      for i in range(dim):
+         self.D[i][i] = self.val_init[i]
+      self.inv_D=linalg.inv(self.D)
+   
+
+# ------------------------------------------------------------------------------
+   def adim_sensi(self, A):
+      for i in range(A.shape[0]):
+         for j in range(A.shape[1]):
+            A[i,j] = A[i,j] * self.val_init[j]
+      return A
+
+
+# ------------------------------------------------------------------------------
+   def redim_sensi(self, A):
+      for i in range(A.shape[0]):
+         for j in range(A.shape[1]):
+            A[i,j] = A[i,j] / self.val_init[j]
+      return A
+
+
+# ------------------------------------------------------------------------------
+   def adim(self, tab):
+      tab_adim = NP.dot(self.inv_D,copy.copy(tab))
+      return tab_adim
+
+
+# ------------------------------------------------------------------------------
+
+   def redim(self, tab_adim):
+      tab = NP.dot(self.D,tab_adim)
+      return tab
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+
+
+
+
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+def cond(matrix):
+    e1=linalg.eigvals(matrix)
+    e=map(abs,e1)
+    size=len(e)
+    e=NP.sort(e)
+    if NP.all(e[0] != 0):
+      condi=e[size-1]/e[0]
+    else:
+      condi=0.0
+    return condi,e[size-1],e[0]
+
+
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+def norm(matrix):
+    e=linalg.eigvalsh(matrix)
+    size=len(e)
+    e=NP.sort(e)
+    norm=e[size-1]
+    return norm
+
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+def lambda_init(matrix):
+     """
+        Routine qui calcule la valeur initial du parametre de regularisation l.
+     """
+     condi,emax,emin=cond(matrix)
+     id=NP.identity(matrix.shape[0])
+     if (condi==0.0):
+         l=1.e-3*norm(matrix)
+     elif (condi<=10000):
+         l=1.e-16*norm(matrix)
+     elif (condi>10000):
+         l=abs(10000.*emin-emax)/10001.
+     return l
+
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+def Levenberg_bornes(val, Dim, val_init, borne_inf, borne_sup, A, erreur, l, ul_out):
+   """
+      On resoud le système par contraintes actives:
+         Q.dval + s + d =0
+         soumis à :
+         borne_inf < dval < borne_sup 
+                 0 <  s
+                 s.(borne_inf - dval)=0
+                 s.(borne_sup - dval)=0
+   """
+   dim = len(val)
+   id = NP.identity(dim)
+   # Matrice du système
+   Q=NP.dot(NP.transpose(A),A) +l*id
+   # Second membre du système
+   d=NP.dot(NP.transpose(A),erreur)
+   # Ens. de liaisons actives
+   Act=NP.array([], dtype=int)
+   k=0
+   done=0
+   # Increment des parametres 
+   dval=NP.zeros(dim)
+   while done <1 :
+      k=k+1
+      I=NP.ones(dim, dtype=int)
+      for i in Act:
+         I[i]=0
+      I=NP.nonzero(NP.greater(I,0))[0]
+      s=NP.zeros(dim)
+      for i in Act:
+         # test sur les bornes (on stocke si on est en butée haute ou basse)
+         if (val[i]+dval[i]>=borne_sup[i]):
+            dval[i]=borne_sup[i]-val[i]
+            s[i]=1.
+         if (val[i]+dval[i]<=borne_inf[i]):
+            dval[i]=borne_inf[i]-val[i]
+            s[i]=-1.
+      if (len(I)!=0):
+          # xi=-Q(I)-1.(d(I)+Q(I,Act).dval(Act))
+          t_QI = NP.take(Q, I, axis=0)
+          t_tQI_Act = NP.take(t_QI, Act, axis=1)
+          t_adim_Act = NP.take(Dim.adim(dval), Act)
+          if NP.size(t_tQI_Act) > 0 and NP.size(t_adim_Act) > 0:
+             smemb = NP.take(d, I) + NP.dot(t_tQI_Act, t_adim_Act)
+          else:
+             smemb = NP.take(d, I)
+          xi=-linalg.solve(NP.take(t_QI, I, axis=1), smemb)
+          for i in NP.arange(len(I)):
+             dval[I[i]]=xi[i]*val_init[I[i]]
+      if (len(Act)!=0):
+         # s(Av)=-d(Act)-Q(Act,:).dval
+         sa=-NP.take(d,Act)-NP.dot(NP.take(Q,Act,axis=0),Dim.adim(dval))
+         for i in range(len(Act)):
+            if (s[Act[i]]==-1.):
+               s[Act[i]]=-sa[i]
+            else:
+               s[Act[i]]=sa[i]
+      # Nouvel ens. de liaisons actives
+      Act=NP.concatenate((NP.nonzero(NP.greater(dval,borne_sup-val))[0],
+                          NP.nonzero(NP.less(dval,borne_inf-val))[0],
+                          NP.nonzero(NP.greater(s,0.))[0])).astype(int)
+      done=(max(val+dval-borne_sup)<=0)&(min(val+dval-borne_inf)>=0)&(min(s)>=0.0)
+      # Pour éviter le cyclage
+      if (k>50):
+         try:
+            l=l*2
+            Q=NP.dot(NP.transpose(A),A) +l*id
+            k=0
+         except:
+             res=open(os.getcwd()+'/fort.'+str(ul_out),'a')
+             res.write('\n\nQ = \n'+NP.array2string(Q-l*id,array_output=1,separator=','))
+             res.write('\n\nd = '+NP.array2string(d,array_output=1,separator=','))
+             res.write('\n\nval = '+NP.array2string(val,array_output=1,separator=','))
+             res.write('\n\nval_ini= '+NP.array2string(val_init,array_output=1,separator=','))
+             res.write('\n\nborne_inf= '+NP.array2string(borne_inf,array_output=1,separator=','))
+             res.write('\n\nborne_sup= '+NP.array2string(borne_sup,array_output=1,separator=','))
+             UTMESS('F','RECAL0_18')
+             return 
+   newval=copy.copy(val+dval)
+   return newval,s,l,Act
+
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+def actualise_lambda(l, val, new_val, A, erreur, new_J, old_J):
+   dim = len(val)
+   id = NP.identity(dim)
+   # Matrice du système
+   Q=NP.dot(NP.transpose(A),A) +l*id
+   # Second membre du système
+   d=NP.dot(NP.transpose(A),erreur)
+   old_Q=old_J
+   new_Q=old_J+0.5*NP.dot(NP.transpose(new_val-val),NP.dot(Q,new_val-val))+NP.dot(NP.transpose(new_val-val),d)
+   # Ratio de la décroissance réelle et de l'approx. quad.
+   if NP.all((old_Q-new_Q) != 0.):
+      R=(old_J-new_J)/(old_Q-new_Q)
+      if (R<0.25):
+         l = l*10.
+      elif (R>0.75):
+         l = l/15.
+   else:
+      if (old_J>new_J):
+         l = l*10.
+      else:
+         l = l/10.
+   return l
+
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+def test_convergence(gradient_init, erreur, A, s):
+   """
+      Renvoie le residu
+   """
+   gradient = calcul_gradient(A,erreur)+s
+   try:
+      epsilon = NP.dot(gradient,gradient)/NP.dot(gradient_init,gradient_init)
+   except:
+       UTMESS('F', "RECAL0_19")
+       return 
+   epsilon = epsilon**0.5
+   return epsilon
+
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+def calcul_etat_final(para, A, iter, max_iter, prec, residu, Messg):
+   """
+      Fonction appelée quand la convergence est atteinte
+      on calcule le Hessien et les valeurs propres et vecteurs 
+      propre associés au Hessien
+      A    = sensibilite
+      At*A = hessien
+   """
+
+#   if ((iter < max_iter) or (residu < prec)):
+   if 1==1:
+      Hessien = NP.dot(NP.transpose(A),A)
+
+      # Desactive temporairement les FPE qui pourraient etre generees (a tord!) par blas
+      aster.matfpe(-1)
+      valeurs_propres,vecteurs_propres = linalg.eig(Hessien) 
+      vecteurs_propres=NP.transpose(vecteurs_propres)  # numpy et Numeric n'ont pas la meme convention
+      sensible=NP.nonzero(NP.greater(abs(valeurs_propres/max(abs(valeurs_propres))),1.E-1))[0]
+      insensible=NP.nonzero(NP.less(abs(valeurs_propres/max(abs(valeurs_propres))),1.E-2))[0]
+      # Reactive les FPE
+      aster.matfpe(1)
+
+      Messg.affiche_calcul_etat_final(para,Hessien,valeurs_propres,vecteurs_propres,sensible,insensible)
+
+
diff --git a/Aster/Cata/cataSTA10/Macro/reca_calcul_aster.py b/Aster/Cata/cataSTA10/Macro/reca_calcul_aster.py
new file mode 100644 (file)
index 0000000..aeb7f07
--- /dev/null
@@ -0,0 +1,521 @@
+#@ MODIF reca_calcul_aster Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE ASSIRE A.ASSIRE
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+
+debug = False
+
+import copy
+import types
+import os
+import sys
+import pprint
+import math
+import glob
+import socket
+import shutil
+
+import numpy as NP
+
+from Utilitai.System import ExecCommand
+from Utilitai.Utmess import UTMESS
+
+from recal import Affiche_Param, CALCULS_ASTER, CALC_ERROR
+from reca_utilitaires import Random_Tmp_Name
+
+
+# ------------------------------------------------------------------------------
+class CALCUL_ASTER:
+
+  def __init__(self, jdc, METHODE,
+                          UNITE_ESCL,
+                          UNITE_RESU, 
+                          para,
+                          reponses,
+                          PARA_DIFF_FINI=1.E-3,
+                          vector_output=True,
+                          GRADIENT=None,
+                          DYNAMIQUE=None,
+                          #LANCEMENT='DISTRIBUE',
+                          CALCUL_ESCLAVE=None,
+                          INFO=0,
+               ):
+  
+      self.METHODE               = METHODE
+      self.UNITE_ESCL            = UNITE_ESCL
+      self.UNITE_RESU            = UNITE_RESU
+      self.para                  = para
+      self.reponses              = reponses
+      self.PARA_DIFF_FINI        = PARA_DIFF_FINI
+      self.vector_output         = vector_output
+
+      self.memjeveux_esclave     = CALCUL_ESCLAVE['memjeveux_esclave']
+      self.mem_aster             = CALCUL_ESCLAVE['mem_aster']
+      self.MODE                  = CALCUL_ESCLAVE['MODE']
+      self.MEMOIRE               = CALCUL_ESCLAVE['MEMOIRE']
+      self.TEMPS                 = CALCUL_ESCLAVE['TEMPS']
+      self.CLASSE                = CALCUL_ESCLAVE['CLASSE']
+      self.ACTUALISATION         = CALCUL_ESCLAVE['ACTUALISATION']
+      self.NMAX_SIMULT           = CALCUL_ESCLAVE['NMAX_SIMULT']
+      self.LANCEMENT             = CALCUL_ESCLAVE['LANCEMENT']
+
+      self.INFO                  = INFO
+      # Optionnels
+      self.UNITE_GRAPHIQUE       = None
+      self.export                = None
+      self.follow_output         = None
+      self.GRADIENT              = GRADIENT
+      self.DYNAMIQUE             = DYNAMIQUE
+      #self.LANCEMENT             = LANCEMENT
+
+      # Variables locales
+      self.new_export            = os.path.join(os.getcwd(), 'tmp_export')
+
+      # Variables calculees
+      self.evaluation_fonction   = 0
+
+      # Initialisation
+      self.reset()
+
+      # Dynamique : pour l'appariement manuel des modes en dynamique
+      self.graph_mac             = False
+
+      # JDC
+      self.jdc                   = jdc
+
+
+  # ------------------------------------------------------------------------------
+  def Set_Parameters(self, **args):
+    for cle in args.keys(): 
+       exec( "%s=%s" % (cle, args[cle]) )
+
+
+  # ------------------------------------------------------------------------------
+  def reset(self):
+
+      self.Lcalc                 = None
+      self.erreur                = None
+      self.residu                = None
+      self.norme                 = None
+      self.A_nodim               = None
+      self.A                     = None
+      self.norme_A_nodim         = None
+      self.norme_A               = None
+      self.L                     = None
+#      self.L_J_init              = None
+
+
+  # ------------------------------------------------------------------------------
+  def calcul_Aster(self, val, dX=None):
+
+        # ----------------------------------------------------------------------------
+        # Commun
+        # ----------------------------------------------------------------------------
+        self.val         = val
+        info             = self.INFO
+
+        # MACR_RECAL inputs
+        parametres       = self.LIST_PARA
+        calcul           = self.RESU_CALC
+        experience       = self.RESU_EXP
+
+        # Current estimation
+        X0               = val
+        dX               = dX
+
+        # Objet Calcul
+        C = CALCULS_ASTER(
+                # MACR_RECAL inputs
+                parametres    = parametres,
+                calcul        = calcul,
+                experience    = experience,
+                LANCEMENT     = self.LANCEMENT,
+                jdc           = self.jdc,
+                         )
+
+        # Traitement special pour la dynamique (affichage des MAC dans l'esclave)
+        if self.DYNAMIQUE: C.SetDynamiqueMode(self.DYNAMIQUE, self.graph_mac)
+
+
+        # ----------------------------------------------------------------------------
+        # ASRUN distribue
+        # ----------------------------------------------------------------------------
+        if self.LANCEMENT == 'DISTRIBUTION':
+
+            # Creation du repertoire temporaire pour l'execution de l'esclave
+            tmp_macr_recal = self.Creation_Temporaire_Esclave()
+
+            # Creation du fichier .export de l'esclave
+            self.Creation_Fichier_Export_Esclave(tmp_macr_recal)  
+
+            # Code_Aster installation
+            if  os.environ.has_key('ASTER_ROOT'):
+                ASTER_ROOT = os.environ['ASTER_ROOT']
+            else:
+                import aster
+                ASTER_ROOT       = os.path.join(aster.repout(), '..')
+            as_run           = os.path.join(ASTER_ROOT, 'bin', 'as_run')
+
+            # General
+            resudir          = None
+            clean            = True
+            NMAX_SIMULT      = self.NMAX_SIMULT
+
+            # Study
+            export           = self.new_export
+
+            C.follow_output = self.follow_output
+
+            # Lancement des calculs
+            fonctionnelle, gradient = C.run(
+                # Current estimation
+                X0,
+                dX,
+
+                # Code_Aster installation
+                ASTER_ROOT     = ASTER_ROOT,
+                as_run         = as_run,
+
+                # General
+                resudir        = resudir,
+                clean          = clean,
+                info           = info,
+                NMAX_SIMULT    = NMAX_SIMULT,
+
+                # Study
+                export         = export,
+
+                                           )
+
+
+        # ----------------------------------------------------------------------------
+        # Aiguillage vers INCLUDE
+        # ----------------------------------------------------------------------------
+        if self.LANCEMENT == 'INCLUSION':
+            C.UNITE_ESCL  = self.UNITE_ESCL
+
+            # Lancement des calculs
+            fonctionnelle, gradient = C.run(
+                # Current estimation
+                X0,
+                dX,
+                # General
+                info,
+                                  )
+
+
+        # ----------------------------------------------------------------------------
+        # Sortie
+        # ----------------------------------------------------------------------------
+        if dX: self.evaluation_fonction += 1+ len(dX)
+        else:  self.evaluation_fonction += 1
+
+        self.Lcalc = C.Lcalc
+
+        if not dX: return self.Lcalc[0], {}
+        else:      return fonctionnelle, gradient
+
+
+  # ------------------------------------------------------------------------------
+  def Affiche_Param(self, val):
+      """ Affiche les parametres """
+      return Affiche_Param(self.para, val)
+
+
+  # ------------------------------------------------------------------------------
+  def calcul_F(self, val):
+       """
+          Calcul de F
+       """
+       UTMESS('I', 'RECAL0_25', valk=self.Affiche_Param(val) )
+
+       # Reset les variables deja calculees par les calculs precedents
+       self.reset()
+  
+       # Calcul pour le jeu de parametre val
+       fonctionnelle, gradient = self.calcul_Aster(val, dX=None)
+  
+       # Calcul de l'erreur par rapport aux donnees experimentale
+       E = CALC_ERROR(
+           experience          = self.RESU_EXP,
+           X0                  = val,
+           calcul              = self.RESU_CALC,
+           poids               = self.Simul.poids,
+           objective_type      = 'vector',
+           info                = self.INFO,
+       )
+       self.erreur  = E.CalcError(self.Lcalc)
+
+       # norme de l'erreur
+       self.norme = NP.sum( [x**2 for x in self.erreur] )
+  
+       if debug:
+           print "self.reponses=", self.reponses
+           print "F=", E.F
+           print "L_J=", E.L_J
+           print "L_J_init=", E.L_J_init
+           print "J=", E.J
+           print 'erreur=', self.erreur
+           print "norme de l'erreur=", self.norme
+           print "norme de J (fonctionnelle)=", str(E.J)
+  
+       if self.INFO>=2: 
+          UTMESS('I', 'RECAL0_30')
+          if self.evaluation_fonction >1: UTMESS('I', 'RECAL0_39', valk=str(self.evaluation_fonction))
+  
+       if self.vector_output:
+          if self.INFO>=2: UTMESS('I', 'RECAL0_35', valr=self.norme)
+          return self.erreur
+       else:
+          if self.INFO>=2: UTMESS('I', 'RECAL0_36', valr=self.norme)
+          return self.norme
+
+
+  # ------------------------------------------------------------------------------
+  def calcul_F2(self, val):
+      """
+         Calcul de F (et de G) mais renvoit juste la fonctionnelle
+         Sert pour les algorithmes qui veulent une fonction ou F, une fonction pour G mais qu'on veut pouvoir tout calculer en distibue
+      """
+      a, b, c, d = self.calcul_FG(val)
+      if self.vector_output: return self.erreur
+      else:                  return self.norme
+
+
+  # ------------------------------------------------------------------------------
+  def calcul_FG(self, val):
+      """
+         Calcul de F et de G
+      """
+      UTMESS('I', 'RECAL0_26', valk=self.Affiche_Param(val) )
+
+      # Reset les variables deja calculees par les calculs precedents
+      self.reset()
+
+      # Calcul pour le jeu de parametres val
+      dX = len(val)*[self.PARA_DIFF_FINI]
+      fonctionnelle, gradient = self.calcul_Aster(val, dX)
+
+      # Calcul de l'erreur par rapport aux donnees experimentale
+      E = CALC_ERROR(
+          experience          = self.RESU_EXP,
+          X0                  = val,
+          calcul              = self.RESU_CALC,
+          poids               = self.Simul.poids,
+          objective_type      = 'vector',
+          info                = self.INFO,
+      )
+
+      self.erreur, self.residu, self.A_nodim, self.A  = E.CalcSensibilityMatrix(Lcalc=self.Lcalc, val=val, dX=None, pas=self.PARA_DIFF_FINI)
+
+      if debug:
+          print "A_nodim=", self.A_nodim
+          print "self.A=", self.A
+          print "self.erreur=", self.erreur
+          print "self.residu=", self.residu
+          print "self.vector_output=", self.vector_output
+
+
+      if self.vector_output:
+          return self.erreur, self.residu, self.A_nodim, self.A
+      else:
+          # norme de l'erreur
+          self.norme = NP.dot(self.erreur, self.erreur)**0.5
+          self.norme_A_nodim = NP.zeros( (1,len(self.para)))
+          self.norme_A       = NP.zeros( (1,len(self.para)))
+          for c in range(len(self.A[0,:])):
+              norme_A_nodim = 0
+              norme_A       = 0
+              for l in range(len(self.A[:,0])):
+                   norme_A_nodim += self.A_nodim[l,c] * self.A_nodim[l,c]
+                   norme_A       += self.A[l,c] * self.A[l,c]
+              self.norme_A_nodim[0,c] = math.sqrt( norme_A_nodim ) 
+              self.norme_A[0,c] = math.sqrt( norme_A )
+          return self.norme, self.residu, self.norme_A_nodim, self.norme_A
+
+
+
+  # ------------------------------------------------------------------------------
+  def calcul_G(self, val):
+      """
+        Calcul de G
+      """
+      UTMESS('I', 'RECAL0_27', valk=self.Affiche_Param(val) )
+
+      # Si le calcul Aster (et ses derivees) est deja effectue pour val on ne le refait pas
+      if not ( (self.val == val) and self.A):
+          self.erreur, self.residu, self.A_nodim, self.A = self.calcul_FG(val)
+      return NP.dot(NP.transpose(self.A), self.erreur) 
+
+
+  # ------------------------------------------------------------------------------
+  def Creation_Temporaire_Esclave(self):
+     """
+        Creation du repertoire temporaire d'execution du calcul esclace
+     """
+     # Creation du repertoire temporaire
+     tmp_macr_recal = os.getcwd() + os.sep + 'tmp_macr_recal'
+#     tmp_macr_recal = Random_Tmp_Name( prefix = os.getenv('HOME') + os.sep + 'tmp_macr_recal_' )
+     try:    os.mkdir(tmp_macr_recal)
+     except: pass
+     if not os.path.exists(tmp_macr_recal): UTMESS('F','RECAL0_82',valk=tmp_macr_recal)
+     try:    os.mkdir(tmp_macr_recal + os.sep + 'REPE_TABLE')
+     except: pass
+     if not os.path.exists(tmp_macr_recal + os.sep + 'REPE_TABLE'): UTMESS('F','RECAL0_82',valk=tmp_macr_recal + os.sep + 'REPE_TABLE')
+
+     return tmp_macr_recal
+
+
+  # ------------------------------------------------------------------------------
+  def Creation_Fichier_Export_Esclave(self, tmp_macr_recal):
+     """
+        Creation du fichier .export pour le calcul esclave
+     """
+
+     from asrun.profil import ASTER_PROFIL
+
+     # Recuperation du fichier .export
+     if self.export:  export = self.export
+     else:
+         list_export = glob.glob('*.export')
+         if len(list_export) == 0: UTMESS('F','RECAL0_4')
+         elif len(list_export) >1: UTMESS('F','RECAL0_5')
+         export = list_export[0]
+
+     # On modifie le profil
+     prof = ASTER_PROFIL(export)
+
+     # En local
+     user_mach = ''
+
+     # Chaine user@hostname (pour les calculs distribues et en batch)
+     try:         username = prof.param['username'][0]
+     except: 
+         try:     username = os.getlogin()
+         except:  
+                  import getpass
+                  username = getpass.getuser()
+     user_mach_dist = "%s@%s:" % ( username, socket.gethostname() )
+
+
+     # On cherche s'il y a un fichier hostfile pour rajouter user@hostname
+     l_fr = getattr(prof, 'data')
+     l_tmp = l_fr[:]
+     for dico in l_tmp:
+        if dico['type']=='hostfile':
+           user_mach = user_mach_dist
+           break
+
+     # En distribue
+     if self.TEMPS:    prof.param['tpsjob']    = str(self.TEMPS)
+     if self.MEMOIRE:  prof.param['memjob']    = str(self.MEMOIRE)
+
+     # En batch et distribue
+     if self.MODE == 'BATCH':
+#        user_mach = "%s@%s:" % ( prof.param['username'][0], socket.gethostname() )
+        user_mach = user_mach_dist
+        prof.param['mode']      = 'batch'
+        if self.mem_aster: prof.param['mem_aster'] = str(self.mem_aster)
+
+        # classe reservee sur la machine Aster
+        if self.CLASSE:
+           prof.param['classe'] = self.CLASSE
+
+     # xterm
+     if prof.param.has_key('xterm'):
+        del prof.param['xterm']
+     # memjeveux
+     prof.args['memjeveux'] = self.memjeveux_esclave
+
+     # fichier/répertoire
+     for lab in ('data', 'resu'):
+       l_fr = getattr(prof, lab)
+       l_tmp = l_fr[:]
+
+       for dico in l_tmp:
+
+         # répertoires
+         if dico['isrep']:
+
+           # base non prise en compte
+           if dico['type'] in ('base', 'bhdf'):
+             l_fr.remove(dico)
+
+           if lab == 'resu':
+             dico['path'] = user_mach + os.path.join(tmp_macr_recal, os.path.basename(dico['path']))
+
+         # fichiers
+         else:
+
+           # Nom du fichier .mess (pour recuperation dans REPE_OUT)
+           if dico['ul'] == '6':
+             self.nom_fichier_mess_fils = os.path.basename(dico['path'])
+
+           # Nom du fichier .resu (pour recuperation dans REPE_OUT)
+           if dico['ul'] == '8':
+             self.nom_fichier_resu_fils = os.path.basename(dico['path'])
+
+           # Ancien .comm non pris en compte
+           # Fichier d'unite logique UNITE_RESU (rapport de MACR_RECAL) non pris en compte
+           if dico['type'] == 'comm' or (dico['ul'] == str(self.UNITE_RESU) and lab == 'resu'):
+             l_fr.remove(dico)
+
+           # Fichier d'unite logique UL devient le nouveau .comm
+           elif dico['ul'] == str(self.UNITE_ESCL):
+             self.fichier_esclave = dico['path']
+             dico['type'] = 'comm'
+             dico['ul']   = '1'
+             dico['path'] = user_mach + os.path.join(os.getcwd(), 'fort.%d' % self.UNITE_ESCL)
+
+           # Tous les autres fichiers en Resultat
+           elif lab == 'resu':
+#               if self.UNITE_GRAPHIQUE and dico['ul'] == str(self.UNITE_GRAPHIQUE): l_fr.remove(dico)
+#               else:
+#                  dico['path'] = user_mach + os.path.join(tmp_macr_recal, os.path.basename(dico['path']))
+              l_fr.remove(dico)
+
+           # Tous les autres fichiers en Donnees
+           elif lab == 'data':
+              if dico['type'] not in ('exec', 'ele'):
+                 if dico['ul']   != '0':   # Traite le cas des sources python sourchargees
+                     # Si distant/distribue on doit prendre les fichiers de donnes dans un endroit partage entre les machines/noeuds
+                     if user_mach:
+                        src = dico['path']
+                        dst = os.path.join(tmp_macr_recal, os.path.basename(dico['path']))
+                        try:
+                            shutil.copyfile(src, dst)
+                            dico['path'] = user_mach + os.path.join(tmp_macr_recal, os.path.basename(dico['path']))
+                        except Exception, e:
+                            print e
+                     else:
+                        dico['path'] = user_mach + os.path.join(os.getcwd(), 'fort.%s' % dico['ul'])
+
+           # sinon on garde la ligne telle quelle
+       setattr(prof, lab, l_fr)
+
+     # Ecriture du nouveau fichier export
+     prof.WriteExportTo(self.new_export)
+
+     if debug: os.system('cp ' + self.new_export + ' /tmp')
+     os.system('cp ' + self.new_export + ' /tmp')
+     #os.system('sleep 500')
+
+  # --FIN CLASSE  ----------------------------------------------------------------------------
diff --git a/Aster/Cata/cataSTA10/Macro/reca_controles.py b/Aster/Cata/cataSTA10/Macro/reca_controles.py
new file mode 100644 (file)
index 0000000..af8a861
--- /dev/null
@@ -0,0 +1,242 @@
+#@ MODIF reca_controles Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE ASSIRE A.ASSIRE
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import string
+import copy
+import types
+import os
+import sys
+import pprint
+
+# Nom de la routine
+nompro = 'MACR_RECAL'
+
+from Noyau.N_types import is_float, is_str, is_enum
+
+
+#_____________________________________________
+#
+# CONTROLE DES ENTREES UTILISATEUR
+#_____________________________________________
+
+# ------------------------------------------------------------------------------
+def erreur_de_type(code_erreur,X):
+   """
+   code_erreur ==0 --> X est une liste
+   code erreur ==1 --> X est un char
+   code erreur ==2 --> X est un float
+   test est un boolean (test = 0 défaut et 1 si un test if est verifier
+   """
+
+   txt = ""
+   if(code_erreur == 0 ):
+      if not is_enum(X):
+         txt="\nCette entrée: " +str(X)+" n'est pas une liste valide"
+   if(code_erreur == 1 ):
+      if not is_str(X):
+         txt="\nCette entrée: " +str(X)+" n'est pas une chaine de caractère valide ; Veuillez la ressaisir en lui appliquant le type char de python"
+   if(code_erreur == 2 ):
+      if not is_float(X):
+         txt="\nCette entrée:  " +str(X)+" n'est pas une valeur float valide ; Veuillez la ressaisir en lui appliquant le type float de python"
+   return txt
+   
+
+# ------------------------------------------------------------------------------
+def erreur_dimension(PARAMETRES,REPONSES):
+   """
+   On verifie que la dimension de chaque sous_liste de parametre est 4
+   et que la dimension de chaque sous_liste de REPONSES est 3
+   """
+
+   txt = ""
+   for i in range(len(PARAMETRES)):
+      if (len(PARAMETRES[i]) != 4):
+         txt=txt + "\nLa sous-liste de la variable paramètre numéro " + str(i+1)+" n'est pas de longueur 4"
+   for i in range(len(REPONSES)):
+      if (len(REPONSES[i]) != 3):
+         txt=txt + "\nLa sous-liste de la variable réponse numéro " + str(i+1)+" n'est pas de longueur 3"
+   return txt
+
+
+# ------------------------------------------------------------------------------
+def compare__dim_rep__dim_RESU_EXP(REPONSES,RESU_EXP):
+   """
+   X et Y sont deux arguments qui doivent avoir la meme dimension
+   pour éviter l'arret du programme
+   """
+
+   txt = ""
+   if( len(REPONSES) != len(RESU_EXP)):
+      txt="\nVous avez entré " +str(len(REPONSES))+ " réponses et "+str(len(RESU_EXP))+ " expériences ; On doit avoir autant de réponses que de résultats expérimentaux"
+   return txt
+
+
+# ------------------------------------------------------------------------------
+def compare__dim_poids__dim_RESU_EXP(POIDS,RESU_EXP):
+   """
+   POIDS et Y sont deux arguments qui doivent avoir la meme dimension
+   pour éviter l'arret du programme
+   """
+
+   txt = ""
+   if( len(POIDS) != len(RESU_EXP)):
+      txt="\nVous avez entré " +str(len(POIDS))+ " poids et "+str(len(RESU_EXP))+ " expériences ; On doit avoir autant de poids que de résultats expérimentaux"
+   return txt
+
+
+# ------------------------------------------------------------------------------
+def verif_fichier(UL,PARAMETRES,REPONSES):
+   """
+   On verifie les occurences des noms des PARAMETRES et REPONSES 
+   dans le fichier de commande ASTER
+   """
+
+   txt = ""
+   txt_alarme = ""
+   try:
+      fichier = open('fort.'+str(UL),'r')
+      fic=fichier.read()
+   except:
+      txt += "\nImpossible d'ouvrir le fichier esclave declare avec l'unite logique " + str(UL)
+      return txt, txt_alarme
+   for i in range(len(PARAMETRES)):
+      if((string.find(fic,PARAMETRES[i][0])==-1) or ((string.find(fic,PARAMETRES[i][0]+'=')==-1) and (string.find(fic,PARAMETRES[i][0]+' ')==-1))):
+         txt += "\nLe paramètre "+PARAMETRES[i][0]+" que vous avez entré pour la phase d'optimisation n'a pas été trouvé dans votre fichier de commandes ASTER"
+   for i in range(len(REPONSES)):
+      if((string.find(fic,REPONSES[i][0])==-1) or ((string.find(fic,REPONSES[i][0]+'=')==-1) and (string.find(fic,REPONSES[i][0]+' ')==-1))):
+         txt_alarme += "\nLa réponse  "+REPONSES[i][0]+" que vous avez entrée pour la phase d'optimisation n'a pas été trouvée dans votre fichier de commandes ASTER"
+   return txt, txt_alarme
+
+
+# ------------------------------------------------------------------------------
+def verif_valeurs_des_PARAMETRES(PARAMETRES):
+   """
+   On verifie que pour chaque PARAMETRES de l'optimisation
+   les valeurs entrées par l'utilisateur sont telles que :
+              val_inf<val_sup
+              val_init appartient à [borne_inf, borne_sup] 
+              val_init!=0         
+              borne_sup!=0         
+              borne_inf!=0         
+   """
+
+   txt = ""
+   # verification des bornes
+   for i in range(len(PARAMETRES)):
+      if( PARAMETRES[i][2] >PARAMETRES[i][3]):
+         txt=txt + "\nLa borne inférieure "+str(PARAMETRES[i][2])+" de  "+PARAMETRES[i][0]+ "est plus grande que sa borne supérieure"+str(PARAMETRES[i][3])
+   # verification de l'encadrement de val_init 
+   for i in range(len(PARAMETRES)):
+      if( (PARAMETRES[i][1] < PARAMETRES[i][2]) or (PARAMETRES[i][1] > PARAMETRES[i][3])):
+         txt=txt + "\nLa valeur initiale "+str(PARAMETRES[i][1])+" de "+PARAMETRES[i][0]+ " n'est pas dans l'intervalle [borne_inf,born_inf]=["+str(PARAMETRES[i][2])+" , "+str(PARAMETRES[i][3])+"]"
+   # verification que val_init !=0
+   for  i in range(len(PARAMETRES)):
+      if (PARAMETRES[i][1] == 0. ):
+         txt=txt + "\nProblème de valeurs initiales pour le paramètre "+PARAMETRES[i][0]+" : ne pas donner de valeur initiale nulle mais un ordre de grandeur."
+   # verification que borne_sup !=0
+   for  i in range(len(PARAMETRES)):
+      if (PARAMETRES[i][3] == 0. ):
+         txt=txt + "\nProblème de borne supérieure pour le paramètre "+PARAMETRES[i][0]+" : ne pas donner de valeur strictement nulle."
+   # verification que borne_inf !=0
+   for  i in range(len(PARAMETRES)):
+      if (PARAMETRES[i][2] == 0. ):
+         txt=txt + "\nProblème de borne inférieure pour le paramètre "+PARAMETRES[i][0]+" : ne pas donner de valeur strictement nulle."
+   return txt
+
+
+# ------------------------------------------------------------------------------
+def verif_UNITE(GRAPHIQUE,UNITE_RESU):
+   """
+   On vérifie que les unités de résultat et 
+   de graphique sont différentes
+   """
+   txt=""
+   if GRAPHIQUE:
+      GRAPHE_UL_OUT=GRAPHIQUE['UNITE']
+      if (GRAPHE_UL_OUT==UNITE_RESU):
+          txt=txt + "\nLes unités logiques des fichiers de résultats graphiques et de résultats d'optimisation sont les memes."
+   return txt
+
+
+# ------------------------------------------------------------------------------
+def gestion(UL,PARAMETRES,REPONSES,RESU_EXP,POIDS,GRAPHIQUE,UNITE_RESU,METHODE):
+   """
+   Cette methode va utiliser les methodes de cette classe declarée ci-dessus
+   test  est un boolean: test=0 -> pas d'erreur
+                         test=1 -> erreur détectée
+   """
+
+   texte = ""
+   texte_alarme = ""
+
+   # On vérifie d'abord si PARAMETRES, REPONSES, RESU_EXP sont bien des listes au sens python
+   # test de PARAMETRES
+   texte = texte + erreur_de_type(0,PARAMETRES)
+   # test de REPONSES
+   texte = texte + erreur_de_type(0,REPONSES)
+   # test de RESU_EXP
+   texte = texte + erreur_de_type(0,RESU_EXP) 
+   
+   # On vérifie si chaque sous liste de PARAMETRES, REPONSES,  possède le type adéquat
+   # test des sous_listes de PARAMETRES
+   for i in range(len(PARAMETRES)):
+      texte = texte +  erreur_de_type(0,PARAMETRES[i]) 
+   # test des sous_listes de REPONSES
+   for i in range(len(REPONSES)):
+      texte = texte + erreur_de_type(0,REPONSES[i])
+
+   # On verifie si la dimension de chaque sous-liste de : PARAMETRES, REPONSES
+   # il faut que: la dimension d'une sous-liste de PARAMETRES = 4
+   # et   que     la dimension d'une sous liste de REPONSES   = 3
+   texte = texte + erreur_dimension(PARAMETRES,REPONSES)
+
+   # on verifie que l'on a autant de réponses que de résultats expérimentaux
+   texte = texte + compare__dim_rep__dim_RESU_EXP(REPONSES,RESU_EXP)
+   #on verifie que l'on a autant de poids que de résultats expérimentaux
+   texte = texte + compare__dim_poids__dim_RESU_EXP(POIDS,RESU_EXP)
+
+   # on verifie les types des arguments de chaque sous liste de PARAMETRES et REPONSES
+      # verification du type stringet type float des arguments de PARAMETRES
+   for i in range(len(PARAMETRES)):
+      texte = texte + erreur_de_type(1,PARAMETRES[i][0])
+      for k in [1,2,3]:
+         texte = texte + erreur_de_type(2,PARAMETRES[i][k])
+
+   # verification du type string pour les arguments  de REPONSES
+   for i in range(len(REPONSES)):
+      for j in range(len(REPONSES[i])):
+         texte = texte + erreur_de_type(1,REPONSES[i][j])
+   
+   # verification du fichier de commandes Esclave ASTER
+   if METHODE != 'EXTERNE': # pour celui-ci le fort.UL n'est pas l'esclave... voir comment faire
+      texte_fatal, texte_alarme = verif_fichier(UL,PARAMETRES,REPONSES)
+      texte += texte_fatal
+
+   # verification des valeurs des PARAMETRES entrées par l'utilisateur (pour fmin* les bornes ne sont pas prises en compte)
+   if METHODE == 'LEVENBERG':
+      texte = texte + verif_valeurs_des_PARAMETRES(PARAMETRES)
+
+   # verification des unités logiques renseignées par l'utilisateur
+   if METHODE != 'EXTERNE':
+      texte = texte + verif_UNITE(GRAPHIQUE,UNITE_RESU)
+
+   return texte, texte_alarme
+   
diff --git a/Aster/Cata/cataSTA10/Macro/reca_evol.py b/Aster/Cata/cataSTA10/Macro/reca_evol.py
new file mode 100644 (file)
index 0000000..775a93c
--- /dev/null
@@ -0,0 +1,165 @@
+#@ MODIF reca_evol Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+#
+
+'''
+Le programme d'optimisation d'une fonctionelle base sur l'algorithm genetique,
+developpement issu du contrat PdM-AMA
+'''
+
+import numpy
+import math
+import random
+
+
+
+def evolutivo(fonc,val,nb_iter,err_min,nb_parents,nb_fils,sigma,borne_inf,borne_sup,graine):
+
+#initialisation du vecteur des parametres
+    par_ini=[]
+#les valeurs initiales des parametres sont recuperees 
+    for ind in val:
+        if ind:
+            par_ini.append(ind)
+
+#valeur du critere d arret
+    val_crit=nb_iter
+
+#initialisation et remplisage du vecteur des parents
+    Parents_ini=[]
+    for ind in range(nb_parents):
+        Parents_ini.append(par_ini)
+    #P sera le vecteur des parents retourne par la fonction figli
+    P=[]
+    erreurs=[]
+    erreurs_ini=[]
+    #le premier vecteur d erreurs sera calcule par la fonction errore
+    #a partir des valeurs initiales des parents
+    
+    # On affiche egalement la fenetre MAC pour un appariement manual
+    fonc.graph_mac=True
+    err_ini=fonc.calcul_F(par_ini)
+    #on rempli l'erreur pour chaque parent initial
+    for ind in range(nb_parents):
+        erreurs_ini.append(err_ini)
+    P.append(Parents_ini)
+    erreurs.append(erreurs_ini[:])
+    in_ciclo=True
+    iter=1
+    #ici on demarre la boucle de minimisation de la fonction erreur
+    while in_ciclo:
+        if graine != None: random.seed(graine)
+        F=fils(P[-1],nb_parents,nb_fils,sigma,borne_inf, borne_sup)
+
+        #on fait la selection des meilleurs fils - p
+        (p,err)=selection(fonc,F,P[-1],erreurs[-1],nb_parents)
+
+        #P est le nouveau jeu de parents
+        #attention on stocke ici tous l historique des parents et c'est le meme pour les erreurs dans erreurs
+        P.append(p)
+
+        erreurs.append(err)
+        #on lance un calcul avec le meilleur jeu de parametres juste pour l'appariement des MAC
+        fonc.graph_mac=True
+        err_mac=fonc.calcul_F(P[-1][0])
+        if erreurs[-1][0]<=err_min:
+            in_ciclo=False
+        iter+=1
+        if iter>val_crit:
+            in_ciclo=False
+
+    return P[-1][0]
+
+
+
+def selection(fonc,fils,parents,err_parents,nb_parents):
+  
+    """
+    Selection des meilleurs fils a chaque iteration
+    """           
+       
+    famille=[]
+    err=[]
+    for ind in fils:        
+        fonc.graph_mac=False
+        err.append(fonc.calcul_F(ind))      
+    for ind in err_parents:
+        err.append(ind)
+    for ind in fils:
+        famille.append(ind)
+    for ind in parents:
+        famille.append(ind)
+
+    ordre=numpy.argsort(err).tolist()
+    fam_ordonne=[]
+    err_ordonne=[]
+    for ind in ordre:
+        fam_ordonne.append(famille[ind])
+        err_ordonne.append(err[ind])
+              
+    return fam_ordonne[0:int(nb_parents)], err_ordonne[0:int(nb_parents)]
+
+
+
+def fils(parents,nb_parents,nb_fils,sigma,borne_inf, borne_sup):
+    """
+    Creation des fils
+    """
+
+    F=[]
+    for ind in range(int(math.floor(nb_fils/nb_parents))):
+        for ind2 in range(nb_parents):
+            F.append(genere_fils(parents[ind2],sigma,borne_inf, borne_sup))
+#le dernier parent est le plus prolific car il va completer le nombres de fils
+#mais il est aussi le meilleur parent car correspond a l'erreur minimale            
+    for ind2 in range(nb_fils%nb_parents):
+        F.append(genere_fils(parents[ind2],sigma,borne_inf, borne_sup))
+        
+    return F
+
+#les fils sont generes ici            
+def genere_fils(parent,sigma,borne_inf, borne_sup):  
+
+    """
+    Creation d'un seul fils avec prise en compte des bornes
+    """
+    errate=True
+    while errate:
+        errate=False
+#F est le vecteur de fils a remplir ici avec la fonction random 
+#a partir des valeurs du parent courant
+        F=[]
+        for ind in parent:
+            F.append(ind+ind/100.*random.gauss(0,sigma))
+#la variable parametre initialise ici est un index pour defiler les valeurs de F
+        parametre=0
+        for ind in parent:
+            test1=F[parametre]>=borne_inf[parametre]
+            test2=F[parametre]<=borne_sup[parametre]
+            if test1 & test2:
+                pass
+            else:
+                errate=True
+#                print "parametre hors bornes"
+            parametre+=1            
+#        print 'fils genere:',F            
+    return F
+
diff --git a/Aster/Cata/cataSTA10/Macro/reca_graphique.py b/Aster/Cata/cataSTA10/Macro/reca_graphique.py
new file mode 100644 (file)
index 0000000..21d6ce7
--- /dev/null
@@ -0,0 +1,91 @@
+#@ MODIF reca_graphique Macro  DATE 22/04/2010   AUTEUR ASSIRE A.ASSIRE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import string, copy, Numeric, types
+import Cata
+from Cata.cata import DEFI_FICHIER, IMPR_FONCTION
+from Accas import _F
+
+try:
+  import Gnuplot
+except:
+  pass
+
+
+#_____________________________________________
+#
+# IMPRESSIONS GRAPHIQUES
+#_____________________________________________
+
+def graphique(FORMAT, L_F, res_exp, reponses, iter, UL_out, interactif):
+
+   if FORMAT=='XMGRACE':
+       for i in range(len(L_F)):
+           _tmp = []
+           courbe1 = res_exp[i]
+           _tmp.append( { 'ABSCISSE': courbe1[:,0].tolist(), 'ORDONNEE': courbe1[:,1].tolist(), 'COULEUR': 1 } )
+           courbe2 = L_F[i]
+           _tmp.append( { 'ABSCISSE': courbe2[:,0].tolist(), 'ORDONNEE': courbe2[:,1].tolist(), 'COULEUR': 2 } )
+
+           motscle2= {'COURBE': _tmp }
+           if interactif: motscle2['PILOTE']= 'INTERACTIF'
+           else:          motscle2['PILOTE']= 'POSTSCRIPT'
+
+#           DEFI_FICHIER(UNITE=int(UL_out), ACCES='NEW',)
+
+           IMPR_FONCTION(FORMAT='XMGRACE',
+                         UNITE=int(UL_out),
+                         TITRE='Courbe de : ' + reponses[i][0],
+                         SOUS_TITRE='Iteration : ' + str(iter),
+                         LEGENDE_X=reponses[i][1],
+                         LEGENDE_Y=reponses[i][2],
+                         **motscle2
+                         );
+#           DEFI_FICHIER(ACTION='LIBERER',UNITE=int(UL_out),)
+
+   elif FORMAT=='GNUPLOT':
+       graphe=[]
+       impr=Gnuplot.Gnuplot()
+       Gnuplot.GnuplotOpts.prefer_inline_data=1
+       impr('set data style linespoints')
+       impr('set grid')
+       impr('set pointsize 2.')
+       impr('set terminal postscript color')
+       impr('set output "fort.'+str(UL_out)+'"')
+
+       for i in range(len(L_F)):
+             if interactif:
+                graphe.append(Gnuplot.Gnuplot(persist=0))
+                graphe[i]('set data style linespoints')
+                graphe[i]('set grid')
+                graphe[i]('set pointsize 2.')
+                graphe[i].xlabel(reponses[i][1])
+                graphe[i].ylabel(reponses[i][2])
+                graphe[i].title(reponses[i][0]+'  Iteration '+str(iter))
+                graphe[i].plot(Gnuplot.Data(L_F[i],title='Calcul'),Gnuplot.Data(res_exp[i],title='Experimental'))
+                graphe[i]('pause 5')
+
+             impr.xlabel(reponses[i][1])
+             impr.ylabel(reponses[i][2])
+             impr.title(reponses[i][0]+'  Iteration '+str(iter))
+             impr.plot(Gnuplot.Data(L_F[i],title='Calcul'),Gnuplot.Data(res_exp[i],title='Experimental'))
+
+   else:
+     pass
diff --git a/Aster/Cata/cataSTA10/Macro/reca_interp.py b/Aster/Cata/cataSTA10/Macro/reca_interp.py
new file mode 100644 (file)
index 0000000..dfada4e
--- /dev/null
@@ -0,0 +1,186 @@
+#@ MODIF reca_interp Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE ASSIRE A.ASSIRE
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import os
+import numpy as NP
+
+from Utilitai.Utmess import UTMESS
+
+
+#===========================================================================================
+
+# INTERPOLATION, ETC....
+
+#--------------------------------------
+class Sim_exp :
+
+   def __init__ (self,result_exp,poids) :
+      self.resu_exp = result_exp
+      self.poids = poids
+
+   # ------------------------------------------------------------------------------
+   def InterpolationLineaire (self, x0, points) :
+      """
+          Interpolation Lineaire de x0 sur la fonction discrétisée yi=points(xi) i=1,..,n
+      """
+      # x0     = Une abscisse        (1 colonne, 1 ligne)
+      # points = Tableau de n points (2 colonnes, n lignes)
+      # on suppose qu'il existe au moins 2 points, 
+      # et que les points sont classés selon les abscisses croissantes
+
+      n = len(points)
+      if ( x0 < points[0][0] ) or ( x0 > points[n-1][0] ) :
+        UTMESS('F','RECAL0_48', valk=(str(x0), str(points[0][0]), str(points[n-1][0])))
+
+      i = 1
+      while x0 > points[i][0]:
+         i = i+1
+
+      y0 = (x0-points[i-1][0]) * (points[i][1]-points[i-1][1]) / (points[i][0]-points[i-1][0]) + points[i-1][1]
+
+      return y0
+
+
+
+
+   # ------------------------------------------------------------------------------
+   def DistVertAdimPointLigneBrisee (self, M, points) :
+      """
+          Distance verticale d'un point M à une ligne brisée composée de n points
+      """
+      # M      = Point               (2 colonnes, 1 ligne)
+      # points = Tableau de n points (2 colonnes, n lignes)
+      # on suppose qu'il existe au moins 2 points, 
+      # et que les points sont classés selon les abscisses croissantes
+      n = len(points)
+      if ( M[0] < points[0][0] ) or ( M[0] > points[n-1][0] ):
+        return 0.
+      i = 1
+      while M[0] > points[i][0]:
+         i = i+1
+      y_proj_vert = (M[0]-points[i-1][0]) * (points[i][1]-points[i-1][1]) / (points[i][0]-points[i-1][0]) + points[i-1][1]  
+      d = (M[1] - y_proj_vert)
+           # Attention: la distance n'est pas normalisée
+           # Attention: problème si points[0][0] = points[1][0] = M[0]
+           # Attention: problème si M[1] = 0
+      return d
+
+
+   # ------------------------------------------------------------------------------
+   def _Interpole(self, F_calc,experience,poids) :   #ici on passe en argument "une" experience
+      """
+         La Fonction Interpole interpole une et une seule F_calc sur F_exp et renvoie l'erreur seulement
+      """
+      n = 0
+      resu_num = F_calc
+      n_exp = len(experience)    # nombre de points sur la courbe expérimentale num.i    
+      stockage = NP.ones(n_exp)     # matrice de stockage des erreurs en chaque point
+      for j in xrange(n_exp) :
+         d = self.DistVertAdimPointLigneBrisee(experience[j], resu_num)
+         if NP.all(experience[j][1] != 0.):
+            stockage[n] = d/experience[j][1]
+         else:
+            stockage[n] = d
+
+         n = n + 1         # on totalise le nombre de points valables
+      err = NP.ones(n, dtype=float) 
+
+      for i in xrange(n) :
+          err[i] = poids*stockage[i]
+      return  err
+
+
+   # ------------------------------------------------------------------------------
+   def multi_interpole(self, L_F, reponses):
+      """
+         Cette fonction appelle la fonction interpole et retourne les sous-fonctionnelles J et l'erreur.
+         On interpole toutes les reponses une à une en appelant la methode interpole.
+      """
+
+      L_erreur=[]
+      for i in range(len(reponses)):
+         err = self._Interpole(L_F[i],self.resu_exp[i],self.poids[i])
+         L_erreur.append(err)
+
+      # On transforme L_erreur en tab num
+      dim=[]
+      J=[]
+      for i in range(len(L_erreur)):
+         dim.append(len(L_erreur[i]))
+      dim_totale = NP.sum(dim)
+      L_J = self.calcul_J(L_erreur)
+      a=0
+      erreur = NP.zeros((dim_totale))
+      for n in range(len(L_erreur)):
+         for i in range(dim[n]):
+            erreur[i+a] = L_erreur[n][i]
+         a = dim[n]
+      del(L_erreur) #on vide la liste puisqu'on n'en a plus besoin
+
+      return L_J,erreur
+
+
+   # ------------------------------------------------------------------------------
+   def multi_interpole_sensib(self, L_F, reponses):    
+      """
+         Cette fonction retourne seulement l'erreur, elle est appelée dans la methode sensibilité.
+         On interpole toutes les reponses une à une en appelant la methode interpole.
+      """
+
+      L_erreur=[]
+      for i in range(len(reponses)):   
+         err = self._Interpole(L_F[i], self.resu_exp[i], self.poids[i])
+         L_erreur.append(err)
+      # On transforme L_erreur en tab num
+      return L_erreur
+       
+
+   # ------------------------------------------------------------------------------
+   def calcul_J(self, L_erreur):
+      L_J = []
+      for i in range(len(L_erreur)):
+         total = 0
+         for j in range(len(L_erreur[i])):
+            total = total + L_erreur[i][j]**2
+         L_J.append(total)
+      return L_J
+
+
+   # ------------------------------------------------------------------------------
+   def norme_J(self, L_J_init, L_J, unite_resu=None):
+      """
+         Cette fonction calcul une valeur normée de J
+      """
+      for i in range(len(L_J)):
+         if NP.all(L_J_init[i] != 0.):
+            L_J[i] = L_J[i]/L_J_init[i]
+         else:
+            if unite_resu:
+               fic=open(os.getcwd()+'/fort.'+str(unite_resu),'a')
+               fic.write(message)
+               fic.close()
+            UTMESS('F', "RECAL0_44", valr=L_J_init)
+            return
+
+      J = NP.sum(L_J)
+      J = J/len(L_J)
+      return J
+
diff --git a/Aster/Cata/cataSTA10/Macro/reca_mac.py b/Aster/Cata/cataSTA10/Macro/reca_mac.py
new file mode 100644 (file)
index 0000000..f7bf786
--- /dev/null
@@ -0,0 +1,129 @@
+#@ MODIF reca_mac Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+'''
+On regroupe ici les fonctions Python necessaires au lancement
+de la fenetre graphique d'appariement manuel des MAC pour le 
+recalage en dynamique
+'''
+import numpy as NP
+
+from Tkinter import Tk, Frame, StringVar, Entry, Label, Button
+from Meidee.modes import MacWindowFrame
+
+def extract_mac_array( mac_mode ):
+
+    data1 = mac_mode.EXTR_TABLE().Array('NUME_MODE_1','MAC')
+    data2 = mac_mode.EXTR_TABLE().Array('NUME_MODE_2','MAC')
+
+    N = int(NP.maximum.reduce(data1[:,0]))
+    M = int(NP.maximum.reduce(data2[:,0]))
+    mac = NP.zeros( (N,M) )
+    for i in range(data1.shape[0]):
+        i1 = int(data1[i,0])-1
+        i2 = int(data2[i,0])-1
+        mac[ i1, i2 ] = data1[i,1]
+    return mac
+
+
+def get_modes(resu):
+    
+    afreq  = resu.LIST_PARA()['FREQ']
+
+    return afreq
+    
+    
+class fenetre_mac:
+
+    def __init__(self,resu1,resu2,mac):
+        self.resu1 = resu1
+        self.resu2 = resu2
+        self.mac = mac
+        self.root = Tk()
+
+        nom1 = resu1.nom
+        nom2 = resu2.nom
+        titre = "MAC pour la base " + nom1 + " et " + nom2
+        size = (20,300)
+
+        # la fenetre de MAC
+        mac_win = MacWindowFrame( self.root, titre, nom1, nom2, size)
+        mac_win.grid(row=0,column=0)
+
+        self.freq1 = get_modes(resu1)
+        self.freq2 = get_modes(resu2)
+        # la variable NUMERIQUE qui contient ces memes listes. On remplit
+        # ces valeurs quand on ferme la fenetre
+        self.l1 = None
+        self.l2 = None
+        # la variable GRAPHIQUE qui donne le contenu des listes
+        self.var_l1 = StringVar()
+        self.var_l2 = StringVar()
+
+        mac_win.set_modes(self.freq1,self.freq2,self.mac)
+
+        # Une deuxieme fentre, dans laquelle on peut modifier l'appariement des modes
+        f = Frame(self.root)
+        f.grid(row=1, column=0,sticky='news')
+        f.columnconfigure(0,weight=1)
+        f.columnconfigure(1,weight=4)
+        
+        Label(f,text="Liste de mode 1").grid(row=0,column=0,sticky='e')
+        l1 = Entry(f, textvariable=self.var_l1 )
+        l1.grid(row=0,column=1,sticky='ew')#,columnspan=3)
+        Label(f,text="Liste de mode 2").grid(row=1,column=0,sticky='e')
+        l2 = Entry(f, textvariable=self.var_l2 )
+        l2.grid(row=1,column=1,sticky='ew')#,columnspan=3)
+        close = Button(f,text='Fermer',command=self.close_win)
+
+        close.grid(row=2,column=1,sticky='e')
+
+        self.set_default_pair()
+        
+        self.root.mainloop()
+
+    def get_pair(self):
+        """rend une double liste donnant les appariements de modes"""
+        return [self.var_l1.get(),self.var_l2.get()]
+
+    def set_pair(self,liste):
+        """affiche une liste d'appariement donnee"""
+        self.var_l1.set(liste[0])
+        self.var_l2.set(liste[1])
+
+    def set_default_pair(self):
+        """ affiche la liste d'appariement par defaut. Le nombre de modes
+            correspond au plus petit nombre de modes entre resu1 et resu2"""
+        nb_mod = min(len(self.freq1),len(self.freq2))
+        self.var_l1.set(range(1,nb_mod+1))
+        self.var_l2.set(range(1,nb_mod+1))
+
+    def close_win(self):
+        self.l1 = self.var_l1.get()
+        self.l2 = self.var_l2.get()
+        self.root.quit()
+
+
+    def get_list(self):
+        exec('l1='+self.l1)
+        exec('l2='+self.l2)
+        return l1,l2
+
+
+
diff --git a/Aster/Cata/cataSTA10/Macro/reca_message.py b/Aster/Cata/cataSTA10/Macro/reca_message.py
new file mode 100644 (file)
index 0000000..4c362ef
--- /dev/null
@@ -0,0 +1,149 @@
+#@ MODIF reca_message Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE ASSIRE A.ASSIRE
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import os
+import numpy as NP
+from Utilitai.Utmess import UTMESS, MessageLog
+from recal import Affiche_Param
+#===========================================================================================
+
+
+# AFFICHAGE DES MESSAGES
+
+class Message :
+   """
+       classe gérant l'affichage des messages concernant le déroulement de l'optmisation
+   """
+
+   # ------------------------------------------------------------------------------
+   def __init__(self,para,val_init,resu_exp,ul_out):
+      self.nom_para = para
+      self.resu_exp = resu_exp
+      self.val_init = val_init
+      self.resu_exp = resu_exp
+      self.ul_out   = ul_out
+
+      
+   # ------------------------------------------------------------------------------
+   def get_filename(self):
+      return os.getcwd()+'/fort.'+str(self.ul_out)
+   
+   
+   # ------------------------------------------------------------------------------
+   def initialise(self):
+      """ Initialisation du fichier """
+      UTMESS('I','RECAL0_1', cc=self.get_filename())
+
+
+   # ------------------------------------------------------------------------------
+   def affiche_valeurs(self,val):
+      """ Affichage de la valeur des parametres """
+      txt = Affiche_Param(self.nom_para, val)
+      UTMESS('I','RECAL0_32', valk=txt, cc=self.get_filename())
+
+
+   # ------------------------------------------------------------------------------
+   def affiche_fonctionnelle(self,J):
+      """ Affichage de la fonctionnelle  """
+      UTMESS('I','RECAL0_33', valr=J, cc=self.get_filename())
+
+
+   # ------------------------------------------------------------------------------
+   def affiche_result_iter(self, iter, J, val, residu, Act=[], ecart_para=None, ecart_fonc=None):
+      """ Affichage du message recapitulatif de l'iteration
+      """
+      UTMESS('I','RECAL0_30')
+      UTMESS('I','RECAL0_79', cc=self.get_filename())
+      UTMESS('I','RECAL0_31', vali=iter, cc=self.get_filename())
+      self.affiche_fonctionnelle(J)
+      UTMESS('I','RECAL0_34', valr=residu, cc=self.get_filename())
+      if ecart_para: UTMESS('I','RECAL0_37', valr=ecart_para, cc=self.get_filename())
+      if ecart_fonc: UTMESS('I','RECAL0_38', valr=ecart_fonc, cc=self.get_filename())
+
+      # Affichage des parametres
+      self.affiche_valeurs(val)
+
+      # Si les parametres sont en butee
+      if (len(Act)!=0):
+         lpara = ' '.join([self.nom_para[i] for i in Act])
+         if (len(Act)==1):
+            UTMESS('I','RECAL0_46', valk=lpara, cc=self.get_filename())
+         else:
+            UTMESS('I','RECAL0_47', valk=lpara, cc=self.get_filename())
+
+      UTMESS('I','RECAL0_80', cc=self.get_filename())
+
+
+   # ------------------------------------------------------------------------------
+   def affiche_etat_final_convergence(self,iter,max_iter,iter_fonc,max_iter_fonc,prec,residu,Act=[]):
+      """ Affichage du message recapitulatif a la fin du processus d'optimisation
+      """
+      if ((iter < max_iter) and (residu <= prec) and (iter_fonc < max_iter_fonc) ):
+         UTMESS('I','RECAL0_56', cc=self.get_filename())
+         if (len(Act)!=0):                UTMESS('I','RECAL0_58', cc=self.get_filename())
+      else:
+         UTMESS('I','RECAL0_57', cc=self.get_filename())
+         if (iter >= max_iter):           UTMESS('I','RECAL0_55', cc=self.get_filename())
+         if (iter_fonc >= max_iter_fonc): UTMESS('I','RECAL0_54', cc=self.get_filename())
+
+      UTMESS('I','RECAL0_80', cc=self.get_filename())
+
+
+   # ------------------------------------------------------------------------------
+   def affiche_calcul_etat_final(self,para,Hessien,valeurs_propres,vecteurs_propres,sensible,insensible):
+      """ Affichage des informations de l'optimisation (valeurs propres, vecteurs propres, etc.)
+      """
+      UTMESS('I','RECAL0_60', valk=str(valeurs_propres), cc=self.get_filename())
+      UTMESS('I','RECAL0_61', valk=str(vecteurs_propres), cc=self.get_filename())
+      UTMESS('I','RECAL0_62', cc=self.get_filename())
+
+      if (len(sensible)!=0 or len(insensible)!=0):
+         UTMESS('I','RECAL0_63', cc=self.get_filename())
+
+      # Parametres sensibles
+      if (len(sensible)!=0):
+         UTMESS('I','RECAL0_64', cc=self.get_filename())
+         k=0
+         for i in sensible:
+            k=k+1
+            colonne=vecteurs_propres[:,i]
+            numero=NP.nonzero(NP.greater(abs(colonne/max(abs(colonne))),1.E-1))[0]
+            txt = '\n   '+str(k)+') '
+            for j in numero:
+               txt += '%+3.1E ' %colonne[j]+'* '+para[j]+' '
+            UTMESS('I','RECAL0_65', valk=(txt, str(valeurs_propres[i])), cc=self.get_filename())
+
+      # Parametres insensibles
+      if (len(insensible)!=0):
+         UTMESS('I','RECAL0_66', cc=self.get_filename())
+         k=0
+         for i in insensible:
+            k=k+1
+            colonne=vecteurs_propres[:,i]
+            numero=NP.nonzero(NP.greater(abs(colonne/max(abs(colonne))),1.E-1))[0]
+            txt = '\n   '+str(k)+') '
+            for j in numero:
+               txt += '%+3.1E ' %colonne[j]+'* '+para[j]+' '
+            UTMESS('I','RECAL0_65', valk=(txt, str(valeurs_propres[i])), cc=self.get_filename())
+
+      if (len(sensible)!=0 or len(insensible)!=0):
+         UTMESS('I','RECAL0_62', cc=self.get_filename())
+
diff --git a/Aster/Cata/cataSTA10/Macro/reca_utilitaires.py b/Aster/Cata/cataSTA10/Macro/reca_utilitaires.py
new file mode 100644 (file)
index 0000000..c0b6a23
--- /dev/null
@@ -0,0 +1,245 @@
+#@ MODIF reca_utilitaires Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE ASSIRE A.ASSIRE
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import copy
+import os
+import string
+import types
+import sys
+import glob
+
+import numpy as NP
+
+try:    import Gnuplot
+except: pass
+
+try:
+   import aster
+   CPU_Exception = aster.ArretCPUError
+   from Cata.cata import INFO_EXEC_ASTER, DEFI_FICHIER, IMPR_FONCTION, DETRUIRE
+   from Accas import _F
+   from Utilitai.Utmess import UTMESS, MessageLog
+except:
+   CPU_Exception = StandardError
+
+
+# ------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
+
+#_____________________________________________
+#
+# DIVERS UTILITAIRES POUR LA MACRO
+#_____________________________________________
+
+
+def transforme_list_Num(parametres,res_exp):
+   """
+      Transforme les données entrées par l'utilisateur en tableau numpy
+   """
+
+   dim_para = len(parametres)  #donne le nb de parametres
+   val_para = NP.zeros(dim_para)
+   borne_inf = NP.zeros(dim_para)
+   borne_sup = NP.zeros(dim_para)
+   para = []
+   for i in range(dim_para):
+      para.append(parametres[i][0])
+      val_para[i] = parametres[i][1]
+      borne_inf[i] = parametres[i][2]
+      borne_sup[i] = parametres[i][3]
+   return para,val_para,borne_inf,borne_sup
+
+
+# ------------------------------------------------------------------------------
+
+def mes_concepts(list_concepts=[],base=None):
+   """
+      Fonction qui liste les concepts créés
+   """
+   for e in base.etapes:
+      if e.nom in ('INCLUDE','MACR_RECAL',) :
+        list_concepts=list(mes_concepts(list_concepts=list_concepts,base=e))
+      elif (e.sd != None) and (e.parent.nom=='INCLUDE') :
+        nom_concept=e.sd.get_name()
+        if not(nom_concept in list_concepts):
+          list_concepts.append( nom_concept )
+   return tuple(list_concepts)
+
+
+# ------------------------------------------------------------------------------
+
+def detr_concepts(self):
+   """
+      Fonction qui detruit les concepts créés
+   """
+   liste_concepts=mes_concepts(base=self.parent)
+   for e in liste_concepts:
+      nom = string.strip(e)
+      DETRUIRE( OBJET =self.g_context['_F'](CHAINE = nom), INFO=1, ALARME='NON')
+      if self.jdc.g_context.has_key(nom) : del self.jdc.g_context[nom]
+   del(liste_concepts)
+
+
+# ------------------------------------------------------------------------------
+def Random_Tmp_Name(prefix=None):
+   crit = False
+   while crit == False:
+      nombre = int(random.random()*10000000)
+      if prefix: fic = prefix + str(nombre)
+      else:
+         if os.environ.has_key('TEMP'): fic = os.path.join( os.environ['TEMP'], 'file%s' % str(nombre) )
+         else:                          fic = '/tmp/file' + str(nombre)
+      if not os.path.isfile(fic): crit = True
+   return fic
+
+
+
+
+#_____________________________________________
+#
+# CALCUL DU TEMPS CPU RESTANT
+#_____________________________________________
+
+
+def temps_CPU(restant_old,temps_iter_old):
+   """
+      Fonction controlant le temps CPU restant
+   """
+   CPU=INFO_EXEC_ASTER(LISTE_INFO = ("CPU_RESTANT",))
+   TEMPS=CPU['CPU_RESTANT',1]
+   DETRUIRE(CONCEPT=_F(NOM=CPU),INFO=1)
+   err=0
+   # Indique une execution interactive
+   if (TEMPS>1.E+9):
+     return 0.,0.,0
+   # Indique une execution en batch
+   else:
+      restant=TEMPS
+      # Initialisation
+      if (restant_old==0.):
+         temps_iter=-1.
+      else:
+         # Première mesure
+         if (temps_iter_old==-1.):
+            temps_iter=(restant_old-restant)
+         # Mesure courante
+         else:
+            temps_iter=(temps_iter_old + (restant_old-restant))/2.
+         if ((temps_iter>0.96*restant)or(restant<0.)):
+            err=1
+            msg = MessageLog.GetText('F', 'RECAL0_53')
+            raise CPU_Exception, msg
+
+   return restant,temps_iter,err
+
+
+
+
+#_____________________________________________
+#
+# IMPRESSIONS GRAPHIQUES
+#_____________________________________________
+
+
+def graphique(FORMAT, L_F, res_exp, reponses, iter, UL_out, pilote, fichier=None, INFO=0):
+
+  if iter: txt_iter = 'Iteration : ' + str(iter)
+  else:    txt_iter = ''
+
+  # Le try/except est la pour eviter de planter betement dans un trace de courbes (DISPLAY non defini, etc...)
+  try:
+     if FORMAT=='XMGRACE':
+         for i in range(len(L_F)):
+             _tmp = []
+             courbe1 = res_exp[i]
+             _tmp.append( { 'ABSCISSE': courbe1[:,0].tolist(), 'ORDONNEE': courbe1[:,1].tolist(), 'COULEUR': 1, 'LEGENDE' : 'Expérience'} )
+             courbe2 = L_F[i]
+             _tmp.append( { 'ABSCISSE': courbe2[:,0].tolist(), 'ORDONNEE': courbe2[:,1].tolist(), 'COULEUR': 2, 'LEGENDE' : 'Calcul'} )
+
+             motscle2= {'COURBE': _tmp }
+             motscle2['PILOTE']= pilote
+
+             IMPR_FONCTION(FORMAT='XMGRACE',
+                           UNITE=int(UL_out),
+                           TITRE='Courbe : ' + reponses[i][0],
+                           SOUS_TITRE=txt_iter,
+                           LEGENDE_X=reponses[i][1],
+                           LEGENDE_Y=reponses[i][2],
+                           **motscle2
+                           );
+             dic = {''           : '',
+                    'POSTSCRIPT' : '.ps',
+                    'EPS'        : '.eps',
+                    'MIF'        : '.mif',
+                    'SVG'        : '.svg',
+                    'PNM'        : '.pnm',
+                    'PNG'        : '.png',
+                    'JPEG'       : '.jpg',
+                    'PDF'        : '.pdf', 
+                    'INTERACTIF' : '.agr'
+                    }
+             ext = dic[pilote]
+             if ext!='':
+               os.system('mv ./fort.%s ./REPE_OUT/courbes_%s_iter_%s%s' % (str(UL_out), reponses[i][0], str(iter), ext ) )
+
+     elif FORMAT=='GNUPLOT':
+
+         if fichier:
+            if INFO>=2: UTMESS('I','RECAL0_41',valk=fichier )
+            # On efface les anciens graphes
+            liste = glob.glob(fichier + '*.ps')
+            for fic in liste:
+               try:    os.remove(fic)
+               except: pass
+
+         graphe=[]
+         impr=Gnuplot.Gnuplot()
+         Gnuplot.GnuplotOpts.prefer_inline_data=1
+         impr('set data style linespoints')
+         impr('set grid')
+         impr('set pointsize 1.')
+         impr('set terminal postscript color')
+         impr('set output "fort.'+str(UL_out)+'"')
+
+         for i in range(len(L_F)):
+               graphe.append(Gnuplot.Gnuplot(persist=0))
+               graphe[i]('set data style linespoints')
+               graphe[i]('set grid')
+               graphe[i]('set pointsize 1.')
+               graphe[i].xlabel(reponses[i][1])
+               graphe[i].ylabel(reponses[i][2])
+               graphe[i].title(reponses[i][0]+'  ' + txt_iter)
+               graphe[i].plot(Gnuplot.Data(L_F[i],title='Calcul'),Gnuplot.Data(res_exp[i],title='Experimental'))
+               if pilote=='INTERACTIF':
+                  graphe[i]('pause 5')
+               else:
+                  if fichier:
+                     if INFO>=2: UTMESS('I','RECAL0_41',valk=fichier + '_' + str(i) + '.ps' )
+                     graphe[i].hardcopy(fichier + '_' + str(i) + '.ps', enhanced=1, color=1)
+
+               impr.xlabel(reponses[i][1])
+               impr.ylabel(reponses[i][2])
+               impr.title(reponses[i][0]+'  Iteration '+str(iter))
+               impr.plot(Gnuplot.Data(L_F[i],title='Calcul'),Gnuplot.Data(res_exp[i],title='Experimental'))
+
+  except Exception, err:
+     UTMESS('A','RECAL0_42',valk=str(err) )
+
diff --git a/Aster/Cata/cataSTA10/Macro/recal.py b/Aster/Cata/cataSTA10/Macro/recal.py
new file mode 100644 (file)
index 0000000..a9d9fd5
--- /dev/null
@@ -0,0 +1,1485 @@
+#@ MODIF recal Macro  DATE 26/05/2010   AUTEUR ASSIRE A.ASSIRE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+
+#___________________________________________________________________________
+#
+#           MODULE DE CALCUL DISTRIBUE POUR MACR_RECAL
+# 
+#  Utilisable en mode EXTERNE, voir les flags avec "python recal.py -h"
+#___________________________________________________________________________
+
+
+import os
+import sys
+import shutil
+import tempfile
+import glob
+import math
+import copy
+import re
+import platform
+from math import log10
+
+import numpy as NP
+
+
+# Importation de commandes Aster
+try:
+   import aster
+   import Macro
+   from Accas import _F
+except ImportError:
+   pass
+
+include_pattern = "# -->INCLUDE<--"
+debug = False
+
+# -------------------------------------------------------------------------------
+# -------------------------------------------------------------------------------
+def get_absolute_path(path):
+   """Retourne le chemin absolu en suivant les liens éventuels.
+   """
+   if os.path.islink(path):
+      path = os.path.realpath(path)
+   res = os.path.normpath(os.path.abspath(path))
+   return res
+
+# -------------------------------------------------------------------------------
+#if os.environ.has_key('bibpytdir'): sys.path.append( os.environ['bibpytdir'] )
+
+# recupere "bibpyt" à partir de "bibpyt/Macro/recal.py"
+sys.path.append(get_absolute_path(os.path.join(sys.argv[0], '..', '..')))
+
+try:
+   from Utilitai.Utmess import UTMESS
+except:
+   def UTMESS(code='I', txt='',valk='', vali='', valr=''):
+       print txt, valk, vali, valr
+       if code=='F': sys.exit()
+
+
+# # -------------------------------------------------------------------------------
+# def find_parameter(content, param):
+#    """
+#    Return the lowest index in content where param is found and
+#    the index of the end of the command.
+#    """
+#    pos, endpos = -1, -1
+#    re_start = re.compile('^ *%s *\=' % re.escape(param), re.M)
+#    mat_start = re_start.search(content)
+#    if mat_start is not None:
+#       pos = mat_start.start()
+#       endpos = search_enclosed(content, pos)
+#    return pos, endpos
+
+
+
+# -------------------------------------------------------------------------------
+def find_parameter(content, param):
+    """
+    Supprime les parametres du fichier de commande
+    """
+    re_start = re.compile('^ *%s *\=' % re.escape(param), re.M)
+    l=[]
+    for line in content.split('\n'):
+       mat_start = re_start.search(line)
+       if mat_start is None: l.append(line)
+    return '\n'.join(l)
+
+
+# -------------------------------------------------------------------------------
+def Affiche_Param(para, val):
+    """Affiche les parametres
+    """
+    t = []
+    for p, v in zip(para, val):
+        t.append( "     %s : %s" % ( p.ljust(9), v) )
+    return '\n'.join(t)
+
+
+# -------------------------------------------------------------------------------
+def make_include_files(UNITE_INCLUDE, calcul, parametres):
+   """  Module permettant de generer les fichiers a inclure (mode INCLUSION)
+   """
+
+#    # Importation de commandes Aster
+#    try:
+#       import aster
+#       import Macro
+#       from Accas import _F
+#       from Cata.cata import *
+#    except ImportError:
+#       raise "Le mode INCLUSION doit etre lance depuis Aster"
+
+   try:
+       ASTER_ROOT = os.path.join(aster.repout, '..')
+       sys.path.append(os.path.join(ASTER_ROOT, 'ASTK', 'ASTK_SERV', 'lib'))
+       sys.path.append(os.path.join(ASTER_ROOT, 'lib', 'python%s.%s' % (sys.version_info[0], sys.version_info[1] ) , 'site-packages'))
+   except: pass
+   try:
+       from asrun.utils import find_command, search_enclosed
+   except Exception, e:
+       print e
+       UTMESS('F','RECAL0_99')
+
+
+   # ----------------------------------------------------------------------------
+   # Preparation des fichiers
+   # ----------------------------------------------------------------------------
+   liste_reponses = []
+   for reponse in [ x[0] for x in calcul ]:
+      if not reponse in liste_reponses: liste_reponses.append(reponse)
+
+   try:
+       old = "fort.%s"     % UNITE_INCLUDE
+       pre = "fort.%s.pre" % UNITE_INCLUDE
+       new = "fort.%s.new" % UNITE_INCLUDE
+
+       # Lecture du fichier
+       f=open(old, 'r')
+       newtxt = f.read()
+       f.close()
+
+       # On retire la commande DEBUT
+       pos, endpos = find_command(newtxt, "DEBUT")
+       if endpos!=-1: newtxt = newtxt[endpos+1:]
+       if newtxt[0]==';': newtxt = newtxt[1:]  # Bug dans find_command si la commande se termine par un ";"
+
+       # On retire les parametres
+       list_params = [x[0] for x in parametres]
+       for param in list_params:
+           newtxt = find_parameter(newtxt, param)
+
+       # Isole la partie a inclure si elle est specifiee
+       n = newtxt.find(include_pattern)
+       pretxt = None
+       if n!=-1:
+           pretxt = newtxt[:n]
+           pretxt = "# -*- coding: iso-8859-1 -*-\n" + pretxt
+           # Ecriture du nouveau fichier
+           fw=open(pre, 'w')
+           fw.write(pretxt)
+           fw.close()
+           newtxt = newtxt[n+len(include_pattern):]
+
+       # Retire la commande FIN
+       pos, endpos = find_command(newtxt, "FIN")
+       if pos!=-1: newtxt = newtxt[:pos]
+
+       # Ajoute un global pour ramener les courbes dans l'espace Aster
+       newtxt = "global %s\n" % ','.join(liste_reponses) + newtxt
+
+       # Ajoute un encodage pour eviter les erreurs dues aux accents (ssna110a par exemple)
+       newtxt = "# -*- coding: iso-8859-1 -*-\n" + newtxt
+
+       # Ecriture du nouveau fichier
+       fw=open(new, 'w')
+       fw.write(newtxt)
+       fw.close()
+   except Exception, e:
+       raise e
+
+   return
+
+
+# -------------------------------------------------------------------------------
+def mes_concepts(list_concepts=[],base=None):
+   """ Fonction qui liste les concepts créés """
+   for e in base.etapes:
+      if e.nom in ('INCLUDE','MACR_RECAL',) :
+         list_concepts=list(mes_concepts(list_concepts=list_concepts,base=e))
+      elif (e.sd != None) and (e.parent.nom=='INCLUDE') :
+         nom_concept=e.sd.get_name()
+         if not(nom_concept in list_concepts):
+            list_concepts.append( nom_concept )
+   return tuple(list_concepts)
+
+
+# -------------------------------------------------------------------------------
+def detr_concepts(self):
+     liste_concepts=mes_concepts(base=self.parent)
+     for e in liste_concepts:
+        nom = string.strip(e)
+        DETRUIRE( OBJET =self.g_context['_F'](CHAINE = nom), INFO=2)
+        if self.jdc.g_context.has_key(nom) : del self.jdc.g_context[nom]
+     del(liste_concepts)
+
+
+# -------------------------------------------------------------------------------
+def get_tables(tables_calc, tmp_repe_table, prof):
+   """ Recupere les resultats Aster (Table Aster -> numpy)
+   """
+   assert (tables_calc is not None)
+   assert (tmp_repe_table is not None)
+
+   # Import du module lire_table
+   if os.environ.has_key('ASTER_ROOT'):
+      version = prof['version'][0]
+      bibpyt = os.path.join(os.environ['ASTER_ROOT'], version, 'bibpyt')
+      sys.path.append(bibpyt)
+      for mdl in glob.glob(os.path.join(bibpyt, '*')):
+         sys.path.append(os.path.join(os.environ['ASTER_ROOT'], version, 'bibpyt', mdl))
+   try:
+      from lire_table_ops import lecture_table
+   except:
+      UTMESS('F','RECAL0_23')
+
+   reponses = tables_calc
+   Lrep=[]
+   for i in range(len(reponses)):
+      _fic_table = tmp_repe_table + os.sep + "fort."+str(int(100+i))
+
+      try:
+         f=open(_fic_table,'r')
+         texte=f.read()
+         f.close()
+      except Exception, err:
+         ier=1
+         UTMESS('F','RECAL0_24',valk=str(err))
+
+      try:
+         table_lue = lecture_table(texte, 1, ' ')
+         list_para = table_lue.para
+         tab_lue   = table_lue.values()
+      except Exception, err:
+         ier=1
+      else:
+         ier=0
+
+      if ier!=0 : UTMESS('F','RECAL0_24',valk=str(err))
+
+      F = table2numpy(tab_lue, list_para, reponses, i)
+      Lrep.append(F)
+
+
+   return Lrep
+
+
+# --------------------------------------------------------------------------------------------------
+def table2numpy(tab_lue, list_para, reponses, i):
+   """  Extraction des resultats depuis la table Aster
+   """
+   try:
+       nb_val = len(tab_lue[ list_para[0] ])
+       F = NP.zeros((nb_val,2))
+       for k in range(nb_val):
+         F[k][0] = tab_lue[ str(reponses[i][1]) ][k]
+         F[k][1] = tab_lue[ str(reponses[i][2]) ][k]
+   except Exception, err:
+       UTMESS('F','RECAL0_24',valk=str(err))
+   return F
+
+
+# --------------------------------------------------------------------------------------------------
+def Ecriture_Fonctionnelle(output_file, type_fonctionnelle, fonctionnelle):
+
+   try:    os.remove(output_file)
+   except: pass
+
+   f=open(output_file, 'w')
+   if type_fonctionnelle == 'vector':
+      try:    fonctionnelle = fonctionnelle.tolist()
+      except: pass
+      fonctionnelle = str(fonctionnelle).replace('[','').replace(']','').replace('\n', ' ')
+   f.write( str(fonctionnelle) )
+   f.close()
+
+
+# --------------------------------------------------------------------------------------------------
+def Ecriture_Derivees(output_file, derivees):
+
+   try:    os.remove(output_file)
+   except: pass
+
+   # on cherche a imprimer la gradient calcule a partir de Fcalc
+   if type(derivees) in [list, tuple]:
+       t = []
+       for l in derivees:
+          l = str(l).replace('[', '').replace(']', '')
+          t.append( l )
+       txt = '\n'.join(t)
+
+   # On cherche a imprimer la matrice des sensibilite (A ou A_nodim)
+   elif type(derivees) == NP.ndarray:
+       t = []
+       a = derivees
+       for c in range(len(a[0,:])):
+           l = a[:,c].tolist()
+           l = str(l).replace('[', '').replace(']', '')
+           t.append( l )
+       txt = '\n'.join(t)
+
+   else: raise "Wrong type for gradient !"
+
+   # Ecriture
+   f=open(output_file, 'w')
+   f.write(txt)
+   f.close()
+
+
+
+# --------------------------------------------------------------------------------------------------
+# --------------------------------------------------------------------------------------------------
+class CALCULS_ASTER:
+   """
+      Classe gérant les calculs Aster (distribues ou include)
+   """
+
+   # ---------------------------------------------------------------------------
+   def __init__(self,
+
+       # MACR_RECAL inputs are optional here (if passed to self.run methods)
+       parametres          = None,
+       calcul              = None,
+       experience          = None,
+       LANCEMENT        = 'DISTRIBUTION',
+       jdc                 = None,
+               ):
+
+       self.parametres         = parametres
+       self.calcul             = calcul
+       self.experience         = experience
+       #self.eval_esclave       = mode_esclave
+       self.LANCEMENT       = LANCEMENT
+       self.UNITE_ESCL         = None
+       self.UNITE_INCLUDE      = None
+       self.ASTER_ROOT         = None
+
+       self.jdc                = jdc
+
+       self.list_params        = [x[0] for x in parametres]
+       self.list_params.sort()
+
+       # Valable uniquement pour le mode INCLUDE
+       self.pre    = None
+       self.pretxt = None
+       self.new    = None
+       self.newtxt = None
+
+       # Mode dynamique desactive par defaut
+       self.SetDynamiqueMode(None, None)
+
+
+   # ---------------------------------------------------------------------------------------------------------
+   def SetDynamiqueMode(self, DYNAMIQUE, graph_mac):
+       self.DYNAMIQUE = DYNAMIQUE
+       self.graph_mac = graph_mac
+
+
+   # ---------------------------------------------------------------------------------------------------------
+   # ---------------------------------------------------------------------------------------------------------
+   def run(self,
+
+                # Current estimation
+                X0,
+                dX             = None,
+
+                # Code_Aster installation
+                ASTER_ROOT     = None,
+                as_run         = None,
+
+                # General
+                resudir        = None,
+                clean          = True,
+                info           = None,
+                NMAX_SIMULT   = None,
+
+                # Study
+                export         = None,
+
+                # MACR_RECAL inputs
+                parametres     = None,
+                calcul         = None,
+                experience     = None,
+        ):
+
+        # Current estimation
+        self.X0             = X0
+        self.dX             = dX
+
+        # Code_Aster installation
+        self.ASTER_ROOT     = ASTER_ROOT
+        self.as_run         = as_run
+
+        # General
+        self.resudir        = resudir
+        self.clean          = clean
+        self.info           = info
+        if not NMAX_SIMULT: NMAX_SIMULT = 0
+        self.NMAX_SIMULT   = NMAX_SIMULT
+
+        # Study
+        self.export         = export
+
+        # MACR_RECAL inputs
+        if parametres:   self.parametres     = parametres
+        if calcul:       self.calcul         = calcul
+        if experience:   self.experience     = experience
+
+        parametres  = self.parametres
+        calcul      = self.calcul
+        experience  = self.experience
+
+        list_params = self.list_params
+
+        if dX: CalcGradient = True
+        else:  CalcGradient = False
+        self.CalcGradient   = CalcGradient
+
+        self.list_diag      = []
+
+        # Pour le moment on conserve un seul fichier
+        self.UNITE_INCLUDE  = self.UNITE_ESCL
+
+
+        # ----------------------------------------------------------------------------
+        # Liste de tous les jeux de parametres (initial + differences finies)
+        # ----------------------------------------------------------------------------
+        list_val = []
+
+        # Dictionnaire des parametres du point courant
+        dic = dict( zip( list_params, X0 ) )
+        list_val.append( dic )
+
+        # Calcul du gradient (perturbations des differences finies)
+        if CalcGradient:
+            UTMESS('I','RECAL0_16')
+            # Dictionnaires des parametres des calculs esclaves
+            for n in range(1,len(dX)+1):
+               l = [0] * len(dX)
+               l[n-1] = dX[n-1]
+               X = [ X0[i] * (1+l[i]) for i in range(len(dX)) ]
+               dic = dict( zip( list_params, X ) )
+               list_val.append( dic )
+
+
+        # ----------------------------------------------------------------------------
+        # Aiguillage vers INCLUDE
+        # ----------------------------------------------------------------------------
+        if self.LANCEMENT == 'INCLUSION':
+           UTMESS('I','RECAL0_29', valk=self.LANCEMENT)
+           fonctionnelle, gradient = self.run_include(list_val)
+
+
+        # ----------------------------------------------------------------------------
+        # Aiguillage vers ASRUN distribue
+        # ----------------------------------------------------------------------------
+        elif self.LANCEMENT == 'DISTRIBUTION':
+           UTMESS('I','RECAL0_29', valk=self.LANCEMENT)
+           fonctionnelle, gradient = self.run_distrib(list_val)
+
+
+        # ----------------------------------------------------------------------------
+        # Erreur d'aiguillage
+        # ----------------------------------------------------------------------------
+        else:
+           raise "Erreur : mode %s inconnu!" % self.LANCEMENT
+
+
+        #sys.exit()
+        # ----------------------------------------------------------------------------
+        # Sortie
+        # ----------------------------------------------------------------------------
+        return fonctionnelle, gradient
+
+
+
+   # ---------------------------------------------------------------------------------------------------------
+   # ---------------------------------------------------------------------------------------------------------
+   def run_include(self,list_val):
+     """  Module permettant de lancer N+1 calculs via un mecanisme d'include
+     """
+
+#      # Importation de commandes Aster
+#      try:
+#         import aster
+#         import Macro
+#         from Accas import _F
+#         from Cata import cata
+#         from Cata.cata import *
+#      except ImportError:
+#         raise "Simu_point_mat doit etre lance depuis Aster"
+
+     try:
+         import aster
+         import Macro
+         from Cata import cata
+         from Cata.cata import OPER, MACRO
+         from Accas import _F
+    
+         # Declaration de toutes les commandes Aster
+         import cata
+         for k,v in cata.__dict__.items() :
+           #print k,v
+           if isinstance(v, (OPER, MACRO)):
+             #print k,v
+             #self.jdc.current_context[k]= v
+             exec("from Cata.cata import %s" % k)
+         #self.jdc.current_context['_F']=cata.__dict__['_F']
+     except Exception, e:
+         raise "Le mode INCLUDE doit etre lance depuis Aster : \nErreur : " % e
+
+
+     list_params = self.list_params
+     calcul      = self.calcul
+     reponses    = self.calcul
+
+# AA : marche pas car on peut oublier des courbes, tant pis on refait des extract en trop..
+#      liste_reponses = []
+#      for reponse in [ x[0] for x in calcul ]:
+#          if not reponse in liste_reponses: liste_reponses.append(reponse)
+
+     liste_reponses = [ x[0] for x in calcul ]
+
+
+     # ----------------------------------------------------------------------------
+     # Boucle sur les N+1 calculs
+     # ----------------------------------------------------------------------------
+     Lcalc = []
+     for i in range(len(list_val)):
+         params = list_val[i]
+
+
+         # ----------------------------------------------------------------------------
+         # Affectation des valeurs des parametres
+         # ----------------------------------------------------------------------------
+         for nompara in list_params:
+             valpara = params[nompara]
+             exec( "%s=%s" % (nompara, valpara) )    #  YOUN__ = X0[0], DSDE__ = X0[1], ...
+
+
+         # ----------------------------------------------------------------------------
+         # Affichage des parametres du calcul courant
+         # ----------------------------------------------------------------------------
+         tpara = Affiche_Param(list_params, [ params[x] for x in list_params] )
+         if i==0:  UTMESS('I', 'RECAL0_67', valk=tpara)
+         else:     UTMESS('I', 'RECAL0_68', valk=(tpara, list_params[i-1]) )
+
+
+         # ----------------------------------------------------------------------------
+         # Lancement du calcul (par un include)
+         # ----------------------------------------------------------------------------
+         new = "fort.%s.new" % self.UNITE_INCLUDE
+         execfile(new)
+
+
+         # ----------------------------------------------------------------------------
+         # On considere que le job est OK s'il ne s'est pas plante dans le except precedent..
+         # ----------------------------------------------------------------------------
+         self.list_diag.append("OK")
+
+
+         # ----------------------------------------------------------------------------
+         # Extraction des tables
+         # ----------------------------------------------------------------------------
+         Lrep=[]
+         for i in range(len(liste_reponses)):
+             reponse = liste_reponses[i]
+             DETRUIRE(OBJET=_F(CHAINE='VEXTR___'), ALARME='NON', INFO=1)  # Faudrait proteger ce nom ici (VEXTR___ peut etre deja utilise dans l'etude)
+             exec( "VEXTR___ = %s.EXTR_TABLE()" % reponse)
+             list_para = VEXTR___.para
+             tab_lue   = VEXTR___.values()
+             F = table2numpy(tab_lue, list_para, reponses, i)
+             Lrep.append(F)
+
+
+
+         Lcalc.append( Lrep )
+
+
+         # Destruction des concepts Aster
+         liste_concepts = self.jdc.g_context.keys()
+         for c in liste_concepts:
+             DETRUIRE(OBJET=_F(CHAINE=c), ALARME='NON', INFO=1);
+
+         #detr_concepts(self.jdc)  # marche pas !
+         #sys.exit()
+
+
+     # ----------------------------------------------------------------------------
+     # Calcul de la fonctionnelle et du gradient
+     # ----------------------------------------------------------------------------
+     if debug: print "AA4/Lcalc=", Lcalc
+     fonctionnelle, gradient = self.calc2fonc_gradient(Lcalc)
+
+
+     # ----------------------------------------------------------------------------
+     # Save all calculated responses
+     self.Lcalc = Lcalc
+     # ----------------------------------------------------------------------------
+
+
+     return fonctionnelle, gradient
+
+
+
+
+
+
+   # ---------------------------------------------------------------------------------------------------------
+   # ---------------------------------------------------------------------------------------------------------
+   def run_distrib(self, list_val):
+        """ Module permettant de lancer N+1 calculs avec le module de calculs distribues d'asrun
+        """
+
+        # ----------------------------------------------------------------------------
+        # Parametres
+        # ----------------------------------------------------------------------------
+
+        # Code_Aster installation
+        ASTER_ROOT     = self.ASTER_ROOT
+        as_run         = self.as_run
+
+        # General
+        resudir        = self.resudir
+        clean          = self.clean
+        info           = self.info
+
+        # Study
+        export         = self.export
+
+        # MACR_RECAL inputs
+        parametres     = self.parametres
+        calcul         = self.calcul
+        experience     = self.experience
+
+        parametres     = self.parametres
+        calcul         = self.calcul
+        experience     = self.experience
+
+        CalcGradient   = self.CalcGradient
+        NMAX_SIMULT   = self.NMAX_SIMULT
+
+
+        # ----------------------------------------------------------------------------
+        # Import des modules python d'ASTK
+        # ----------------------------------------------------------------------------
+        if not ASTER_ROOT:
+            try:    ASTER_ROOT = os.path.join(aster.repout, '..')
+            except: pass
+        try:
+            sys.path.append(os.path.join(ASTER_ROOT, 'ASTK', 'ASTK_SERV', 'lib'))
+            sys.path.append(os.path.join(ASTER_ROOT, 'lib', 'python%s.%s' % (sys.version_info[0], sys.version_info[1] ) , 'site-packages'))
+        except: pass
+        try:
+            from asrun.run          import AsRunFactory
+            from asrun.profil       import ASTER_PROFIL
+            from asrun.common_func  import get_hostrc
+            from asrun.utils        import get_timeout
+            from asrun.parametric   import is_list_of_dict
+            from asrun.thread       import Dispatcher
+            from asrun.distrib      import DistribParametricTask
+        except Exception, e:
+            print e
+            UTMESS('F','RECAL0_99')
+
+
+        assert is_list_of_dict(list_val)
+        nbval = len(list_val)
+
+        # ----------------------------------------------------------------------------
+        # Generation des etudes esclaves
+        # ----------------------------------------------------------------------------
+        sys.argv = ['']
+        run = AsRunFactory()
+        run.options['debug_stderr'] = True  # pas d'output d'executions des esclaves dans k'output maitre
+
+        # Master profile
+        prof = ASTER_PROFIL(filename=export)
+        tmp_param = tempfile.mkdtemp()
+        try:    username = prof.param['username'][0]
+        except: username = os.environ['LOGNAME']
+        try:    noeud    = prof.param['noeud'][0]
+        except: noeud    = platform.uname()[1]
+        tmp_param = "%s@%s:%s" % ( username, noeud, tmp_param)
+        prof.Set('R', {'type' : 'repe', 'isrep' : True, 'ul' : 0, 'compr' : False, 'path' : tmp_param })
+        if info>=2: print prof
+
+        # Si batch n'est pas possible, on bascule en interactif
+        if prof.param['mode'][0]=='batch' and run.get('batch')=='non':
+           UTMESS('I','RECAL0_28',valk=noeud)
+           prof.param['mode'][0] = 'interactif'
+
+        # result directories
+        if resudir:
+            if not os.path.isdir(resudir):
+                try:    os.mkdir(resudir)
+                except: 
+                    if info>=1: UTMESS('A','RECAL0_82',valk=resudir)
+                    resudir = None
+        if not resudir:
+            # Par defaut, dans un sous-repertoire du repertoire d'execution
+            pref = 'tmp_macr_recal_'
+            # On cherche s'il y a un fichier hostfile pour placer les fichiers dans un repertoire partage
+            l_fr = getattr(prof, 'data')
+            l_tmp = l_fr[:]
+            for dico in l_tmp:
+               if dico['type']=='hostfile':
+                  pref = os.environ['HOME'] + os.sep + 'tmp_macr_recal_'
+                  break
+            # Si batch alors on place les fichiers dans un repertoire partage
+            if prof['mode'][0]=='batch': pref = os.environ['HOME'] + os.sep + 'tmp_macr_recal_'
+
+            resudir = tempfile.mkdtemp(prefix=pref)
+        flashdir = os.path.join(resudir,'flash')
+        if info>=1: UTMESS('I','RECAL0_81',valk=resudir)
+
+        prof.WriteExportTo( os.path.join(resudir, 'master.export') )
+
+        # get hostrc object
+        hostrc = get_hostrc(run, prof)
+
+        # timeout before rejected a job
+        timeout = get_timeout(prof)
+
+
+        # Ajout des impressions de tables a la fin du .comm
+        t = []
+        reponses = calcul
+        for i in range(len(reponses)):
+            _ul = str(int(100+i))
+            num_ul = '99'
+
+            # Pour la dynamique la table avec la matrice MAC a un traitement different
+            if self.DYNAMIQUE:
+               if ('MAC' in reponses[i][2]):
+                       t.append( self.ajout_post_mac( reponses[i] ) )
+
+            try:    os.remove( tmp_macr_recal+os.sep+"REPE_TABLE"+os.sep+"fort."+_ul )
+            except: pass
+
+            t.append("\n# Recuperation de la table : " + str(reponses[i][0]) + "\n")
+            t.append("DEFI_FICHIER(UNITE=" + num_ul + ", FICHIER='" + os.path.join('.', 'REPE_OUT', 'fort.'+_ul) + "',);\n" )
+            t.append("IMPR_TABLE(TABLE="+str(reponses[i][0])+", FORMAT='ASTER', UNITE="+num_ul+", INFO=1, FORMAT_R='E30.20',);\n")
+            t.append("DEFI_FICHIER(ACTION='LIBERER', UNITE="+num_ul+",);\n")
+
+
+        # number of threads to follow execution
+        numthread = 1
+
+
+        # ----------------------------------------------------------------------------
+        # Executions des etudes esclaves
+        # ----------------------------------------------------------------------------
+        # ----- Execute calcutions in parallel using a Dispatcher object
+        # elementary task...
+        task = DistribParametricTask(run=run, prof=prof, # IN
+                                     hostrc=hostrc,
+                                     nbmaxitem=self.NMAX_SIMULT, timeout=timeout,
+                                     resudir=resudir, flashdir=flashdir,
+                                     keywords={'POST_CALCUL': '\n'.join(t)},
+                                     info=info,
+                                     nbnook=0, exec_result=[])            # OUT
+        # ... and dispatch task on 'list_tests'
+        etiq = 'calc_%%0%dd' % (int(log10(nbval)) + 1)
+        labels = [etiq % (i+1) for i in range(nbval)]
+        couples = zip(labels, list_val)
+
+        if info>=2: print couples
+        execution = Dispatcher(couples, task, numthread=numthread)
+
+        # ----------------------------------------------------------------------------
+        # Liste des diagnostics
+        # ----------------------------------------------------------------------------
+        d_diag = {}
+        for result in task.exec_result:
+            #print result
+            label = result[0]
+            diag  = result[2]
+            if len(result) >= 8: output_filename = os.path.join('~', 'flasheur', str(result[7]))
+            else:                output_filename = ''
+            d_diag[label] = diag
+            if not diag[0:2] in ['OK', '<A']:
+              if not diag in ['<F>_COPY_ERROR']:
+                  UTMESS('A', 'RECAL0_70', valk=(label, output_filename))
+  
+                  # Affichage de l'output
+                  try:
+                     f=open(output_filename, 'r')
+                     print f.read()
+                     f.close()
+                  except: pass
+
+
+        if not d_diag: 
+                UTMESS('F', 'RECAL0_71', valk=resudir)
+        self.list_diag = [ d_diag[label] for label in labels ]
+
+        # ----------------------------------------------------------------------------
+        # Arret si tous les jobs ne se sont pas deroules correctement
+        # ----------------------------------------------------------------------------
+        iret = 0
+        if task.nbnook > 0:
+           iret = 4
+        if iret:
+           UTMESS('A', 'RECAL0_71', valk=resudir)
+           run.Sortie(iret)
+
+
+
+        # ----------------------------------------------------------------------------
+        # Recuperation des tables calculees
+        # ----------------------------------------------------------------------------
+        Lcalc = []
+        i=0
+        for c in labels:
+            tbl = get_tables(tables_calc=calcul, tmp_repe_table=os.path.join(resudir, c, 'REPE_OUT'), prof=prof)
+            Lcalc.append( tbl )  # On stocke sous la forme d'une liste de numpy
+            i+=1
+
+
+        # ----------------------------------------------------------------------------
+        # Calcul de la fonctionnelle et du gradient
+        # ----------------------------------------------------------------------------
+        if debug: print "AA4/Lcalc=", Lcalc
+        fonctionnelle, gradient = self.calc2fonc_gradient(Lcalc)
+
+
+        # ----------------------------------------------------------------------------
+        # Clean result directories
+        # ----------------------------------------------------------------------------
+        if clean: shutil.rmtree(resudir, ignore_errors=True)
+
+
+        # ----------------------------------------------------------------------------
+        # Save all calculated responses
+        # ----------------------------------------------------------------------------
+        self.Lcalc = Lcalc
+
+        return fonctionnelle, gradient
+
+
+   # ---------------------------------------------------------------------------------------------------------
+   # ---------------------------------------------------------------------------
+   def calc2fonc_gradient(self, Lcalc):
+        """  Calculs de la fonctionnelle et du gradient a partir des tables calculees
+        """
+
+        #print "AA1/Lcalc=", Lcalc
+
+        info         = self.info
+        CalcGradient = self.CalcGradient
+
+        # ----------------------------------------------------------------------------
+        # Recuperation des tables calculees
+        # ----------------------------------------------------------------------------
+        seq_FX   = []
+        seq_FY   = []
+        seq_DIMS = []
+        lst_iter = []
+        for i in range(len(Lcalc)):
+            tbl = Lcalc[i]
+            FX = []
+            FY = []
+            ldims = []
+            for array in tbl:
+                 FX.extend([ x[0] for x in array ])
+                 FY.extend([ x[1] for x in array ])
+                 ldims.append(len(array))
+            # Agregation des resultats
+            seq_FX.append(FX)
+            seq_FY.append(FY)
+            seq_DIMS.append(ldims)
+            lst_iter.append(i)
+
+
+        # ----------------------------------------------------------------------------
+        # Fonctionnelle
+        # ----------------------------------------------------------------------------
+        # Calcul maitre (point X0)
+        idx0 = lst_iter.index(0)   # index (les calculs arrivent-ils dans le desordre?)
+        FY_X0 = seq_FY[idx0]
+        fonctionnelle = FY_X0
+
+
+        # ----------------------------------------------------------------------------
+        # Procedure d'assemblage du gradient (une liste de liste)
+        # ----------------------------------------------------------------------------
+        gradient = []
+        if CalcGradient:
+            for n in range(len(lst_iter))[1:]:
+                idx = lst_iter.index(n)
+                FY   = seq_FY[idx]
+                col = [ (y-x) for x, y in zip(FY, FY_X0) ]
+                gradient.append(col)
+                #print 'Calcul numero: %s - Diagnostic: %s' % (n, self.list_diag[idx])
+                if info>=1: UTMESS('I', 'RECAL0_74', valk=(str(n), self.list_diag[idx]) )
+
+        # ----------------------------------------------------------------------------
+        # Affichages
+        # ----------------------------------------------------------------------------
+        if info>=2:
+            UTMESS('I', 'RECAL0_72', valk=str(fonctionnelle))
+            import pprint
+            if CalcGradient:
+                UTMESS('I', 'RECAL0_73')
+                pprint.pprint(gradient)
+
+        return fonctionnelle, gradient
+
+
+   # ---------------------------------------------------------------------------------------------------------
+   # ---------------------------------------------------------------------------
+   def find_parameter0(self, content, param):
+       """
+       Return the lowest index in content where param is found and
+       the index of the end of the command.
+       """
+       if not self.ASTER_ROOT:
+           try:    ASTER_ROOT = os.path.join(aster.repout, '..')
+           except: pass
+       try:
+           sys.path.append(os.path.join(ASTER_ROOT, 'ASTK', 'ASTK_SERV', 'lib'))
+           sys.path.append(os.path.join(ASTER_ROOT, 'lib', 'python%s.%s' % (sys.version_info[0], sys.version_info[1] ) , 'site-packages'))
+       except: pass
+       try:
+           from asrun.utils        import search_enclosed
+       except Exception, e:
+           print e
+           UTMESS('F','RECAL0_99')
+
+       pos, endpos = -1, -1
+       re_start = re.compile('^ *%s *\=' % re.escape(param), re.M)
+       mat_start = re_start.search(content)
+       if mat_start is not None:
+          pos = mat_start.start()
+          endpos = search_enclosed(content, pos)
+       return pos, endpos
+
+
+   # ---------------------------------------------------------------------------------------------------------
+   # ---------------------------------------------------------------------------
+   def find_parameter(self, content, param):
+       """
+       Supprime les parametres du fichier de commande
+       """
+       re_start = re.compile('^ *%s *\=' % re.escape(param), re.M)
+       l=[]
+       for line in content.split('\n'):
+          mat_start = re_start.search(line)
+          if mat_start is None: l.append(line)
+       return '\n'.join(l)
+
+
+   # ---------------------------------------------------------------------------------------------------------
+   # ---------------------------------------------------------------------------
+   def ajout_post_mac(self, reponse):
+      """
+         Ajoute un bloc a la fin de l'esclave pour l'affichage des MAC pour l'appariement manuel
+      """
+      txt = []
+      txt.append( "from Macro.reca_mac import extract_mac_array, get_modes, fenetre_mac\n" )
+      txt.append( "_mac = extract_mac_array("+str(reponse[0])+")\n" )
+      txt.append( "l_mac=[]\n" )
+      txt.append( "nb_freq=_mac.shape[1]\n" )
+      if (self.DYNAMIQUE['APPARIEMENT_MANUEL']=='OUI' and self.graph_mac):
+          txt.append( "frame =fenetre_mac(" + self.DYNAMIQUE['MODE_EXP']+"," + self.DYNAMIQUE['MODE_CALC']+",_mac)\n" )
+          txt.append( "list_exp,list_num =frame.get_list()\n" )
+          txt.append( "for i in range(nb_freq): l_mac.append(_mac[int(list_num[i])-1,int(list_exp[i])-1])\n" )
+      else:
+          txt.append( "for i in range(nb_freq): l_mac.append(_mac[i,i])\n" )
+      txt.append( "DETRUIRE(CONCEPT=_F(NOM="+str(reponse[0])+"),)\n" )
+      txt.append( str(reponse[0]) + "=CREA_TABLE(LISTE=(_F(PARA='NUME_ORDRE',LISTE_I=range(1,nb_freq+1),),_F(PARA='MAC',LISTE_R=l_mac,),),)\n" )
+      return '\n'.join(txt)
+
+
+# --------------------------------------------------------------------------------------------------
+# --------------------------------------------------------------------------------------------------
+class CALC_ERROR:
+   """
+      Classe gérant l'erreur par rapport aux donnees experimentales, la matrice des sensibilites
+   """
+   # ---------------------------------------------------------------------------
+   def __init__(self, experience, X0, calcul, poids=None, objective_type='vector', info=0, unite_resu=None):
+
+       if poids is None:
+            poids = NP.ones(len(experience))
+       self.experience     = experience
+       self.X0             = X0
+       self.calcul         = calcul
+       self.poids          = poids
+       self.objective_type = objective_type
+       self.INFO           = info
+       self.unite_resu     = unite_resu
+
+       from Macro import reca_interp, reca_algo
+       self.test_convergence   = reca_algo.test_convergence
+       self.calcul_gradient    = reca_algo.calcul_gradient
+       self.Simul              = reca_interp.Sim_exp(self.experience, self.poids)
+       try:    self.Dim   = reca_algo.Dimension(copy.copy(self.X0))
+       except: self.Dim   = reca_algo.Dimension(copy.copy(self.X0), None)  # gere l'ancienne version de MACR_RECAL
+       #self.Dim   = reca_algo.Dimension(copy.copy(self.X0))
+
+       self.F               = None
+       self.L_J_init        = None
+       self.L_J             = None
+       self.J_init          = None
+       self.J               = None
+       self.L_init          = None
+       self.erreur          = None
+       self.norme           = None
+       self.A               = None
+       self.A_nodim         = None
+       self.norme_A_        = None
+       self.norme_A_nodim   = None
+
+       if info>=3: self.debug = True
+       else:       self.debug = False
+       #if debug: self.debug = True
+       self.debug = True
+
+
+   # ---------------------------------------------------------------------------
+   def CalcError(self, Lcalc):
+
+       self.F = Lcalc[0]
+       if self.L_init is None:    self.L_init   = copy.copy(self.F)
+
+       self.L_J, self.erreur = self.Simul.multi_interpole(self.F, self.calcul)
+       if self.L_J_init is None:  self.L_J_init = copy.copy(self.L_J)
+
+       self.J = self.Simul.norme_J( copy.copy(self.L_J_init), copy.copy(self.L_J) )
+       if self.J_init is None:      self.J_init   = copy.copy(self.J)
+
+       # norme de l'erreur
+       self.norme = NP.sum( [x**2 for x in self.erreur] )
+
+       if self.debug:
+           print "AA1/F=", self.F
+           print "AA1/calcul=", self.calcul
+           print "AA1/L_J=", self.L_J
+           print "AA1/erreur=", self.erreur
+           print "AA1/L_J_init=", self.L_J_init
+           print "AA1/J=", self.J
+           print "AA1/norme de l'erreur=", self.norme
+           print "AA1/norme de J (fonctionnelle)=", str(self.J)
+
+       if self.INFO>=1: 
+           UTMESS('I', 'RECAL0_30')
+
+       if self.objective_type=='vector':
+           if self.INFO>=1: UTMESS('I', 'RECAL0_35', valr=self.norme)
+           return self.erreur
+       else:
+           if self.INFO>=1: UTMESS('I', 'RECAL0_36', valr=self.norme)
+           return self.norme
+
+
+   # ---------------------------------------------------------------------------
+   def CalcSensibilityMatrix(self, Lcalc, val, dX=None, pas=None):
+
+      """
+         Calcul de F(X0) et de tous les F(X0+h)
+         Formation de la matrice des sensibilites A
+         N+1 calculs distribues
+      """
+
+      if not dX and not pas: raise "Need 'dX' or 'pas' parameter."
+      if     dX and     pas: raise "Need 'dX' or 'pas' parameter, not both."
+      if pas: dX = len(val)*[pas]
+      if len(dX) != len(val): raise "Error : 'dX' and 'val' parameters aren't compatible (lenght are not equal).\ndX = %s\nval = %s" % (str(dx), str(val))
+
+      reponses  = self.calcul
+      resu_exp  = self.experience
+      len_para  = len(val)  # initialement len(self.para)
+
+
+      # Erreur de l'interpolation de F_interp : valeur de F interpolée sur les valeurs experimentales
+      F = Lcalc[0]
+      F_interp = self.Simul.multi_interpole_sensib(F, reponses)  #F_interp est une liste contenant des tab num des reponses interpolés
+
+
+      # Creation de la liste des matrices de sensibilités
+      L_A=[]
+      for i in range(len(reponses)):     
+          L_A.append(NP.zeros((len(resu_exp[i]),len(val))) )
+
+      for k in range(len(val)):   # pour une colone de A (dim = nb parametres)
+
+          F_perturbe = Lcalc[k+1]
+
+          # Erreur de l'interpolation de F_perturb : valeur de F (perturbée) interpolée sur les valeurs experimentales
+          F_perturbe_interp = self.Simul.multi_interpole_sensib(F_perturbe, reponses)
+
+          # Calcul de L_A (matrice sensibilité des erreurs sur F interpolée)
+          h = val[k]*dX[k]
+          for j in range(len(reponses)):
+             for i in range(len(resu_exp[j])):
+                if NP.all(h != 0.):
+                   L_A[j][i,k] = -1*(F_interp[j][i] - F_perturbe_interp[j][i])/h
+                else:
+                   if self.unite_resu:
+                       fic=open(os.getcwd()+'/fort.'+str(unite_resu),'a')
+                       fic.write('\n Probleme de division par zéro dans le calcul de la matrice de sensiblité')
+                       fic.write('\n Le parametre '+para[k]+'est nul ou plus petit que la précision machine')
+                       fic.close() 
+                   UTMESS('F','RECAL0_45',valk=para[k])
+                   return
+
+      # On construit la matrice de sensiblité sous forme d'un tab num
+      dim =[]
+      for i in range(len(L_A)):
+         dim.append(len(L_A[i]))
+      dim_totale = NP.sum(dim)
+      a=0
+      self.A_nodim = NP.zeros((dim_totale,len(val)))
+      for n in range(len(L_A)):
+         for k in range(len(val)):
+            for i in range(dim[n]):
+               self.A_nodim[i+a][k] = L_A[n][i,k]
+         a=dim[n]
+
+      del(L_A)
+
+
+      self.A = self.Dim.adim_sensi( copy.copy(self.A_nodim) )
+
+      # Si on n'est pas encore passe par CalcError...
+      if self.erreur is None:
+          self.erreur = self.CalcError(Lcalc)
+      self.gradient_init = self.calcul_gradient(self.A, self.erreur)  #utile pour le test de convergence, on prend les valeurs dimensionnées
+      self.residu = self.test_convergence(self.gradient_init, self.erreur, self.A, NP.zeros(len(self.gradient_init)))
+
+      if self.debug:
+          print "AA1/erreur=", self.erreur
+          print "AA1/residu=", self.residu
+          print "AA1/A_nodim=", self.A_nodim
+          print "AA1/A=", self.A
+
+
+      if self.objective_type=='vector':
+          return self.erreur, self.residu, self.A_nodim, self.A
+      else:
+          # norme de l'erreur
+          self.norme = NP.dot(self.erreur, self.erreur)**0.5
+          self.norme_A_nodim = NP.zeros( (1,len_para))
+          self.norme_A       = NP.zeros( (1,len_para))
+          for c in range(len(self.A[0,:])):
+              norme_A_nodim = 0
+              norme_A       = 0
+              for l in range(len(self.A[:,0])):
+                   norme_A_nodim += self.A_nodim[l,c] * self.A_nodim[l,c]
+                   norme_A       += self.A[l,c] * self.A[l,c]
+              self.norme_A_nodim[0,c] = math.sqrt( norme_A_nodim ) 
+              self.norme_A[0,c] = math.sqrt( norme_A )
+          if self.debug:
+              print "AA1/norme_A_nodim=", self.norme_A_nodim
+              print "AA1/norme_A=", self.norme_A
+          return self.erreur, self.residu, self.norme_A_nodim, self.norme_A
+
+
+
+
+
+
+# ----------------------------------------------------------------------------------------------------------------------
+# ----------------------------------------------------------------------------------------------------------------------
+if __name__ == '__main__':
+
+    # Execution via YACS ou en externe
+    isFromYacs = globals().get('ASTER_ROOT', None)
+
+
+    # ------------------------------------------------------------------------------------------------------------------
+    #                               Execution depuis YACS
+    # ------------------------------------------------------------------------------------------------------------------
+    if isFromYacs:
+        # Execution depuis YACS : les parametres sont deja charges en memoire
+
+        # ----------------------------------------------------------------------------
+        # Parametres courant
+        X0 = globals().get('X0', [ 80000.,  1000., 30. ])
+        dX = globals().get('dX', [ 0.001, 0.001, 0.0001])
+        # ----------------------------------------------------------------------------
+
+        # ----------------------------------------------------------------------------
+        # Parametres
+        os.environ['ASTER_ROOT'] = ASTER_ROOT
+        if debug:
+            clean = False
+            info  = 1
+        else:
+            clean = True
+            info  = 0
+        # ----------------------------------------------------------------------------
+
+
+    # ------------------------------------------------------------------------------------------------------------------
+    #                               Execution en mode EXTERNE
+    # ------------------------------------------------------------------------------------------------------------------
+    else:
+        # Execution en mode EXTERNE : on doit depouiller les parametres de la ligne de commande
+
+
+        from optparse import OptionParser, OptionGroup
+    
+        p = OptionParser(usage='usage: %s fichier_export [options]' % sys.argv[0])
+
+        # Current estimation
+        p.add_option('--input',             action='store',       dest='input',             type='string',                                       help='Chaine de texte contenant les parametres')
+        p.add_option('--input_step',        action='store',       dest='input_step',        type='string',                                       help='Chaine de texte contenant les pas de discretisation des differences finies')
+        p.add_option('--input_file',        action='store',       dest='input_file',        type='string',   default='input.txt',                help='Fichier contenant les parametres')
+        p.add_option('--input_step_file',   action='store',       dest='input_step_file',   type='string',                                       help='Fichier contenant les pas de discretisation des differences finies')
+
+        # Outputs
+        p.add_option('--output',            action='store',       dest='output',            type='string',   default='output.txt',               help='fichier contenant la fonctionnelle')
+        p.add_option('--output_grad',       action='store',       dest='output_grad',       type='string',   default='grad.txt',                 help='fichier contenant le gradient')
+
+        # Code_Aster installation
+        p.add_option('--aster_root',        action='store',       dest='aster_root',        type='string',                                       help="Chemin d'installation d'Aster")
+        p.add_option('--as_run',            action='store',       dest='as_run',            type='string',                                       help="Chemin vers as_run")
+
+        # General
+        p.add_option('--resudir',           action='store',       dest='resudir',           type='string',                                       help="Chemin par defaut des executions temporaires d'Aster")
+        p.add_option("--noclean",           action="store_false", dest="clean",                              default=True,                       help="Erase temporary Code_Aster execution directory")
+        p.add_option('--info',              action='store',       dest='info',              type='int',      default=1,                          help="niveau de message (0, [1], 2)")
+        p.add_option('--sources_root',      action='store',       dest='SOURCES_ROOT',      type='string',                                       help="Chemin par defaut des surcharges Python")
+        #p.add_option('--slave_computation', action='store',       dest='slave_computation', type='string',   default='distrib',                  help="Evaluation de l'esclave ([distrib], include)")
+
+        # MACR_RECAL parameters
+        p.add_option('--objective',         action='store',       dest='objective',         type='string',   default='fcalc',                    help="Fonctionnelle ([fcalc]/[error])")
+        p.add_option('--objective_type',    action='store',       dest='objective_type',    type='string',   default='vector',                   help="type de la fonctionnelle (float/[vector])")
+        p.add_option('--gradient_type',     action='store',       dest='gradient_type' ,    type='string',   default='no',                       help="calcul du gradient par Aster ([no]/normal/adim)")
+
+        # MACR_RECAL inputs
+        p.add_option('--mr_parameters',     action='store',       dest='mr_parameters',     type='string',   default='N_MR_Parameters.py',       help="Fichier de parametres de MACR_RECAL : parametres, calcul, experience")
+        p.add_option('--study_parameters',  action='store',       dest='study_parameters',  type='string',                                       help="Fichier de parametre de l'etude : export")
+        p.add_option('--parameters',        action='store',       dest='parameters',        type='string',                                       help="Fichier de parametres")
+
+        options, args = p.parse_args()
+
+
+        # Study : .export file
+        if args: export =  args[0]
+        else:
+           liste = glob.glob('*.export')
+           export = liste[0]
+        if not os.path.isfile(export): raise "Export file : is missing!"
+
+
+        # Code_Aster installation
+        ASTER_ROOT = None
+        if options.aster_root:                  ASTER_ROOT = options.aster_root
+        elif os.environ.has_key('ASTER_ROOT'):  ASTER_ROOT = os.environ['ASTER_ROOT']
+        if not ASTER_ROOT: raise "ASTER_ROOT is missing! Set it by --aster_root flag or environment variable ASTER_ROOT" 
+        if not os.path.isdir(ASTER_ROOT): raise "Wrong directory for ASTER_ROOT : %s" % ASTER_ROOT
+        os.environ['ASTER_ROOT'] = ASTER_ROOT
+#         sys.path.append(get_absolute_path(os.path.join(ASTER_ROOT, 'STA10.1', 'bibpyt' )))
+#         from Utilitai.Utmess import UTMESS
+
+        if options.as_run:          as_run = options.as_run
+        else:                       as_run = os.path.join(ASTER_ROOT, 'bin', 'as_run')
+
+
+        # General
+        if options.resudir: resudir = options.resudir
+        clean = options.clean
+
+#         if   options.info == 0: info = False
+#         elif options.info == 1: info = False
+#         elif options.info == 2: info = True
+        info = options.info
+
+        # Import des modules supplementaires
+        if options.SOURCES_ROOT: 
+             if not os.path.isdir(options.SOURCES_ROOT): raise "Wrong directory for sources_root : %s" % options.SOURCES_ROOT
+             else: 
+                 sys.path.insert(0, options.SOURCES_ROOT)
+                 sys.path.insert(0, os.path.join(options.SOURCES_ROOT, 'sources'))
+
+
+        # MACR_RECAL inputs
+        if options.mr_parameters:
+            try:    
+                if info>=1: print "Read MR parameters file : %s" % options.mr_parameters
+                execfile(options.mr_parameters)
+            except: raise "Wrong file for MR Parameters: %s" % options.mr_parameters
+        else: raise "MR Parameters file needed ! Use --mr_parameters flag"
+        parametres = globals().get('parametres',  None)
+        calcul     = globals().get('calcul',      None)
+        experience = globals().get('experience',  None)
+        poids      = globals().get('poids',       None)
+
+        if not parametres:  raise "MR Parameters file need to define 'parametres' variable"
+        if not calcul:      raise "MR Parameters file need to define 'calcul' variable"
+        if type(parametres)  != list: raise "Wrong type for 'parametres' variable in MR parameters file : %s"  % options.mr_parameters
+        if type(calcul)      != list: raise "Wrong type for 'calcul' variable in MR parameters file : %s"      % options.mr_parameters
+
+        if options.objective == 'error':
+             if type(experience) != list: raise "For error objective output, the 'experience' variable must be a list of arrays"
+             if type(poids) not in [list, tuple, NP.ndarray]: raise "The 'poids' variable must be a list or an array"
+             if len(poids) != len(experience): raise "'experience' and 'poids' lists must have the same lenght"
+
+
+        # MACR_RECAL parameters
+        objective      = options.objective
+        objective_type = options.objective_type
+        gradient_type  = options.gradient_type
+
+
+        # X0 : read from commandline flag or from file
+        if not os.path.isfile(options.input_file): options.input_file = None
+        if not (options.input or  options.input_file): raise "Missing input parameters"
+        if     (options.input and options.input_file): raise "Error : please use only one choice for input parameters definition"
+
+        if options.input_file:
+            try:
+                f = open(options.input_file, 'r')
+                options.input = f.read()
+                f.close()
+            except:
+                raise "Can't read input parameters file : %s" % options.input_file
+
+        # Extract X0 from text
+        try:
+            txt = options.input.strip()
+            txt = txt.replace(',', ' ')
+            txt = txt.replace(';', ' ')
+            X0 = [ float(x) for x in txt.split() ]
+            if type(X0) != list: raise "Wrong string for input parameters : %s" % options.input
+        except:
+            raise "Can't decode input parameters string : %s.\n It should be a comma separated list." % options.input
+
+
+        # dX : read from commandline flag or from file
+        dX = None
+        if options.gradient_type == 'no':
+            if (options.input_step or  options.input_step_file): raise "You must set 'gradient_type' to another choice than 'no' or remove input step parameters from commandline"
+        else:
+            if not (options.input_step or  options.input_step_file): raise "Missing input step parameters"
+            if     (options.input_step and options.input_step_file): raise "Error : please use only one choice for input step parameters definition"
+
+            if options.input_step_file: 
+                try:
+                    f = open(options.input_step_file, 'r')
+                    options.input_step = f.read()
+                    f.close()
+                except:
+                    raise "Can't read file for discretisation step : %s" % options.input_step_file
+
+            # Extract dX from text
+            try:
+                txt = options.input_step.strip()
+                txt = txt.replace(',', ' ')
+                txt = txt.replace(';', ' ')
+                dX = [ float(x) for x in txt.split() ]
+                if type(dX) != list: raise "Wrong string for discretisation step : %s" % options.input_step
+            except:
+                raise "Can't decode input parameters string : %s.\n It should be a comma separated list." % options.input_step
+
+
+
+
+    # ------------------------------------------------------------------------------------------------------------------
+    #                               Execution des calculs (N+1 calculs distribues si dX est fourni)
+    # ------------------------------------------------------------------------------------------------------------------
+
+    # Repertoire contenant les resultats des calculs Aster (None = un rep temp est cree)
+    resudir = globals().get('resudir', None)
+
+    # Affichage des parametres
+    lpara = [x[0] for x in parametres]
+    lpara.sort()
+    if info >=1:
+       lpara = [x[0] for x in parametres]
+       lpara.sort()
+       print "Calcul avec les parametres : \n%s" % Affiche_Param(lpara, X0)
+
+    C = CALCULS_ASTER(
+                # MACR_RECAL inputs
+                parametres          = parametres,
+                calcul              = calcul,
+                experience          = experience,
+                     )
+
+    fonctionnelle, gradient = C.run(
+                # Current estimation
+                X0                  = X0,
+                dX                  = dX,
+
+                # Code_Aster installation
+                ASTER_ROOT          = ASTER_ROOT,
+                as_run              = as_run,
+
+                # General
+                resudir             = resudir,
+                clean               = clean,
+                info                = info,
+
+                # Study
+                export              = export,
+
+#                 # MACR_RECAL inputs
+#                 parametres          = parametres,
+#                 calcul              = calcul,
+#                 experience          = experience,
+    )
+
+    # ------------------------------------------------------------------------------------------------------------------
+    #                               Calcul de l'erreur par rapport aux donnees experimentale
+    # ------------------------------------------------------------------------------------------------------------------
+    if not isFromYacs:        # Execution en mode EXTERNE uniquement
+
+        # Calcul de l'erreur par rapport aux donnees experimentale
+        if objective == 'error': 
+            E = CALC_ERROR(
+                experience          = experience,
+                X0                  = X0,
+                calcul              = calcul,
+                poids               = poids,
+                objective_type      = objective_type,
+                info=info,
+            )
+
+            erreur                      = E.CalcError(C.Lcalc)
+            erreur, residu, A_nodim, A  = E.CalcSensibilityMatrix(C.Lcalc, X0, dX=dX, pas=None)
+
+            fonctionnelle = erreur
+            if   gradient_type == 'normal': gradient = A
+            elif gradient_type == 'adim':   gradient = A_nodim
+            else: raise "??"
+
+
+
+    # ------------------------------------------------------------------------------------------------------------------
+    #                               Ecriture des resultats
+    # ------------------------------------------------------------------------------------------------------------------
+    if not isFromYacs:        # Execution en mode EXTERNE uniquement
+
+        # Fonctionnelle
+        if options.objective_type == 'float':
+           fonctionnelle = math.sqrt( NP.sum( [x**2 for x in fonctionnelle] ) )
+        Ecriture_Fonctionnelle(output_file=options.output, type_fonctionnelle=options.objective_type, fonctionnelle=fonctionnelle)
+
+        # Gradient
+        if gradient: Ecriture_Derivees(output_file=options.output_grad, derivees=gradient)
+
+
+
+    # ------------------------------------------------------------------------------------------------------------------
+    #                               Affichages
+    # ------------------------------------------------------------------------------------------------------------------
+    if info>=2:
+        print "\nFonctionnelle au point X0: \n%s" % str(fonctionnelle)
+        import pprint
+        if dX:
+           print "\nGradient au point X0:"
+           pprint.pprint(gradient)
diff --git a/Aster/Cata/cataSTA10/Macro/simu_point_mat_ops.py b/Aster/Cata/cataSTA10/Macro/simu_point_mat_ops.py
new file mode 100644 (file)
index 0000000..72f95a6
--- /dev/null
@@ -0,0 +1,654 @@
+#@ MODIF simu_point_mat_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+def simu_point_mat_ops(self, MATER, INCREMENT,SIGM_IMPOSE,EPSI_IMPOSE,SIGM_INIT,EPSI_INIT,VARI_INIT,NEWTON,CONVERGENCE,
+           MASSIF,ANGLE,COMP_INCR,COMP_ELAS,INFO,ARCHIVAGE,SUPPORT, **args) :
+
+  """Simulation de la reponse d'un point materiel"""
+
+  ier = 0
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+  import math
+  
+  # On importe les definitions des commandes a utiliser dans la macro
+  # Le nom de la variable doit etre obligatoirement le nom de la commande
+  AFFE_CARA_ELEM  = self.get_cmd('AFFE_CARA_ELEM')
+  AFFE_CHAR_MECA  = self.get_cmd('AFFE_CHAR_MECA')
+  AFFE_MATERIAU   = self.get_cmd('AFFE_MATERIAU')
+  AFFE_MODELE     = self.get_cmd('AFFE_MODELE')
+  CALC_ELEM       = self.get_cmd('CALC_ELEM')
+  CALC_POINT_MAT  = self.get_cmd('CALC_POINT_MAT')
+  CALC_TABLE      = self.get_cmd('CALC_TABLE')
+  CREA_CHAMP      = self.get_cmd('CREA_CHAMP')
+  CREA_RESU       = self.get_cmd('CREA_RESU')
+  DEFI_FONCTION   = self.get_cmd('DEFI_FONCTION')
+  IMPR_TABLE      = self.get_cmd('IMPR_TABLE')
+  LIRE_MAILLAGE   = self.get_cmd('LIRE_MAILLAGE')
+  MODI_MAILLAGE   = self.get_cmd('MODI_MAILLAGE')
+  MODI_REPERE     = self.get_cmd('MODI_REPERE')
+  POST_RELEVE_T   = self.get_cmd('POST_RELEVE_T')
+  STAT_NON_LINE   = self.get_cmd('STAT_NON_LINE')
+
+  from Accas import _F
+  from Utilitai.UniteAster import UniteAster
+  from Utilitai.Utmess import  UTMESS
+  
+# -- Tests de cohérence
+  __fonczero = DEFI_FONCTION(NOM_PARA = 'INST',
+  VALE     = ( 0,0, 10,0 ),PROL_DROITE='CONSTANT',PROL_GAUCHE='CONSTANT')
+  EPS={}
+  SIG={}
+  itetra=0
+  CMP_EPS=['EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ']
+  CMP_SIG=['SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ']
+  
+  if SUPPORT != None :
+     if SUPPORT=='ELEMENT': 
+        itetra=1
+  if itetra==0 :
+     if COMP_INCR != None : 
+        lcomp = COMP_INCR.List_F()[0]
+        if lcomp['DEFORMATION'] != 'PETIT' :
+           itetra=1
+           UTMESS('A','COMPOR2_1',valk=lcomp['DEFORMATION'] )
+     elif COMP_ELAS != None :
+        lcomp = COMP_ELAS.List_F()[0]
+        if lcomp['DEFORMATION'] != 'PETIT' :
+           itetra=1
+           UTMESS('A','COMPOR2_1',valk=lcomp['DEFORMATION'] )
+
+#===============================================================
+# cas ou il n'y a pas d'élement fini : appel à CALC_POINT_MAT
+#===============================================================
+  if itetra == 0 :
+       
+       isig=0
+       ieps=0
+       nbsig=6
+#      par défaut contraintes nulles
+       if SIGM_IMPOSE:
+          SIG=SIGM_IMPOSE[0].cree_dict_valeurs(SIGM_IMPOSE[0].mc_liste)
+          isig=1
+       if EPSI_IMPOSE:
+          EPS=EPSI_IMPOSE[0].cree_dict_valeurs(EPSI_IMPOSE[0].mc_liste)
+          ieps=1
+
+       motscles={}
+#       verif
+       for index in range(nbsig):
+           iks=CMP_SIG[index]
+           ike=CMP_EPS[index]
+           inds=0
+           inde=0
+           if ieps :
+             if EPS[ike]!=None :
+                inde=1
+           if isig :
+             if SIG[iks]!=None :
+                inds=1
+           if inde*inds!=0 :
+              UTMESS('F','COMPOR2_2',valk=iks)
+           if inde==1 :
+              motscles[ike] = EPS[ike]
+           elif inds==1:
+              motscles[iks]= SIG[iks]
+           else:
+              motscles[iks]=__fonczero
+#      Etat initial
+       etatinit=0
+       if SIGM_INIT != None :
+          motscles['SIGM_INIT']   = SIGM_INIT.List_F()
+       if EPSI_INIT != None :
+          motscles['EPSI_INIT']   = EPSI_INIT.List_F()
+       if VARI_INIT != None :
+          motscles['VARI_INIT']   = VARI_INIT.List_F()
+       if NEWTON != None :
+          motscles['NEWTON']      = NEWTON.List_F()
+       if CONVERGENCE != None :
+          motscles['CONVERGENCE'] = CONVERGENCE.List_F()
+       if MASSIF != None :
+          motscles['MASSIF']      = MASSIF.List_F()
+       if COMP_INCR  :
+          motscles['COMP_INCR']   = COMP_INCR.List_F()
+       if COMP_ELAS   :
+          motscles['COMP_ELAS']   = COMP_ELAS.List_F()
+#      -- Deroulement du calcul
+       motscles['INCREMENT']      = INCREMENT.List_F()
+
+       if args.has_key('NB_VARI_TABLE'):
+          if args['NB_VARI_TABLE'] != None:  
+             motscles['NB_VARI_TABLE']  = args['NB_VARI_TABLE']
+       self.DeclareOut('REPONSE',self.sd)
+       __REP1 = CALC_POINT_MAT(INFO=INFO,MATER=MATER,ANGLE=ANGLE,**motscles)
+       Titre='CALC_POINT_MAT'
+       if INFO==2 :
+          IMPR_TABLE(TABLE=__REP1)
+          
+# on ne prend en compte que ARCHIVAGE / LIST_INST 
+
+       if ARCHIVAGE != None :
+          if ARCHIVAGE['LIST_INST'] != None :
+             lr8=ARCHIVAGE['LIST_INST']
+             lr=lr8.Valeurs()
+             REPONSE=CALC_TABLE( TABLE=__REP1,TITRE=Titre,
+                           ACTION=_F(OPERATION='FILTRE',NOM_PARA='INST',
+                                     VALE=lr,PRECISION=ARCHIVAGE['PRECISION']),
+                          )
+          else :
+             REPONSE=CALC_TABLE( TABLE=__REP1,TITRE=Titre,
+                           ACTION=_F(OPERATION='TRI',NOM_PARA='INST'),
+                          )
+       else :
+          REPONSE=CALC_TABLE( TABLE=__REP1,TITRE=Titre,
+                           ACTION=_F(OPERATION='TRI',NOM_PARA='INST'),
+                          )
+  
+#===============================================================
+# cas ou on fait le calcul sur un TETRA4 A UN SEUL POINT DE GAUSS
+#===============================================================
+  elif itetra==1 :
+  
+      EPS={}
+      SIG={}
+      MODELISATION="3D"
+      if args.has_key('MODELISATION'):
+         if args['MODELISATION'] != None:
+            MODELISATION=args['MODELISATION']
+            
+      if MODELISATION=="3D":
+          nbsig=6
+          CMP_EPS=['EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ']
+          CMP_SIG=['SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ']
+      else:
+          nbsig=3
+          CMP_EPS=['EPXX','EPYY','EPXY']
+          CMP_SIG=['SIXX','SIYY','SIXY']
+      
+      if SIGM_IMPOSE:
+         SIG=SIGM_IMPOSE[0].cree_dict_valeurs(SIGM_IMPOSE[0].mc_liste)
+         for i in SIG.keys():
+             if SIG[i]==None : SIG[i]=__fonczero
+      else:
+         for i in range(nbsig):
+             SIG[CMP_SIG[i]]=__fonczero
+
+      if EPSI_IMPOSE:
+         EPS=EPSI_IMPOSE[0].cree_dict_valeurs(EPSI_IMPOSE[0].mc_liste)
+      else:
+         for i in range(nbsig):
+             EPS[CMP_EPS[i]]=None
+      for index in range(nbsig):
+          iks=CMP_SIG[index]
+          ike=CMP_EPS[index]
+          if EPS[ike]!=None and SIG[iks] != __fonczero :
+             UTMESS('F','COMPOR2_3',valk= str(iks) +' '+ str(ike))
+#     -- Definition du maillage
+      if MODELISATION=="3D":
+
+         texte_ma = """
+           COOR_3D
+             P0  0.0   0.0   0.0
+             P1  1.0   0.0   0.0
+             P2  0.0   1.0   0.0
+             P3  0.0   0.0   1.0
+           FINSF
+           TRIA3
+             F1   P0 P3 P2
+             F2   P0 P1 P3
+             F3   P0 P2 P1
+             F4   P1 P2 P3
+           FINSF
+           TETRA4
+             VOLUME = P0 P1 P2 P3
+           FINSF
+           GROUP_MA
+           TOUT  VOLUME
+           FINSF
+           GROUP_NO
+           TOUT  P1 P2 P0 P3
+           FINSF
+           FIN
+         """
+      else :
+         texte_ma = """
+           COOR_2D
+             P0  0.0   0.0
+             P1  1.0   0.0
+             P2  0.0   1.0
+           FINSF
+           SEG2
+             S1   P2 P0
+             S2   P0 P1
+             S3   P1 P2
+           FINSF
+           TRIA3
+             VOLUME = P0 P1 P2
+           FINSF
+           GROUP_MA
+           TOUT  VOLUME
+           FINSF
+           GROUP_NO
+           TOUT  P1 P2 P0
+           FINSF
+           FIN
+         """
+      fi_mail = open('simu.mail','w')
+      fi_mail.write(texte_ma)
+      fi_mail.close()
+      UL = UniteAster()
+      umail = UL.Libre(action='ASSOCIER', nom='simu.mail' )
+      __MA  =  LIRE_MAILLAGE(UNITE=umail)
+      UL.EtatInit()
+
+
+
+      if MODELISATION=="3D":
+         __MO = AFFE_MODELE(  MAILLAGE = __MA,
+           AFFE=_F(MAILLE=('VOLUME','F1','F2','F3','F4'),PHENOMENE='MECANIQUE',MODELISATION='3D',))
+##     ANGLE : rotation de ANGLE autour de Z uniquement, et seulement pour les déformations
+##             imposées.
+         if ANGLE != 0. :
+            __MA=MODI_MAILLAGE(reuse=__MA ,MAILLAGE = __MA ,ROTATION=_F(POIN_1=(0.,0. ),ANGL = ANGLE),)
+            c=math.cos(ANGLE*math.pi/180.)
+            s=math.sin(ANGLE*math.pi/180.)
+            __C_RIGIDE=AFFE_CHAR_MECA(MODELE=__MO,
+                  DDL_IMPO=_F(NOEUD='P0',DX=0,DY=0.,DZ=0.),
+                  LIAISON_DDL = (
+            _F(NOEUD=('P1','P1','P2','P2'),DDL=('DX','DY','DX','DY'),COEF_MULT=(s,-c,c,s),COEF_IMPO=0),
+            _F(NOEUD=('P1','P3','P3'),DDL=('DZ','DX','DY'),COEF_MULT=(-1.0,c,s),COEF_IMPO=0),
+            _F(NOEUD=('P2','P3','P3'),DDL=('DZ','DX','DY'),COEF_MULT=(-1.0,-s,c),COEF_IMPO=0),),)
+         else :
+#     -- Mouvement de corps rigide
+            __C_RIGIDE = AFFE_CHAR_MECA(MODELE=__MO,
+                  DDL_IMPO = _F(NOEUD = 'P0',DX = 0,DY = 0,DZ = 0),
+                  LIAISON_DDL = (
+            _F(NOEUD=('P2','P1'),DDL=('DX','DY'),COEF_MULT=(1,-1),COEF_IMPO=0),
+            _F(NOEUD=('P3','P1'),DDL=('DX','DZ'),COEF_MULT=(1,-1),COEF_IMPO=0),
+            _F(NOEUD=('P3','P2'),DDL=('DY','DZ'),COEF_MULT=(1,-1),COEF_IMPO=0),))
+      else:
+      # MODELISATION 2D
+         __MO=AFFE_MODELE(MAILLAGE=__MA,
+              AFFE=_F(MAILLE=('VOLUME','S1','S2','S3'),PHENOMENE='MECANIQUE',MODELISATION=MODELISATION))
+##     ANGLE : rotation de ANGLE autour de Z uniquement, et seulement pour les déformations
+##             imposées.
+         if ANGLE != 0. :
+            __MA=MODI_MAILLAGE(reuse=__MA ,MAILLAGE=__MA,ROTATION=_F(POIN_1=(0.,0.),ANGL=ANGLE),)
+            c=math.cos(ANGLE*math.pi/180.)
+            s=math.sin(ANGLE*math.pi/180.)
+            __C_RIGIDE = AFFE_CHAR_MECA(MODELE = __MO,
+                  DDL_IMPO=_F(NOEUD='P0',DX=0,DY=0.),
+                  LIAISON_DDL=(_F(NOEUD=('P1','P1','P2','P2'),DDL=('DX','DY','DX','DY'),
+                       COEF_MULT=(s,-c,c,s),COEF_IMPO=0),),)
+         else :
+            __C_RIGIDE = AFFE_CHAR_MECA(MODELE = __MO,
+                DDL_IMPO = _F(NOEUD = 'P0',DX = 0,DY = 0),
+                LIAISON_DDL = (_F(NOEUD=('P2','P1'),DDL=('DX','DY'),COEF_MULT=(1,-1),COEF_IMPO=0),))
+#     --MASSIF : orientation du materiau (monocristal, orthotropie)
+      if MASSIF:
+          ANGMAS=MASSIF[0].cree_dict_valeurs(MASSIF[0].mc_liste)
+          if ANGMAS["ANGL_REP"]==None :
+             __CARA=AFFE_CARA_ELEM(MODELE=__MO,MASSIF=_F(MAILLE='VOLUME',ANGL_EULER=ANGMAS["ANGL_EULER"]),);
+          else :
+             __CARA=AFFE_CARA_ELEM(MODELE=__MO,MASSIF=_F(MAILLE='VOLUME',ANGL_REP=ANGMAS["ANGL_REP"]),);
+#     -- Chargement en deformation
+
+      __E = [None]*nbsig
+
+      __E[0] = AFFE_CHAR_MECA(MODELE = __MO,
+        LIAISON_OBLIQUE = _F(NOEUD='P1', DX=1, ANGL_NAUT=ANGLE))
+      __E[1] = AFFE_CHAR_MECA(MODELE = __MO,
+        LIAISON_OBLIQUE = _F(NOEUD='P2', DY=1, ANGL_NAUT=ANGLE))
+      if MODELISATION=="3D":
+          __E[2] = AFFE_CHAR_MECA(MODELE = __MO,
+             LIAISON_OBLIQUE = _F(NOEUD='P3', DZ=1, ANGL_NAUT=ANGLE))
+          __E[3] = AFFE_CHAR_MECA(MODELE = __MO,
+            LIAISON_OBLIQUE = _F(NOEUD='P1', DY=1, ANGL_NAUT=ANGLE))
+          __E[4] = AFFE_CHAR_MECA(MODELE = __MO,
+            LIAISON_OBLIQUE = _F(NOEUD='P1', DZ=1, ANGL_NAUT=ANGLE))
+          __E[5] = AFFE_CHAR_MECA(MODELE = __MO,
+            LIAISON_OBLIQUE = _F(NOEUD='P2', DZ=1, ANGL_NAUT=ANGLE))
+      else:
+          c=math.cos(ANGLE*math.pi/180.)
+          s=math.sin(ANGLE*math.pi/180.)
+          __E[2] = AFFE_CHAR_MECA(MODELE = __MO,
+            LIAISON_OBLIQUE = _F(NOEUD='P1', DY=1, ANGL_NAUT=ANGLE),)
+
+#     -- Chargement en contrainte
+
+      __S = [None]*nbsig
+      if MODELISATION=="3D":
+          r33 = 3**-0.5
+          __S[0] = AFFE_CHAR_MECA(MODELE = __MO,FORCE_FACE = (
+              _F(MAILLE='F1', FX=-1),
+              _F(MAILLE='F4', FX= r33),))
+          __S[1] = AFFE_CHAR_MECA(MODELE = __MO,FORCE_FACE = (
+              _F(MAILLE='F2', FY=-1),
+              _F(MAILLE='F4', FY= r33),))
+          __S[2] = AFFE_CHAR_MECA(MODELE = __MO,FORCE_FACE = (
+              _F(MAILLE='F3', FZ=-1),
+              _F(MAILLE='F4', FZ= r33),))
+          __S[3] = AFFE_CHAR_MECA(MODELE = __MO,FORCE_FACE = (
+              _F(MAILLE='F1', FY=-1),
+              _F(MAILLE='F2', FX=-1),
+              _F(MAILLE='F4', FX= r33, FY=r33),))
+          __S[4] = AFFE_CHAR_MECA(MODELE = __MO,FORCE_FACE = (
+              _F(MAILLE='F1', FZ=-1),
+              _F(MAILLE='F3', FX=-1),
+              _F(MAILLE='F4', FX= r33, FZ=r33),))
+          __S[5] = AFFE_CHAR_MECA( MODELE = __MO, FORCE_FACE = (
+              _F(MAILLE='F2', FZ=-1),
+              _F(MAILLE='F3', FY=-1),
+              _F(MAILLE='F4', FY= r33, FZ=r33), ) )
+      else:
+          r22 = 2**-0.5
+          __S[0] = AFFE_CHAR_MECA(MODELE = __MO,FORCE_CONTOUR = (
+              _F(MAILLE='S1', FX=-1),
+              _F(MAILLE='S3', FX= r22), ))
+          __S[1] = AFFE_CHAR_MECA(MODELE = __MO,FORCE_CONTOUR = (
+              _F(MAILLE='S2', FY=-1),
+              _F(MAILLE='S3', FY= r22), ) )
+          __S[2] = AFFE_CHAR_MECA(MODELE = __MO,FORCE_CONTOUR = (
+              _F(MAILLE='S1', FY=-1),
+              _F(MAILLE='S2', FX=-1),
+              _F(MAILLE='S3', FX= r22, FY=r22), ) )
+#     -- Construction de la charge
+
+      l_char = [  _F(CHARGE=__C_RIGIDE)  ]
+      for i in xrange(nbsig) :
+        ike=CMP_EPS[i]
+        if EPS[ike]:
+           l_char.append(  _F(CHARGE=__E[i],FONC_MULT=EPS[ike])  )
+      for i in xrange(nbsig) :
+        iks=CMP_SIG[i]
+        l_char.append(  _F(CHARGE=__S[i],FONC_MULT=SIG[iks])  )
+
+#     variables de commande
+      mcvarc=[]
+      if args.has_key('AFFE_VARC'):
+         if args['AFFE_VARC'] != None:
+             lvarc  = args['AFFE_VARC'].List_F()
+             nbvarc=len(lvarc)
+             for ivarc in range(nbvarc) :
+                  typech = 'NOEU_' + str(lvarc[ivarc]['NOM_VARC']) + '_F'
+                  dico={}
+                  __CHVARC=CREA_CHAMP(TYPE_CHAM=typech,
+                                     OPERATION='AFFE', 
+                                     MAILLAGE=__MA, 
+                                     AFFE=_F(MAILLE='VOLUME', 
+                                             NOM_CMP=lvarc[ivarc]['NOM_VARC'],
+                                             VALE_F=lvarc[ivarc]['VALE_FONC'],
+                                            ),
+                                     ), 
+                  __LIST2  = INCREMENT.List_F()[0]['LIST_INST']
+                  __TEMP=CREA_RESU(OPERATION='AFFE',TYPE_RESU='EVOL_THER',NOM_CHAM='TEMP',
+                                   AFFE = _F(CHAM_GD = __CHVARC,LIST_INST = __LIST2,),
+                                   )
+                  dico["MAILLE"]='VOLUME'
+                  dico["EVOL"]=__TEMP
+                  dico["NOM_VARC"]=lvarc[ivarc]['NOM_VARC']
+                  if lvarc[ivarc]['VALE_REF'] != None:
+                     dico["VALE_REF"]=lvarc[ivarc]['VALE_REF']
+             mcvarc.append(dico)
+#      -- Materiau et modele
+      if len(mcvarc) > 0 :
+         __CHMAT=AFFE_MATERIAU(MAILLAGE=__MA,AFFE = _F(MAILLE='VOLUME',MATER=MATER),
+                               AFFE_VARC=mcvarc,
+                              )
+      else :
+         __CHMAT=AFFE_MATERIAU(MAILLAGE=__MA,AFFE = _F(MAILLE='VOLUME',MATER=MATER))
+
+#     Etat initial
+      SIGINI={}
+      VARINI={}
+      LCSIG=[]
+      LVSIG=[]
+      init_dico={}
+      etatinit=0
+
+#     --contraintes initiales
+      if SIGM_INIT:
+          etatinit=1
+          SIGINI=SIGM_INIT[0].cree_dict_valeurs(SIGM_INIT[0].mc_liste)
+          for i in SIGINI.keys():
+              if SIGINI[i]!=None :
+                  LCSIG.append(i)
+                  LVSIG.append(SIGINI[i])
+
+          __SIG_INIT=CREA_CHAMP(MAILLAGE=__MA,OPERATION='AFFE',TYPE_CHAM='CART_SIEF_R',
+                    AFFE=_F(TOUT='OUI', NOM_CMP=LCSIG, VALE=LVSIG,))
+          init_dico['SIGM']=__SIG_INIT
+#     --variables internes initiales
+      if VARI_INIT:
+          etatinit=1
+          lnomneu=[]
+          lnomvar=[]
+          VARINI=VARI_INIT[0].cree_dict_valeurs(VARI_INIT[0].mc_liste)
+          nbvari=len(VARINI['VALE'])
+          for i in range(nbvari):
+              lnomneu.append('X'+str(i+1))
+              lnomvar.append('V'+str(i+1))
+
+          __NEUT=CREA_CHAMP(OPERATION='AFFE', TYPE_CHAM='CART_NEUT_R', MAILLAGE=__MA,
+            AFFE=_F( MAILLE ='VOLUME', NOM_CMP = lnomneu, VALE = VARINI['VALE']))
+          __VAR_INIT=CREA_CHAMP(MODELE=__MO,OPERATION='ASSE',TYPE_CHAM='ELGA_VARI_R',
+                       ASSE=_F(TOUT='OUI',CHAM_GD=__NEUT,NOM_CMP=lnomneu,NOM_CMP_RESU=lnomvar))
+          init_dico['VARI']=__VAR_INIT
+      # --deformations initiales
+      if EPSI_INIT:
+          etatinit=1
+          EPSINI={}
+          LCDEPL=[]
+          LNDEPL=[]
+          LVDEPL=[]
+          LIST_AFFE=[]
+          mon_dico={}
+          mon_dico["NOEUD"]='P0'
+          mon_dico["NOM_CMP"]=("DX","DY","DZ")
+          mon_dico["VALE"]=(0.,0.,0.)
+          LIST_AFFE.append(mon_dico)
+          EPSINI=EPSI_INIT[0].cree_dict_valeurs(EPSI_INIT[0].mc_liste)
+          mon_dico={}
+          mon_dico["NOEUD"]='P1'
+          mon_dico["NOM_CMP"]='DX'
+          mon_dico["VALE"]=EPSINI['EPXX']
+          LIST_AFFE.append(mon_dico)
+          mon_dico={}
+          mon_dico["NOEUD"]='P2'
+          mon_dico["NOM_CMP"]='DY'
+          mon_dico["VALE"]=EPSINI['EPYY']
+          LIST_AFFE.append(mon_dico)
+          if MODELISATION=="3D":
+              mon_dico={}
+              mon_dico["NOEUD"]='P3'
+              mon_dico["NOM_CMP"]='DZ'
+              mon_dico["VALE"]=EPSINI['EPZZ']
+              LIST_AFFE.append(mon_dico)
+              mon_dico={}
+              mon_dico["NOEUD"]='P1'
+              mon_dico["NOM_CMP"]='DY'
+              mon_dico["VALE"]=EPSINI['EPXY']
+              LIST_AFFE.append(mon_dico)
+              mon_dico={}
+              mon_dico["NOEUD"]='P2'
+              mon_dico["NOM_CMP"]='DX'
+              mon_dico["VALE"]=EPSINI['EPXY']
+              LIST_AFFE.append(mon_dico)
+              mon_dico={}
+              mon_dico["NOEUD"]='P1'
+              mon_dico["NOM_CMP"]='DZ'
+              mon_dico["VALE"]=EPSINI['EPXZ']
+              LIST_AFFE.append(mon_dico)
+              mon_dico={}
+              mon_dico["NOEUD"]='P3'
+              mon_dico["NOM_CMP"]='DX'
+              mon_dico["VALE"]=EPSINI['EPXZ']
+              LIST_AFFE.append(mon_dico)
+              mon_dico={}
+              mon_dico["NOEUD"]='P2'
+              mon_dico["NOM_CMP"]='DZ'
+              mon_dico["VALE"]=EPSINI['EPYZ']
+              LIST_AFFE.append(mon_dico)
+              mon_dico={}
+              mon_dico["NOEUD"]='P3'
+              mon_dico["NOM_CMP"]='DY'
+              mon_dico["VALE"]=EPSINI['EPYZ']
+              LIST_AFFE.append(mon_dico)
+          else:
+              mon_dico={}
+              mon_dico["NOEUD"]='P1',
+              mon_dico["NOM_CMP"]='DY'
+              mon_dico["VALE"]=EPSINI['EPXY']
+              LIST_AFFE.append(mon_dico)
+              mon_dico={}
+              mon_dico["NOEUD"]='P2'
+              mon_dico["NOM_CMP"]='DX'
+              mon_dico["VALE"]=EPSINI['EPXY']
+              LIST_AFFE.append(mon_dico)
+          __DEP_INI=CREA_CHAMP(MAILLAGE=__MA,OPERATION='AFFE',TYPE_CHAM='NOEU_DEPL_R',AFFE=LIST_AFFE)
+          init_dico['DEPL']=__DEP_INI
+#     -- Deroulement du calcul
+      motscles={}
+      if   COMP_INCR  :
+          motscles['COMP_INCR']   = COMP_INCR.List_F()
+      if   COMP_ELAS   :
+          motscles['COMP_ELAS']   = COMP_ELAS.List_F()
+          
+      motscles['CONVERGENCE'] = CONVERGENCE.List_F()
+      
+      motscles['NEWTON']      = NEWTON.List_F()
+      
+      if args.has_key('RECH_LINEAIRE'):
+         if args['RECH_LINEAIRE'] != None:
+             motscles['RECH_LINEAIRE']  = args['RECH_LINEAIRE'].List_F()
+             
+      motscles['INCREMENT']   = INCREMENT.List_F()
+  
+      if   ARCHIVAGE   :
+         motscles['ARCHIVAGE']   = ARCHIVAGE.List_F()
+
+      if   etatinit == 1  :
+
+         if MASSIF:
+          __EVOL1 = STAT_NON_LINE(INFO = INFO,CARA_ELEM=__CARA,MODELE = __MO,CHAM_MATER = __CHMAT,
+            ETAT_INIT=init_dico, EXCIT = l_char,**motscles)
+         else:
+          __EVOL1 = STAT_NON_LINE(INFO = INFO,MODELE = __MO,CHAM_MATER = __CHMAT,
+            ETAT_INIT=init_dico, EXCIT = l_char,**motscles)
+
+      else:
+
+         if MASSIF:
+             __EVOL1 = STAT_NON_LINE(INFO = INFO,MODELE = __MO, CARA_ELEM=__CARA,CHAM_MATER = __CHMAT,
+                                 EXCIT = l_char,**motscles)
+         else:
+             __EVOL1 = STAT_NON_LINE(INFO = INFO,MODELE = __MO, CHAM_MATER = __CHMAT,
+                                 EXCIT = l_char,**motscles)
+
+
+      __EVOL1 = CALC_ELEM(reuse = __EVOL1,RESULTAT = __EVOL1,
+        OPTION = ('SIEF_ELNO_ELGA','EPSI_ELNO_DEPL','VARI_ELNO_ELGA'))
+      if MODELISATION=="3D":
+          angles=(ANGLE,0,0)
+          __EVOL=MODI_REPERE(RESULTAT=__EVOL1, MODI_CHAM=(
+              _F(NOM_CHAM='DEPL',NOM_CMP=('DX','DY','DZ'),TYPE_CHAM='VECT_3D',),
+              _F(NOM_CHAM='SIEF_ELNO_ELGA',NOM_CMP=('SIXX','SIYY','SIZZ','SIXY','SIXZ','SIYZ'),TYPE_CHAM='TENS_3D',),
+              _F(NOM_CHAM='EPSI_ELNO_DEPL',NOM_CMP=('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ'),TYPE_CHAM='TENS_3D',),
+                                  ),
+                     DEFI_REPERE=_F(REPERE='UTILISATEUR',ANGL_NAUT=angles),);
+      else :
+          angles=ANGLE
+          __EVOL=MODI_REPERE(RESULTAT=__EVOL1,MODI_CHAM=(
+                     _F(NOM_CHAM='DEPL',NOM_CMP=('DX','DY'),TYPE_CHAM='VECT_2D',),
+                     _F(NOM_CHAM='SIEF_ELNO_ELGA',NOM_CMP=('SIXX','SIYY','SIZZ','SIXY'),TYPE_CHAM='TENS_2D',),
+                     _F(NOM_CHAM='EPSI_ELNO_DEPL',NOM_CMP=('EPXX','EPYY','EPZZ','EPXY'),TYPE_CHAM='TENS_2D',),
+                                  ),
+                     DEFI_REPERE=_F(REPERE='UTILISATEUR',ANGL_NAUT=angles),);
+#     -- Recuperation des courbes
+
+      __REP_VARI = POST_RELEVE_T(ACTION = (
+          _F(INTITULE='VARI_INT',RESULTAT=__EVOL1,NOM_CHAM='VARI_ELNO_ELGA',
+            TOUT_CMP='OUI',OPERATION='EXTRACTION',NOEUD='P0'),))
+
+      __REP_EPSI = POST_RELEVE_T(ACTION = (
+          _F(INTITULE='EPSILON',RESULTAT=__EVOL,NOM_CHAM='EPSI_ELNO_DEPL',
+            TOUT_CMP='OUI',OPERATION='EXTRACTION',NOEUD     = 'P0'),))
+
+      __REP_SIGM = POST_RELEVE_T(ACTION = (
+          _F(INTITULE  = 'SIGMA',RESULTAT  =  __EVOL,NOM_CHAM  = 'SIEF_ELNO_ELGA',
+            TOUT_CMP  = 'OUI',OPERATION = 'EXTRACTION',NOEUD     = 'P0'),))
+      __REP_INV = POST_RELEVE_T(ACTION = (
+          _F(INTITULE  = 'INV',RESULTAT  =  __EVOL,NOM_CHAM  = 'SIEF_ELNO_ELGA',
+            INVARIANT  = 'OUI',OPERATION = 'EXTRACTION',NOEUD     = 'P0'),))
+      __REP_INV=CALC_TABLE( TABLE=__REP_INV,reuse=__REP_INV,
+               ACTION=_F(OPERATION='EXTR',NOM_PARA=('INST','TRACE','VMIS'), ) )
+
+      self.DeclareOut('REPONSE',self.sd)
+      REPONSE=CALC_TABLE( TABLE=__REP_EPSI,TITRE='TABLE ',ACTION=(
+                       _F(OPERATION='COMB',TABLE=__REP_SIGM,NOM_PARA=('INST'), ),
+                       _F(OPERATION='COMB',TABLE=__REP_INV ,NOM_PARA=('INST'), ),
+                       _F(OPERATION='COMB',TABLE=__REP_VARI,NOM_PARA=('INST'), ),))
+
+  return ier
+
diff --git a/Aster/Cata/cataSTA10/Macro/stanley_ops.py b/Aster/Cata/cataSTA10/Macro/stanley_ops.py
new file mode 100644 (file)
index 0000000..e8c0eab
--- /dev/null
@@ -0,0 +1,79 @@
+#@ MODIF stanley_ops Macro  DATE 16/10/2007   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+
+
+def stanley_ops(self,RESULTAT,MODELE,CHAM_MATER,CARA_ELEM,DISPLAY,**args):
+
+  """
+     Importation et lancement de Stanley
+  """
+
+  import os,string
+  import aster
+  from Accas import _F
+  from Noyau.N_utils import AsType
+  from Utilitai.Utmess import  UTMESS
+  from Utilitai.UniteAster import UniteAster
+
+  prev_onFatalError = aster.onFatalError()
+  aster.onFatalError('EXCEPTION')
+
+  ier=0
+
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  # Redefinition eventuelle du DISPLAY
+  if DISPLAY:
+    UTMESS('I','STANLEY_1',valk=DISPLAY)
+    os.environ['DISPLAY'] = DISPLAY
+
+  # Mode validation de la non-regression
+  if args['UNITE_VALIDATION']:
+     UTMESS('I','STANLEY_2')
+     UL = UniteAster()
+     FICHIER_VALID=UL.Nom(args['UNITE_VALIDATION'])
+  else:
+     FICHIER_VALID=None
+
+  # On ne lance Stanley que si la variable DISPLAY est définie
+  if os.environ.has_key('DISPLAY'):
+
+    import Stanley
+    from Stanley import stanley
+
+    if (RESULTAT and MODELE and CHAM_MATER):
+      _MAIL = aster.getvectjev( string.ljust(MODELE.nom,8) + '.MODELE    .LGRF        ' )
+      _MAIL = string.strip(_MAIL[0])
+      MAILLAGE = self.jdc.g_context[_MAIL]
+      if CARA_ELEM:
+        stanley.STANLEY(RESULTAT,MAILLAGE,MODELE,CHAM_MATER,CARA_ELEM)
+      else:
+        stanley.STANLEY(RESULTAT,MAILLAGE,MODELE,CHAM_MATER,None)
+    else:
+      stanley.PRE_STANLEY(FICHIER_VALID)
+
+  else:
+      UTMESS('A','STANLEY_3',valk=['STANLEY'])
+
+  aster.onFatalError(prev_onFatalError)
+
+  return ier
diff --git a/Aster/Cata/cataSTA10/Macro/test_fichier_ops.py b/Aster/Cata/cataSTA10/Macro/test_fichier_ops.py
new file mode 100644 (file)
index 0000000..5ae34da
--- /dev/null
@@ -0,0 +1,324 @@
+#@ MODIF test_fichier_ops Macro  DATE 10/11/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import sys
+import os
+import re
+
+# hashlib only exists in python>=2.5
+def hash_new():
+   try:
+      import hashlib
+      _hash_new = hashlib.md5()
+      print 'hashlib'
+   except ImportError:
+      import md5
+      _hash_new = md5.new()
+      print 'md5'
+   return _hash_new
+
+
+class TestFichierError(Exception):
+   pass
+
+
+def convert(x):
+   return float(x)
+
+def f_SOMM(somme, lx):
+   return somme + sum([convert(x) for x in lx])
+
+def f_SOMM_ABS(somme, lx):
+   return somme + sum([abs(convert(x)) for x in lx])
+
+def f_MINI(val, lx):
+   return min(val, min([convert(x) for x in lx]))
+
+def f_MAXI(val, lx):
+   return max(val, max([convert(x) for x in lx]))
+
+def f_MINI_ABS(val, lx):
+   return min(val, min([abs(convert(x)) for x in lx]))
+
+def f_MAXI_ABS(val, lx):
+   return max(val, max([abs(convert(x)) for x in lx]))
+
+dict_func_test = {
+   'SOMM'     : f_SOMM,
+   'SOMM_ABS' : f_SOMM_ABS,
+   'MINI'     : f_MINI,
+   'MAXI'     : f_MAXI,
+   'MINI_ABS' : f_MINI_ABS,
+   'MAXI_ABS' : f_MAXI_ABS,
+}
+
+#-------------------------------------------------------------------------------
+def test_fichier_ops(self, FICHIER, NB_VALE, VALE, VALE_K, TYPE_TEST,
+                           CRITERE, PRECISION, INFO, **kwargs):
+   """
+     Macro permettant de tester la non-regression d'un fichier.
+     On teste le nombre de réels présents, et, facultativement, la
+     somme de ces nombres et le texte du fichier.
+   """
+   ier = 0
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+
+   # On importe les definitions des commandes a utiliser dans la macro
+   # Le nom de la variable doit etre obligatoirement le nom de la commande
+   INFO_EXEC_ASTER = self.get_cmd('INFO_EXEC_ASTER')
+   DETRUIRE        = self.get_cmd('DETRUIRE')
+   CREA_TABLE      = self.get_cmd('CREA_TABLE')
+   TEST_TABLE      = self.get_cmd('TEST_TABLE')
+   
+   import aster
+   from Accas import _F
+   from Utilitai.Utmess import  UTMESS
+
+   is_ok = 0
+
+   # vérifier que le fichier a été fermé
+   tinfo__ = INFO_EXEC_ASTER(LISTE_INFO='ETAT_UNITE', FICHIER=FICHIER)
+   if tinfo__['ETAT_UNITE', 1].find('OUVERT') > -1:
+      UTMESS('S','TEST0_2',valk=FICHIER)
+
+   # lecture du fichier
+   if not os.path.isfile(FICHIER):
+      UTMESS('S', 'TEST0_3', valk=FICHIER)
+   fileobj = open(FICHIER, 'r')
+
+   # filtre par expression régulière
+   try:
+      fileobj = regexp_filter(fileobj, kwargs['EXPR_IGNORE'])
+   except TestFichierError, valk:
+      UTMESS('S', 'TEST0_1', valk=valk)
+
+   # calcule le nombre de réels et la somme ou min/max
+   nbval, valeur, chksum = test_iter(fileobj, function=dict_func_test[TYPE_TEST], verbose=(INFO > 1))
+   fileobj.close()
+
+   # produit le TEST_TABLE
+   refsum = VALE_K or 'non testé'
+   is_ok = int(chksum == refsum)
+   tab1__ = CREA_TABLE(LISTE=(_F(PARA='NBVAL',  LISTE_I=nbval,),
+                              _F(PARA='VALEUR', LISTE_R=valeur,),
+                              _F(PARA='TEXTE',  LISTE_I=is_ok),),)
+   if VALE is not None:
+      sVALE = '%20.13e' % VALE
+   else:
+      sVALE = 'non testé'
+   UTMESS('I', 'TEST0_4', vali=(nbval, NB_VALE), valr=valeur, valk=(chksum, refsum, FICHIER, sVALE))
+   
+   kwopt = { 'REFERENCE' : kwargs['REFERENCE'], }
+   if kwargs['REFERENCE'] == 'NON_REGRESSION':
+      kwopt['VERSION'] = kwargs['VERSION']
+   
+   TEST_TABLE(TABLE=tab1__,
+              NOM_PARA='NBVAL',
+              VALE_I=NB_VALE,
+              CRITERE='ABSOLU',
+              PRECISION=0,
+              **kwopt)
+
+   if VALE:
+      TEST_TABLE(TABLE=tab1__,
+                 NOM_PARA='VALEUR',
+                 VALE=VALE,
+                 CRITERE=CRITERE,
+                 PRECISION=PRECISION,
+                 **kwopt)
+
+   if VALE_K:
+      TEST_TABLE(TABLE=tab1__,
+                 NOM_PARA='TEXTE',
+                 VALE_I=int(True),
+                 PRECISION=0,
+                 CRITERE='ABSOLU',
+                 **kwopt)
+
+   DETRUIRE(CONCEPT=_F(NOM=(tinfo__, tab1__),),
+            ALARME='NON',INFO=1,)
+   return ier
+
+#-------------------------------------------------------------------------------
+def regexp_filter(file_in, regexp_ignore, debug=False):
+   """Filtre le fichier fourni (file descriptor) en utilisant les
+   expressions régulières fournies.
+   On retourne l'objet file vers le fichier modifié (ou non).
+   """
+   if not regexp_ignore:      # None or []
+      return file_in
+   # vérification des expressions régulières
+   if type(regexp_ignore) not in (list, tuple):
+      regexp_ignore = [regexp_ignore,]
+   l_regexp = []
+   for exp in regexp_ignore:
+      try:
+         obj = re.compile(exp)
+      except re.error, s:
+         raise TestFichierError, (s, str(exp))
+      else:
+         l_regexp.append(obj)
+   # filtre du fichier
+   file_out = os.tmpfile()
+   file_in.seek(0)
+   for i, line in enumerate(file_in):
+      if debug:
+         print 'LIGNE', i,
+      keep = True
+      for exp in l_regexp:
+         if exp.search(line):
+            keep = False
+            if debug:
+               print ' >>>>>>>>>> IGNOREE <<<<<<<<<<'
+            break
+      if keep:
+         file_out.write(line)
+         if debug:
+            print
+   file_out.seek(0)
+   return file_out
+
+
+#-------------------------------------------------------------------------------
+re_float_expo = re.compile('[-+]?[0-9\.]+[eED][\-\+]{0,1}[0-9]+')
+re_float      = re.compile('[-+]?[0-9]+?\.[0-9]*')
+re_int        = re.compile('[0-9]+')
+
+re_fortran    = re.compile('([0-9]+)[dD]([\-\+]{0,1}[0-9]+)')
+
+#-------------------------------------------------------------------------------
+def test_iter(obj, function, verbose=False):
+   """
+   Cette fonction compte le nombre de réels dans le fichier et une grandeur
+   à partir des valeurs (somme, sommes des valeurs absolues, min/max...).
+   IN :
+      obj      : objet 'file' ou 'string' sur le lequel on peut itérer
+      function : fonction de test   val = func_test(val, [xi, ...])
+      verbose  : on affiche le résumé si info>0
+   OUT :
+      nombre de valeurs, valeur résultat
+   """
+   max_buff_size = 1000
+   nbval = 0
+   val = 0.
+   hfile = hash_new()
+   
+   # Si on lit tout le fichier d'un coup, on va environ 3 fois plus vite
+   # que si on le lit ligne à ligne, mais on consomme en mémoire environ
+   # 5 fois la taille du fichier...
+   # En lisant par paquet de 1000 (ou 10000), on va quasiment aussi vite
+   # en consommant très peu de mémoire.
+   
+   #    fichier     tout   ligne/ligne   1000 lignes
+   #     10 Mo       3 s      10 s       3 s
+   #     50 Mo      17 s      48 s      17 s
+   #    100 Mo      34 s      96 s      35 s
+   
+   # l'itérateur est l'objet file lui-même ou on le crée sur la liste
+   if type(obj) is file:
+      obj.seek(0)
+      iterator = obj
+   else:
+      iterator = iter(obj)
+   
+   ok = True
+   buff = []
+   while ok:
+      try:
+         text = iterator.next()
+      except StopIteration:
+         ok = False
+         text = ''
+      buff.append(text)
+      if ok and len(buff) < max_buff_size:
+         continue
+      else:
+         text = ''.join(buff)
+         buff = []
+
+      l_float = re_float_expo.findall(text)
+      l_float = [s.replace('D', 'E') for s in l_float]
+      text =    re_float_expo.sub('', text)
+      l_float.extend(re_float.findall(text))
+      text =         re_float.sub('', text)
+      l_float.extend(  re_int.findall(text))
+      text =           re_int.sub('', text)
+      
+      nbval += len(l_float)
+      val    = function(val, l_float)
+
+      text = ''.join([s.strip() for s in text.split()])
+      hfile.update(text)
+      
+      if verbose:
+         print 'Nombres réels et entiers :'
+         print l_float
+         print 'Texte :'
+         print text
+   
+   chksum = hfile.hexdigest()
+   
+   return nbval, val, chksum
+
+#-------------------------------------------------------------------------------
+def test_file(filename, regexp_ignore=[], type_test='SOMM', verbose=False):
+   """Raccourci pour tester rapidement un fichier (utilisé par stanley.py).
+   """
+   if type(regexp_ignore) not in (list, tuple):
+      regexp_ignore = [regexp_ignore,]
+
+   fileobj = open(filename, 'r')
+   fileobj = regexp_filter(fileobj, regexp_ignore)
+
+   nbv, val, chksum = test_iter(fileobj, function=dict_func_test[type_test], verbose=verbose)
+
+   return nbv, val, chksum
+
+#-------------------------------------------------------------------------------
+if __name__ == '__main__':
+   from optparse import OptionParser, OptionGroup
+
+   p = OptionParser(usage='usage: %s fichier [options]' % sys.argv[0])
+   p.add_option('--type_test',
+      action='store', dest='type_test', default='SOMM',
+      help='type du test : SOMM, SOMM_ABS, MIN, MAX')
+   p.add_option('--expr_ignore',
+      action='store', dest='exp', type='string',
+      help='expression régulière à ignorer')
+   p.add_option('-v', '--verbose',
+      action='store_true', dest='verbose', default=False,
+      help='mode bavard')
+   opts, args = p.parse_args()
+
+   if len(args) == 0:
+      p.error('fichier à tester ?')
+
+   if opts.exp is None:
+      exp = []
+   else:
+      exp = [opts.exp]
+
+   fileobj = open(args[0], 'r')
+   fileobj = regexp_filter(fileobj, exp)
+   nbv2, sumv2, chksum2 = test_iter(fileobj, function=dict_func_test[opts.type_test], verbose=opts.verbose)
+   print '%6d valeurs, resultat = %f, texte : %s' % (nbv2, sumv2, chksum2)
+
+
diff --git a/Aster/Cata/cataSTA10/Macro/test_fonction_ops.py b/Aster/Cata/cataSTA10/Macro/test_fonction_ops.py
new file mode 100644 (file)
index 0000000..8c4318d
--- /dev/null
@@ -0,0 +1,945 @@
+#@ MODIF test_fonction_ops Macro  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE SELLENET N.SELLENET
+
+import os
+
+from Noyau.N_types import is_complex, is_str, is_enum
+
+epsi = 1e-15
+
+# Format
+ligne_fct_1 = """ ---- FONCTION         %(nom_para)s"""
+ligne_fct_11= """ ---- FONCTION         %(nom_para)s TITRE """
+ligne_fct_2 = """      %(nom_fct)s %(val_para)s """
+ligne_fct_22= """      %(nom_fct)s %(val_para)s %(titre)s """
+ligne_fct_3 = """      %(refe)s %(legende)s %(valref)s %(valcal)s %(erreur)s %(tole)s """ 
+ligne_fct_4 = """ %(testOk)s %(refe)s %(legende)s %(valref)s %(valcal)s %(erreur)s %(tole)s """ 
+
+ligne_nap_1 = """ ---- NAPPE            %(nom_para_0)s %(nom_para)s """
+ligne_nap_2 = """      %(nom_nap)s %(val_para_0)s %(val_para)s"""
+
+ligne_att_1 = """ ---- %(nom)s %(nom_attr)s %(nom_para)s %(vale)s """
+ligne_att_2 = """ ---- %(nom)s %(nom_attr)s %(vale)s """
+ligne_att_11= """      %(nom)s %(nom_attr)s %(nom_para)s %(vale)s """
+ligne_att_22= """      %(nom)s %(nom_attr)s %(vale)s """
+ligne_att_3 = """ %(testOk)s TEST_ATTRIBUTS """
+
+ligne_separatrice = 80*'-'
+
+ligne_intspc   = """ ---- INTERSPECTRE        %(nom_para)s"""
+ligne_intspc_1 = """      %(nom)s %(val_para)s"""
+
+list_fct  = ['REFERENCE','LEGENDE','VALE_REF','VALE_CAL','ERREUR','TOLE']  
+list_attr = ['ATTR','PARA','VALE']  
+
+def TesterValeur(nomPara,valPu,valRef,res,epsi,crit,sSigne):
+   """
+      Teste de la valeur calculee par rapport a la valeur de reference
+   """
+   import aster, cmath, math
+   
+   isTestOk = 0
+   vtc = valRef[0]
+   if is_enum(vtc):
+      assert( (vtc[0]=='RI')|(vtc[0]=='MP' ) )
+      if vtc[0]=='RI':
+         vtc = vtc[1]+1j*vtc[2]
+      else:
+         vtc = vtc[1]*cmath.exp(1j*math.pi*vtc[2]/180)
+   if sSigne == 'OUI':
+      res = abs(res)
+      if is_complex(valRef[0]):
+         vtc = abs(vtc)
+   
+   # Recherche de la valeur la plus proche de la valeur calculee
+   # dans le tableau valRef
+   minTmp = abs(res - vtc)
+   curI = 0
+   for i in range(len(valRef)):
+      vtc = valRef[i]
+      if is_enum(vtc):
+         assert( (vtc[0]=='RI')|(vtc[0]=='MP' ) )
+         if vtc[0]=='RI':
+            vtc = vtc[1]+1j*vtc[2]
+         else:
+            vtc = vtc[1]*cmath.exp(1j*math.pi*vtc[2]/180)
+      if sSigne == 'OUI' and is_complex(vtc):
+         vtc = abs(vtc)
+      valTmp = abs(res-vtc)
+      if valTmp < minTmp:
+         valTmp = minTmp
+         curI = i
+   
+   vtc = valRef[curI]
+   if is_enum(vtc):
+      assert( (vtc[0]=='RI')|(vtc[0]=='MP' ) )
+      if vtc[0]=='RI':
+         vtc = vtc[1]+1j*vtc[2]
+      else:
+         vtc = vtc[1]*cmath.exp(1j*math.pi*vtc[2]/180)
+   if sSigne == 'OUI' and is_complex(vtc):
+      vtc = abs(vtc)
+
+   testOk = 'NOOK'
+   curEps = 0
+   err = 0
+   pourcent = ' '
+   # Calcul de l'erreur commise
+   if crit[0:4] == 'RELA':
+      isTestOk = ( abs(res-vtc) <= epsi*abs(vtc) )
+      if vtc != 0:
+         if is_complex(res) or is_complex(vtc):
+            err = abs(res - vtc)/abs(vtc)*100
+         else:
+            err = (res - vtc)/vtc*100
+      else:
+         err = 999.999999
+      if isTestOk: testOk = ' OK '
+      curEps = epsi*100
+      pourcent = '%'
+   else:
+      isTestOk = ( abs(res-vtc) <= epsi )
+      if is_complex(res) or is_complex(vtc):
+         err = abs(res - vtc)
+      else:
+         err = res - vtc
+      if isTestOk: testOk = ' OK '
+      curEps = epsi
+   
+   return {'testOk' : testOk, 'erreur' : err, 'epsilon' : curEps, 'valeurRef' :vtc}
+
+
+def RoundValues(type,res,vtc,err,curEps):
+   """
+      Effectue des troncatures en fonctions des valeurs réelles fournies
+      et retourne eventuellement des valeurs sans exposant
+   """
+   #valeur calculee, valeur de reference:
+   #------------------------------------
+   if type=='R':
+     res2 = """%20.15E """%res
+     vtc2 = """%20.15E """%vtc
+     
+     # détermination du nombre de décimales à considérer : ndec
+     ndec=0
+     ii=res2.find('E')
+     sgExpoRes=res2[ii+1:ii+2]
+     expoRes=int(res2[ii+2:ii+4])
+     ii=vtc2.find('E')
+     sgExpoVtc=vtc2[ii+1:ii+2]
+     expoVtc=nexpo=int(res2[ii+2:ii+4])
+     # si les signes des exposants diffèrent : ndec = 6
+     if sgExpoRes != sgExpoVtc : ndec = 6
+     # si les signes des valeurs diffèrent : ndec = 6
+     if res*vtc<0 : ndec = 6
+     #si les exposants diffèrent : ndec = 6
+     if expoRes!=expoVtc : ndec = 6
+     #position de la première décimale différente : posD
+     if ndec == 0 :
+       kk=0
+       for k in range(len(res2)):
+          if res2[k]==' ':continue
+          if res2[k]==vtc2[k]: 
+             kk=kk+1
+             continue;
+          break;
+       if  kk==0: 
+          ndec=6
+       else: 
+          posD=kk-1
+          ndec=min(14,posD+2)
+       #on supprime les zéros inutiles
+       if ndec==14:
+          i1=res2.find('E');i2=res2.find('.');
+          kk=0
+          for k in range(i1-1,i2,-1):
+              if res2[k]=='0' and res2[k]==vtc2[k]:
+                 kk=kk+1
+                 continue       
+              break       
+          if kk>0:  ndec=min(14,i1-kk-i2)   
+     #troncatures
+     chndec="""%20."""+str(ndec)+"""E"""
+     rest=chndec%res
+     rest=rest.strip()
+     vtct=chndec%vtc
+     vtct=vtct.strip()
+     
+     #écriture éventuelle sans exposant
+#     if(sgExpoRes=='+'):
+#        if(ndec>=expoRes):
+#          chdiff="""%20."""+str(min(1,ndec-expoRes))+"""f"""
+#          resr=chdiff%res
+#          resr=resr.strip()
+#          vtcr=chdiff%vtc
+#          vtcr=vtcr.strip()
+#        else:
+#          resr=rest
+#          vtcr=vtct
+#     else:
+#        if(ndec+expoRes)<=12:     
+#          chadd="""%20."""+str(ndec+expoRes-1)+"""f"""
+#          resr=chadd%res
+#          resr=resr.strip()
+#          vtcr=chadd%vtc
+#          vtcr=vtcr.strip()
+#        else:
+#          resr=rest
+#          vtcr=vtct
+   if(abs(res)>=0.01 and abs(res)<100000):
+      chdiff="""%20."""+str(ndec)+"""f"""
+      resr=chdiff%res
+      resr=resr.strip()
+   else:
+      resr=rest.strip()
+
+   if(abs(vtc)>=0.01 and abs(vtc)<100000):
+      chdiff="""%20."""+str(ndec)+"""f"""
+      vtcr=chdiff%vtc
+      vtcr=vtcr.strip()
+   else:
+      vtcr=vtct.strip()
+
+
+
+
+   # erreur et tolerance:
+   #--------------------
+   listEpsiOut=[];
+   listEpsiIn=[err,curEps];
+   for erin in listEpsiIn:
+     err2 = ("""%5.1E """%(abs(erin))).strip()
+     chdiff="""%5.1f"""
+     ii=err2.find('E')
+     expo=err2[ii+2:ii+4]
+     sg=err2[ii+1:ii+2]
+     nexpo=int(expo)
+     if(abs(erin)>0.01 and abs(erin)<100000):
+        #listEpsiOut.append((str(abs(erin)).strip())[:nexpo+2])
+        listEpsiOut.append((chdiff%abs(erin)).strip())
+     else:
+        listEpsiOut.append(err2)
+
+   errr=listEpsiOut[0]
+   curEpsr=listEpsiOut[1]
+   
+   return (resr,vtcr,errr,curEpsr)
+   
+
+def AfficherResultat(dicoValeur, nomPara, ref, legende, crit, res, valPu, txt):
+   """
+      Gestion de l'affichage par ajout de texte au tableau txt
+      passe en parametre
+   """
+   testOk = dicoValeur['testOk']
+   err = dicoValeur['erreur']
+   curEps = dicoValeur['epsilon']
+   vtc = dicoValeur['valeurRef']
+   
+   pourcent = ' '
+   if crit[0:4] == 'RELA':
+      pourcent = '%'
+
+   if is_complex(res):
+     if not is_complex(vtc):
+        vtc0=complex(vtc,0)
+     else:
+        vtc0=vtc
+     resr,vtcr,errr,curEpsr=RoundValues('R',res.real,vtc0.real,err,curEps)
+     resc,vtcc,errr,curEpsr=RoundValues('R',res.imag,vtc0.imag,err,curEps)
+   else:
+     vtc0=vtc
+     res2,vtc2,errr,curEpsr=RoundValues('R',res,vtc0,err,curEps)
+
+   if is_complex(res):
+      if(res.imag<0):
+         val_cal=resr.upper()+resc.upper()+'j'
+      else:
+         val_cal=resr.upper()+'+'+resc.upper()+'j'
+   else:
+      val_cal=res2.upper()
+      
+  
+   if is_complex(vtc0):
+      if(vtc0.imag<0):
+         val_ref=vtcr.upper()+vtcc.upper()+'j'
+      else:
+         val_ref=vtcr.upper()+'+'+vtcc.upper()+'j'
+   else:
+       val_ref=vtc2.upper()
+   
+   espace = (len(val_ref)-8)*' '
+   chvalref='VALE_REF'+espace
+   espace = (len(val_cal)-8)*' '
+   chvalcal='VALE_CAL'+espace
+
+   if(len(val_ref)<=16):nvref=16
+   elif(len(val_ref)<=24):nvref=24
+   elif(len(val_ref)<=36):nvref=36
+   else: nvref=48
+   
+   if(len(val_cal)<=16):nvcal=16
+   elif(len(val_cal)<=24):nvcal=24
+   elif(len(val_cal)<=36):nvcal=36
+   else: nvcal=48
+
+   # Ajout du texte en fonction du resultat: ligne 3
+   current = { 'refe'    : list_fct[0]+(16 - len(list_fct[0]))*' ',
+               'legende' : list_fct[1]+(16 - len(list_fct[1]))*' ',
+               'valref'  : list_fct[2]+(nvref - len(list_fct[2]))*' ',
+               'valcal'  : list_fct[3]+(nvcal - len(list_fct[3]))*' ',
+               'erreur'  : list_fct[4]+(16 - len(list_fct[4]))*' ',
+               'tole'    : list_fct[5]+(16 - len(list_fct[5]))*' ',
+             }
+   txt.append(ligne_fct_3 % current)
+    
+   # Ajout du texte en fonction du resultat : ligne 4
+   current = {  'testOk'  : testOk,
+                'refe'    : ref+(16 - len(ref))*' ',
+                'legende' : legende+(16 - len(legende))*' ',
+                'valref'  : val_ref+(nvref - len(val_ref))*' ',
+                'valcal'  : val_cal+(nvcal - len(val_cal))*' ', 
+                'erreur'  : str(errr)+pourcent+(16 - len(str(errr)+pourcent))*' ',
+                'tole'    : str(curEpsr)+pourcent+(16 - len(str(curEpsr)+pourcent))*' ',
+            }
+   txt.append(ligne_fct_4 % current)
+   txt.append(' ')
+    
+# -----------------------------------------------------------------------------
+def test_fonction_ops(self,TEST_NOOK,VALEUR,ATTRIBUT,TABL_INTSP,**args):
+   """
+      Corps de la macro TEST_FONCTION
+   """
+   macro='TEST_FONCTION'
+   import aster
+   from Accas import _F
+   from Utilitai.Utmess import UTMESS
+   from Noyau.N_FONCTION import formule, formule_c
+   from SD.co_fonction import fonction_sdaster, fonction_c, nappe_sdaster
+   from SD.sd_fonction import sd_fonction
+   from Cata_Utils.t_fonction import t_fonction_c
+   
+   CALC_FONCTION = self.get_cmd('CALC_FONCTION')
+   DETRUIRE = self.get_cmd('DETRUIRE')
+   
+   ier=0
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+   
+   if ( TEST_NOOK=='OUI' ) & ( TABL_INTSP != None ):
+      UTMESS('F','PREPOST3_92')
+   
+   # txt sert a l'affichage dans le fichier RESULTAT
+   txt = ['',]
+   txt.append(ligne_separatrice)
+
+   if VALEUR != None:
+      # Boucle sur les VALEURS
+      for val in VALEUR:
+         dres = val.cree_dict_valeurs(val.mc_liste)
+         
+         # Recherche des mots-cles simples
+         ssigne = dres['VALE_ABS']
+         epsi = dres['PRECISION']
+         crit = dres['CRITERE']
+         fct = dres['FONCTION']
+         sensi = dres['SENSIBILITE']
+         nompara = dres['NOM_PARA']
+         if nompara == None:
+            nompara = ''
+         ref = dres['REFERENCE']
+         ver = None
+         if ref == 'NON_REGRESSION':
+            ver = dres['VERSION']
+         legende = dres['LEGENDE']
+         if legende == None:
+            legende='XXXX'
+         nomfct = fct.nomj.nomj
+         
+         # Transformation de nompara en liste
+         if (not is_enum(nompara)) and nompara != None:
+            nompara = [nompara,]
+         
+         bcle = []
+         pres_sensi = 0
+         # Si on a des parametres sensibles, on boucle dessus
+         # sinon, on boucle uniquement sur la fonction a tester
+         if sensi == None:
+            bcle = [fct,]
+         else:
+            pres_sensi = 1
+            if not is_enum(sensi):
+               bcle = [sensi,]
+         
+         for ps in bcle:
+            # Suivant le cas, la foction est soit issue des parametres
+            # sensibles soit directement de dres['FONCTION']
+            lafonc = None
+            titre = ''
+            # Si on a des parametres sensible la fonction n'est pas ps
+            if pres_sensi == 1:
+               ncomp = self.jdc.memo_sensi.get_nocomp(fct.nom, ps.nom)
+               lafonc = self.jdc.memo_sensi.d_sd[ncomp]
+               titre = 'SENSIBILITE AU PARAMETRE '+ps.nomj.nomj
+            else:
+               lafonc = ps
+            
+            res = 0.
+            typeFct = ''
+            valpu = dres['VALE_PARA']
+            if not is_enum(valpu): valpu = [valpu,]
+            
+            valref  = None
+            if (type(lafonc) == formule_c) or (type(lafonc) == fonction_c):
+               valref = dres['VALE_REFE_C']
+            else:
+               valref = dres['VALE_REFE']
+            # L'enjeu est de transformer valref en tableau
+            if not is_enum(valref): valref = [valref,]
+            else:
+               if is_str(valref[0]):
+                  valref = [valref,]
+            
+            intervalle = dres['INTERVALLE']
+            
+            ier = 0
+            # Distinction des cas
+            # - "fonction" sur un intervalle
+            # - "formule",
+            # - "fonction" ou "nappe"
+            if (type(lafonc) == fonction_sdaster) and intervalle != None:
+               fctProl = lafonc.PROL.get()
+               prolG = 'rien'
+               if fctProl[4][0:1] == 'C':
+                  prolG = 'CONSTANT'
+               elif fctProl[4][0:1] == 'E':
+                  prolG = 'EXCLU'
+               elif fctProl[4][0:1] == 'L':
+                  prolG = 'LINEAIRE'
+               prolD = 'rien'
+               if fctProl[4][1:2] == 'C':
+                  prolD = 'CONSTANT'
+               elif fctProl[4][1:2] == 'E':
+                  prolD = 'EXCLU'
+               elif fctProl[4][1:2] == 'L':
+                  prolD = 'LINEAIRE'
+               curInterpol = [fctProl[1][0:3], fctProl[1][4:7]]
+               
+               fctInt = CALC_FONCTION(INTEGRE = _F(FONCTION=lafonc,),
+                                      PROL_DROITE = prolD,
+                                      PROL_GAUCHE = prolG,
+                                      INTERPOL = curInterpol)
+               
+               res1 = fctInt(intervalle[0])
+               res2 = fctInt(intervalle[1])
+               
+               DETRUIRE(CONCEPT = _F(NOM = fctInt),INFO = 1)
+               
+               res = (res2-res1)/(intervalle[1]-intervalle[0])
+               valpu[0] = intervalle[0]
+               
+            elif type(lafonc) in (formule, formule_c):
+               # Lecture des valeurs de reference dans les mots-cles simples
+               if type(lafonc) == formule_c: typeFct = 'formule_c'
+               else: typeFct = 'formule'
+               
+               # On cherche les valeurs de reference passees a TEST_FONCTION et
+               # on les trie grace a ceux de la formule
+               paramFormule = lafonc.Parametres()['NOM_PARA']
+               if not is_enum(paramFormule):
+                  paramFormule = [paramFormule,]
+               if nompara[0] == '':
+                  nompara = paramFormule
+               
+               # On verifie que la formule a bien le meme nombre de parametres
+               # que ceux passes a la fonction TEST_FONCTION
+               if len(nompara) != len(paramFormule):
+                  ier = 160
+                  UTMESS('A+','FONCT0_9',valk=(lafonc.nomj.nomj))
+                  UTMESS('A','FONCT0_14',vali=(len(nompara),len(paramFormule)))
+                  return 0.
+               
+               # Trie des parametres passes a la fonction TEST_FONCTION pour
+               # correspondre a l'ordre de ceux de la formule
+               nParamOrdo = []
+               vParamOrdo = []
+               for iPN in range(len(paramFormule)):
+                  nParamOrdo.append('')
+                  #vParamOrdo.append('')
+               
+               compteur = 0
+               for iPN in range(len(paramFormule)):
+                  i = 0
+                  for iPU in range(len(nompara)):
+                     if paramFormule[iPN] == nompara[iPU]:
+                        if nParamOrdo[iPN] == '':
+                           vParamOrdo.append(valpu[iPU])
+                           nParamOrdo[iPN] = paramFormule[iPN]
+                           compteur = compteur + 1
+                        else:
+                           ier = 120
+                           UTMESS('A+','FONCT0_9',valk=(lafonc.nomj.nomj))
+                           UTMESS('A','FONCT0_15',valk=nompara)
+                           res = 0.
+                     i = i + 1
+                  if nParamOrdo[iPN] == '':
+                     ier = 130
+                     UTMESS('A+','FONCT0_9',valk=(lafonc.nomj.nomj))
+                     UTMESS('A','FONCT0_16',valk=paramFormule)
+                     UTMESS('A','FONCT0_17',valk=nompara)
+                     return 0.
+               
+               # Si tout est Ok, on calcul la valeur de la formule
+               if ier == 0:
+                  res = lafonc(*vParamOrdo)
+               
+            # Cas fonction et nappe
+            elif type(lafonc) in (fonction_sdaster, fonction_c, nappe_sdaster):
+               # Recuperation du .PROL de la fonction
+               fct_prol = lafonc.PROL.get_stripped()
+               if lafonc.PROL == None: UTMESS('F','PREPOST3_93')
+               
+               nompu = ''
+               if nompara[0] != '':
+                  nompu = nompara[0]
+               else:
+                  nompu = fct_prol[2]
+                  nompara = [nompu,]
+               
+               # Une nappe a forcement 2 parametres
+               if (fct_prol[0] == 'NAPPE') & (len(nompara) == 1):
+                  UTMESS('A','PREPOST3_94')
+                  break
+               
+               # Lecture de la valeur de reference
+               if fct_prol[0] == 'FONCT_C':
+                  typeFct = 'fonction_c'
+               else:
+                  if fct_prol[0] == 'NAPPE': typeFct = 'nappe'
+                  else: typeFct = 'fonction'
+               
+               # Calcul de la fonction
+               res = 0
+               if type(lafonc) in (fonction_sdaster, fonction_c):
+                  res = lafonc(valpu[0])
+               else:
+                  # Remise dans l'ordre des param
+                  paramNappe = [fct_prol[2], fct_prol[6]]
+                  vParamOrdo = ['','']
+                  for iPN in range(len(paramNappe)):
+                     i = 0
+                     for iPU in range(len(nompara)):
+                        if paramNappe[iPN] == nompara[iPU]:
+                           if vParamOrdo[iPN] != '':
+                              ier = 120
+                              UTMESS('A+','FONCT0_9',valk=(lafonc.nomj.nomj))
+                              UTMESS('A','FONCT0_15',valk=nompara)
+                           else:
+                              vParamOrdo[iPN] = valpu[iPU]
+                        i = i + 1
+                     if vParamOrdo[iPN] == '':
+                        ier = 130
+                        UTMESS('A+','FONCT0_9',valk=(lafonc.nomj.nomj))
+                        UTMESS('A','FONCT0_16',valk=paramNappe)
+                        UTMESS('A','FONCT0_17',valk=nompara)
+                  res = lafonc(vParamOrdo[0],vParamOrdo[1])
+            else: ier = 150
+            
+            # Construction de l'affiche du resultat
+            current = {}
+
+            nomLastPara = nompara[len(nompara)-1]
+            valLastPara = valpu[len(valpu)-1]
+            if (typeFct == 'nappe'):
+
+               #ligne 1
+               nb_espace = 16-len(str(nompu))
+               espace = nb_espace*' '
+               current['nom_para_0'] = str(nompu)+espace
+               nb_espace = 16-len(str(nomLastPara))
+               espace = nb_espace*' '
+               current['nom_para'] = str(nomLastPara)+espace
+               txt.append(ligne_nap_1 % current)
+
+               #ligne 2
+               current = {}
+               nb_espace = 16-len(nomfct)
+               espace = nb_espace*' '
+               current['nom_nap'] = nomfct+espace
+               nb_espace = 16-len(str(valpu[0]))
+               espace = nb_espace*' '
+               current['val_para_0'] = str(valpu[0])+espace
+               nb_espace = 16-len(str(valLastPara))
+               espace = nb_espace*' '
+               current['val_para'] = str(valLastPara)+espace
+               txt.append(ligne_nap_2 % current)
+
+
+            else:
+
+               #ligne 1
+               nb_espace = 16-len(str(nomLastPara))
+               espace = nb_espace*' '
+               current['nom_para'] = str(nomLastPara)+espace
+               if(len(titre)>1):txt.append(ligne_fct_11% current)
+               else:txt.append(ligne_fct_1% current) 
+
+               #ligne 2
+               current = {}
+               nb_espace = 16-len(nomfct)
+               espace = nb_espace*' '
+               current['nom_fct'] = nomfct+espace
+               nb_espace = 16-len(str(valLastPara))
+               espace = nb_espace*' '
+               current['val_para'] = str(valLastPara)+espace
+               if(len(titre)>1):
+                  nb_espace = 33-len(titre)
+                  espace = nb_espace*' '
+                  current['titre'] = titre
+                  txt.append(ligne_fct_22 % current)
+               else:
+                  txt.append(ligne_fct_2 % current)
+
+            if ref == None: ref = 'NON_DEFINI'
+            
+            # Test des valeurs calculees
+            curDict=TesterValeur(nomLastPara,valLastPara,valref,res,epsi,crit,ssigne)
+            
+            if TEST_NOOK == 'OUI':
+               if ier == 0:
+                  testOk = curDict['testOk']
+                  if testOk == ' OK ':
+                     txt.append('NOOK PAS DE CHANCE LE TEST EST CORRECT !!!')
+                  else:
+                     AfficherResultat(curDict, nomLastPara, ref, legende, crit, res, valLastPara, txt)
+               elif ier == 120:
+                  txt.append(' OK  PARAMETRE EN DOUBLE')
+               elif ier == 130:
+                  txt.append(' OK  PARAMETRE NON CORRECT')
+               elif ier == 150:
+                  txt.append(' OK  TYPE DE FONCTION NON TRAITE')
+               elif ier == 160:
+                  txt.append(' OK  PAS ASSEZ DE PARAMETRES')
+            else:
+               if ier != 0:
+                  txt.append('NOOK PB INTERPOLATION. VOIR MESSAGE CI-DESSUS')
+               else:
+                  AfficherResultat(curDict,nomLastPara,ref,legende,crit,res,valLastPara,txt)
+   
+   if ATTRIBUT != None:
+      first_affiche_ligne1=True;
+      resu_test_attr=' OK '
+      # Boucle sur le mot-cle ATTRIBUT
+      for attr in ATTRIBUT:
+         dres = attr.cree_dict_valeurs(attr.mc_liste)
+         # Lecture des mots-cles simples
+         ref = dres['REFERENCE']
+         ver = None
+         if ref == 'NON_REGRESSION':
+            ver = dres['VERSION']
+         fonction = dres['FONCTION']
+         fctProl = fonction.PROL.get_stripped()
+         typeFct = fctProl[0]
+         para = dres['PARA']
+         fctPara = fonction.PARA.get()
+         
+         pos = 0
+         # Cas particulier d'une nappe qui a 2 dimensions
+         if typeFct == 'NAPPE':
+            if para != None:
+               # Recherche de la fonction liee a para
+               precPara = dres['PREC_PARA']
+               critPara = dres['CRIT_PARA']
+               LOK = 0
+               compteur = 0
+               for curPara in fctPara:
+                  if critPara[0:4] == 'RELA':
+                     LOK = ( abs(para-curPara) <= precPara*abs(curPara) )
+                  else:
+                     LOK = ( abs(para-curPara) <= precPara )
+                  if LOK:
+                     pos = compteur
+                     break
+                  compteur = compteur + 1
+               if not LOK:
+                  UTMESS('A','PREPOST3_95')
+            else:
+               para = fctPara[0]
+         
+         # Lecture des parametres de reference
+         nomAttr = dres['ATTR']
+         valAttrRef = dres['ATTR_REFE']
+         
+         # Recherche de la valeur de l'attribut dans le .PROL
+         nompu = ''
+         testOk = 'NOOK'
+         if nomAttr == 'INTERPOL_FONC':
+            nompu = fctProl[7+2*(pos)]+' '
+         elif nomAttr == 'INTERPOL':
+            nompu = fctProl[1]+' '
+         elif nomAttr == 'NOM_PARA_FONC':
+            nompu = fctProl[6]
+         elif nomAttr == 'NOM_PARA':
+            nompu = fctProl[2]
+         elif nomAttr == 'NOM_RESU':
+            nompu = fctProl[3]
+         elif nomAttr == 'PROL_GAUCHE_FONC':
+            prolFonc = fctProl[7+2*(pos)+1]
+            nompu = prolFonc[0:1]
+            if nompu == 'E':
+               nompu = 'EXCLU'
+            elif nompu == 'C':
+               nompu = 'CONSTANT'
+            elif nompu == 'L':
+               nompu = 'LINEAIRE'
+         elif nomAttr == 'PROL_DROITE_FONC':
+            prolFonc = fctProl[7+2*(pos)+1]
+            nompu = prolFonc[1:2]
+            if nompu == 'E':
+               nompu = 'EXCLU'
+            elif nompu == 'C':
+               nompu = 'CONSTANT'
+            elif nompu == 'L':
+               nompu = 'LINEAIRE'
+         elif nomAttr == 'PROL_GAUCHE':
+            prolFonc = fctProl[4]
+            nompu = prolFonc[0:1]
+            if nompu == 'E':
+               nompu = 'EXCLU'
+            elif nompu == 'C':
+               nompu = 'CONSTANT'
+            elif nompu == 'L':
+               nompu = 'LINEAIRE'
+         elif nomAttr == 'PROL_DROITE':
+            prolFonc = fctProl[4]
+            nompu = prolFonc[1:2]
+            if nompu == 'E':
+               nompu = 'EXCLU'
+            elif nompu == 'C':
+               nompu = 'CONSTANT'
+            elif nompu == 'L':
+               nompu = 'LINEAIRE'
+         
+         # Test de la valeur
+         if ( nompu == valAttrRef ): testOk = ' OK '
+         if TEST_NOOK == 'OUI':
+            if testOk == ' OK ': testOk = 'NOOK'
+            else: testOk = ' OK '
+         if testOk=='NOOK':resu_test_attr='NOOK'
+
+         # Construction de l'affichage
+         nomFct = fonction.nomj.nomj
+
+         # ligne 1 (affichée qu'à la première occurrence)
+         current = {}
+         if first_affiche_ligne1 : 
+             first_affiche_ligne1=False
+             if typeFct == 'NAPPE':
+                nb_espace = 16-len('NAPPE')
+                espace = nb_espace*' '
+                current['nom']  = 'NAPPE'+espace
+             else:
+                nb_espace = 16-len('FONCTION')
+                espace = nb_espace*' '
+                current['nom']  = 'FONCTION'+espace
+
+             nb_espace = 16-len(list_attr[0])
+             espace = nb_espace*' '
+             current['nom_attr']  = list_attr[0]+espace
+             if typeFct == 'NAPPE':
+                nb_espace = 16-len(list_attr[1])
+                espace = nb_espace*' '
+                current['nom_para']  = list_attr[1]+espace
+             nb_espace = 16-len(list_attr[2])
+             espace = nb_espace*' '
+             current['vale']  = list_attr[2]+espace
+             if typeFct == 'NAPPE':
+                txt.append(ligne_att_1 % current)
+             else:
+                txt.append(ligne_att_2 % current)
+         
+         # ligne 2
+         current = {}
+         nb_espace = 16-len(nomFct)
+         espace = nb_espace*' '
+         current['nom']  = nomFct+espace
+         nb_espace = 16-len(nomAttr)
+         espace = nb_espace*' '
+         current['nom_attr'] = nomAttr+espace
+         if typeFct == 'NAPPE':
+            nb_espace = 16-len(str(para))
+            espace = nb_espace*' '
+            current['nom_para'] = str(para)+espace
+         nb_espace = 16-len(nompu)
+         espace = nb_espace*' '
+         current['vale']  = nompu+espace
+         if typeFct == 'NAPPE':
+            txt.append(ligne_att_11 % current)
+         else:
+            txt.append(ligne_att_22 % current)
+      current = {}
+      current['testOk']  = resu_test_attr
+      txt.append(ligne_att_3 % current)
+  
+   if TABL_INTSP != None:
+      # Boucle sur interspectres
+      for intSpec in TABL_INTSP:
+         dres = intSpec.cree_dict_valeurs(intSpec.mc_liste)
+         ref = dres['REFERENCE']
+         ver = None
+         if ref == 'NON_REGRESSION':
+            ver = dres['VERSION']
+         crit = dres['CRITERE']
+         epsi = dres['PRECISION']
+         legende = dres['LEGENDE']
+         if legende == None:
+            legende='XXXX'
+         table = dres['INTE_SPEC']
+         
+         dataTable = table.EXTR_TABLE().values()
+         valePara = dres['VALE_PARA']
+         valeRef = dres['VALE_REFE_C']
+         numeOrdreI = dres['NUME_ORDRE_I']
+         noeudI = dres['NOEUD_I']
+         numeOrdreJ = None
+         noeudJ = None
+         nomCmpI = None
+         nomCmpJ = None
+         
+         i = -1
+         numeViteF = dres['NUME_VITE_FLUI']
+         presNumeVF = False
+         dTNumVF = None
+         if numeViteF != None:
+            presNumeVF = True
+            dTNumVF = dataTable['NUME_VITE_FLUI']
+         if numeOrdreI != None:
+            numeOrdreJ = dres['NUME_ORDRE_J']
+            
+            dTNumOrdreI = dataTable['NUME_ORDRE_I']
+            dTNumOrdreJ = dataTable['NUME_ORDRE_J']
+            
+            for i in range(len(dTNumOrdreI)):
+               if dTNumOrdreI[i] == None: continue
+               test1 = (dTNumOrdreI[i] == numeOrdreI)
+               test2 = (dTNumOrdreJ[i] == numeOrdreJ)
+               test3 = False
+               if presNumeVF:
+                  test3 = (dTNumVF[i] == numeViteF)
+               else:
+                  test3 = True
+               if test1 and test2 and test3:
+                  break
+         elif noeudI != None:
+            noeudJ = dres['NOEUD_J']
+            nomCmpI = dres['NOM_CMP_I']
+            nomCmpJ = dres['NOM_CMP_J']
+            
+            dTNoeudI = dataTable['NOEUD_I']
+            dTNoeudJ = dataTable['NOEUD_J']
+            dTNomCmpI = dataTable['NOM_CMP_I']
+            dTNomCmpJ = dataTable['NOM_CMP_J']
+            
+            for i in range(len(dTNoeudI)):
+               if dTNoeudI[i] == None: continue
+               nom1 = dTNoeudI[i]
+               nom1 = nom1[0:len(noeudI)]
+               nom2 = dTNoeudJ[i]
+               nom2 = nom2[0:len(noeudJ)]
+               nom3 = dTNomCmpI[i]
+               nom3 = nom3[0:len(nomCmpI)]
+               nom4 = dTNomCmpJ[i]
+               nom4 = nom4[0:len(nomCmpJ)]
+               test1 = (nom1 == noeudI)
+               test2 = (nom2 == noeudJ)
+               test3 = (nom3 == nomCmpI)
+               test4 = (nom4 == nomCmpJ)
+               test5 = False
+               if presNumeVF:
+                  test5 = (dTNumVF[i] == numeViteF)
+               else:
+                  test5 = True
+               if test1 and test2 and test3 and test4 and test5:
+                  break
+         
+         if i == -1: UTMESS('F','MODELISA2_91',valk=('FONCTION_C',table.nomj.nomj))
+         nomFctC = dataTable['FONCTION_C'][i]
+         
+         # Lecture JEVEUX du .PROL et .VALE
+         fctProl = aster.getvectjev(nomFctC[0:19]+'.PROL')
+         fctVale = aster.getvectjev(nomFctC[0:19]+'.VALE')
+         
+         TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT' }
+         dico={
+          'INTERPOL'    : [fctProl[1][0:3],fctProl[1][4:7]],
+          'NOM_PARA'    : fctProl[2][0:16].strip(),
+          'NOM_RESU'    : fctProl[3][0:16].strip(),
+          'PROL_DROITE' : TypeProl[fctProl[4][1]],
+          'PROL_GAUCHE' : TypeProl[fctProl[4][0]],
+         }
+         sdf = sd_fonction(nomFctC)
+         val = sdf.VALE.get()
+         dim = len(val)/3
+         lx = val[0:dim]
+         lr = []
+         li = []
+         for i in range(dim):
+            lr.append(val[dim+2*i])
+            li.append(val[dim+2*i+1])
+         fctIntSp = t_fonction_c(lx, map(complex,lr,li),dico,nomFctC)
+         
+         # Affichage
+
+         # ligne 1
+         current = {}
+         nb_espace = 16-len(fctProl[2].strip())
+         espace = nb_espace*' '
+         current['nom_para'] = fctProl[2].strip()+espace
+         txt.append(ligne_intspc % current)
+         
+         # ligne 2
+         current = {}
+         nb_espace = 19-len(nomFctC.strip())
+         espace = nb_espace*' '
+         current['nom'] = nomFctC.strip()+espace
+         nb_espace = 16-len(str(valePara))
+         espace = nb_espace*' '
+         current['val_para'] = str(valePara)+espace
+         txt.append(ligne_intspc_1 % current)
+         if ref == None : ref = 'NON_DEFINI'
+         
+         # Calcul de la valeur de l'interspectre
+         x = valePara
+         res = fctIntSp(x)
+         
+         if ier != 0:
+            txt.append('NOOK PB INTERPOLATION. VOIR MESSAGE CI-DESSUS')
+         else:
+            # Test et affichage de la valeur
+            curDict=TesterValeur(fctProl[2],valePara,[valeRef,],res,epsi,crit,'NON')
+            AfficherResultat(curDict,fctProl[2].strip(),ref,legende,crit,res,valePara,txt)
+   
+   # On affiche txt dans le fichier RESULTAT
+   aster.affiche('RESULTAT', os.linesep.join(txt))
+   
+   return ier
diff --git a/Aster/Cata/cataSTA10/Macro/test_temps_ops.py b/Aster/Cata/cataSTA10/Macro/test_temps_ops.py
new file mode 100644 (file)
index 0000000..680da0c
--- /dev/null
@@ -0,0 +1,251 @@
+#@ MODIF test_temps_ops Macro  DATE 13/10/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+"""
+for m in clpaster clp50a8 claut626 clau5aaa aster
+do
+   echo "------ $m   :  `ssh $m hostid` -------"
+   ssh $m cat /proc/cpuinfo > $m.cpuinfo
+   ssh $m python -c '"import os ; print os.uname()[-1]"'
+   grep 'cpu MHz' $m.cpuinfo | head -1
+   grep -i bogomips $m.cpuinfo | head -1
+done
+"""
+
+import sys
+import os
+import re
+from glob import glob
+
+#-------------------------------------------------------------------------------
+# formats
+tab_header = """
+   !--------------------------------------------------------------------------------------------------!
+   ! Commande               ! Ordre  ! Reference  ! Mesure     ! Difference ! Tolerance  ! Diagnostic !
+   !--------------------------------------------------------------------------------------------------!"""
+tab_line = """   ! %(cmde)-22s ! %(nume)6d ! %(refe)10.2f ! %(vale)10.2f ! %(diff)10.2f ! %(prec)10.2f !    %(diag)4s    !"""
+tab_footer = """   !--------------------------------------------------------------------------------------------------!
+"""
+
+#-------------------------------------------------------------------------------
+def get_idperf(conf):
+   """Retourne l'identifiant utilisé pour la mesure des performances.
+   Soit on le trouve dans le fichier config.txt de la version utilisée,
+   soit on le détermine à partir de : "kernel name - hardware name"
+   """
+   machine = ''
+   compiler = 'unknown'
+   if conf is not None:
+      machine = conf['ID_PERF'][0]
+      compiler = os.path.basename(conf['F77'][0].split()[0])
+   
+   if machine == '':
+      machine = '%s-%s-%s' %(os.uname()[0], os.uname()[4], compiler)
+   return machine
+
+#-------------------------------------------------------------------------------
+def as_list(value):
+   """Retourne 'value' si c'est une liste, sinon le singleton [value,]."""
+   if type(value) not in (list, tuple):
+      value = [value,]
+   return value
+
+#-------------------------------------------------------------------------------
+def test_temps_ops(self, RESU, INFO, **args):
+   """
+   Macro TEST_TEMPS permettant de vérifier le temps passé dans les commandes.
+   """
+   import aster
+   from Accas import _F
+   from Utilitai.Utmess import UTMESS, MessageLog
+
+   # On importe les definitions des commandes a utiliser dans la macro
+   # Le nom de la variable doit etre obligatoirement le nom de la commande
+   DETRUIRE        = self.get_cmd('DETRUIRE')
+   CREA_TABLE      = self.get_cmd('CREA_TABLE')
+   TEST_TABLE      = self.get_cmd('TEST_TABLE')
+   
+   #----------------------------------------------
+   ier = 0
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+
+   # ----- récupération du fichier de config
+   ficconf = '?'
+   conf = None
+   try:
+      # recuperation de la variable ASTER_ROOT
+      aster_root = os.environ.get('ASTER_ROOT')
+      assert aster_root != None, "<TEST_TEMPS> Variable d'environnement ASTER_ROOT non definie."
+      sys.path.append(os.path.join(aster_root, 'ASTK', 'ASTK_SERV', 'lib'))
+      from as_profil import ASTER_PROFIL
+      from as_config import ASTER_CONFIG
+      
+      l_export = glob('*.export')
+      assert len(l_export) > 0, "<TEST_TEMPS> pas de fichier export dans le repertoire de travail."
+      
+      ficconf = 'config.txt'
+      if not os.path.isfile(ficconf):         # if as_run.__version__ < 1.6.3
+         prof = ASTER_PROFIL(l_export[0])
+         if prof.Get('D', typ='conf'):
+            print '<TEST_TEMPS> Surcharge du fichier config.txt non supportée.'
+         REPREF  = os.path.join(aster_root, prof['version'][0])
+         ficconf = os.path.join(REPREF, 'config.txt')
+      conf = ASTER_CONFIG(ficconf)
+   except Exception, err:
+      print err
+      
+   machine = get_idperf(conf)
+   
+   # liste des timers par ordre d'apparition : dict_cmde['commande'] = [timer1, timer2, ...]
+   dict_cmde = {}
+   for num, timer in self.jdc.timer.getsortedtimers():
+      cmde  = timer['name']
+      dict_cmde[cmde] = dict_cmde.get(cmde, [])
+      dict_cmde[cmde].append(timer)
+   
+   tab = get_cmde_timers(self.jdc)
+   if INFO == 2:
+      aster.affiche('MESSAGE', repr(tab))
+   
+   #----------------------------------------------
+   # boucle sur les commandes a tester
+   alarm9 = True
+   infos = []
+   for res_i in RESU:
+         dres = res_i.cree_dict_valeurs(res_i.mc_liste)
+         current = {
+            'cmde' : dres['COMMANDE'],
+            'nume' : dres['NUME_ORDRE'],
+            'refe' : 0.,
+            'vale' : 0.,
+            'diff' : 0.,
+            'prec' : 0.,
+            'diag' : 'NOOK',
+         }
+         error = False
+         l_mach = as_list(dres['MACHINE'])
+         l_vale = as_list(dres['VALE'])
+         if len(l_mach) != len(l_vale):
+            UTMESS('E', 'TEST0_10')
+            error = True
+
+         l_prec = as_list(dres['PRECISION'])
+         if len(l_prec) == 1:
+            l_prec = l_prec * len(l_vale)
+         if len(l_prec) != len(l_vale):
+            UTMESS('E', 'TEST0_8')
+            error = True
+
+         tres = (tab.COMMANDE == dres['COMMANDE']) & (tab.NUME_ORDRE == dres['NUME_ORDRE'])
+         if len(tres) != 1:
+            UTMESS('E', 'TEST0_7', valk=dres['COMMANDE'], vali=dres['NUME_ORDRE'])
+            error = True
+         
+         if error:
+            infos.append(current)
+            continue
+
+         # comparaison des valeurs
+         valtest = getattr(tres, dres['TYPE_TEST'])
+         assert len(valtest) == 1, 'TYPE_TEST invalide'
+         valtest = valtest[0]
+         
+         current['vale'] = valtest
+
+         # reference, precision
+         dref = {}
+         for mach, vale, precision in zip(l_mach, l_vale, l_prec):
+            if dres['CRITERE'] == 'RELATIF':
+               precision = precision * vale
+            dref[mach.upper()] = {
+               'vale'   : vale,
+               'prec'   : precision,
+               'valmin' : vale - precision,
+               'valmax' : vale + precision
+            }
+         dmach = dref.get(machine.upper())
+         # si on n'a pas de référence pour cette machine, on prend la première
+         if not dmach:
+            dmach = dref[l_mach[0].upper()]
+            if alarm9:
+               alarm9 = False
+               UTMESS('A', 'TEST0_9', valk=(machine, l_mach[0]))
+         current['refe'] = dmach['vale']
+         current['prec'] = dmach['prec']
+         current['diff'] = valtest - dmach['vale']
+         if dmach['valmin'] < valtest < dmach['valmax']:
+            current['diag'] = 'OK'
+         infos.append(current)
+   
+   # tableau de resultats
+   text_id = MessageLog.GetText('I', 'TEST0_5', valk=(ficconf, machine))
+   is_ok = 1
+   txt = [text_id, tab_header,]
+   for line in infos:
+      txt.append(tab_line % line)
+      if line['diag'] != 'OK':
+         is_ok = 0
+   txt.append(tab_footer)
+   for unit in ('MESSAGE', 'RESULTAT'):
+      aster.affiche(unit, os.linesep.join(txt))
+
+   # test_resu
+   tab1__ = CREA_TABLE(LISTE=(_F(PARA='DIAGNOSTIC',  LISTE_I=is_ok),),)
+   
+   TEST_TABLE(TABLE=tab1__,
+              NOM_PARA='DIAGNOSTIC',
+              VALE_I=1,
+              CRITERE='ABSOLU',
+              PRECISION=0,
+              REFERENCE='NON_REGRESSION')
+
+   return ier
+
+
+#-------------------------------------------------------------------------------
+def get_cmde_timers(jdc):
+   """Retourne un objet Table contenant les mesures de temps pour
+   les commandes terminées.
+   """
+   from Utilitai.Table import Table
+   tab = Table()
+
+   # liste des timers par ordre d'apparition
+   dnum = {}
+   for num, timer in jdc.timer.getsortedtimers():
+      if timer['state'] != 'stop' \
+            or re.sub('[A-Z_]', '', timer['name']).strip() != '':  # timers superviseur
+         continue
+      line = {}
+      for k in ('name', 'cpu_dt', 'sys_dt', 'tot_dt'):
+         line[k] = timer[k]
+      line['USER+SYS'] = timer['cpu_dt'] + timer['sys_dt']
+      dnum[line['name']] = dnum.get(line['name'], 0) + 1
+      line['NUME_ORDRE'] = dnum[line['name']]
+      tab.append(line)
+   tab.Renomme('name',   'COMMANDE')
+   tab.Renomme('cpu_dt', 'USER')
+   tab.Renomme('sys_dt', 'SYSTEM')
+   tab.Renomme('tot_dt', 'ELAPSED')
+   tab = tab['NUME_ORDRE', 'COMMANDE', 'USER', 'SYSTEM', 'USER+SYS', 'ELAPSED']
+   return tab
+
diff --git a/Aster/Cata/cataSTA10/SD/__init__.py b/Aster/Cata/cataSTA10/SD/__init__.py
new file mode 100644 (file)
index 0000000..3892f59
--- /dev/null
@@ -0,0 +1,34 @@
+#@ MODIF __init__ SD  DATE 12/05/2009   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from Accas import ASSD
+
+# pour utilisation du catalogue hors aster
+try:
+   import aster
+except:
+   pass
+
+from Noyau.asnom      import SDNom
+from Noyau.ascheckers import Parmi
+from Noyau.asojb      import AsBase, AsVK8, AsVK16, AsVK24, AsVK32, AsVK80, \
+                             AsVI, AsVS, AsVL, AsVR, AsVC, \
+                             AsColl, AsObject, Facultatif, OJBVect, AsPn, AsVect
+
diff --git a/Aster/Cata/cataSTA10/SD/co_base_modale.py b/Aster/Cata/cataSTA10/SD/co_base_modale.py
new file mode 100644 (file)
index 0000000..398d0dc
--- /dev/null
@@ -0,0 +1,28 @@
+#@ MODIF co_base_modale SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_base_modale import sd_base_modale
+
+from co_resultat_dyn import resultat_dyn
+
+# -----------------------------------------------------------------------------
+class base_modale(resultat_dyn, sd_base_modale):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_cabl_precont.py b/Aster/Cata/cataSTA10/SD/co_cabl_precont.py
new file mode 100644 (file)
index 0000000..fff9b39
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_cabl_precont SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_cabl_precont import sd_cabl_precont
+
+# -----------------------------------------------------------------------------
+class cabl_precont(ASSD, sd_cabl_precont):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_cara_elem.py b/Aster/Cata/cataSTA10/SD/co_cara_elem.py
new file mode 100644 (file)
index 0000000..5d35c55
--- /dev/null
@@ -0,0 +1,48 @@
+#@ MODIF co_cara_elem SD  DATE 20/07/2009   AUTEUR FLEJOU J-L.FLEJOU 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from sd_cara_elem import sd_cara_elem
+
+# -----------------------------------------------------------------------------
+class cara_elem(ASSD, sd_cara_elem):
+   def toEPX(self):
+      # s'il y a un problème sur la structure de données ==> <F>
+      try:
+         EPXnoeud = self.CARRIGXN.get()
+         EPXval   = self.CARRIGXV.get()
+         lenEPXval   = len(EPXval)
+         lenEPXnoeud = len(EPXnoeud)*6
+      except:
+         from Utilitai.Utmess import UTMESS
+         UTMESS('F','MODELISA9_98')
+      # Vérification de la déclaration qui est faite dans 'acearp'
+      if ( lenEPXval != lenEPXnoeud ):
+         from Utilitai.Utmess import UTMESS
+         UTMESS('F','MODELISA9_97')
+      # Tout est OK
+      ressorts = {}
+      i=0
+      for no in EPXnoeud :
+         ressorts[no] = EPXval[i:i+6]
+         i+=6
+      return ressorts
+
+
diff --git a/Aster/Cata/cataSTA10/SD/co_carte.py b/Aster/Cata/cataSTA10/SD/co_carte.py
new file mode 100644 (file)
index 0000000..23392a4
--- /dev/null
@@ -0,0 +1,28 @@
+#@ MODIF co_carte SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_carte import sd_carte
+from co_champ import cham_gd_sdaster
+
+# -----------------------------------------------------------------------------
+class carte_sdaster(cham_gd_sdaster, sd_carte):
+   pass
+
diff --git a/Aster/Cata/cataSTA10/SD/co_cham_elem.py b/Aster/Cata/cataSTA10/SD/co_cham_elem.py
new file mode 100644 (file)
index 0000000..ad96f6e
--- /dev/null
@@ -0,0 +1,74 @@
+#@ MODIF co_cham_elem SD  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import Accas
+from SD import *
+from sd_cham_elem import sd_cham_elem
+from co_champ     import cham_gd_sdaster
+
+import numpy
+
+# -----------------------------------------------------------------------------
+# post-traitement :
+class post_comp_cham_el :
+  def __init__(self,valeurs,maille=None,point=None,sous_point=None) :
+    self.valeurs=valeurs
+    self.maille=maille
+    self.point=point
+    self.sous_point=sous_point
+
+# -----------------------------------------------------------------------------
+class cham_elem(cham_gd_sdaster, sd_cham_elem):
+   def EXTR_COMP(self,comp,lgma,topo=0) :
+      """ retourne les valeurs de la composante comp du champ sur la liste
+        de groupes de mailles lgma avec eventuellement l'info de la
+        topologie si topo>0. Si lgma est une liste vide, c'est equivalent
+        a un TOUT='OUI' dans les commandes aster
+        Attributs retourne
+          - self.valeurs : numpy.array contenant les valeurs
+        Si on a demande la topo  :
+          - self.maille  : numero de mailles
+          - self.point   : numero du point dans la maille
+          - self.sous_point : numero du sous point dans la maille """
+      if not self.accessible() :
+         raise Accas.AsException("Erreur dans cham_elem.EXTR_COMP en PAR_LOT='OUI'")
+
+      ncham=self.get_name()
+      ncham=ncham+(8-len(ncham))*' '
+      nchams=ncham[0:7]+'S'
+      ncmp=comp+(8-len(comp))*' '
+
+      aster.prepcompcham(ncham,nchams,ncmp,"EL      ",topo,lgma)
+
+      valeurs=numpy.array(aster.getvectjev(nchams+(19-len(ncham))*' '+'.V'))
+
+      if (topo>0) :
+         maille=(aster.getvectjev(nchams+(19-len(ncham))*' '+'.M'))
+         point=(aster.getvectjev(nchams+(19-len(ncham))*' '+'.P'))
+         sous_point=(aster.getvectjev(nchams+(19-len(ncham))*' '+'.SP'))
+      else :
+         maille=None
+         point=None
+         sous_point=None
+
+      aster.prepcompcham("__DETR__",nchams,ncmp,"EL      ",topo,lgma)
+
+      return post_comp_cham_el(valeurs,maille,point,sous_point)
+
diff --git a/Aster/Cata/cataSTA10/SD/co_cham_mater.py b/Aster/Cata/cataSTA10/SD/co_cham_mater.py
new file mode 100644 (file)
index 0000000..339f49e
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_cham_mater SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_cham_mater import sd_cham_mater
+
+# -----------------------------------------------------------------------------
+class cham_mater(ASSD, sd_cham_mater):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_cham_no.py b/Aster/Cata/cataSTA10/SD/co_cham_no.py
new file mode 100644 (file)
index 0000000..7649681
--- /dev/null
@@ -0,0 +1,102 @@
+#@ MODIF co_cham_no SD  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import Accas
+from SD import *
+from sd_cham_no import sd_cham_no
+from co_champ   import cham_gd_sdaster
+
+import numpy
+
+# -----------------------------------------------------------------------------
+# post-traitement :
+class post_comp_cham_no :
+  def __init__(self,valeurs,noeud=None) :
+    self.valeurs=valeurs
+    self.noeud=noeud
+
+# -----------------------------------------------------------------------------
+class cham_no_sdaster(cham_gd_sdaster, sd_cham_no):
+   def EXTR_COMP(self,comp,lgno,topo=0) :
+      """ retourne les valeurs de la composante comp du champ sur la liste
+        de groupes de noeuds lgno avec eventuellement l'info de la
+        topologie si topo>0. Si lgno est une liste vide, c'est equivalent
+        a un TOUT='OUI' dans les commandes aster
+        Attributs retourne
+          - self.valeurs : numpy.array contenant les valeurs
+        Si on a demande la topo (i.e. self.topo = 1) :
+          - self.noeud  : numero de noeud """
+      if not self.accessible() :
+         raise Accas.AsException("Erreur dans cham_no.EXTR_COMP en PAR_LOT='OUI'")
+
+      ncham=self.get_name()
+      ncham=ncham+(8-len(ncham))*' '
+      nchams=ncham[0:7]+'S'
+      ncmp=comp+(8-len(comp))*' '
+
+      aster.prepcompcham(ncham,nchams,ncmp,"NO      ",topo,lgno)
+
+      valeurs=numpy.array(aster.getvectjev(nchams+(19-len(ncham))*' '+'.V'))
+
+      if (topo>0) :
+         noeud=(aster.getvectjev(nchams+(19-len(ncham))*' '+'.N'))
+      else :
+         noeud=None
+
+      aster.prepcompcham("__DETR__",nchams,ncmp,"NO      ",topo,lgno)
+
+      return post_comp_cham_no(valeurs,noeud)
+      
+   def __add__(self, other):
+      from SD.sd_nume_equa import sd_nume_equa
+      from SD.sd_maillage import sd_maillage
+      from SD.co_maillage import maillage_sdaster
+      from Cata.cata import CREA_CHAMP,_F
+      from Noyau.nommage import GetNomConceptResultat
+      # on recupere le type
+      __nume_ddl=sd_nume_equa(self.REFE.get()[1])
+      __gd=__nume_ddl.REFN.get()[1].strip()
+      __type='NOEU_'+__gd
+      # on recupere le nom du maillage
+      __nomMaillage=self.REFE.get()[0].strip()
+      # on recupere l'objet du maillage
+      __maillage=CONTEXT.get_current_step().get_concept(__nomMaillage)
+      # on recupere le nom a gauche du signe "="
+      toto=GetNomConceptResultat(self)
+      __CHAM = CREA_CHAMP(OPERATION='ASSE',
+                          MAILLAGE=__maillage,
+                          TYPE_CHAM=__type,
+                          INFO=1,
+                          ASSE=(_F(CHAM_GD=self,
+                                   TOUT='OUI',
+                                   CUMUL='OUI',
+                                   COEF_R=1.),
+                                _F(CHAM_GD=other,
+                                   TOUT='OUI',
+                                   CUMUL='OUI',
+                                   COEF_R=1.),  
+                               ))
+      return __CHAM
+
+
+
+
+
+
diff --git a/Aster/Cata/cataSTA10/SD/co_champ.py b/Aster/Cata/cataSTA10/SD/co_champ.py
new file mode 100644 (file)
index 0000000..d8bd5eb
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_champ SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_champ import sd_champ
+
+# -----------------------------------------------------------------------------
+class cham_gd_sdaster(ASSD, sd_champ):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_char_acou.py b/Aster/Cata/cataSTA10/SD/co_char_acou.py
new file mode 100644 (file)
index 0000000..e9ea68c
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_char_acou SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_char_acou import sd_char_acou
+
+# -----------------------------------------------------------------------------
+class char_acou(ASSD, sd_char_acou):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_char_cine_acou.py b/Aster/Cata/cataSTA10/SD/co_char_cine_acou.py
new file mode 100644 (file)
index 0000000..795fe7e
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_char_cine_acou SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_char_cine import sd_char_cine
+
+# -----------------------------------------------------------------------------
+class char_cine_acou(ASSD, sd_char_cine):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_char_cine_meca.py b/Aster/Cata/cataSTA10/SD/co_char_cine_meca.py
new file mode 100644 (file)
index 0000000..9de54b8
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_char_cine_meca SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_char_cine import sd_char_cine
+
+# -----------------------------------------------------------------------------
+class char_cine_meca(ASSD, sd_char_cine):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_char_cine_ther.py b/Aster/Cata/cataSTA10/SD/co_char_cine_ther.py
new file mode 100644 (file)
index 0000000..fb1fa85
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_char_cine_ther SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_char_cine import sd_char_cine
+
+# -----------------------------------------------------------------------------
+class char_cine_ther(ASSD, sd_char_cine):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_char_meca.py b/Aster/Cata/cataSTA10/SD/co_char_meca.py
new file mode 100644 (file)
index 0000000..6b34768
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_char_meca SD  DATE 22/12/2009   AUTEUR ABBAS M.ABBAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_char_meca import sd_char_meca
+
+# -----------------------------------------------------------------------------
+class char_meca(ASSD, sd_char_meca):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_char_ther.py b/Aster/Cata/cataSTA10/SD/co_char_ther.py
new file mode 100644 (file)
index 0000000..6347a4c
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_char_ther SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_char_ther import sd_char_ther
+
+# -----------------------------------------------------------------------------
+class char_ther(ASSD, sd_char_ther):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_compor.py b/Aster/Cata/cataSTA10/SD/co_compor.py
new file mode 100644 (file)
index 0000000..ed77879
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_compor SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_compor import sd_compor
+
+# -----------------------------------------------------------------------------
+class compor_sdaster(ASSD, sd_compor):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_contact.py b/Aster/Cata/cataSTA10/SD/co_contact.py
new file mode 100644 (file)
index 0000000..a5f4f49
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_contact SD  DATE 22/12/2009   AUTEUR ABBAS M.ABBAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_contact import sd_contact
+
+# -----------------------------------------------------------------------------
+class char_contact(ASSD, sd_contact):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_courbe.py b/Aster/Cata/cataSTA10/SD/co_courbe.py
new file mode 100644 (file)
index 0000000..80fedf1
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_courbe SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_courbe import sd_courbe
+
+# -----------------------------------------------------------------------------
+class courbe_sdaster(ASSD, sd_courbe):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_fiss_xfem.py b/Aster/Cata/cataSTA10/SD/co_fiss_xfem.py
new file mode 100644 (file)
index 0000000..aa81971
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_fiss_xfem SD  DATE 15/10/2007   AUTEUR GENIAUT S.GENIAUT 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_xfem import sd_fiss_xfem
+
+# -----------------------------------------------------------------------------
+class fiss_xfem(ASSD, sd_fiss_xfem):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_fonction.py b/Aster/Cata/cataSTA10/SD/co_fonction.py
new file mode 100644 (file)
index 0000000..5f6f8eb
--- /dev/null
@@ -0,0 +1,351 @@
+#@ MODIF co_fonction SD  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+import Accas
+from SD import *
+from sd_fonction import sd_fonction_aster
+
+import os
+import numpy
+from math import pi
+
+# -----------------------------------------------------------------------------
+# types 'fonction' :
+class fonction_class(ASSD):
+   def Valeurs(self):
+      pass
+   def Parametres(self):
+      """
+      Retourne un dictionnaire contenant les parametres de la fonction ;
+      le type jeveux (FONCTION, FONCT_C, NAPPE) n'est pas retourne,
+      le dictionnaire peut ainsi etre fourni a CALC_FONC_INTERP tel quel.
+      """
+      from Utilitai.Utmess import UTMESS
+      if self.accessible():
+        TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT' }
+        objev = '%-19s.PROL' % self.get_name()
+        prol = aster.getvectjev(objev)
+        if prol == None:
+           UTMESS('F', 'SDVERI_2', valk=[objev])
+        dico={
+         'INTERPOL'    : [prol[1][0:3],prol[1][4:7]],
+         'NOM_PARA'    : prol[2][0:16].strip(),
+         'NOM_RESU'    : prol[3][0:16].strip(),
+         'PROL_DROITE' : TypeProl[prol[4][1]],
+         'PROL_GAUCHE' : TypeProl[prol[4][0]],
+        }
+      elif hasattr(self,'etape') and self.etape.nom=='DEFI_FONCTION' :
+        dico={
+         'INTERPOL'    : self.etape['INTERPOL'],
+         'NOM_PARA'    : self.etape['NOM_PARA'],
+         'NOM_RESU'    : self.etape['NOM_RESU'],
+         'PROL_DROITE' : self.etape['PROL_DROITE'],
+         'PROL_GAUCHE' : self.etape['PROL_GAUCHE'],
+        }
+        if   type(dico['INTERPOL']) == tuple:
+                  dico['INTERPOL']=list(dico['INTERPOL'])
+        elif type(dico['INTERPOL']) == str:
+                  dico['INTERPOL']=[dico['INTERPOL'],]
+        if len(dico['INTERPOL'])==1 :
+           dico['INTERPOL']=dico['INTERPOL']*2
+      else:
+         raise Accas.AsException("Erreur dans fonction.Parametres en PAR_LOT='OUI'")
+      return dico
+   def Trace(self,FORMAT='TABLEAU',**kargs):
+      """Tracé d'une fonction"""
+      if not self.accessible() :
+         raise Accas.AsException("Erreur dans fonction.Trace en PAR_LOT='OUI'")
+      from Utilitai.Graph import Graph
+      gr=Graph()
+      gr.AjoutCourbe(Val=self.Valeurs(),
+            Lab=[self.Parametres()['NOM_PARA'],self.Parametres()['NOM_RESU']],
+            Leg=os.linesep.join(self.TITR.get()) )
+      gr.Trace(FORMAT=FORMAT,**kargs)
+
+# -----------------------------------------------------------------------------
+class fonction_sdaster(fonction_class, sd_fonction_aster):
+   def convert(self,arg='real'):
+      """
+      Retourne un objet de la classe t_fonction
+      représentation python de la fonction
+      """
+      from Cata_Utils.t_fonction import t_fonction,t_fonction_c
+      if arg=='real' :
+        return t_fonction(self.Absc(),
+                          self.Ordo(),
+                          self.Parametres(),
+                          nom=self.nom)
+      elif arg=='complex' :
+        return t_fonction_c(self.Absc(),
+                            self.Ordo(),
+                            self.Parametres(),
+                            nom=self.nom)
+   def Valeurs(self) :
+      """
+      Retourne deux listes de valeurs : abscisses et ordonnees
+      """
+      from Utilitai.Utmess import UTMESS
+      if self.accessible():
+        vale = '%-19s.VALE' % self.get_name()
+        lbl = aster.getvectjev(vale)
+        if lbl == None:
+          UTMESS('F', 'SDVERI_2', valk=[vale])
+        lbl = list(lbl)
+        dim = len(lbl)/2
+        lx = lbl[0:dim]
+        ly = lbl[dim:2*dim]
+      elif hasattr(self, 'etape') and self.etape.nom == 'DEFI_FONCTION' :
+         if self.etape['VALE'] is not None:
+            lbl = list(self.etape['VALE'])
+            dim = len(lbl)
+            lx = [lbl[i] for i in range(0,dim,2)]
+            ly = [lbl[i] for i in range(1,dim,2)]
+         elif self.etape['VALE_PARA'] is not None:
+            lx = self.etape['VALE_PARA'].Valeurs()
+            ly = self.etape['VALE_FONC'].Valeurs()
+         elif self.etape['ABSCISSE'] is not None:
+            lx = self.etape['ABSCISSE']
+            ly = self.etape['ORDONNEE']
+         else:
+            raise Accas.AsException("Erreur (fonction.Valeurs) : ne fonctionne en " \
+               "PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
+               "dans le fichier de commandes courant.")
+      else:
+         raise Accas.AsException("Erreur (fonction.Valeurs) : ne fonctionne en " \
+               "PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
+               "dans le fichier de commandes courant.")
+      return [lx, ly]
+   def Absc(self):
+      """Retourne la liste des abscisses"""
+      return self.Valeurs()[0]
+   def Ordo(self):
+      """Retourne la liste des ordonnées"""
+      return self.Valeurs()[1]
+   def __call__(self,val):
+      ### Pour EFICAS : substitution de l'instance de classe
+      ### parametre par sa valeur
+      if isinstance(val, ASSD):
+         val=val.valeur
+      ###
+      __ff=self.convert()
+      return __ff(val)
+
+# -----------------------------------------------------------------------------
+class para_sensi(fonction_sdaster):
+   pass
+
+# -----------------------------------------------------------------------------
+class fonction_c(fonction_class, sd_fonction_aster):
+   def convert(self,arg='real'):
+      """
+      Retourne un objet de la classe t_fonction ou t_fonction_c,
+      représentation python de la fonction complexe
+      """
+      from Cata_Utils.t_fonction import t_fonction,t_fonction_c
+      if arg=='real' :
+        return t_fonction(self.Absc(),
+                          self.Ordo(),
+                          self.Parametres(),
+                          nom=self.nom)
+      elif arg=='imag' :
+        return t_fonction(self.Absc(),
+                          self.OrdoImg(),
+                          self.Parametres(),
+                          nom=self.nom)
+      elif arg=='modul' :
+        modul=numpy.sqrt(numpy.array(self.Ordo())**2+numpy.array(self.OrdoImg())**2)
+        return t_fonction(self.Absc(),
+                          modul,
+                          self.Parametres(),
+                          nom=self.nom)
+      elif arg=='phase' :
+        phase=numpy.arctan2(numpy.array(self.OrdoImg()),numpy.array(self.Ordo()))
+        phase=phase*180./pi
+        return t_fonction(self.Absc(),
+                          phase,
+                          self.Parametres(),
+                          nom=self.nom)
+      elif arg=='complex' :
+        return t_fonction_c(self.Absc(),
+                            map(complex,self.Ordo(),self.OrdoImg()),
+                            self.Parametres(),
+                          nom=self.nom)
+   def Valeurs(self) :
+      """
+      Retourne trois listes de valeurs : abscisses, parties reelles et imaginaires.
+      """
+      from Utilitai.Utmess import UTMESS
+      if self.accessible():
+         vale = '%-19s.VALE' % self.get_name()
+         lbl = aster.getvectjev(vale)
+         if lbl == None:
+           UTMESS('F', 'SDVERI_2', valk=[vale])
+         lbl = list(lbl)
+         dim=len(lbl)/3
+         lx=lbl[0:dim]
+         lr=[]
+         li=[]
+         for i in range(dim):
+            lr.append(lbl[dim+2*i])
+            li.append(lbl[dim+2*i+1])
+      elif hasattr(self, 'etape') and self.etape.nom == 'DEFI_FONCTION' \
+            and self.etape['VALE_C'] is not None:
+         lbl=list(self.etape['VALE_C'])
+         dim=len(lbl)
+         lx=[lbl[i] for i in range(0,dim,3)]
+         lr=[lbl[i] for i in range(1,dim,3)]
+         li=[lbl[i] for i in range(2,dim,3)]
+      else:
+         raise Accas.AsException("Erreur (fonction_c.Valeurs) : ne fonctionne en " \
+               "PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
+               "dans le jdc courant.")
+      return [lx, lr, li]
+   def Absc(self):
+      """Retourne la liste des abscisses"""
+      return self.Valeurs()[0]
+   def Ordo(self):
+      """Retourne la liste des parties réelles des ordonnées"""
+      return self.Valeurs()[1]
+   def OrdoImg(self):
+      """Retourne la liste des parties imaginaires des ordonnées"""
+      return self.Valeurs()[2]
+   def Trace(self,FORMAT='TABLEAU',**kargs):
+      """Tracé d'une fonction complexe"""
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans fonction_c.Trace en PAR_LOT='OUI'")
+      from Utilitai.Graph import Graph
+      para = self.Parametres()
+      gr=Graph()
+      gr.AjoutCourbe(Val=self.Valeurs(),
+         Lab=[para['NOM_PARA'], '%s_R' % para['NOM_RESU'], '%s_I' % para['NOM_RESU']],
+         Leg=os.linesep.join(self.TITR.get()) )
+      gr.Trace(FORMAT=FORMAT,**kargs)
+   def __call__(self,val):
+      ### Pour EFICAS : substitution de l'instance de classe
+      ### parametre par sa valeur
+      if isinstance(val, ASSD):
+         val=val.valeur
+      ###
+      __ff=self.convert(arg='complex')
+      return __ff(val)
+
+# -----------------------------------------------------------------------------
+class nappe_sdaster(fonction_class, sd_fonction_aster):
+   def convert(self):
+      """
+      Retourne un objet de la classe t_nappe, représentation python de la nappe
+      """
+      from Cata_Utils.t_fonction import t_fonction,t_nappe
+      para=self.Parametres()
+      vale=self.Valeurs()
+      l_fonc=[]
+      i=0
+      for pf in para[1] :
+          para_f={'INTERPOL'    : pf['INTERPOL_FONC'],
+                  'PROL_DROITE' : pf['PROL_DROITE_FONC'],
+                  'PROL_GAUCHE' : pf['PROL_GAUCHE_FONC'],
+                  'NOM_PARA'    : para[0]['NOM_PARA_FONC'],
+                  'NOM_RESU'    : para[0]['NOM_RESU'],
+                 }
+          l_fonc.append(t_fonction(vale[1][i][0],vale[1][i][1],para_f))
+          i+=1
+      return t_nappe(vale[0],
+                     l_fonc,
+                     para[0],
+                     nom=self.nom)
+   def Valeurs(self):
+      """
+      Retourne la liste des valeurs du parametre,
+      et une liste de couples (abscisses,ordonnees) de chaque fonction.
+      """
+      from Utilitai.Utmess import UTMESS
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans nappe.Valeurs en PAR_LOT='OUI'")
+      nsd = '%-19s' % self.get_name()
+      dicv=aster.getcolljev(nsd+'.VALE')
+      # les cles de dicv sont 1,...,N (indice du parametre)
+      lpar=aster.getvectjev(nsd+'.PARA')
+      if lpar == None:
+         UTMESS('F', 'SDVERI_2', valk=[nsd+'.PARA'])
+      lval=[]
+      for k in range(len(dicv)):
+         lbl=dicv[k+1]
+         dim=len(lbl)/2
+         lval.append([lbl[0:dim],lbl[dim:2*dim]])
+      return [list(lpar),lval]
+   def Parametres(self):
+      """
+      Retourne un dictionnaire contenant les parametres de la nappe,
+      le type jeveux (NAPPE) n'est pas retourne,
+      le dictionnaire peut ainsi etre fourni a CALC_FONC_INTERP tel quel,
+      et une liste de dictionnaire des parametres de chaque fonction.
+      """
+      from Utilitai.Utmess import UTMESS
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans nappe.Parametres en PAR_LOT='OUI'")
+      TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT' }
+      objev = '%-19s.PROL' % self.get_name()
+      prol=aster.getvectjev(objev)
+      if prol == None:
+         UTMESS('F', 'SDVERI_2', valk=[objev])
+      dico={
+         'INTERPOL'      : [prol[1][0:3],prol[1][4:7]],
+         'NOM_PARA'      : prol[2][0:16].strip(),
+         'NOM_RESU'      : prol[3][0:16].strip(),
+         'PROL_DROITE'   : TypeProl[prol[4][1]],
+         'PROL_GAUCHE'   : TypeProl[prol[4][0]],
+         'NOM_PARA_FONC' : prol[6][0:4].strip(),
+      }
+      lparf=[]
+      nbf=(len(prol)-7)/2
+      for i in range(nbf):
+         dicf={
+            'INTERPOL_FONC'    : [prol[7+i*2][0:3],prol[7+i*2][4:7]],
+            'PROL_DROITE_FONC' : TypeProl[prol[8+i*2][1]],
+            'PROL_GAUCHE_FONC' : TypeProl[prol[8+i*2][0]],
+         }
+         lparf.append(dicf)
+      return [dico,lparf]
+   def Absc(self):
+      """Retourne la liste des abscisses"""
+      return self.Valeurs()[0]
+   def Trace(self,FORMAT='TABLEAU',**kargs):
+      """Tracé d'une nappe"""
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans nappe.Trace en PAR_LOT='OUI'")
+      from Utilitai.Graph import Graph
+      gr=Graph()
+      lv=self.Valeurs()[1]
+      dp=self.Parametres()[0]
+      for lx,ly in lv:
+         gr.AjoutCourbe(Val=[lx,ly], Lab=[dp['NOM_PARA_FONC'],dp['NOM_RESU']],
+            Leg=os.linesep.join(self.TITR.get()) )
+      gr.Trace(FORMAT=FORMAT,**kargs)
+   def __call__(self,val1,val2):
+      ### Pour EFICAS : substitution de l'instance de classe
+      ### parametre par sa valeur
+      if isinstance(val1, ASSD):
+         val1=val1.valeur
+      if isinstance(val2, ASSD):
+         val2=val2.valeur
+      ###
+      __ff=self.convert()
+      return __ff(val1,val2)
+
diff --git a/Aster/Cata/cataSTA10/SD/co_fond_fiss.py b/Aster/Cata/cataSTA10/SD/co_fond_fiss.py
new file mode 100644 (file)
index 0000000..ebacba1
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_fond_fiss SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_fond_fiss import sd_fond_fiss
+
+# -----------------------------------------------------------------------------
+class fond_fiss(ASSD, sd_fond_fiss):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_gfibre.py b/Aster/Cata/cataSTA10/SD/co_gfibre.py
new file mode 100644 (file)
index 0000000..39907ac
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_gfibre SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_gfibre import sd_gfibre
+
+# -----------------------------------------------------------------------------
+class gfibre_sdaster(ASSD, sd_gfibre):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_interf_dyna_clas.py b/Aster/Cata/cataSTA10/SD/co_interf_dyna_clas.py
new file mode 100644 (file)
index 0000000..a66111e
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_interf_dyna_clas SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_interf_dyna_clas import sd_interf_dyna_clas
+
+# -----------------------------------------------------------------------------
+class interf_dyna_clas(ASSD, sd_interf_dyna_clas):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_list_inst.py b/Aster/Cata/cataSTA10/SD/co_list_inst.py
new file mode 100644 (file)
index 0000000..56d7a0d
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_list_inst SD  DATE 20/07/2009   AUTEUR GENIAUT S.GENIAUT 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_list_inst import sd_list_inst
+
+# -----------------------------------------------------------------------------
+class list_inst(ASSD, sd_list_inst):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_listis.py b/Aster/Cata/cataSTA10/SD/co_listis.py
new file mode 100644 (file)
index 0000000..071d009
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_listis SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_listis import sd_listis
+
+# -----------------------------------------------------------------------------
+class listis_sdaster(ASSD, sd_listis):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_listr8.py b/Aster/Cata/cataSTA10/SD/co_listr8.py
new file mode 100644 (file)
index 0000000..221e57e
--- /dev/null
@@ -0,0 +1,40 @@
+#@ MODIF co_listr8 SD  DATE 30/06/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import Accas
+from SD import *
+from sd_listr8 import sd_listr8
+
+# -----------------------------------------------------------------------------
+class listr8_sdaster(ASSD, sd_listr8):
+   def Valeurs(self) :
+      """
+      Retourne la liste des valeurs : [val1, ..., valN]
+      """
+      from Utilitai.Utmess import UTMESS
+      if self.accessible():
+         vale='%-19s.VALE' % self.get_name()
+         t_vale = aster.getvectjev(vale)
+         if t_vale == None:
+            UTMESS('F', 'SDVERI_2', valk=[vale])
+         return list(t_vale)
+      else:
+         raise Accas.AsException("Erreur dans listr8.Valeurs en PAR_LOT='OUI'")
+
diff --git a/Aster/Cata/cataSTA10/SD/co_macr_elem_dyna.py b/Aster/Cata/cataSTA10/SD/co_macr_elem_dyna.py
new file mode 100644 (file)
index 0000000..80b3dc0
--- /dev/null
@@ -0,0 +1,120 @@
+#@ MODIF co_macr_elem_dyna SD  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import Accas
+from SD import *
+from sd_macr_elem_dyna import sd_macr_elem_dyna
+
+import numpy
+
+def VALE_triang2array(vect_VALE, dim, dtype=None):
+   """Conversion (par recopie) de l'objet .VALE decrivant une matrice pleine
+   par sa triangulaire sup en numpy.array plein.
+   """
+   triang_sup = numpy.array(vect_VALE)
+   assert dim*(dim+1)/2 == len(triang_sup), \
+         'Matrice non pleine : %d*(%d+1)/2 != %d' % (dim, dim, len(triang_sup))
+
+   valeur = numpy.zeros([dim, dim], dtype=dtype)
+   for i in range(1, dim+1):
+     for j in range(1, i+1):
+       k = i*(i-1)/2 + j
+       valeur[j-1, i-1]=triang_sup[k-1]
+   valeur = valeur + numpy.transpose(valeur)
+   for i in range(dim):
+      valeur[i, i] = 0.5 * valeur[i, i]
+
+   return valeur
+
+# -----------------------------------------------------------------------------
+class macr_elem_dyna(ASSD, sd_macr_elem_dyna):
+
+   def EXTR_MATR_GENE(self,typmat) :
+      """ retourne les valeurs des matrices generalisees reelles
+      dans un format numpy
+         typmat='MASS_GENE' pour obtenir la matrice de masse generalisee
+         typmat='RIGI_GENE' pour obtenir la matrice de raideur generalisee
+         typmat='AMOR_GENE' pour obtenir la matrice d'amortissement generalisee
+         Attributs retourne
+            - self.valeurs : numpy.array contenant les valeurs """
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans macr_elem_dyna.EXTR_MATR_GENE en PAR_LOT='OUI'")
+
+      if (typmat=='MASS_GENE') :
+         macr_elem = self.MAEL_MASS
+      elif (typmat=='RIGI_GENE') :
+         macr_elem = self.MAEL_RAID
+      elif (typmat=='AMOR_GENE') :
+         macr_elem = self.MAEL_AMOR
+      else:
+         raise Accas.AsException("Le type de la matrice est incorrect")
+
+      desc=numpy.array(macr_elem.DESC.get())
+      # On teste si le DESC du vecteur existe
+      if (desc==None):
+         raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
+
+      matrice = VALE_triang2array(macr_elem.VALE.get(), desc[1])
+      return matrice
+
+   def RECU_MATR_GENE(self,typmat,matrice) :
+      """ envoie les valeurs d'un tableau numpy dans des matrices generalisees
+      reelles definies dans jeveux
+         typmat='MASS_GENE' pour obtenir la matrice de masse generalisee
+         typmat='RIGI_GENE' pour obtenir la matrice de raideur generalisee
+         typmat='AMOR_GENE' pour obtenir la matrice d'amortissement generalisee
+         Attributs ne retourne rien """
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans macr_elem_dyna.RECU_MATR_GENE en PAR_LOT='OUI'")
+
+      nommacr=self.get_name()
+      if (typmat=='MASS_GENE') :
+         macr_elem = self.MAEL_MASS
+      elif (typmat=='RIGI_GENE') :
+         macr_elem = self.MAEL_RAID
+      elif (typmat=='AMOR_GENE') :
+         macr_elem = self.MAEL_AMOR
+      else:
+         raise Accas.AsException("Le type de la matrice est incorrect")
+      nom_vale = macr_elem.VALE.nomj()
+      desc=numpy.array(macr_elem.DESC.get())
+
+      # On teste si le DESC de la matrice jeveux existe
+      if (desc==None):
+         raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
+      numpy.asarray(matrice)
+
+      # On teste si la matrice python est de dimension 2
+      if (len(numpy.shape(matrice))<>2):
+         raise Accas.AsException("La dimension de la matrice est incorrecte")
+
+      # On teste si les tailles de la matrice jeveux et python sont identiques
+      if (tuple([desc[1],desc[1]])<>numpy.shape(matrice)) :
+         raise Accas.AsException("La dimension de la matrice est incorrecte")
+      taille=desc[1]*desc[1]/2.0+desc[1]/2.0
+      tmp=numpy.zeros([int(taille)])
+      for j in range(desc[1]+1):
+         for i in range(j):
+            k=j*(j-1)/2+i
+            tmp[k]=matrice[j-1,i]
+      aster.putvectjev(nom_vale,len(tmp),tuple((
+         range(1,len(tmp)+1))),tuple(tmp),tuple(tmp),1)
+      return
+
diff --git a/Aster/Cata/cataSTA10/SD/co_macr_elem_stat.py b/Aster/Cata/cataSTA10/SD/co_macr_elem_stat.py
new file mode 100644 (file)
index 0000000..8c1fd63
--- /dev/null
@@ -0,0 +1,27 @@
+#@ MODIF co_macr_elem_stat SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_macr_elem_stat import sd_macr_elem_stat
+
+# -----------------------------------------------------------------------------
+# Description de la structure de données
+class macr_elem_stat(ASSD, sd_macr_elem_stat):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_maillage.py b/Aster/Cata/cataSTA10/SD/co_maillage.py
new file mode 100644 (file)
index 0000000..5d8e269
--- /dev/null
@@ -0,0 +1,53 @@
+#@ MODIF co_maillage SD  DATE 30/06/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import Accas
+from SD import *
+from sd_maillage import sd_maillage
+
+# -----------------------------------------------------------------------------
+class maillage_sdaster(ASSD, sd_maillage):
+   def LIST_GROUP_NO(self) :
+      """ retourne la liste des groupes de noeuds sous la forme :
+        [ (gno1, nb noeuds  gno1), ...] """
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans maillage.LIST_GROUP_NO en PAR_LOT='OUI'")
+      nommail=self.get_name()
+      dic_gpno=aster.getcolljev(nommail.ljust(8)+".GROUPENO")
+      #dic_gpno = self.GROUPENO.get()
+      return [(gpno.strip(),len(dic_gpno[gpno])) for gpno in dic_gpno]
+
+   def LIST_GROUP_MA(self) :
+      """ retourne la liste des groupes de mailles sous la forme :
+        [ (gma1, nb mailles gma1, dime max des mailles gma1), ...] """
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans maillage.LIST_GROUP_MA en PAR_LOT='OUI'")
+      nommail=self.get_name()
+      nommail=nommail.ljust(8)
+      ngpma=[]
+      ltyma =aster.getvectjev("&CATA.TM.NOMTM")
+      catama=aster.getcolljev("&CATA.TM.TMDIM")
+      dic_gpma=aster.getcolljev(nommail+".GROUPEMA")
+      dimama=[catama[ltyma[ma-1]][0] for ma in aster.getvectjev(nommail+".TYPMAIL")]
+      for grp in dic_gpma.keys():
+         dim=max([dimama[ma-1] for ma in dic_gpma[grp]])
+         ngpma.append((grp.strip(),len(dic_gpma[grp]),dim))
+      return ngpma
+
diff --git a/Aster/Cata/cataSTA10/SD/co_mater.py b/Aster/Cata/cataSTA10/SD/co_mater.py
new file mode 100644 (file)
index 0000000..8f1dd74
--- /dev/null
@@ -0,0 +1,53 @@
+#@ MODIF co_mater SD  DATE 30/06/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import Accas
+from SD import *
+from sd_mater import sd_mater
+
+# -----------------------------------------------------------------------------
+class mater_sdaster(ASSD, sd_mater):
+   def RCVALE(self, phenomene, nompar=(), valpar=(), nomres=(), stop='F'):
+      """Appel à la routine fortran RCVALE pour récupérer les valeurs des
+      propriétés du matériau.
+      """
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans mater.RCVALE en PAR_LOT='OUI'")
+      from Utilitai.Utmess import UTMESS
+      # vérification des arguments
+      if not type(nompar) in (list, tuple):
+         nompar = [nompar,]
+      if not type(valpar) in (list, tuple):
+         valpar = [valpar,]
+      if not type(nomres) in (list, tuple):
+         nomres = [nomres,]
+      nompar = tuple(nompar)
+      valpar = tuple(valpar)
+      nomres = tuple(nomres)
+      if len(nompar) != len(valpar):
+         vk1=', '.join(nompar)
+         vk2=', '.join([repr(v) for v in valpar])
+         UTMESS('F','SDVERI_4',valk=[vk1,vk2])
+      if len(nomres) < 1:
+         UTMESS('F', 'SDVERI_5')
+      # appel à l'interface Python/C
+      return aster.rcvale(self.nom, phenomene, nompar, valpar, nomres, stop)
+
+
diff --git a/Aster/Cata/cataSTA10/SD/co_matr_asse.py b/Aster/Cata/cataSTA10/SD/co_matr_asse.py
new file mode 100644 (file)
index 0000000..b57e384
--- /dev/null
@@ -0,0 +1,27 @@
+#@ MODIF co_matr_asse SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_matr_asse import sd_matr_asse
+
+# -----------------------------------------------------------------------------
+class matr_asse(ASSD, sd_matr_asse):
+   pass
+      
diff --git a/Aster/Cata/cataSTA10/SD/co_matr_asse_gd.py b/Aster/Cata/cataSTA10/SD/co_matr_asse_gd.py
new file mode 100644 (file)
index 0000000..e315d4b
--- /dev/null
@@ -0,0 +1,45 @@
+#@ MODIF co_matr_asse_gd SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from sd_matr_asse_gd import sd_matr_asse_gd
+from co_matr_asse    import matr_asse
+
+# -----------------------------------------------------------------------------
+# Description de la structure de données
+class matr_asse_gd(matr_asse, sd_matr_asse_gd):
+    pass
+
+class matr_asse_depl_c(matr_asse_gd):
+   pass
+
+class matr_asse_depl_r(matr_asse_gd):
+   pass
+
+class matr_asse_pres_c(matr_asse_gd):
+   pass
+
+class matr_asse_pres_r(matr_asse_gd):
+   pass
+
+class matr_asse_temp_c(matr_asse_gd):
+   pass
+
+class matr_asse_temp_r(matr_asse_gd):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_matr_asse_gene.py b/Aster/Cata/cataSTA10/SD/co_matr_asse_gene.py
new file mode 100644 (file)
index 0000000..459859a
--- /dev/null
@@ -0,0 +1,210 @@
+#@ MODIF co_matr_asse_gene SD  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import Accas
+from SD import *
+from sd_matr_asse_gene import sd_matr_asse_gene
+
+import numpy
+import math
+
+def VALM_triang2array(dict_VALM, dim, dtype=None):
+   """Conversion (par recopie) de l'objet .VALM decrivant une matrice pleine
+   par sa triangulaire inf (et parfois triang sup) en numpy.array plein.
+   """
+   # stockage symetrique ou non (triang inf+sup)
+   sym = len(dict_VALM) == 1
+   triang_sup = numpy.array(dict_VALM[1])
+   assert dim*(dim+1)/2 == len(triang_sup), \
+         'Matrice non pleine : %d*(%d+1)/2 != %d' % (dim, dim, len(triang_sup))
+   if sym:
+      triang_inf = triang_sup
+   else:
+      triang_inf = numpy.array(dict_VALM[2])
+   valeur=numpy.zeros([dim, dim], dtype=dtype)
+   for i in range(1, dim+1):
+     for j in range(1, i+1):
+       k = i*(i-1)/2 + j
+       valeur[i-1, j-1]=triang_inf[k-1]
+       valeur[j-1, i-1]=triang_sup[k-1]
+   return valeur
+
+def VALM_diag2array(dict_VALM, dim, dtype=None):
+   """Conversion (par recopie) de l'objet .VALM decrivant une matrice
+   diagonale en numpy.array plein.
+   """
+   diag = numpy.array(dict_VALM[1])
+   assert dim == len(diag), 'Dimension incorrecte : %d != %d' % (dim, len(diag))
+   valeur=numpy.zeros([dim, dim], dtype=dtype)
+   for i in range(dim):
+      valeur[i,i] =  diag[i]
+   return valeur
+
+# -----------------------------------------------------------------------------
+class matr_asse_gene(ASSD, sd_matr_asse_gene):
+   pass
+
+# -----------------------------------------------------------------------------
+class matr_asse_gene_r(matr_asse_gene):
+  def EXTR_MATR_GENE(self) :
+    """ retourne les valeurs de la matrice generalisee reelle
+    dans un format numpyal Array
+        Attributs retourne
+          - self.valeurs : numpy.array contenant les valeurs """
+    if not self.accessible():
+       raise Accas.AsException("Erreur dans matr_asse_gene.EXTR_MATR_GENE en PAR_LOT='OUI'")
+
+    desc=numpy.array(self.DESC.get())
+    # On teste si le DESC de la matrice existe
+    if (desc==None):
+       raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
+    # Si le stockage est plein
+    if desc[2]==2 :
+       valeur = VALM_triang2array(self.VALM.get(), desc[1])
+
+    # Si le stockage est diagonal
+    elif desc[2]==1 :
+       valeur = VALM_diag2array(self.VALM.get(), desc[1])
+
+    # Sinon on arrete tout
+    else:
+      raise KeyError
+    return valeur
+
+  def RECU_MATR_GENE(self,matrice) :
+    """ envoie les valeurs d'un tableau numpy dans des matrices
+    generalisees reelles definies dans jeveux
+        Attributs ne retourne rien """
+    if not self.accessible():
+       raise Accas.AsException("Erreur dans matr_asse_gene.RECU_MATR_GENE en PAR_LOT='OUI'")
+
+    ncham=self.get_name()
+    desc=numpy.array(self.DESC.get())
+
+    # On teste si le DESC de la matrice existe
+    if (desc==None):
+       raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
+    numpy.asarray(matrice)
+
+    # On teste si la dimension de la matrice python est 2
+    if (len(numpy.shape(matrice))<>2) :
+       raise Accas.AsException("La dimension de la matrice est incorrecte ")
+
+    # On teste si les tailles des matrices jeveux et python sont identiques
+    if (tuple([desc[1],desc[1]])<>numpy.shape(matrice)) :
+       raise Accas.AsException("La taille de la matrice est incorrecte ")
+
+    # Si le stockage est plein
+    if desc[2]==2 :
+      taille=desc[1]*desc[1]/2.0+desc[1]/2.0
+      tmp=numpy.zeros([int(taille)])
+      for j in range(desc[1]+1):
+        for i in range(j):
+          k=j*(j-1)/2+i
+          tmp[k]=matrice[j-1,i]
+      aster.putcolljev('%-19s.VALM' % ncham,len(tmp),tuple((\
+      range(1,len(tmp)+1))),tuple(tmp),tuple(tmp),1)
+    # Si le stockage est diagonal
+    elif desc[2]==1 :
+      tmp=numpy.zeros(desc[1])
+      for j in range(desc[1]):
+          tmp[j]=matrice[j,j]
+      aster.putcolljev('%-19s.VALM' % ncham,len(tmp),tuple((\
+      range(1,len(tmp)+1))),tuple(tmp),tuple(tmp),1)
+    # Sinon on arrete tout
+    else:
+      raise KeyError
+    return
+
+# -----------------------------------------------------------------------------
+class matr_asse_gene_c(matr_asse_gene):
+  def EXTR_MATR_GENE(self) :
+    """ retourne les valeurs de la matrice generalisee complexe
+    dans un format numpy
+        Attributs retourne
+          - self.valeurs : numpy.array contenant les valeurs """
+    if not self.accessible():
+       raise Accas.AsException("Erreur dans matr_asse_gene_c.EXTR_MATR_GENE en PAR_LOT='OUI'")
+
+    desc = numpy.array(self.DESC.get())
+    if desc == None:
+       raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster ")
+    # Si le stockage est plein
+    if desc[2] == 2 :
+       valeur = VALM_triang2array(self.VALM.get(), desc[1], complex)
+
+    # Si le stockage est diagonal
+    elif desc[2]==1 :
+       valeur = VALM_diag2array(self.VALM.get(), desc[1], complex)
+
+    # Sinon on arrete tout
+    else:
+       raise KeyError
+    return valeur
+
+  def RECU_MATR_GENE(self,matrice) :
+    """ envoie les valeurs d'un tableau numpy dans des matrices
+    generalisees reelles definies dans jeveux
+        Attributs ne retourne rien """
+    if not self.accessible():
+       raise Accas.AsException("Erreur dans matr_asse_gene_c.RECU_MATR_GENE en PAR_LOT='OUI'")
+
+    numpy.asarray(matrice)
+    ncham=self.get_name()
+    desc=numpy.array(self.DESC.get())
+
+    # On teste si le DESC de la matrice existe
+    if (desc==None):
+       raise Accas.AsException("L'objet matrice n'existe pas ou est mal cree par Code Aster")
+    numpy.asarray(matrice)
+
+    # On teste si la dimension de la matrice python est 2
+    if (len(numpy.shape(matrice))<>2) :
+       raise Accas.AsException("La dimension de la matrice est incorrecte ")
+
+    # On teste si la taille de la matrice jeveux et python est identique
+    if (tuple([desc[1],desc[1]])<>numpy.shape(matrice)) :
+       raise Accas.AsException("La taille de la matrice est incorrecte ")
+
+    # Si le stockage est plein
+    if desc[2]==2 :
+      taille=desc[1]*desc[1]/2.0+desc[1]/2.0
+      tmpr=numpy.zeros([int(taille)])
+      tmpc=numpy.zeros([int(taille)])
+      for j in range(desc[1]+1):
+        for i in range(j):
+          k=j*(j-1)/2+i
+          tmpr[k]=matrice[j-1,i].real
+          tmpc[k]=matrice[j-1,i].imag
+      aster.putvectjev('%-19s.VALM' % ncham, len(tmpr), tuple((\
+                       range(1,len(tmpr)+1))),tuple(tmpr),tuple(tmpc),1)
+    # Si le stockage est diagonal
+    elif desc[2]==1 :
+      tmpr=numpy.zeros(desc[1])
+      tmpc=numpy.zeros(desc[1])
+      for j in range(desc[1]):
+          tmpr[j]=matrice[j,j].real
+          tmpc[j]=matrice[j,j].imag
+      aster.putvectjev('%-19s.VALM' % ncham,len(tmpr),tuple((\
+                       range(1,len(tmpr)+1))),tuple(tmpr),tuple(tmpc),1)
+    # Sinon on arrete tout
+    else:
+      raise KeyError
+    return
diff --git a/Aster/Cata/cataSTA10/SD/co_matr_elem.py b/Aster/Cata/cataSTA10/SD/co_matr_elem.py
new file mode 100644 (file)
index 0000000..35f2c44
--- /dev/null
@@ -0,0 +1,40 @@
+#@ MODIF co_matr_elem SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_matr_elem import sd_matr_elem
+
+# -----------------------------------------------------------------------------
+class matr_elem(ASSD, sd_matr_elem):
+   pass
+
+class matr_elem_depl_c(matr_elem):
+   pass
+
+class matr_elem_depl_r(matr_elem):
+   pass
+
+class matr_elem_pres_c(matr_elem):
+   pass
+
+class matr_elem_temp_r(matr_elem):
+   pass
+
+
diff --git a/Aster/Cata/cataSTA10/SD/co_melasflu.py b/Aster/Cata/cataSTA10/SD/co_melasflu.py
new file mode 100644 (file)
index 0000000..f1cf571
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_melasflu SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_melasflu import sd_melasflu
+
+# -----------------------------------------------------------------------------
+class melasflu_sdaster(ASSD, sd_melasflu):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_mode_cycl.py b/Aster/Cata/cataSTA10/SD/co_mode_cycl.py
new file mode 100644 (file)
index 0000000..7df3f4a
--- /dev/null
@@ -0,0 +1,27 @@
+#@ MODIF co_mode_cycl SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_mode_cycl import sd_mode_cycl
+
+# -----------------------------------------------------------------------------
+class mode_cycl(ASSD, sd_mode_cycl):
+   pass
+
diff --git a/Aster/Cata/cataSTA10/SD/co_mode_meca.py b/Aster/Cata/cataSTA10/SD/co_mode_meca.py
new file mode 100644 (file)
index 0000000..c82a782
--- /dev/null
@@ -0,0 +1,28 @@
+#@ MODIF co_mode_meca SD  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_mode_meca import sd_mode_meca
+
+from co_resultat_dyn import resultat_dyn
+
+# -----------------------------------------------------------------------------
+class mode_meca(resultat_dyn, sd_mode_meca):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_modele.py b/Aster/Cata/cataSTA10/SD/co_modele.py
new file mode 100644 (file)
index 0000000..8fa95db
--- /dev/null
@@ -0,0 +1,27 @@
+#@ MODIF co_modele SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_modele import sd_modele
+
+# -----------------------------------------------------------------------------
+class modele_sdaster(ASSD, sd_modele):
+   pass
+      
diff --git a/Aster/Cata/cataSTA10/SD/co_modele_gene.py b/Aster/Cata/cataSTA10/SD/co_modele_gene.py
new file mode 100644 (file)
index 0000000..f9eb617
--- /dev/null
@@ -0,0 +1,47 @@
+#@ MODIF co_modele_gene SD  DATE 30/06/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import Accas
+from SD import *
+from sd_modele_gene import sd_modele_gene
+
+# -----------------------------------------------------------------------------
+class modele_gene(ASSD, sd_modele_gene):
+   def LIST_SOUS_STRUCT(self) :
+      """ retourne la liste des sous structures du modele generalise
+         la liste des macro-elements sous-jacents"""
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans modele_gene.LIST_SOUS_STRUCT en PAR_LOT='OUI'")
+      nommodgen=self.get_name()
+      ncham=nommodgen+(8-len(nommodgen))*' '
+      ssno=aster.getvectjev(ncham+(14-len(ncham))*' '+'.MODG.SSNO')
+      ssme=aster.getcolljev(ncham+(14-len(ncham))*' '+'.MODG.SSME')
+      return [([ssno[ind], ssme[ind+1]]) for ind in range(len(ssno))]
+
+   def LIST_LIAIS_STRUCT(self) :
+      """ retourne la liste des liaisons entre sous structures du modele generalise sous la forme :
+         [ (ss1, nom_liais1,  ss2 , nom_liais2), ...] """
+      if not self.accessible() :
+         raise Accas.AsException("Erreur dans modele_gene.LIST_LIAIS_STRUCT en PAR_LOT='OUI'")
+      nommodgen=self.get_name()
+      ncham=nommodgen+(8-len(nommodgen))*' '
+      lidf=aster.getcolljev(ncham+(14-len(ncham))*' '+'.MODG.LIDF')
+      return [([(lidf[ind][indb]) for indb in range(4)]) for ind in lidf]
+
diff --git a/Aster/Cata/cataSTA10/SD/co_nume_ddl.py b/Aster/Cata/cataSTA10/SD/co_nume_ddl.py
new file mode 100644 (file)
index 0000000..d631a04
--- /dev/null
@@ -0,0 +1,27 @@
+#@ MODIF co_nume_ddl SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_nume_ddl import sd_nume_ddl
+
+# -----------------------------------------------------------------------------
+# Description de la structure de données
+class nume_ddl_sdaster(ASSD, sd_nume_ddl):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_nume_ddl_gene.py b/Aster/Cata/cataSTA10/SD/co_nume_ddl_gene.py
new file mode 100644 (file)
index 0000000..6fe69af
--- /dev/null
@@ -0,0 +1,27 @@
+#@ MODIF co_nume_ddl_gene SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_nume_ddl import sd_nume_ddl
+###sd_nume_eqge ????????
+
+# -----------------------------------------------------------------------------
+class nume_ddl_gene(ASSD, sd_nume_ddl):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_resultat.py b/Aster/Cata/cataSTA10/SD/co_resultat.py
new file mode 100644 (file)
index 0000000..e4a6f21
--- /dev/null
@@ -0,0 +1,53 @@
+#@ MODIF co_resultat SD  DATE 23/03/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import Accas
+from SD import *
+from sd_resultat import sd_resultat
+
+# -----------------------------------------------------------------------------
+class resultat_sdaster(ASSD, sd_resultat):
+   def LIST_CHAMPS (self) :
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans resultat.LIST_CHAMPS en PAR_LOT='OUI'")
+      return aster.GetResu(self.get_name(), "CHAMPS")
+
+   def LIST_NOM_CMP (self) :
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans resultat.LIST_NOM_CMP en PAR_LOT='OUI'")
+      return aster.GetResu(self.get_name(), "COMPOSANTES")
+
+   def LIST_VARI_ACCES (self) :
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans resultat.LIST_VARI_ACCES en PAR_LOT='OUI'")
+      return aster.GetResu(self.get_name(), "VARI_ACCES")
+
+   def LIST_PARA (self) :
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans resultat.LIST_PARA en PAR_LOT='OUI'")
+      return aster.GetResu(self.get_name(), "PARAMETRES")
+
+# -----------------------------------------------------------------------------
+class resultat_jeveux(resultat_sdaster):
+   """Classe permettant d'accéder à un resultat jeveux qui n'a pas d'ASSD associée,
+   c'est le cas des concepts résultats (table, evol_xxxx) dérivés."""
+   def __init__(self,nom_jeveux):
+      self.nom=nom_jeveux
+      AsBase.__init__(self, nomj=self.nom)
diff --git a/Aster/Cata/cataSTA10/SD/co_resultat_dyn.py b/Aster/Cata/cataSTA10/SD/co_resultat_dyn.py
new file mode 100644 (file)
index 0000000..b0b2043
--- /dev/null
@@ -0,0 +1,28 @@
+#@ MODIF co_resultat_dyn SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_resultat_dyn import sd_resultat_dyn
+
+from co_resultat import resultat_sdaster
+
+# -----------------------------------------------------------------------------
+class resultat_dyn(resultat_sdaster, sd_resultat_dyn):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_sd_feti.py b/Aster/Cata/cataSTA10/SD/co_sd_feti.py
new file mode 100644 (file)
index 0000000..73766b7
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_sd_feti SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_feti import sd_feti
+
+# -----------------------------------------------------------------------------
+class sd_feti_sdaster(ASSD, sd_feti):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_spectre.py b/Aster/Cata/cataSTA10/SD/co_spectre.py
new file mode 100644 (file)
index 0000000..aab725d
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_spectre SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_spectre import sd_spectre
+
+# -----------------------------------------------------------------------------
+class spectre_sdaster(ASSD, sd_spectre):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_squelette.py b/Aster/Cata/cataSTA10/SD/co_squelette.py
new file mode 100644 (file)
index 0000000..993a227
--- /dev/null
@@ -0,0 +1,28 @@
+#@ MODIF co_squelette SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_squelette import sd_squelette
+
+from co_maillage import maillage_sdaster
+
+# -----------------------------------------------------------------------------
+class squelette(maillage_sdaster, sd_squelette):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_surface.py b/Aster/Cata/cataSTA10/SD/co_surface.py
new file mode 100644 (file)
index 0000000..08c95ed
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_surface SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_surface import sd_surface
+
+# -----------------------------------------------------------------------------
+class surface_sdaster(ASSD, sd_surface):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_table.py b/Aster/Cata/cataSTA10/SD/co_table.py
new file mode 100644 (file)
index 0000000..efa36bf
--- /dev/null
@@ -0,0 +1,117 @@
+#@ MODIF co_table SD  DATE 30/06/2009   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import Accas
+from SD import *
+from sd_table import sd_table
+
+# -----------------------------------------------------------------------------
+class table_sdaster(ASSD, sd_table):
+   def __getitem__(self,key):
+      from Utilitai.Utmess import UTMESS
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans table.__getitem__ en PAR_LOT='OUI'")
+      requete = '%-24s' % key[0]
+      tblp = '%-19s.TBLP' % self.get_name()
+      tabnom = aster.getvectjev(tblp)
+      #tabnom = self.TBLP.get()
+      if tabnom == None:
+         UTMESS('F','SDVERI_2',valk=[tblp])
+      for i in range(len(tabnom)) :
+         if tabnom[i]==requete: break
+      resu=aster.getvectjev(tabnom[i+2])
+      if resu == None:
+         UTMESS('F','SDVERI_2',valk=[tabnom[i+2]])
+      exist=aster.getvectjev(tabnom[i+3])
+      if exist == None:
+         UTMESS('F','SDVERI_2',valk=[tabnom[i+3]])
+      if key[1]>len(resu) or exist[key[1]-1]==0:
+         raise KeyError
+      else:
+         return resu[key[1]-1]
+
+   def TITRE(self):
+      """Retourne le titre d'une table Aster
+      (Utile pour récupérer le titre et uniquement le titre d'une table dont
+      on souhaite manipuler la dérivée).
+      """
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans table.TITRE en PAR_LOT='OUI'")
+      titj = aster.getvectjev('%-19s.TITR' % self.get_name())
+      #titj = self.TITR.get()
+      if titj != None:
+         titr = '\n'.join(titj)
+      else:
+         titr = ''
+      return titr
+
+   def EXTR_TABLE(self) :
+      """Produit un objet Table à partir du contenu d'une table Aster
+      """
+      def Nonefy(l1,l2) :
+          if l2==0 : return None
+          else     : return l1
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans table.EXTR_TABLE en PAR_LOT='OUI'")
+      from Utilitai.Table import Table
+      # titre
+      titr = self.TITRE()
+      # récupération des paramètres
+      v_tblp = aster.getvectjev('%-19s.TBLP' % self.get_name())
+      #v_tblp = self.TBLP.get()
+      if v_tblp == None:
+         # retourne une table vide
+         return Table(titr=titr)
+      tabnom=list(v_tblp)
+      nparam=len(tabnom)/4
+      lparam=[tabnom[4*i:4*i+4] for i in range(nparam)]
+      dval={}
+      # liste des paramètres et des types
+      lpar=[]
+      ltyp=[]
+      for i in lparam :
+         value=list(aster.getvectjev(i[2]))
+         exist=aster.getvectjev(i[3])
+         dval[i[0].strip()] = map(Nonefy,value,exist)
+         lpar.append(i[0].strip())
+         ltyp.append(i[1].strip())
+      n=len(dval[lpar[0]])
+      # contenu : liste de dict
+      lisdic=[]
+      for i in range(n) :
+        d={}
+        for p in lpar:
+           d[p]=dval[p][i]
+        lisdic.append(d)
+      return Table(lisdic, lpar, ltyp, titr)
+
+# -----------------------------------------------------------------------------
+class table_fonction(table_sdaster):
+   """Table contenant en plus une colonne FONCTION et/ou FONCTION_C dont les
+   valeurs des cellules sont des noms de fonction_sdaster ou fonction_c.
+   """
+
+# -----------------------------------------------------------------------------
+class table_jeveux(table_sdaster):
+   """Classe permettant d'accéder à une table jeveux qui n'a pas d'ASSD associée,
+   c'est le cas des concepts résultats (table, evol_xxxx) dérivés."""
+   def __init__(self, nom_jeveux):
+      self.nom = nom_jeveux
+      AsBase.__init__(self, nomj=self.nom)
diff --git a/Aster/Cata/cataSTA10/SD/co_table_container.py b/Aster/Cata/cataSTA10/SD/co_table_container.py
new file mode 100644 (file)
index 0000000..71bad13
--- /dev/null
@@ -0,0 +1,29 @@
+#@ MODIF co_table_container SD  DATE 12/02/2008   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from co_table import table_sdaster
+from sd_table_container import sd_table_container
+
+# -----------------------------------------------------------------------------
+class table_container(table_sdaster,sd_table_container):
+   """Table contenant les colonnes NOM_OBJET, TYPE_OBJET et NOM_SD.
+   """
+
diff --git a/Aster/Cata/cataSTA10/SD/co_table_fonction.py b/Aster/Cata/cataSTA10/SD/co_table_fonction.py
new file mode 100644 (file)
index 0000000..6a1f4d4
--- /dev/null
@@ -0,0 +1,30 @@
+#@ MODIF co_table_fonction SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from co_table import table_sdaster
+from sd_table_fonction import sd_table_fonction
+
+# -----------------------------------------------------------------------------
+class table_fonction(table_sdaster,sd_table_fonction):
+   """Table contenant une colonne FONCTION et/ou FONCTION_C dont les
+   valeurs des cellules sont des noms de fonction_sdaster ou fonction_c.
+   """
+
diff --git a/Aster/Cata/cataSTA10/SD/co_tran_gene.py b/Aster/Cata/cataSTA10/SD/co_tran_gene.py
new file mode 100644 (file)
index 0000000..69096a9
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_tran_gene SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_tran_gene import sd_tran_gene
+
+# -----------------------------------------------------------------------------
+class tran_gene(ASSD, sd_tran_gene):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_type_flui_stru.py b/Aster/Cata/cataSTA10/SD/co_type_flui_stru.py
new file mode 100644 (file)
index 0000000..3b3d152
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF co_type_flui_stru SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from sd_type_flui_stru import sd_type_flui_stru
+
+# -----------------------------------------------------------------------------
+class type_flui_stru(ASSD, sd_type_flui_stru):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/co_vect_asse_gene.py b/Aster/Cata/cataSTA10/SD/co_vect_asse_gene.py
new file mode 100644 (file)
index 0000000..eb9e1cf
--- /dev/null
@@ -0,0 +1,101 @@
+#@ MODIF co_vect_asse_gene SD  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+import Accas
+from SD import *
+from sd_cham_gene import sd_cham_gene
+
+import numpy
+
+# -----------------------------------------------------------------------------
+
+class vect_asse_gene(ASSD, sd_cham_gene):
+   def EXTR_VECT_GENE_R(self) :
+      """ retourne les valeurs du vecteur generalisee
+      dans un format numpy
+         Attributs retourne
+            - self.valeurs : numpy.array contenant les valeurs """
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans vect_asse_gene_r.EXTR_VECT_GENE en PAR_LOT='OUI'")
+      ncham=self.get_name()
+      ncham=ncham+(8-len(ncham))*' '
+      valeur=numpy.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.VALE'))
+      return valeur
+
+   def RECU_VECT_GENE_R(self,vecteur) :
+      """ envoie les valeurs d'un tableau numpy dans un vecteur generalise
+      reel definie dans jeveux
+         Attributs ne retourne rien """
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans vect_asse_gene_r.RECU_VECT_GENE en PAR_LOT='OUI'")
+
+      numpy.asarray(vecteur)
+      ncham=self.get_name()
+      ncham=ncham+(8-len(ncham))*' '
+      desc=numpy.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.DESC'))
+      # On teste si le DESC du vecteur existe
+      if (desc==None):
+         raise Accas.AsException("L'objet vecteur n'existe pas ou \
+         est mal cree par Code Aster")
+      # On teste si la taille du vecteur jeveux et python est identique
+      if desc[1]<>numpy.shape(vecteur)[0] :
+         raise Accas.AsException("La taille du vecteur python est incorrecte")
+      aster.putvectjev(ncham+(19-len(ncham))*' '+'.VALE',len(vecteur),tuple((\
+      range(1,len(vecteur)+1))),tuple(vecteur),tuple(vecteur),1)
+      return
+
+   def EXTR_VECT_GENE_C(self) :
+      """ retourne les valeurs du vecteur generalisee
+      dans un format numpy
+         Attributs retourne
+            - self.valeurs : numpy.array contenant les valeurs """
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans vect_asse_gene_c.EXTR_VECT_GENE en PAR_LOT='OUI'")
+
+      ncham=self.get_name()
+      ncham=ncham+(8-len(ncham))*' '
+      valeur=numpy.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.VALE'), complex)
+
+      return valeur
+
+   def RECU_VECT_GENE_C(self,vecteur) :
+      """ envoie les valeurs d'un tableau numpy dans un vecteur generalise
+      complexe definie dans jeveux
+         Attributs ne retourne rien """
+      if not self.accessible():
+         raise Accas.AsException("Erreur dans vect_asse_gene_c.RECU_VECT_GENE en PAR_LOT='OUI'")
+
+      numpy.asarray(vecteur)
+      ncham=self.get_name()
+      ncham=ncham+(8-len(ncham))*' '
+      desc=numpy.array(aster.getvectjev(ncham+(19-len(ncham))*' '+'.DESC'))
+      # On teste si le DESC de la matrice existe
+      if (desc==None):
+         raise Accas.AsException("L'objet vecteur n'existe pas ou \
+         est mal cree par Code Aster")
+      # On teste si la taille de la matrice jeveux et python est identique
+      if desc[1]<>numpy.shape(vecteur)[0] :
+         raise Accas.AsException("La taille du vecteur python est incorrecte")
+      tmpr=vecteur.real
+      tmpc=vecteur.imag
+      aster.putvectjev(ncham+(19-len(ncham))*' '+'.VALE',len(tmpr),tuple((
+      range(1,len(tmpr)+1))),tuple(tmpr),tuple(tmpc),1)
+      return
+
diff --git a/Aster/Cata/cataSTA10/SD/co_vect_elem.py b/Aster/Cata/cataSTA10/SD/co_vect_elem.py
new file mode 100644 (file)
index 0000000..4dd17cb
--- /dev/null
@@ -0,0 +1,38 @@
+#@ MODIF co_vect_elem SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from SD.sd_vect_elem import sd_vect_elem
+
+# -----------------------------------------------------------------------------
+class vect_elem(ASSD, sd_vect_elem):
+   pass
+
+class vect_elem_depl_r(vect_elem):
+   pass
+
+class vect_elem_pres_r(vect_elem):
+   pass
+
+class vect_elem_pres_c(vect_elem):
+   pass
+
+class vect_elem_temp_r(vect_elem):
+   pass
diff --git a/Aster/Cata/cataSTA10/SD/sd_amor_modal.py b/Aster/Cata/cataSTA10/SD/sd_amor_modal.py
new file mode 100644 (file)
index 0000000..bf96411
--- /dev/null
@@ -0,0 +1,28 @@
+#@ MODIF sd_amor_modal SD  DATE 04/04/2007   AUTEUR ABBAS M.ABBAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+from SD import *
+
+class sd_amor_modal(AsBase):
+#------------------------------------
+    nomj = SDNom(fin=19)
+    
+    VALM=AsVR()
+    BASM=AsVR()
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_base_modale.py b/Aster/Cata/cataSTA10/SD/sd_base_modale.py
new file mode 100644 (file)
index 0000000..1a07f3b
--- /dev/null
@@ -0,0 +1,31 @@
+#@ MODIF sd_base_modale SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+from SD.sd_resultat_dyn import sd_resultat_dyn
+
+
+class sd_base_modale(sd_resultat_dyn):
+#--------------------------------------------------
+    nomj = SDNom(fin=8)
+    UTIL = Facultatif(AsVI(SDNom(debut=19)))  # AJACOT_PB : .UTIL n'existe pas pour sdlx201a
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_cabl_precont.py b/Aster/Cata/cataSTA10/SD/sd_cabl_precont.py
new file mode 100644 (file)
index 0000000..ee9b4c9
--- /dev/null
@@ -0,0 +1,36 @@
+#@ MODIF sd_cabl_precont SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from SD.sd_titre import sd_titre
+
+from SD.sd_liste_rela import sd_liste_rela
+from SD.sd_carte import sd_carte
+from SD.sd_l_table import sd_l_table
+
+
+class sd_cabl_precont(sd_titre):
+#-----------------------------------------
+    nomj = SDNom(fin=8)
+    chme_sigin = sd_carte(SDNom(nomj='.CHME.SIGIN', fin=19))
+    lirela     = sd_liste_rela(SDNom(nomj='.LIRELA', fin=19))
+    lt         = sd_l_table(SDNom(nomj=''))
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_cara_elem.py b/Aster/Cata/cataSTA10/SD/sd_cara_elem.py
new file mode 100644 (file)
index 0000000..ca61858
--- /dev/null
@@ -0,0 +1,52 @@
+#@ MODIF sd_cara_elem SD  DATE 23/10/2008   AUTEUR TORKHANI M.TORKHANI 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_cham_elem import sd_cham_elem
+from SD.sd_carte import sd_carte
+
+class sd_cara_elem(AsBase):
+#--------------------------
+    nomj = SDNom(fin=8)
+    CARGENBA = Facultatif(sd_carte())
+    CAFIBR   = Facultatif(sd_cham_elem())
+    CARMASSI = Facultatif(sd_carte())
+    CARCABLE = Facultatif(sd_carte())
+    CARCOQUE = Facultatif(sd_carte())
+    CARGEOBA = Facultatif(sd_carte())
+    CANBSP   = Facultatif(sd_cham_elem())
+    CARDISCK = Facultatif(sd_carte())
+    CARARCPO = Facultatif(sd_carte())
+    CARGENPO = Facultatif(sd_carte())
+    CARDISCM = Facultatif(sd_carte())
+    CARORIEN = Facultatif(sd_carte())
+    CARDISCA = Facultatif(sd_carte())
+    CVENTCXF = Facultatif(sd_carte())
+    CARPOUFL = Facultatif(sd_carte())
+    CARGEOPO = Facultatif(sd_carte())
+    CARRIGXN = Facultatif(AsVK8())
+    CARRIGXV = Facultatif(AsVR())
+    CARDNSCK = Facultatif(sd_carte())
+    CARDNSCM = Facultatif(sd_carte())
+    CARDNSCA = Facultatif(sd_carte())
+    CARDINFO = Facultatif(sd_carte())
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_carte.py b/Aster/Cata/cataSTA10/SD/sd_carte.py
new file mode 100644 (file)
index 0000000..85552eb
--- /dev/null
@@ -0,0 +1,80 @@
+#@ MODIF sd_carte SD  DATE 10/07/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_titre import sd_titre
+from SD.sd_util import *
+
+
+
+class sd_carte(sd_titre):
+#----------------------------
+    nomj = SDNom(fin=19)
+
+    DESC = AsVI(docu='CART', )
+    NOMA = AsVK8(lonmax=1, )
+    VALE = AsVect(type=Parmi('C', 'K', 'R'), ltyp=Parmi(16, 24, 8), )
+
+    NOLI = Facultatif(AsVK24())
+    LIMA = Facultatif(AsColl(acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', ))
+
+
+    def exists(self):
+        return self.NOMA.exists
+
+
+    def check_NOMA(self,checker):
+        if not self.exists() : return
+        noma=self.NOMA.get_stripped()
+
+        # faut-il vérifier le sd_maillage de chaque sd_carte ?   AJACOT_PB  (meme question que pour sd_cham_no)
+        #  - cela risque de couter cher
+        #  - cela pose un problème "import circulaire" avec sd_maillage -> sd_carte => import ici
+        # from SD.sd_maillage import sd_maillage
+        # sd2=sd_maillage(noma[0]); sd2.check(checker)
+        # Rem : si on vérifie le sd_maillage, il me semble que sdll503a se plante (RuntimeError: maximum recursion depth exceeded)
+
+
+    def check_DESC(self,checker):
+        if not self.exists() : return
+        desc=self.DESC.get()
+        numgd    =desc[0]
+        n_gd_max =desc[1]
+        n_gd_edit=desc[2]
+        assert numgd      > 0 , desc
+        assert n_gd_max   > 0 , desc
+        assert n_gd_edit  >=0 , desc  # AJACOT_PB : j'aurais préféré  n_gd_edit > 0
+                                      # mais acearp.f crée parfois des cartes "vides" (zzzz200a)
+        assert n_gd_edit  <= n_gd_max , desc
+        for kedit in range(n_gd_edit) :
+            code=desc[3+2*kedit]
+            assert abs(code) in (1,2,3) , (code, kedit, desc)
+
+
+    def check_VALE(self,checker):
+        if not self.exists() : return
+        n1=self.VALE.lonmax
+        desc=self.DESC.get()
+        n_gd_max =desc[1]
+        numgd    =desc[0]
+        ncmp_max=len(sdu_licmp_gd(numgd))
+        assert n1==ncmp_max*n_gd_max , (n1, ncmp_max, n_gd_max)
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_cham_elem.py b/Aster/Cata/cataSTA10/SD/sd_cham_elem.py
new file mode 100644 (file)
index 0000000..7adc498
--- /dev/null
@@ -0,0 +1,93 @@
+#@ MODIF sd_cham_elem SD  DATE 07/10/2008   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_titre import sd_titre
+
+from SD.sd_ligrel import sd_ligrel
+
+
+class sd_cham_elem(sd_titre):
+#-------------------------------------
+    nomj = SDNom(fin=19)
+    CELD = AsVI(docu='CHML', )
+    CELV = AsObject(genr='V', xous='S', type=Parmi('C', 'I', 'K', 'R'), ltyp=Parmi(4,8,16), )
+    CELK = AsVK24(lonmax=7, )
+
+
+    def exists(self):
+        # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+        return self.CELK.exists
+
+    def check_1(self, checker):
+        if not self.exists() : return
+        celk=self.CELK.get_stripped()
+        sd2=sd_ligrel(celk[0]); sd2.check(checker)
+        assert celk[1] != '' , celk
+        assert celk[2] in ('ELNO','ELGA','ELEM') , celk
+        assert celk[4] in ('','INF','MOY','SUP') , celk
+        assert celk[5] != '' , celk
+        assert celk[6] in ('MPI_COMPLET','MPI_INCOMPLET') , celk
+
+    def check_2(self, checker):
+        if not checker._profond : return
+        if not self.exists() : return
+        celd=self.CELD.get()
+        assert celd[0] > 0 , celd
+        ngrel= celd[1]
+        assert ngrel > 0 , celd
+        mxsp = celd[2]
+        assert mxsp > 0 , celd
+        mxcmp = celd[3]
+        lvari = mxcmp > 0
+        for kgrel in range(ngrel) :
+            debugr= celd[4+kgrel]-1
+            nbel  = celd[debugr+1]
+            modelo= celd[debugr+2]
+            lgcata= celd[debugr+3]
+            lggrel= celd[debugr+4]
+
+            assert nbel > 0 , (nbel,kgrel)
+            assert modelo >= 0 , (modelo,kgrel)
+            if modelo == 0 :
+                assert lgcata == 0 , (lgcata,kgrel)
+                assert lggrel == 0 , (lggrel,kgrel)
+                continue
+
+            assert lgcata > 0 , (lgcata,kgrel)
+            assert lggrel > 0 , (lggrel,kgrel)
+            assert lggrel >= nbel*lgcata , (lggrel,kgrel,nbel,lgcata)
+
+
+            for iel in range(nbel) :
+                nbsp  =celd[debugr+4+4*iel+1]
+                ncdyn =celd[debugr+4+4*iel+2]
+                lgchel=celd[debugr+4+4*iel+3]
+                adiel =celd[debugr+4+4*iel+4]
+                assert nbsp > 0 , (nbsp,kgrel,iel)
+                if lvari :
+                   assert ncdyn > 0 , (ncdyn,kgrel,iel)
+                   assert lgchel == lgcata*nbsp*ncdyn , (lgchel,lgcata,nbsp,ncdyn,kgrel,iel)
+                else :
+                   assert ncdyn == 0 , (ncdyn,kgrel,iel)
+                   assert lgchel == lgcata*nbsp , (lgchel,lgcata,nbsp,kgrel,iel)
+                assert adiel > 0 , (adiel,kgrel,iel)
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_cham_gene.py b/Aster/Cata/cataSTA10/SD/sd_cham_gene.py
new file mode 100644 (file)
index 0000000..43cca8e
--- /dev/null
@@ -0,0 +1,45 @@
+#@ MODIF sd_cham_gene SD  DATE 27/11/2007   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_nume_ddl_gene import sd_nume_ddl_gene
+
+class sd_cham_gene(AsBase):
+    nomj = SDNom(fin=19)
+    REFE = AsVK24(lonmax=2, )
+    VALE = AsObject(genr='V', xous='S', type=Parmi('C', 'R'), ltyp=Parmi(16, 8), )
+    DESC = AsVI(docu='VGEN', )
+
+
+    def exists(self):
+        # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+        return self.REFE.exists
+
+    # indirection vers NUME_DDL_GENE:
+    def check_REFE(self, checker):
+        if not self.exists() : return
+        refe = self.REFE.get_stripped()
+        # ce test fait planter les verif de SD issues de DYNA_TRAN_MODAL + RECU_GENE
+        # op0037 cree un refe[1]='$TRAN_GENE' bidon 
+        if refe[1] == '$TRAN_GENE': return
+        if refe[1] :
+            sd2 = sd_nume_ddl_gene(refe[1]) ; sd2.check(checker)
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_cham_mater.py b/Aster/Cata/cataSTA10/SD/sd_cham_mater.py
new file mode 100644 (file)
index 0000000..311e340
--- /dev/null
@@ -0,0 +1,184 @@
+#@ MODIF sd_cham_mater SD  DATE 30/06/2008   AUTEUR PROIX J-M.PROIX 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_carte import sd_carte
+from SD.sd_champ import sd_champ
+from SD.sd_mater import sd_mater
+from SD.sd_compor import sd_compor
+from SD.sd_util import *
+
+
+# Remarque :
+#------------
+# la sd_cham_mater est produite par la seule commande AFFE_MATERIAU.
+# C'est pourquoi, on fera appel parfois pour la décrire au vocabulaire de cette
+# commande.
+
+
+
+class sd_cham_mater_varc(AsBase):
+#----------------------------------
+# la sd_cham_mater_varc est la partie de la sd_cham_mater correspondant aux variables de commande
+# (mot clé AFFE_VARC)
+
+    nomj = SDNom(fin=8)
+    CVRCNOM  = AsVK8()
+    CVRCGD   = AsVK8()
+    CVRCDEF  = AsVR()
+    CVRCVARC = AsVK8()
+    CVRCCMP  = AsVK8()
+
+    def exists(self):
+        return self.CVRCVARC.exists
+
+    # indirection via CVRCVARC:
+    def check_cham_mater_i_CVRCVARC(self, checker):
+        if not self.exists() : return
+        lnom=self.CVRCVARC.get()
+        for nom in lnom :
+           nom2=self.nomj()[:8]+'.'+nom+'.1'
+           sd2=sd_carte(nom2)  ; sd2.check(checker)
+
+           nom2=self.nomj()[:8]+'.'+nom+'.2'
+           sd2=sd_carte(nom2)  ; sd2.check(checker)
+
+           # dans le cas de la temperature, on cree parfois des cartes sous-terraines
+           # (lorsque l'on indique VALE_REF sans donner de CHAMP_GD/EVOL) :
+           if nom.strip()=='TEMP':
+               desc=sd2.DESC.get()
+               ngdmax=desc[1]
+               ngdedi=desc[2]
+               vale=sd2.VALE.get_stripped()
+               ncmp=len(vale)/ngdmax
+               assert len(vale)==ncmp*ngdmax, (ngdmax, ncmp, vale)
+               for kedit in range(ngdedi):
+                   assert vale[ncmp*kedit+0]=='TEMP' , (vale, kedit,ncmp)
+                   if vale[ncmp*kedit+1]=='CHAMP' :
+                      sd3=sd_champ(vale[ncmp*kedit+2]) ; sd3.check(checker)
+
+
+    # vérification des objets .CVRC* :
+    def check_CVRC(self, checker):
+        if not self.exists() : return
+        cvrccmp=self.CVRCCMP.get()
+        cvrcnom =self.CVRCNOM.get_stripped()
+        cvrcgd  =self.CVRCGD.get_stripped()
+        cvrcvarc=self.CVRCVARC.get_stripped()
+        cvrcdef =self.CVRCDEF.get()
+
+        # Les 6 objets ont la meme longueur > 0 :
+        nbcvrc=len(cvrcnom)
+        assert nbcvrc > 0, (self)
+        assert len(cvrccmp)  == nbcvrc , (cvrccmp,cvrcnom,self)
+        assert len(cvrcgd)   == nbcvrc , (cvrcgd,cvrcnom,self)
+        assert len(cvrcvarc) == nbcvrc , (cvrcvarc,cvrcnom,self)
+        assert len(cvrcdef)  == nbcvrc , (cvrcdef,cvrcnom,self)
+
+        # Les 4 objets sont "non blancs" :
+        sdu_tous_non_blancs(self.CVRCCMP,checker)
+        sdu_tous_non_blancs(self.CVRCNOM,checker)
+        sdu_tous_non_blancs(self.CVRCGD,checker)
+        sdu_tous_non_blancs(self.CVRCVARC,checker)
+
+        # les noms des CRVC doivent etre differents:
+        sdu_tous_differents(self.CVRCNOM,checker)
+
+
+
+
+class sd_cham_mater(AsBase):
+#=============================
+    nomj = SDNom(fin=8)
+
+    # CHAMP_MAT est une carte contenant la liste des noms de matériaux
+    # affectées sur les mailles du maillage.
+    CHAMP_MAT = sd_carte()
+
+    # si AFFE_VARC :
+    varc = Facultatif(sd_cham_mater_varc(SDNom(nomj='')))
+
+    # si AFFE_COMPOR :
+    # COMPOR est une carte définissant les sd_compor affectés
+    # sur les mailles du maillage
+    COMPOR = Facultatif(sd_carte())
+
+
+    def check_CHAMP_MAT(self,checker) :
+    #----------------------------------
+        # on vérifie que la carte .CHAMP_MAT contient bien des noms de matériau.
+        vale=self.CHAMP_MAT.VALE.get_stripped()
+        desc=self.CHAMP_MAT.DESC.get()
+        numgd    =desc[0]
+        n_gd_edit=desc[2]
+        assert sdu_nom_gd(numgd) == 'NEUT_F', (desc,sdu_nom_gd(numgd))
+        ncmp_max=len(sdu_licmp_gd(numgd))
+        assert ncmp_max==30 , ncmp_max
+
+        for kedit in range(n_gd_edit):
+            v1=vale[kedit*ncmp_max:(kedit+1)*ncmp_max]
+            ktref=None
+            for k1 in range(len(v1)) :
+                x1=v1[k1]
+                if x1 == '' : continue
+
+                # cas particulier : 'TREF=>', '25.0'
+                if x1=='TREF=>' :
+                    ktref=k1
+                    continue
+                if ktref :
+                    assert k1 == ktref+1 , (k1, ktref)
+                    # on doit retrouver la valeur de TREF :
+                    try :
+                        tref=float(x1)
+                    except :
+                        assert 0 , ' On doit trouver la valeur de TREF: '+x1
+                    continue
+
+                # cas général : x1 est un nom de sd_mater
+                sd2=sd_mater(x1) ; sd2.check(checker)
+
+
+    def check_COMPOR(self,checker) :
+    #----------------------------------
+        # on vérifie (un peu)  la carte .COMPOR (si elle existe)
+        desc=self.COMPOR.DESC.get()
+        if not desc : return
+        vale=self.COMPOR.VALE.get_stripped()
+        numgd    =desc[0]
+        n_gd_edit=desc[2]
+        assert sdu_nom_gd(numgd) == 'COMPOR', (desc,sdu_nom_gd(numgd))
+        ncmp_max=len(sdu_licmp_gd(numgd))
+
+        for kedit in range(n_gd_edit):
+            v1=vale[kedit*ncmp_max:(kedit+1)*ncmp_max]
+            assert v1[3]=='COMP_INCR'   , v1
+            sd2=sd_compor(v1[6].split('.')[0].strip()) ; sd2.check(checker)
+
+            for x1 in v1[7:] :
+                assert x1=='' , v1
+
+
+
+
+
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_cham_no.py b/Aster/Cata/cataSTA10/SD/sd_cham_no.py
new file mode 100644 (file)
index 0000000..66e7c4e
--- /dev/null
@@ -0,0 +1,54 @@
+#@ MODIF sd_cham_no SD  DATE 03/11/2008   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_titre import sd_titre
+
+from SD.sd_prof_chno import sd_prof_chno
+
+
+class sd_cham_no(sd_titre):
+#------------------------------------
+    nomj = SDNom(fin=19)
+    VALE = AsVect(ltyp=Parmi(4,8,16,24), type=Parmi('C', 'I', 'K', 'R'), docu=Parmi('', '2', '3'), )
+    REFE = AsVK24()
+    DESC = AsVI(docu='CHNO', )
+
+
+    def exists(self):
+        # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+        return self.REFE.exists
+
+    def check_cham_no_i_REFE(self, checker):
+        if not self.exists() : return
+        lnom = self.REFE.get()
+
+        # faut-il vérifier le sd_maillage de chaque sd_cham_no ?   AJACOT_PB
+        #  - cela risque de couter cher
+        #  - cela pose un problème "import circulaire" avec sd_maillage -> sd_cham_no => import ici
+        from SD.sd_maillage import sd_maillage
+        sd2 = sd_maillage(lnom[0])
+        sd2.check(checker)
+
+        if lnom[1].strip() :
+            if checker.names.has_key(lnom[1][:14]+'.NUME.PRNO'):  return
+            sd2 = sd_prof_chno(lnom[1]) ; sd2.check(checker)
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_champ.py b/Aster/Cata/cataSTA10/SD/sd_champ.py
new file mode 100644 (file)
index 0000000..ab214a1
--- /dev/null
@@ -0,0 +1,67 @@
+#@ MODIF sd_champ SD  DATE 17/07/2007   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+from SD.sd_cham_no import sd_cham_no
+from SD.sd_cham_elem import sd_cham_elem
+from SD.sd_cham_gene import sd_cham_gene
+from SD.sd_carte import sd_carte
+from SD.sd_resuelem import sd_resuelem
+
+#---------------------------------------------------------------------------------
+# classe "chapeau" à sd_cham_no, sd_cham_elem, sd_carte, ...
+#---------------------------------------------------------------------------------
+
+class sd_champ(AsBase):
+#---------------------------
+    nomj = SDNom(fin=19)
+
+
+    def check_champ_1(self, checker):
+        # est-ce  un sd_cham_no, un sd_cham_elem, ... ?
+        nom=self.nomj()[:19]
+        nom1=nom+'.CELD'
+        iexi=aster.jeveux_exists(nom1)
+        if iexi :
+           nom2=nom+'.CELD'
+        else :
+           nom2=nom+'.DESC'
+           iexi2=aster.jeveux_exists(nom2)
+           if not iexi2 :
+               if  not self.optional and not checker.optional :
+                   checker.err( self, "n'existe pas (%r)" %self._parent )
+               return
+
+
+        docu=aster.jeveux_getattr(nom2,'DOCU')[1].strip()
+        if docu=='CHNO' :
+            sd2 = sd_cham_no(nom)
+        elif docu=='CART' :
+            sd2 = sd_carte(nom)
+        elif docu=='CHML' :
+            sd2 = sd_cham_elem(nom)
+        elif docu=='RESL' :
+            sd2 = sd_resuelem(nom)
+        elif docu=='VGEN' :
+            sd2 = sd_cham_gene(nom)
+        else :
+            assert 0,docu
+        sd2.check(checker)
diff --git a/Aster/Cata/cataSTA10/SD/sd_char_acou.py b/Aster/Cata/cataSTA10/SD/sd_char_acou.py
new file mode 100644 (file)
index 0000000..62c02d3
--- /dev/null
@@ -0,0 +1,39 @@
+#@ MODIF sd_char_acou SD  DATE 16/09/2008   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_ligrel import sd_ligrel
+from SD.sd_carte import sd_carte
+from SD.sd_char_cine import sd_char_cine
+
+
+class sd_char_acou(AsBase):
+    nomj = SDNom(fin=8)
+    chac_vitfa = Facultatif(sd_carte(SDNom(nomj='.CHAC.VITFA', fin=19)))
+    CHAC_MODEL_NOMO = AsVK8(SDNom(nomj='.CHAC.MODEL.NOMO'), lonmax=1, )
+    chac_cmult = Facultatif(sd_carte(SDNom(nomj='.CHAC.CMULT', fin=19)))
+    chac_cimpo = Facultatif(sd_carte(SDNom(nomj='.CHAC.CIMPO', fin=19)))
+    chac_imped = Facultatif(sd_carte(SDNom(nomj='.CHAC.IMPED', fin=19)))
+    chac_ligre = Facultatif(sd_ligrel(SDNom(nomj='.CHAC.LIGRE', fin=19)))
+    ELIM = Facultatif(sd_char_cine())
+    TYPE = AsVK8(lonmax=1, )
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_char_cine.py b/Aster/Cata/cataSTA10/SD/sd_char_cine.py
new file mode 100644 (file)
index 0000000..c375436
--- /dev/null
@@ -0,0 +1,103 @@
+#@ MODIF sd_char_cine SD  DATE 04/05/2009   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_modele import sd_modele
+from SD.sd_fonction import sd_fonction
+
+
+class sd_char_cine(AsBase):
+#===========================
+    nomj = SDNom(fin=19)
+
+    AFCK = AsVK8(lonmax=3)
+    AFCI = AsVI()
+    AFCV = Facultatif(OJBVect(type=Parmi('C','R','K')))
+
+
+
+    def exists(self):
+        # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+        return self.AFCK.exists
+
+
+    def u_veri1(self):   # retourne (CIME/CITH/CIAC, RE/CX/FT)
+    #---------------------------------------------------------------
+        if not self.exists() : return
+        afck=self.AFCK.get()
+        l1=afck[0].strip().split('_') ; assert len(l1)==2 , afck
+        phen, tsca= l1[0], l1[1]
+        assert phen in ('CIME', 'CITH', 'CIAC'), afck
+        assert tsca in ('RE', 'CX', 'FT'), tsca
+        return phen, tsca
+
+
+    def check_AFCK(self,checker):
+    #---------------------------------------------
+        if not self.exists() : return
+        phen, tsca = self.u_veri1()
+        afck=self.AFCK.get()
+        nomo=afck[1].strip()
+        sd2=sd_modele(nomo); sd2.check(checker)
+        if afck[2].strip() != '' : assert (phen=='CIME' or phen=='CITH') and tsca=='FT', afck
+
+
+    def check_AFCI(self,checker):
+    #---------------------------------------------
+        if not self.exists() : return
+        phen, tsca = self.u_veri1()
+        afci=self.AFCI.get()
+        nbloc=afci[0]
+        assert len(afci)>=3*nbloc+1 , afci
+        for k in range(nbloc) :
+            nuno =afci[3*k +1]
+            nucmp=afci[3*k +2]
+            assert afci[3*k +3] == 0 , (k,afci)
+            assert nuno > 0 , (k,afci)
+            assert nucmp> 0 , (k,afci)
+
+
+    def check_AFCV(self,checker):
+    #-------------------------------------------------
+        if not self.exists() : return
+        phen, tsca = self.u_veri1()
+        afci=self.AFCI.get()
+        nbloc=afci[0]
+        if not self.AFCV.exists :
+            assert tsca=='FT',tsca
+            afck=self.AFCK.get()
+            assert afck[2].strip() != '' , afck
+        else :
+            tsca2 = self.AFCV.type.strip()
+            assert self.AFCV.lonmax >= nbloc , (nbloc,self.AFCV.lonmax)
+
+            if tsca == 'RE' :
+                assert tsca2=='R', tsca2  # champ de réels
+            if tsca == 'FT' :
+                assert tsca2=='K', tsca2  # champ de fonctions
+            if tsca == 'CX' :
+                assert tsca2=='C', tsca2  # champ de complexes
+
+            # vérification des fonctions :
+            if tsca == 'FT'  :
+                afcv  = self.AFCV.get()
+                for fonc in afcv[:nbloc] :
+                    sd2=sd_fonction(fonc); sd2.check(checker)
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_char_meca.py b/Aster/Cata/cataSTA10/SD/sd_char_meca.py
new file mode 100644 (file)
index 0000000..63e848c
--- /dev/null
@@ -0,0 +1,107 @@
+#@ MODIF sd_char_meca SD  DATE 22/12/2009   AUTEUR ABBAS M.ABBAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_ligrel import sd_ligrel
+from SD.sd_carte import sd_carte
+from SD.sd_char_cine import sd_char_cine
+
+
+class sd_char_gf_xx(AsBase):
+    nomj = SDNom(fin=19)
+    VALE = AsVR()
+    NCMP = AsVK8()
+
+
+class sd_char_grflu(AsBase):
+    nomj = SDNom(fin=19)
+
+    ABSC = AsVR()
+    APPL = AsVI()
+    GEOM = AsVR()
+    LIMA = AsVI()
+    LINO = AsVI()
+    NOMA = AsVK8()
+    VDIR = AsVR()
+
+
+class sd_char_chme(AsBase):
+    nomj = SDNom(fin=13)
+
+    MODEL_NOMO = AsVK8(SDNom(nomj='.MODEL.NOMO'), lonmax=1, )
+
+    LIGRE = Facultatif(sd_ligrel())
+
+    CIMPO = Facultatif(sd_carte())
+    CMULT = Facultatif(sd_carte())
+    EPSIN = Facultatif(sd_carte())
+    F1D1D = Facultatif(sd_carte())
+    F1D2D = Facultatif(sd_carte())
+    F1D3D = Facultatif(sd_carte())
+    F2D2D = Facultatif(sd_carte())
+    F2D3D = Facultatif(sd_carte())
+    F3D3D = Facultatif(sd_carte())
+    FCO2D = Facultatif(sd_carte())
+    FCO3D = Facultatif(sd_carte())
+    FELEC = Facultatif(sd_carte())
+    FL101 = Facultatif(sd_carte())
+    FL102 = Facultatif(sd_carte())
+    FLUX  = Facultatif(sd_carte())
+    FORNO = Facultatif(sd_carte())
+    IMPE  = Facultatif(sd_carte())
+    ONDE  = Facultatif(sd_carte())
+    PESAN = Facultatif(sd_carte())
+    PRESS = Facultatif(sd_carte())
+    ROTAT = Facultatif(sd_carte())
+    SIGIN = Facultatif(sd_carte())
+    VNOR  = Facultatif(sd_carte())
+
+    # si GRAPPE_FLUIDE :
+    GRFLU = Facultatif(sd_char_grflu())
+    GF_AS = Facultatif(sd_char_gf_xx())
+    GF_DH = Facultatif(sd_char_gf_xx())
+    GF_GR = Facultatif(sd_char_gf_xx())
+    GF_MA = Facultatif(sd_char_gf_xx())
+    GF_MC = Facultatif(sd_char_gf_xx())
+    GF_PC = Facultatif(sd_char_gf_xx())
+    GF_TG = Facultatif(sd_char_gf_xx())
+
+    VEASS = Facultatif(AsVK8(lonmax=1, ))
+    EVOL_CHAR  = Facultatif(AsVK8(SDNom(nomj='.EVOL.CHAR'), lonmax=1, ))
+    TEMPE_TEMP = Facultatif(AsVK8(SDNom(nomj='.TEMPE.TEMP'), lonmax=1, ))
+
+
+class sd_char_meca(AsBase):
+    nomj = SDNom(fin=8)
+
+    TYPE            = AsVK8(lonmax=1)
+
+    CHME = Facultatif(sd_char_chme())
+    ELIM = Facultatif(sd_char_cine())
+
+    TRANS01 = Facultatif(AsVR(lonmax=6, ))
+    TRANS02 = Facultatif(AsVR(lonmax=6, ))
+    LISMA01 = Facultatif(AsVI(lonmax=12, ))
+    LISMA02 = Facultatif(AsVI(lonmax=12, ))
+    POIDS_MAILLE = Facultatif(AsVR())
+
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_char_ther.py b/Aster/Cata/cataSTA10/SD/sd_char_ther.py
new file mode 100644 (file)
index 0000000..38198e2
--- /dev/null
@@ -0,0 +1,72 @@
+#@ MODIF sd_char_ther SD  DATE 16/09/2008   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_ligrel import sd_ligrel
+from SD.sd_cham_elem import sd_cham_elem
+from SD.sd_carte import sd_carte
+from SD.sd_champ import sd_champ
+from SD.sd_fonction import sd_fonction
+from SD.sd_char_cine import sd_char_cine
+
+
+class sd_char_chth(AsBase):
+#--------------------------------
+    nomj = SDNom(fin=13)
+
+    CONVE_VALE = Facultatif(AsVK8(SDNom(nomj='.CONVE.VALE'), lonmax=1))
+    MODEL_NOMO = AsVK8(SDNom(nomj='.MODEL.NOMO'), lonmax=1)
+    LIGRE      = Facultatif(sd_ligrel())
+
+    SOURE = Facultatif(sd_champ(SDNom(nomj='.SOURE')))  # pour l'instant : sd_carte ou sd_cham_elem
+
+    CIMPO = Facultatif(sd_carte())
+    CMULT = Facultatif(sd_carte())
+    COEFH = Facultatif(sd_carte())
+    FLUNL = Facultatif(sd_carte())
+    FLUR2 = Facultatif(sd_carte())
+    FLURE = Facultatif(sd_carte())
+    GRAIN = Facultatif(sd_carte())
+    HECHP = Facultatif(sd_carte())
+    RAYO  = Facultatif(sd_carte())
+    T_EXT = Facultatif(sd_carte())
+
+
+    # parfois, TEMP_IMPO crée une carte de sd_fonction :
+    # il faut alors vérifier ces sd_fonction
+    def check_CIMPO_FONC(self, checker):
+        if self.CIMPO.VALE.ltyp != 24 : return
+        vale=self.CIMPO.VALE.get()
+        for x in vale :
+            if x.strip()=='' : continue
+            nomfon=x[:19]
+            sd2=sd_fonction(nomfon) ; sd2.check(checker)
+
+
+
+class sd_char_ther(AsBase):
+#--------------------------------
+    nomj = SDNom(fin=8)
+    TYPE = AsVK8(lonmax=1)
+    CHTH = sd_char_chth()
+    ELIM = Facultatif(sd_char_cine())
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_char_unilate.py b/Aster/Cata/cataSTA10/SD/sd_char_unilate.py
new file mode 100644 (file)
index 0000000..330ce99
--- /dev/null
@@ -0,0 +1,34 @@
+#@ MODIF sd_char_unilate SD  DATE 22/10/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+class sd_char_unilate(AsBase):
+    nomj = SDNom(fin=16)
+    DIMECU = AsVI()
+    LISNOE = AsVI()
+    POINOE = AsVI()
+    METHCU = AsVI(lonmax=1,)
+    PARACU = AsVR(lonmax=1,)
+    CMPGCU = AsVK8()
+    COEFD = AsVect(ltyp=8, type=Parmi('K','R'))
+    COEFG = AsVect(ltyp=8, type=Parmi('K','R'))
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_compor.py b/Aster/Cata/cataSTA10/SD/sd_compor.py
new file mode 100644 (file)
index 0000000..df84758
--- /dev/null
@@ -0,0 +1,191 @@
+#@ MODIF sd_compor SD  DATE 08/12/2009   AUTEUR PROIX J-M.PROIX 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_mater import sd_mater
+
+# Remarque :
+#------------
+# la sd_compor est produite par la seule commande DEFI_COMPOR.
+# C'est pourquoi, on fera appel parfois pour la décrire au vocabulaire de cette
+# commande.
+
+class sd_compor(AsBase):
+    nomj = SDNom(fin=8)
+    CPRK = AsVK16()
+    CPRI = AsVI()
+    CPRR = Facultatif(AsVR())
+
+
+    def check_tout(self,checker) :
+    #-------------------------------
+        cpri=self.CPRI.get()
+        type=cpri[0]
+        assert type in (1,2,3) , CPRI
+        if type == 1 :
+            self.monocristal(cpri,checker)
+        if type == 2 :
+            self.polycristal(cpri,checker)
+        if type == 3 :
+            self.multifibres(cpri,checker)
+
+
+
+    def monocristal(self,cpri,checker) :
+    #------------------------------------
+        nboccm=cpri[4]
+        nvi   =cpri[2]
+        if cpri[5] > 0 : 
+            nbsys=(nvi-25)/3
+            assert nvi==25+3*nbsys , (nvi, nbsys, cpri)
+        else :
+            nbsys=(nvi-9)/3
+            assert nvi==9+3*nbsys , (nvi, nbsys, cpri)
+        cprk=self.CPRK.get_stripped()
+
+        # vérif existence et longueur
+        assert len(cpri)==7, cpri
+        assert len(cprk)==5*nboccm+1, (cpri,cprk)
+        assert not self.CPRR.get()
+
+        # vérif CPRI :
+        #-------------
+        assert cpri[1] == 1   ,cpri
+        assert cpri[2] == nvi ,cpri
+        assert cpri[3] == 1   ,cpri
+        assert cpri[4] > 0    ,cpri
+        assert cpri[5] >= 0   ,cpri
+        assert cpri[6] == nvi ,cpri
+
+        # vérif CPRK :
+        #-------------
+        elas=cprk[5*nboccm]
+        assert elas in ('ELAS', 'ELAS_ORTH')  ,cprk
+        for k in range(nboccm):
+            famil     =cprk[5*k+0]
+            mater     =cprk[5*k+1]
+            ecoul     =cprk[5*k+2]
+            ecro_isot =cprk[5*k+3]
+            ecro_cine =cprk[5*k+4]
+            sd2=sd_mater(mater) ; sd2.check(checker)
+            assert famil in ('BASAL','BCC24','PRISMATIQUE','OCTAEDRIQUE','PYRAMIDAL1',
+                            'PYRAMIDAL2','CUBIQUE1','CUBIQUE2','MACLAGE','JOINT_GRAIN',
+                            'RL','UNIAXIAL')
+            assert ecoul in ('ECOU_VISC1','ECOU_VISC2','ECOU_VISC3')
+            assert ecro_isot in ('ECRO_ISOT1','ECRO_ISOT2')
+            assert ecro_cine in ('ECRO_CINE1','ECRO_CINE2')
+
+
+
+    def polycristal(self,cpri,checker) :
+    #------------------------------------
+        nbphases=cpri[1]
+        assert nbphases > 0 , cpri
+        lgcprk  =cpri[6+3*nbphases-2]
+        assert lgcprk > 0 , cpri
+        cprk=self.CPRK.get_stripped()
+        cprr=self.CPRR.get()
+
+        # vérif existence et longueur
+        #------------------------------
+        assert len(cpri)==6+3*nbphases, (cpri,nbphases)
+        assert len(cprr)==2+4*nbphases, (cpri,cprr,nbphases)
+        assert len(cprk)==lgcprk, (cpri,cprk)
+
+        # vérif CPRI :
+        #-------------
+        nvitot=cpri[2]
+        assert nvitot >= 0        ,cpri
+        nbmono=cpri[3]
+        assert nbmono > 0         ,cpri
+        nbpara  =cpri[6+3*nbphases-1]
+        assert nbpara in (0,1,2)  ,cpri
+        for k in range(nbphases):
+            nbfam1 = cpri[4+3*k+0]
+            numono = cpri[4+3*k+1]
+            nvi1   = cpri[4+3*k+2]
+            assert nbfam1 > 0     ,cpri
+            assert numono > 0  and numono <= nbmono   ,(cpri,nbmono)
+            assert nvi1   >=0     ,cpri
+
+        # vérif CPRR :
+        #-------------
+        frac_tot=0.
+        for k in range(nbphases):
+            frac     =cprr[4*k+0]
+            assert frac >= 0. and frac <= 1.  ,(cprr,k)
+            frac_tot=frac_tot+frac
+            for dir in range(1,4):
+                angl     =cprr[4*k+dir]
+                assert angl >=0. and angl <=360. , (angl,dir)
+        assert frac_tot > 0.99 and frac_tot < 1.01
+
+        # vérif CPRK :
+        #-------------
+        locali   =cprk[0]
+        assert locali in ('BZ','BETA')  ,(locali,cprk)
+        decal=0
+        for k in range(nbmono):
+            mono1 =cprk[0+decal+1]
+            sd2=sd_compor(mono1) ; sd2.check(checker)
+            nbfam1=int(cprk[0+decal+2])
+            assert nbfam1 > 0 , (nbfam1,k,decal,cprk)
+            decal=decal+2+5*nbfam1+1
+            # on pourrait encore vérifier que le .CPRK de mono1 a bien été recopié
+            # mais il faut bien s'arreter ...
+
+
+
+    def multifibres(self,cpri,checker) :
+    #------------------------------------
+        nbgmax=cpri[2]
+        cprk=self.CPRK.get_stripped()
+
+        # vérif existence et longueur
+        assert len(cpri)==3, cpri
+        assert len(cprk)==6*nbgmax+1, (cpri,cprk)
+        assert not self.CPRR.get()
+
+        # vérif CPRI :
+        #-------------
+        assert cpri[1] > 0, cpri
+        assert cpri[2] > 0, cpri
+
+        # vérif CPRK :
+        #-------------
+        mater=cprk[6*nbgmax]
+        assert mater != '', cprk
+        sd2=sd_mater(mater) ; sd2.check(checker)
+        for k in range(nbgmax):
+            grfib1     =cprk[6*k+0]
+            mater1     =cprk[6*k+1]
+            loifib1    =cprk[6*k+2]
+            algo1d     =cprk[6*k+3]
+            deform     =cprk[6*k+4]
+            nbfib=    int(cprk[6*k+5])
+            assert grfib1 != '' , cprk
+            assert mater1 != '' , cprk
+            sd2=sd_mater(mater1) ; sd2.check(checker)
+            assert loifib1 != '' , cprk
+            assert algo1d  in ('ANALYTIQUE','DEBORST') , cprk
+            assert deform  in ('PETIT','PETIT_REAC','GROT_GDEP') , cprk
+            assert nbfib > 0      , cprk
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_contact.py b/Aster/Cata/cataSTA10/SD/sd_contact.py
new file mode 100644 (file)
index 0000000..ae9c94a
--- /dev/null
@@ -0,0 +1,294 @@
+#@ MODIF sd_contact SD  DATE 20/04/2010   AUTEUR JAUBERT A.JAUBERT 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from SD.sd_ligrel import sd_ligrel
+from SD.sd_champ import sd_champ
+from SD.sd_xfem import sd_modele_xfem
+from SD.sd_xfem import sd_fiss_xfem
+from SD.sd_cham_no   import sd_cham_no
+from SD.sd_char_meca   import sd_char_chme
+from sd_prof_chno import sd_prof_chno
+
+class sd_contact(AsBase):
+    nomj = SDNom(fin=8)
+    
+
+    # Recap longueurs vecteurs (voir CFMMVD.F)    
+    zdime = 12
+    zpari = 25
+    zparr = 5
+    zdirn = 6
+    zcmdf = 6
+    zcmcf = 27
+    zcmxf = 16
+    zexcl = 6
+    ztypn = 1
+    ztypm = 2 
+    zmaes = 6 
+    zmesx = 5        
+
+    MODELE = AsVK8(SDNom(nomj='.CHME.MODEL.NOMO'),lonmax=1, )
+    PARACI = AsVI (SDNom(nomj='.CONTACT.PARACI') ,lonmax=zpari,)
+    PARACR = AsVR (SDNom(nomj='.CONTACT.PARACR') ,lonmax=zparr,)
+    
+
+    def exists(self):
+        # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre v??rifi??e)
+        return self.PARACI.exists
+
+    def type_form(self):
+        para  = self.PARACI.get()
+        iform = para[3]
+        return iform
+
+    def formulation_xfem(self):
+        if not self.exists() : return False
+        iform = self.PARACI.get()[3]
+        return iform == 3
+    NDIMCO = Facultatif(AsVI(SDNom(nomj='.CONTACT.NDIMCO') ))
+    METHCO = Facultatif(AsVI(SDNom(nomj='.CONTACT.METHCO') ))
+    TOLECO = Facultatif(AsVR(SDNom(nomj='.CONTACT.TOLECO') ))
+
+    def dimeC(self):
+      iform = self.type_form()
+      if (iform==1) or (iform==2) or (iform==3) :
+        para   = self.NDIMCO.get()
+        nzoco  = para[1]
+        nsuco  = para[2]
+        nmaco  = para[3]
+        nnoco  = para[4]
+        nmano  = para[5]
+        nnoma  = para[6]
+        ntnoe  = para[8]
+        ntmae  = para[9]
+        ntpc   = para[10] 
+        ntelno = para[11]
+      return nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno
+
+    
+    def check_para(self,checker):
+      iform = self.type_form()
+      if (iform==1) or (iform==2) or (iform==3) :
+        nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno  = self.dimeC()
+        lldime = self.NDIMCO.lonmax 
+        llmeth = self.METHCO.lonmax
+        lltole = self.TOLECO.lonmax
+        assert llmeth == nzoco*10 
+        assert lltole == nzoco*2
+        assert lldime == self.zdime
+      if (iform==4) :
+        lldime = self.NDIMCU.lonmax 
+        assert lldime == 2     
+      return
+      
+    JEUFO1 = Facultatif(AsVK8(SDNom(nomj='.CONTACT.JFO1CO') ))
+    JEUFO2 = Facultatif(AsVK8(SDNom(nomj='.CONTACT.JFO2CO') ))
+    DIRAPP = Facultatif(AsVR(SDNom(nomj='.CONTACT.DIRAPP') )) 
+    DIRNOR = Facultatif(AsVR(SDNom(nomj='.CONTACT.DIRNOR') )) 
+    JEUCOQ = Facultatif(AsVR(SDNom(nomj='.CONTACT.JEUCOQ') )) 
+    JEUPOU = Facultatif(AsVR(SDNom(nomj='.CONTACT.JEUPOU') ))
+    
+    PZONE  = Facultatif(AsVI(SDNom(nomj='.CONTACT.PZONECO') ))
+    PSURMA = Facultatif(AsVI(SDNom(nomj='.CONTACT.PSUMACO') ))  
+    PSURNO = Facultatif(AsVI(SDNom(nomj='.CONTACT.PSUNOCO') ))       
+    
+    CONTMA = Facultatif(AsVI(SDNom(nomj='.CONTACT.MAILCO') ))
+    CONTNO = Facultatif(AsVI(SDNom(nomj='.CONTACT.NOEUCO') ))
+    
+    NOZOCO = Facultatif(AsVI(SDNom(nomj='.CONTACT.NOZOCO') ))  
+    MANOCO = Facultatif(AsVI(SDNom(nomj='.CONTACT.MANOCO') ))
+    NOMACO = Facultatif(AsVI(SDNom(nomj='.CONTACT.NOMACO') ))
+    
+    PMANO  = Facultatif(AsVI(SDNom(nomj='.CONTACT.PMANOCO') ))
+    PNOMA  = Facultatif(AsVI(SDNom(nomj='.CONTACT.PNOMACO') ))
+    
+    PSANS  = Facultatif(AsVI(SDNom(nomj='.CONTACT.PSSNOCO') ))
+    SANSN  = Facultatif(AsVI(SDNom(nomj='.CONTACT.SSNOCO') ))
+    
+    TYPEMA = Facultatif(AsVI(SDNom(nomj='.CONTACT.TYPEMA') ))
+    TYPENO = Facultatif(AsVI(SDNom(nomj='.CONTACT.TYPENO') ))
+    MAESCL = Facultatif(AsVI(SDNom(nomj='.CONTACT.MAESCL') )) 
+    
+    TYPE   = Facultatif(AsVK8(SDNom(nomj='.TYPE') ))
+    LIGRE  = Facultatif(sd_ligrel(SDNom(nomj='.CHME.LIGRE')))
+    RELLIN = Facultatif(sd_char_chme(SDNom(nomj='.CHME')))
+            
+    def check_mail(self,checker):    
+      iform = self.type_form()
+      if (iform==2) or (iform==1) :
+        nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno = self.dimeC()
+        assert self.JEUFO1.lonmax == nzoco
+        assert self.JEUFO2.lonmax == nzoco
+        assert self.DIRAPP.lonmax == 3*nzoco
+        assert self.DIRNOR.lonmax == self.zdirn*nzoco 
+        assert self.JEUCOQ.lonmax == nmaco
+        assert self.JEUPOU.lonmax == nmaco
+        
+        assert self.PZONE.lonmax  == nzoco+1
+        assert self.PSURMA.lonmax == nsuco+1
+        assert self.PSURNO.lonmax == nsuco+1        
+        assert self.CONTMA.lonuti == nmaco
+        assert self.CONTNO.lonuti == nnoco
+        
+        assert self.NOZOCO.lonmax == nnoco
+        assert self.MANOCO.lonuti == nmano
+        assert self.NOMACO.lonuti == nnoma
+
+        assert self.MANOCO.lonmax == 20*max(nnoco,nmaco)
+        assert self.NOMACO.lonmax == 20*max(nnoco,nmaco) 
+                
+        assert self.PMANO.lonmax  == nnoco+1
+        assert self.PNOMA.lonmax  == nmaco+1
+        
+        assert self.PSANS.lonmax  == nzoco+1
+        assert self.SANSN.lonmax  >= 1
+        
+        assert self.TYPENO.lonmax == self.ztypn*nnoco
+        assert self.TYPEMA.lonmax == self.ztypm*nmaco
+        assert self.MAESCL.lonmax == self.zmaes*ntmae
+        
+      return
+      
+    CARADF = Facultatif(AsVR(SDNom(nomj='.CONTACT.CARADF') ))   
+      
+    def check_form_disc(self,checker):    
+      iform = self.type_form()
+      if (iform==1) :
+        nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno = self.dimeC()
+        assert self.CARADF.lonmax == self.zcmdf*nzoco
+        assert ntnoe == ntpc
+      return      
+    
+    CARACF = Facultatif(AsVR(SDNom(nomj='.CONTACT.CARACF') ))  
+    EXCLFR = Facultatif(AsVR(SDNom(nomj='.CONTACT.EXCLFR') )) 
+     
+    PBARS  = Facultatif(AsVI(SDNom(nomj='.CONTACT.PBANOCO') ))
+    BARSNO = Facultatif(AsVI(SDNom(nomj='.CONTACT.BANOCO') ))   
+    
+    PBARM  = Facultatif(AsVI(SDNom(nomj='.CONTACT.PBAMACO') ))
+    BARSMA = Facultatif(AsVI(SDNom(nomj='.CONTACT.BAMACO') ))   
+    
+    PRACC  = Facultatif(AsVI(SDNom(nomj='.CONTACT.PRANOCO') ))
+    RACCNO = Facultatif(AsVI(SDNom(nomj='.CONTACT.RANOCO') ))
+    
+    PFROT  = Facultatif(AsVI(SDNom(nomj='.CONTACT.PSANOFR') ))
+    FROTNO = Facultatif(AsVI(SDNom(nomj='.CONTACT.SANOFR') ))   
+      
+    def check_form_cont(self,checker):
+      iform = self.type_form()
+      if (iform==2) :
+        nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno = self.dimeC()
+        assert self.CARACF.lonmax == self.zcmcf*nzoco
+        assert self.EXCLFR.lonmax == self.zexcl*nzoco       
+        
+        assert self.PBARS.lonmax  == nzoco+1
+        assert self.BARSNO.lonmax >= 1      
+        
+        assert self.PBARM.lonmax  == nzoco+1
+        assert self.BARSMA.lonmax >= 1 
+        
+        assert self.PRACC.lonmax  == nzoco+1
+        assert self.RACCNO.lonmax >= 1 
+        
+        assert self.PFROT.lonmax  == nzoco+1
+        assert self.FROTNO.lonmax >= 1   
+
+        assert self.LIGRE.exists              
+         
+      return  
+    
+    MAESCX = Facultatif(AsVI(SDNom(nomj='.CONTACT.MAESCX') ))  
+    CARAXF = Facultatif(AsVR(SDNom(nomj='.CONTACT.CARAXF') )) 
+    MODELX = Facultatif(AsVK8(SDNom(nomj='.CONTACT.MODELX') ))
+    XFIMAI = Facultatif(AsVK8(SDNom(nomj='.CONTACT.XFIMAI') )) 
+    XNBASC = Facultatif(AsVK24(SDNom(nomj='.CONTACT.XNBASC') )) 
+    XNRELL = Facultatif(AsVK24(SDNom(nomj='.CONTACT.XNRELL') ))     
+    CNCTE  = Facultatif(AsVI(SDNom(nomj='.CONTACT.CNCTE') )) 
+    PRCHNO = Facultatif(sd_prof_chno(SDNom(nomj='.PRCHN00000'))) 
+    PRCHN1 = Facultatif(sd_prof_chno(SDNom(nomj='.PRCHN00001')))            
+    LIGRE  = Facultatif(sd_ligrel(SDNom(nomj='.CHME.LIGRE')))
+
+
+    def contact_xfem_actif(self):
+        if not self.formulation_xfem() : return False
+        self.XNBASC.exists
+           
+    def check_form_xfem(self,checker):
+      iform = self.type_form()
+      if (iform==3) :
+        nzoco,nsuco,nmaco,nnoco,nmano,nnoma,ntnoe,ntmae,ntpc,ntelno = self.dimeC()
+        paraci = self.PARACI.get()
+        if (paraci[0]!=0) :
+          assert self.MAESCX.lonuti == self.zmesx*ntmae      
+        assert self.CARAXF.lonmax == self.zcmxf*nzoco
+        assert self.MODELX.lonmax == 1
+        assert self.XFIMAI.lonmax == nzoco
+        assert self.XNRELL.exists
+        assert self.LIGRE.exists
+      return  
+      
+    def check_char_contact_xfem_XNBASC(self, checker):
+        if not self.contact_xfem_actif() : return
+        lnom  = self.XNBASC.get()
+        nbnom = self.XNBASC.lonuti     
+        for k in range(nbnom) :
+          nom = lnom[k]
+          if not nom.strip(): continue
+          sd2 = sd_champ(nom)
+          sd2.check(checker)
+  
+                  
+    def check_char_contact_xfem_XNRELL(self, checker):
+        iform = self.type_form()
+        if (iform==3) :
+          lnom  = self.XNRELL.get()
+          nbnom = self.XNRELL.lonuti
+          nom = lnom[0]
+          if (nom[8:14]!='.LISEQ'):
+            oo  = AsObject(SDNom(nomj=nom,debut=0),genr='V', xous='S', type=Parmi('I','R'))
+            oo.check(checker)
+        
+    # Verification MODELE xfem
+    def check_char_contact_xfem_MODELX(self, checker):
+        if not self.contact_xfem_actif() : return
+        nom = self.MODELX.get()[0]
+        sd2 = sd_modele_xfem(nom)
+        sd2.check(checker)
+      
+    
+    NDIMCU = Facultatif(AsVI(SDNom(nomj='.UNILATE.NDIMCU') ))
+    CMPGCU = Facultatif(AsVK8(SDNom(nomj='.UNILATE.CMPGCU') ))
+    COEFD  = Facultatif(AsVK8(SDNom(nomj='.UNILATE.COEFD') ))
+    COEFG  = Facultatif(AsVK8(SDNom(nomj='.UNILATE.COEFG') ))
+    LISNOE = Facultatif(AsVI(SDNom(nomj='.UNILATE.LISNOE') ))
+    POINOE = Facultatif(AsVI(SDNom(nomj='.UNILATE.POINOE') ))  
+    def check_form_unil(self,checker):
+      iform = self.type_form()
+      if (iform==4) :
+         assert self.CMPGCU.lonmax >= 1
+         assert self.COEFD.lonmax >= 1
+         assert self.COEFG.lonmax >= 1
+         assert self.LISNOE.lonmax >= 1
+         assert self.POINOE.lonmax >= 1                                    
+         
+      return       
+      
diff --git a/Aster/Cata/cataSTA10/SD/sd_corresp_2_mailla.py b/Aster/Cata/cataSTA10/SD/sd_corresp_2_mailla.py
new file mode 100644 (file)
index 0000000..340ca74
--- /dev/null
@@ -0,0 +1,44 @@
+#@ MODIF sd_corresp_2_mailla SD  DATE 02/02/2010   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+class sd_corresp_2_mailla(AsBase):
+    nomj = SDNom(fin=16)
+    PJXX_K1 = AsVK24(lonmax=5)
+
+    # Remarque : pour retirer la plupart des "facultatifs", il faudrait changer
+    # les noms : PJEF_NB -> PE.EFNB
+    #            ...
+    #            PJNG_I1 -> PN.NGI1
+    # et faire 2 class sd_corresp_2_elem et sd_corresp_2_nuage)
+    PJEF_NB = Facultatif(AsVI())
+    PJEF_NU = Facultatif(AsVI())
+    PJEF_M1 = Facultatif(AsVI())
+    PJEF_CF = Facultatif(AsVR())
+    PJEF_TR = Facultatif(AsVI())
+    PJEF_AM = Facultatif(AsVI())
+    PJEF_CO = Facultatif(AsVR())
+
+    PJNG_I1 = Facultatif(AsVI())
+    PJNG_I2 = Facultatif(AsVI())
+
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_courbe.py b/Aster/Cata/cataSTA10/SD/sd_courbe.py
new file mode 100644 (file)
index 0000000..bdf87c1
--- /dev/null
@@ -0,0 +1,35 @@
+#@ MODIF sd_courbe SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+from SD.sd_courbe_sa import sd_courbe_sa
+from SD.sd_courbe_lm import sd_courbe_lm
+
+
+class sd_courbe(AsBase):
+#----------------------------
+    nomj = SDNom(fin=8)
+    NOMMAIL = AsVK8(lonmax=1, )
+    TYPCOURBE = AsVK8(lonmax=1, )
+    lm= Facultatif(sd_courbe_lm(SDNom(nomj='')))
+    sa= Facultatif(sd_courbe_sa(SDNom(nomj='')))
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_courbe_lm.py b/Aster/Cata/cataSTA10/SD/sd_courbe_lm.py
new file mode 100644 (file)
index 0000000..5867ede
--- /dev/null
@@ -0,0 +1,56 @@
+#@ MODIF sd_courbe_lm SD  DATE 30/06/2009   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+class sd_courbe_lm(AsBase):
+    nomj = SDNom(fin=8)
+    MAIL1 = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+    MAIL2 = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+    CHEMIN = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+    def check_DIM(self,checker):
+# verification que les 3 collections ont le meme nbre d'objets
+       n1 = self.MAIL1.nmaxoc
+       n2 = self.MAIL2.nmaxoc
+       assert n1 == n2
+       bool = self.CHEMIN.exists
+       if self.CHEMIN.exists:
+          n = self.CHEMIN.nmaxoc
+          assert n == n1
+          chemin = self.CHEMIN.get()
+          mail1 = self.MAIL1.get()
+          mail2 = self.MAIL2.get()
+          for i in chemin.keys():
+            lon = len(chemin[i])
+            lon1 = len(mail1[i])
+            lon2 = len(mail2[i])
+# verification que les objets des 3 collections ont la meme longueur
+            assert lon == lon1
+            assert lon == lon2
+            deb = chemin[i][0]
+            fin = chemin[i][lon-1]
+# verification que le chemin est soit simple (fin = 0) soit cyclique (deb = fin)
+            assert (deb == fin) or (fin == 0)
+# verification que le dernier entier des objets des collections mail1 et mail2 est nul
+            fin = mail1[i][lon1-1]
+            assert fin == 0
+            fin = mail2[i][lon2-1]
+            assert fin == 0
+       
diff --git a/Aster/Cata/cataSTA10/SD/sd_courbe_sa.py b/Aster/Cata/cataSTA10/SD/sd_courbe_sa.py
new file mode 100644 (file)
index 0000000..e1ba7c8
--- /dev/null
@@ -0,0 +1,58 @@
+#@ MODIF sd_courbe_sa SD  DATE 30/06/2009   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+class sd_courbe_sa(AsBase):
+    nomj = SDNom(fin=8)
+    MAIL1 = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+    MAIL2 = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+    XYBSGT = AsVR(SDNom(debut=8), )
+    XYASGT = AsVR(SDNom(debut=8), )
+    XSARC = AsVR(SDNom(debut=8), )
+    XYCARC = AsVR(SDNom(debut=8), )
+    XRARC = AsVR(SDNom(debut=8), )
+    ORSGT = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='R', ltyp=8, )
+    EXSGT = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='R', ltyp=8, )
+    PAROR = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='R', ltyp=8, )
+    PAREX = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='R', ltyp=8, )
+    FACOR = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+    FACEX = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+    CNXOR = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+    CNXEX = AsColl(SDNom(debut=8), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+    def check_1(self,checker):
+      if self.XYASGT.exists:
+        valea=self.XYASGT.get()
+        valeb=self.XYBSGT.get()
+        assert len(valea) == len(valeb)
+        assert  valea[0] == 0.
+        assert  valea[1] == 0.
+        assert  valeb[0] == 0.
+        assert  valeb[1] == 0.
+        valec=self.XYCARC.get()
+        valeth=self.XSARC.get()
+        valer=self.XRARC.get()
+        assert len(valec) == len(valeth)
+        assert  valec[0] == 0.
+        assert  valec[1] == 0.
+        assert  valeth[0] == 0.
+        assert  valeth[1] == 0.
+        assert  valer[0] == 0.
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_feti.py b/Aster/Cata/cataSTA10/SD/sd_feti.py
new file mode 100644 (file)
index 0000000..bacae34
--- /dev/null
@@ -0,0 +1,49 @@
+#@ MODIF sd_feti SD  DATE 23/10/2007   AUTEUR BOITEAU O.BOITEAU 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+# AJACOT_PB en attendant la correction de la fiche 10475 :
+# on dédouble la SD pour la rendre facultative.
+
+
+class sd_feti1(AsBase):
+    nomj = SDNom(fin=19)
+    FLIM = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+    FDIM = AsVI(lonmax=5, )
+    FREF = AsVK8()
+    FETG = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+    FLIN = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='K', ltyp=24, )
+    FLII = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+    FETB = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+    FETA = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+    FETJ = AsVI()
+    FETI = AsVI()
+    FETH = AsVI()
+    FCFI = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+    FCFL = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='K', ltyp=24, )
+    FCFM = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+    FCFN = AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+
+
+class sd_feti(AsBase):
+    nomj = SDNom(fin=19)
+    sd1 = Facultatif(sd_feti1(SDNom('')))
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_fonction.py b/Aster/Cata/cataSTA10/SD/sd_fonction.py
new file mode 100644 (file)
index 0000000..fb9c0b4
--- /dev/null
@@ -0,0 +1,166 @@
+#@ MODIF sd_fonction SD  DATE 19/02/2008   AUTEUR MACOCCO K.MACOCCO 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_titre import sd_titre
+from SD.sd_util import *
+
+
+#----------------------------------------------------------------
+# définition de 3 classes :
+#  sd_formule        (objets python + jeveux)
+#  sd_fonction_aster (objets jeveux)
+#  sd_fonction       (chapeau des 2 classes précédentes)
+#----------------------------------------------------------------
+
+
+
+class sd_formule(AsBase):
+#--------------------------------------
+    nomj = SDNom(fin=19)
+    PROL = AsVK24(lonmax=6, )
+    NOVA = AsVK8()
+
+
+class sd_fonction_aster(sd_titre):
+#--------------------------------------
+    nomj = SDNom(fin=19)
+    PROL = AsVK24()
+    VALE = AsObject(acces='NU', sd_stockage='CONTIG', modelong='VARIABLE', type='R', xous=Parmi('S', 'X'), genr='V', ltyp=8, )
+    PARA = Facultatif(AsVR())
+
+    # existence possible de la SD :
+    def exists(self):
+        return self.PROL.exists
+
+
+    def check_PROL(self,checker) :
+    #-------------------------------
+        if not self.exists() : return
+
+        prol=self.PROL.get()
+        assert prol , self
+        typfon= prol[0].strip()
+        assert typfon in ('CONSTANT', 'FONCTION', 'FONCT_C', 'NAPPE', 'INTERPRE')  ,prol
+       #ltabul = True : la fonction est tabulée (et non interpretée)
+        ltabul = typfon != 'INTERPRE'
+
+        if typfon == 'NAPPE' :
+            assert len(prol) > 7  , (prol,self)
+        else :
+            # tester que le prol[5] est bien le nom de la fonction 
+            assert len(prol) == 6  , (prol,self)
+
+        if ltabul :  # type d'interpolation
+            interp= prol[1].strip()
+            assert interp[:3] in ('NON', 'LIN', 'LOG') , prol
+            assert interp[4:] in ('NON', 'LIN', 'LOG') , prol
+
+        if ltabul :  # nom d'un paramètre
+            para=prol[2].strip()
+            assert para != '', prol
+
+        assert prol[3].strip() != ''  , prol  # type du résultat
+
+        if ltabul :  # prolongement à droite et à gauche
+            prolgd=prol[4].strip()
+            assert len(prolgd)==2, prol
+            assert prolgd[0] in ('E', 'C', 'L', 'I'), prol
+            assert prolgd[1] in ('E', 'C', 'L', 'I'), prol
+
+        if typfon == 'NAPPE' :
+            nf= (len(prol) - 7)/2
+            assert len(prol)==7+2*nf, prol
+            # 1er paramètre de la nappe
+            assert prol[6].strip() != ''  , prol
+
+            for kf in range(nf):
+                interp= prol[6+2*kf+1].strip()
+                prolgd= prol[6+2*kf+2].strip()
+                assert interp[:3] in ('NON', 'LIN', 'LOG') , prol
+                assert interp[4:] in ('NON', 'LIN', 'LOG') , prol
+                assert prolgd[0] in ('E', 'C', 'L', 'I'), prol
+                assert prolgd[1] in ('E', 'C', 'L', 'I'), prol
+
+
+    def check_VALE(self,checker) :
+    #-------------------------------
+        if not self.exists() : return
+
+        prol=self.PROL.get()
+        vale=self.VALE.get()
+        typfon= prol[0].strip()
+
+        if   typfon=='CONSTANT' :
+            assert len(vale)==2, (vale,self)
+
+        elif typfon=='FONCTION' :
+            nbpt=len(vale)/2
+            assert len(vale)==2*nbpt, (vale,self)
+            if nbpt > 1 :
+                assert sdu_monotone(vale[:nbpt]) in (1,),(nbpt,vale,self)
+
+        elif typfon=='FONCT_C' :
+            nbpt=len(vale)/3
+            assert len(vale)==3*nbpt, (vale,self)
+            if nbpt > 1 :
+                # print "AJACOT fonction=",self
+                assert sdu_monotone(vale[:nbpt]) in (1,),(nbpt,vale,self)
+
+        elif typfon=='NAPPE' :
+            nbfonc=len(vale.keys())
+            for k in range(nbfonc):
+                val1=vale[k+1]
+                nbpt=len(val1)/2
+                assert len(val1)==2*nbpt, (val1,self)
+                if nbpt > 1 :
+                    assert sdu_monotone(val1[:nbpt]) in (1,),(nbpt,val1,self)
+
+
+    def check_NAPPE(self,checker) :
+    #-------------------------------
+        if not self.exists() : return
+
+        prol=self.PROL.get()
+        typfon= prol[0].strip()
+        if typfon != 'NAPPE' : return
+
+        para=self.PARA.get()
+        if len(para) > 1 :
+            assert sdu_monotone(para) in (1,),(para,self)
+        vale=self.VALE.get()
+        assert  len(para)==len(vale.keys()),self
+
+
+class sd_fonction(sd_titre):
+#---------------------------
+    nomj = SDNom(fin=19)
+    PROL = AsVK24()
+    NOVA = Facultatif(AsVK8())
+    VALE = Facultatif(AsObject())
+    PARA = Facultatif(AsVR())
+
+    def check_1(self,checker) :
+        nom=self.nomj()[:19]
+        if self.NOVA.exists :
+            sd2=sd_formule(nom) ; sd2.check()
+        else :
+            sd2=sd_fonction_aster(nom) ; sd2.check()
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_fond_fiss.py b/Aster/Cata/cataSTA10/SD/sd_fond_fiss.py
new file mode 100644 (file)
index 0000000..5b7a01a
--- /dev/null
@@ -0,0 +1,37 @@
+#@ MODIF sd_fond_fiss SD  DATE 08/01/2008   AUTEUR MACOCCO K.MACOCCO 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+class sd_fond_fiss(AsBase):
+    nomj = SDNom(fin=8)
+    LEVREINF___MAIL = Facultatif(AsVK8(SDNom(nomj='.LEVREINF  .MAIL'), ))
+    NORMALE = Facultatif(AsVR(lonmax=3, ))
+    FOND_______TYPE = AsVK8(SDNom(nomj='.FOND      .TYPE'), lonmax=1, )
+    FOND_______NOEU = AsVK8(SDNom(nomj='.FOND      .NOEU'), )
+    FONDSUP____NOEU = Facultatif(AsVK8(SDNom(nomj='.FOND_SUP  .NOEU'), ))
+    FONDINF____NOEU = Facultatif(AsVK8(SDNom(nomj='.FOND_INF  .NOEU'), ))
+    DTAN_EXTREMITE = Facultatif(AsVR(lonmax=3, ))
+    INFNORM____NOEU = Facultatif(AsVK8(SDNom(nomj='.INFNORM   .NOEU'), ))
+    DTAN_ORIGINE = Facultatif(AsVR(lonmax=3, ))
+    SUPNORM____NOEU = Facultatif(AsVK8(SDNom(nomj='.SUPNORM   .NOEU'), ))
+    LEVRESUP___MAIL = Facultatif(AsVK8(SDNom(nomj='.LEVRESUP  .MAIL'), ))
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_gfibre.py b/Aster/Cata/cataSTA10/SD/sd_gfibre.py
new file mode 100644 (file)
index 0000000..e15034d
--- /dev/null
@@ -0,0 +1,50 @@
+#@ MODIF sd_gfibre SD  DATE 10/07/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_titre import sd_titre
+
+
+class sd_gfibre(sd_titre):
+#-------------------------------------
+    nomj = SDNom(fin=8)
+    POINTEUR          = AsVI()
+    CARFI             = AsVR()
+    NOMS_GROUPES      = AsPn(ltyp=8)
+    NB_FIBRE_GROUPE   = AsVI()
+
+
+    def check_dimension(self,checker) :
+        nbgf=self.NOMS_GROUPES.nommax
+        assert self.NB_FIBRE_GROUPE.lonmax == nbgf
+        assert self.POINTEUR.lonmax == nbgf
+
+
+    def check_CARFI(self,checker) :
+        nbgf=self.NOMS_GROUPES.nommax
+        pointeur=self.POINTEUR.get()
+        nb_fibre=self.NB_FIBRE_GROUPE.get()
+        nbfib_tot=0
+        for igf in range(nbgf) :
+            assert pointeur[igf]==3*nbfib_tot +1 , (igf, nbfib_tot, pointeur[igf])
+            nbfib=nb_fibre[igf]
+            nbfib_tot=nbfib_tot+nbfib
+        assert self.CARFI.lonmax == 3*nbfib_tot , (nbfib_tot,self.CARFI.lonmax)
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_interf_dyna_clas.py b/Aster/Cata/cataSTA10/SD/sd_interf_dyna_clas.py
new file mode 100644 (file)
index 0000000..1c57214
--- /dev/null
@@ -0,0 +1,113 @@
+#@ MODIF sd_interf_dyna_clas SD  DATE 19/06/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_maillage import sd_maillage
+from SD.sd_nume_ddl import sd_nume_ddl
+from SD.sd_util import *
+
+
+class sd_interf_dyna_clas(AsBase):
+#---------------------------------------
+    nomj = SDNom(fin=8)
+    IDC_NOMS    = AsObject(genr='N', xous='S', type='K', ltyp=8, )
+    IDC_DDAC    = AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+    IDC_DY_FREQ = AsVR(lonmax=1, )
+    IDC_LINO    = AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+    IDC_TYPE    = AsVK8()
+    IDC_DESC    = AsVI(lonmax=5, )
+    IDC_DEFO    = AsVI()
+    IDC_REFE    = AsVK24(lonmax=3, )
+
+
+    def check_coherence_longueurs(self,checker):
+        noms=self.IDC_NOMS.get()
+        type=self.IDC_TYPE.get()
+        lino=self.IDC_LINO.get()
+        ddac=self.IDC_DDAC.get()
+        nb_intf=len(noms)
+        assert nb_intf > 0 , noms
+        assert len(type) == nb_intf, (nb_intf,type)
+        assert len(lino.keys()) == nb_intf, (nb_intf,lino)
+        assert len(ddac.keys()) == nb_intf, (nb_intf,ddac)
+
+
+    def check_REFE(self,checker):
+        refe=self.IDC_REFE.get()
+        sd2=sd_maillage(refe[0]) ; sd2.check(checker)
+        sd2=sd_nume_ddl(refe[1]) ; sd2.check(checker)
+        assert refe[2].strip() == '' , refe
+
+
+    def check_DESC(self,checker):
+        desc=self.IDC_DESC.get()
+        assert desc[0] == 1 , desc
+        assert desc[1] >2 and desc[1] <10 , desc
+        assert desc[2] >60 and desc[2] <300 , desc
+        assert desc[3] >0 and desc[3] <500 , desc
+        assert desc[4] >0  , desc
+        nomgd=sdu_nom_gd(desc[3]).strip()
+        assert nomgd == 'DEPL_R', (nomgd, desc)
+
+
+    def check_NOMS(self,checker):
+        # il n'y a rien à vérifier : un pointeur de noms contient
+        # toujours des noms "non blancs" et "tous différents"
+        pass
+
+
+    def check_TYPE(self,checker):
+        type=self.IDC_TYPE.get()
+        for t1 in type :
+            assert t1.strip() in ('CRAIGB', 'MNEAL', 'CB_HARMO', 'AUCUN'), type
+
+
+    def check_LINO_DDAC(self,checker):
+        lino=self.IDC_LINO.get()
+        ddac=self.IDC_DDAC.get()
+        desc=self.IDC_DESC.get()
+        nbec=desc[1]
+        nb_intf=len(lino.keys())
+
+        for kintf in range(nb_intf) :
+            llino=lino.values()[kintf]
+            lddac=ddac.values()[kintf]
+            nbno=len(llino)
+            assert len(lddac)==nbno*nbec , (lino,ddac)
+            for nuno in llino :
+                assert nuno > 0 , lino
+
+
+    def check_FREQ(self,checker):
+        freq=self.IDC_DY_FREQ.get()
+        assert freq[0] >=0 , freq
+
+
+    def check_DEFO(self,checker):
+        defo=self.IDC_DEFO.get()
+        desc=self.IDC_DESC.get()
+        nbec=desc[1]
+        nbnot=len(defo)/(nbec+2)
+        assert len(defo)==nbnot*(nbec+2), defo
+        for k in range(nbnot) :
+            assert defo[k] > 0 , defo
+
+        assert sdu_monotone(defo[nbnot:2*nbnot]) in (1,0) , (nbnot,nbec,defo)
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_l_charges.py b/Aster/Cata/cataSTA10/SD/sd_l_charges.py
new file mode 100644 (file)
index 0000000..f31f652
--- /dev/null
@@ -0,0 +1,30 @@
+#@ MODIF sd_l_charges SD  DATE 17/07/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+class sd_l_charges(AsBase):
+    nomj = SDNom(fin=19)
+    INFC = AsVI()
+    LCHA = AsVK24()
+    FCHA = AsVK24()
+    FCSS = Facultatif(AsVK24())
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_l_table.py b/Aster/Cata/cataSTA10/SD/sd_l_table.py
new file mode 100644 (file)
index 0000000..f2605ff
--- /dev/null
@@ -0,0 +1,55 @@
+#@ MODIF sd_l_table SD  DATE 09/05/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_table import sd_table
+from SD.sd_util import *
+
+
+class sd_l_table(AsBase):
+#------------------------
+    nomj = SDNom(fin=19)
+
+    # la SD l_table (liste de tables) est une SD destinée à stocker un ensemble de tables
+    # les tables stockées dans la l_table sont identifiées par un "petit nom" (K16)
+
+    LTNT = AsVK16()
+    LTNS = AsVK24()
+
+
+    # existence possible de la SD :
+    def exists(self):
+        return self.LTNT.exists or self.LTNS.exists
+
+    # indirection vers les tables :
+    def check_l_table_i_LTNS(self, checker):
+        if not self.exists() : return
+        ltnt = self.LTNT.get()
+        ltns = self.LTNS.get()
+        nbtable=self.LTNT.lonuti
+        sdu_compare(self.LTNT,checker,nbtable,'>',0,'NBUTI(LTNT)>0')
+        sdu_compare(self.LTNS,checker,self.LTNS.lonuti,'==',nbtable,'NBUTI(LTNS)==NBUTI(LTNT)')
+        for k in range(nbtable) :
+            petinom=ltnt[k].strip()
+            nomtabl=ltns[k].strip()
+            sdu_compare(self.LTNT,checker,petinom,'!=','',"LTNT[k]!=''")
+            sdu_compare(self.LTNS,checker,nomtabl,'!=','',"LTNS[k]!=''")
+            sd2 = sd_table(nomtabl) ; sd2.check(checker)
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_ligrel.py b/Aster/Cata/cataSTA10/SD/sd_ligrel.py
new file mode 100644 (file)
index 0000000..534b8d5
--- /dev/null
@@ -0,0 +1,92 @@
+#@ MODIF sd_ligrel SD  DATE 16/06/2009   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+class sd_ligrel(AsBase):
+    nomj = SDNom(fin=19)
+
+    LGRF = AsVK8(lonmax=2, docu=Parmi('ACOU', 'MECA', 'THER'), )
+    NBNO = AsVI(lonmax=1,)
+    PRNM = AsVI()
+
+    # AU_MOINS_UN : LIEL, SSSA
+    # LIEL : il existe des éléments finis
+    # SSSA : il existe des sous-structures statiques
+    LIEL = Facultatif(AsColl( acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', ))
+    SSSA = Facultatif(AsVI())
+    # ENSEMBLE  : LIEL, REPE
+    REPE = Facultatif(AsVI())
+
+    # si mailles tardives :
+    NEMA = Facultatif(AsColl( acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', ))
+    # si noeuds tardifs :
+    PRNS = Facultatif(AsVI())
+    LGNS = Facultatif(AsVI())
+
+
+    def exists(self):
+        # retourne True si la SD semble exister.
+        return self.LGRF.exists
+
+    def check_LGRF(self,checker):
+        if not self.exists() : return
+        lgrf=self.LGRF.get_stripped()
+        from SD.sd_maillage import sd_maillage
+        sd2=sd_maillage(lgrf[0]); sd2.check(checker)
+        if lgrf[1] != '' :
+           from SD.sd_partition import sd_partition
+           sd2=sd_partition(lgrf[1]); sd2.check(checker)
+
+
+    def check_presence(self,checker):
+        if not self.exists() : return
+        exi_liel=self.LIEL.exists
+        exi_sssa=self.SSSA.exists
+        exi_repe=self.REPE.exists
+        exi_nema=self.NEMA.exists
+        exi_prns=self.PRNS.exists
+        exi_lgns=self.LGNS.exists
+
+        # AU_MOINS_UN : .LIEL, .SSSA
+        assert exi_liel or exi_sssa
+
+        # SI .LIEL AU_MOINS_UN : .REPE, .NEMA
+        if exi_liel :
+            assert exi_repe or exi_nema
+
+        # .REPE => .LIEL
+        if exi_repe : assert exi_liel
+
+        # .NEMA => .LIEL
+        if exi_nema : assert exi_liel
+
+        # noeuds tardifs => .PRNS .LGNS et .NEMA
+        nb_no_tard= self.NBNO.get()[0]
+        if nb_no_tard > 0 :
+            assert exi_prns
+            assert exi_lgns
+            assert exi_nema
+            assert self.LGNS.lonmax >= nb_no_tard   # .LGNS est surdimensionné
+            nbec= self.PRNS.lonmax / nb_no_tard
+            assert self.PRNS.lonmax == nb_no_tard * nbec , (nbec, nb_no_tard)
+            assert nbec >= 1 and nbec < 10 , nbec
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_list_inst.py b/Aster/Cata/cataSTA10/SD/sd_list_inst.py
new file mode 100644 (file)
index 0000000..f5124fe
--- /dev/null
@@ -0,0 +1,38 @@
+#@ MODIF sd_list_inst SD  DATE 20/07/2009   AUTEUR GENIAUT S.GENIAUT 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+class sd_list_inst(AsBase):
+    nomj = SDNom(fin=8)
+
+# 1) objets relatifs a la liste
+
+    LIST_INFOR = AsVR(SDNom(nomj='.LIST.INFOR'),lonmax=7,)
+    LIST_DITR  = AsVR(SDNom(nomj='.LIST.DITR'))
+
+    ECHE_EVENR = AsVR(SDNom(nomj='.ECHE.EVENR'))
+    ECHE_EVENK = AsVK16(SDNom(nomj='.ECHE.EVENK'))
+    ECHE_SUBDR = AsVR(SDNom(nomj='.ECHE.SUBDR'))
+
+    ADAP_EVENR = Facultatif(AsVR(SDNom(nomj='.ADAP.EVENR')))
+    ADAP_EVENK = Facultatif(AsVK8(SDNom(nomj='.ADAP.EVENK')))
+    ADAP_TPLUR = Facultatif(AsVR(SDNom(nomj='.ADAP.TPLUR')))
+    ADAP_TPLUK =Facultatif( AsVK16(SDNom(nomj='.ADAP.TPLUK')))
diff --git a/Aster/Cata/cataSTA10/SD/sd_liste_rela.py b/Aster/Cata/cataSTA10/SD/sd_liste_rela.py
new file mode 100644 (file)
index 0000000..d9259b0
--- /dev/null
@@ -0,0 +1,37 @@
+#@ MODIF sd_liste_rela SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+class sd_liste_rela(AsBase):
+    nomj = SDNom(fin=19)
+    RLLA = AsVK8(SDNom(debut=19), )
+    RLBE = AsVR(SDNom(debut=19), )
+    RLSU = AsVI(SDNom(debut=19), )
+    RLTC = AsVK8(SDNom(debut=19), lonmax=1, )
+    RLNO = AsVK8(SDNom(debut=19), )
+    RLCO = AsVR(SDNom(debut=19), )
+    RLNT = AsVI(SDNom(debut=19), )
+    RLPO = AsVI(SDNom(debut=19), )
+    RLNR = AsVI(SDNom(debut=19), lonmax=1, )
+    RLTV = AsVK8(SDNom(debut=19), lonmax=1, )
+    RLDD = AsVK8(SDNom(debut=19), )
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_listis.py b/Aster/Cata/cataSTA10/SD/sd_listis.py
new file mode 100644 (file)
index 0000000..a0d2f41
--- /dev/null
@@ -0,0 +1,67 @@
+#@ MODIF sd_listis SD  DATE 22/10/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_titre import sd_titre
+from SD.sd_util import *
+
+
+class sd_listis(sd_titre):
+#-------------------------------------
+    nomj = SDNom(fin=19)
+    LPAS = AsVI()
+    BINT = AsVI()
+    NBPA = AsVI()
+    VALE = AsVI()
+
+
+    def check_1(self,checker):
+        nbpa=self.NBPA.get()
+        bint=self.BINT.get()
+        lpas=self.LPAS.get()
+        vale=self.VALE.get()
+
+        # cas général :
+        if len(vale) > 1 :
+            assert len(bint) == len(nbpa)+1
+            assert len(nbpa) == len(lpas)
+
+            n1=0
+            assert  vale[0] == bint[0]
+            for k in range(len(nbpa)) :
+                npas=nbpa[k]
+                assert npas > 0
+                n1 = n1 + npas
+                assert  vale[n1] == bint[k+1]
+
+            assert len(vale) == n1+1
+            assert sdu_monotone(vale) in (1,) , vale
+
+
+        # cas particulier :
+        if len(vale) == 1 :
+            assert len(bint) == 1
+            assert len(nbpa) == 1
+            assert len(lpas) == 1
+            assert  vale[0] == bint[0]
+            assert  nbpa[0] == 0, nbpa
+            assert  lpas[0] == 0, lpas
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_listr8.py b/Aster/Cata/cataSTA10/SD/sd_listr8.py
new file mode 100644 (file)
index 0000000..0a31b39
--- /dev/null
@@ -0,0 +1,76 @@
+#@ MODIF sd_listr8 SD  DATE 10/07/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_titre import sd_titre
+
+
+class sd_listr8(sd_titre):
+#----------------------------------
+    nomj = SDNom(fin=19)
+    LPAS = AsVR()
+    BINT = AsVR()
+    NBPA = AsVI()
+    VALE = AsVR()
+
+
+    def proche(self,a,b):
+        # retourne  1  si a est proche de b
+        # retourne -1  si a est loin de b
+        # retourne  0  si a = 0. (ou b = 0.)
+        if  a != 0. and b != 0. :
+           erreur= abs(a-b)/(abs(a)+abs(b))
+           if erreur < 1.e-12 :
+               return 1
+           else :
+               return -1
+        else :
+               return 0
+
+
+    def check_1(self,checker):
+        nbpa=self.NBPA.get()
+        bint=self.BINT.get()
+        lpas=self.LPAS.get()
+        vale=self.VALE.get()
+
+        # cas général :
+        if len(vale) > 1 :
+            assert len(bint) == len(nbpa)+1
+            assert len(nbpa) == len(lpas)
+
+            n1=0
+            assert self.proche(vale[0], bint[0]) in (1,0)
+            for k in range(len(nbpa)) :
+                npas=nbpa[k]
+                assert npas > 0
+                n1 = n1 + npas
+                assert self.proche(vale[n1],bint[k+1]) in (1,0) , (k+1,vale[n1], bint[k+1],)
+
+            assert len(vale) == n1+1
+
+        # cas particulier :
+        if len(vale) == 1 :
+            assert len(bint) == 1
+            assert len(nbpa) == 1
+            assert len(lpas) == 1
+            assert  vale[0] == bint[0]
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_macr_elem_dyna.py b/Aster/Cata/cataSTA10/SD/sd_macr_elem_dyna.py
new file mode 100644 (file)
index 0000000..3844fba
--- /dev/null
@@ -0,0 +1,70 @@
+#@ MODIF sd_macr_elem_dyna SD  DATE 22/09/2008   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_util import *
+from SD.sd_nume_ddl_gd import sd_nume_ddl_gd
+
+
+class sd_macr_elem_dyna_m(AsBase):
+#----------------------------------
+    nomj = SDNom(fin=18)
+    DESC = AsVI   (SDNom(nomj='_DESC'),lonmax=3)
+    REFE = AsVK24 (SDNom(nomj='_REFE'),lonmax=2)
+    VALE = AsObject (SDNom(nomj='_VALE'),type=Parmi('C','R',),) 
+
+    def check_macr_elem_dyna_m_1(self,checker):
+        vale=self.VALE.get()
+        if not vale : return  # si Facultatif()
+
+        sdu_tous_compris(self.DESC,checker,vmin=1)
+        nbdef=self.DESC.get()[1]
+        sdu_compare(self.VALE,checker,len(vale),'==',(nbdef*(nbdef+1))/2,'LONMAX(VALE)')
+
+
+class sd_macr_elem_dyna(AsBase):
+#-------------------------------
+    nomj = SDNom(fin=8)
+
+    # description géométrique et topolique :
+    DESM = AsVI(lonmax=10)
+    REFM = AsVK8()
+    LINO = AsVI()
+    CONX = Facultatif(AsVI())
+
+    # rigidité, masse, amortissement condensés :
+    nume     = sd_nume_ddl_gd(SDNom(nomj=''))
+
+    MAEL_RAID = sd_macr_elem_dyna_m()
+    MAEL_MASS = sd_macr_elem_dyna_m()
+    MAEL_AMOR = Facultatif(sd_macr_elem_dyna_m())
+
+    MAEL_INER_VALE = AsVR()
+    MAEL_INER_REFE = AsVK24(lonmax=2, )
+
+    MAEL_DESC      = AsVI(lonmax=3, )
+    MAEL_REFE      = AsVK24(lonmax=2, )
+
+
+
+    def check_macr_elem_dyna_1(self,checker):
+        nbdef=self.MAEL_MASS.DESC.get()[1]
+        sdu_compare(self.MAEL_INER_VALE, checker,len(self.MAEL_INER_VALE.get()),'==',3*nbdef,'LONMAX(MAEL_INER_VALE)')
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_macr_elem_stat.py b/Aster/Cata/cataSTA10/SD/sd_macr_elem_stat.py
new file mode 100644 (file)
index 0000000..c9020c1
--- /dev/null
@@ -0,0 +1,120 @@
+#@ MODIF sd_macr_elem_stat SD  DATE 27/11/2007   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_matr_asse_gd import sd_matr_asse_gd
+from SD.sd_stoc_lciel import sd_stoc_lciel
+from SD.sd_proj_mesu import sd_proj_mesu
+
+
+class sd_macr_elem_stat(AsBase):
+#----------------------------------------------
+    nomj = SDNom(fin=8)
+
+    # description géométrique et topolique :
+    DESM = AsVI(lonmax=10)
+    REFM = AsVK8()
+    LINO = AsVI()
+    VARM = AsVR(lonmax=2)
+    CONX = Facultatif(AsVI()) # l'objet devient obligatoire dès l'étape de condensation de la rigidité
+
+    # rigidité condensée :
+    rigimeca = Facultatif(sd_matr_asse_gd(SDNom(nomj='.RIGIMECA', fin=19)))
+    MAEL_RAID_VALE = Facultatif(AsVR())
+    PHI_IE   = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='CONSTANT', type='R', ltyp=8))
+
+    # masse condensée :
+    massmeca = Facultatif(sd_matr_asse_gd(SDNom(nomj='.MASSMECA', fin=19)))
+    MAEL_MASS_VALE = Facultatif(AsVR())
+
+    # amortissement condensé :
+    MAEL_AMOR_VALE = Facultatif(AsVR())
+
+    # chargements condensés :
+    LICA = Facultatif(AsColl(acces='NO', stockage='DISPERSE', modelong='CONSTANT', type='R', ltyp=8))
+    LICH = Facultatif(AsColl(acces='NO', stockage='CONTIG', modelong='CONSTANT', type='K', ltyp=8))
+
+    # si utilisation de PROJ_MESU_MODAL :
+    PROJM = Facultatif(sd_proj_mesu())
+
+
+    def check_longueurs(self, checker):
+    #------------------------------------
+        # vérifs existence, longueurs, ...
+
+        desm=self.DESM.get()
+        refm=self.REFM.get()
+        assert desm[0]==0, desm
+        nbnoe, nbnoi, nddle, nddli, nbchar, nbcas, nlage, nlagl, nlagi  =desm[1:10]
+        assert nbnoe  >  0   ,desm
+        assert nbchar >= 0   ,desm
+
+        # si on n'a pas encore condensé la rigidité, certaines valeurs ne sont pas encore calculées :
+        if self.MAEL_RAID_VALE.exists :
+            assert nbnoi  >  0   ,desm
+            assert nddle  >  1   ,desm
+            assert nddli  >  0   ,desm
+            assert nbcas  >= 0   ,desm
+            assert nlage  >= 0   ,desm
+            assert nlagl  >= 0   ,desm
+            assert nlagi  >= 0   ,desm
+            assert self.CONX.lonmax == 3*(nbnoe+nlage+nlagl)  ,(desm,self.CONX.get())
+            assert refm[5] == 'OUI_RIGI'
+
+        assert self.REFM.lonmax == 9+nbchar    ,(desm,self.REFM.get())
+        assert self.LINO.lonmax == nbnoe       ,(desm,self.LINO.get())
+
+        # rigidité condensée :
+        if self.MAEL_RAID_VALE.exists :
+            assert self.MAEL_RAID_VALE.lonmax ==  (nddle*(nddle+1))/2
+
+            assert self.PHI_IE.exists
+            phi_ie=self.PHI_IE.get()      # on ne sait pas faire autrement que ramener l'objet entier ...
+            nlblph=len(phi_ie[1])/nddli   # nombre de lignes de phi_ie par bloc
+            assert self.PHI_IE.nmaxoc ==  (nddle-1)/nlblph +1 , (nddle, self.PHI_IE.nmaxoc)
+            for ke in phi_ie.keys() :
+                assert len(phi_ie[ke]) == nddli*nlblph  ,(nddli,nlblph,nddle,len(phi_ie[ke]),ke)
+
+        # masse condensée :
+        if self.MAEL_MASS_VALE.exists :
+            assert self.MAEL_MASS_VALE.lonmax ==  (nddle*(nddle+1))/2
+            assert refm[6] == 'OUI_MASS'
+
+        # amortissement condensé : (JP : je ne sais pas si ca peut exister ?)
+        if self.MAEL_AMOR_VALE.exists :
+            assert self.MAEL_AMOR_VALE.lonmax ==  (nddle*(nddle+1))/2
+            assert refm[7] == 'OUI_AMOR'
+
+        # chargements condensés :
+        if nbcas > 0 :
+            assert self.LICA.exists
+            assert self.LICA.nmaxoc >= nbcas
+            lica=self.LICA.get()
+            for k in lica.keys():
+                assert len(lica[k]) == 2*(nddli + nddle)
+
+            assert self.LICH.exists
+            assert self.LICH.nmaxoc == self.LICA.nmaxoc
+            assert self.LICH.nutioc == self.LICA.nutioc
+            lich=self.LICH.get()
+            for k in lich.keys():
+                assert len(lich[k]) >= nbchar + 1
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_maillage.py b/Aster/Cata/cataSTA10/SD/sd_maillage.py
new file mode 100644 (file)
index 0000000..2ac6be1
--- /dev/null
@@ -0,0 +1,123 @@
+#@ MODIF sd_maillage SD  DATE 06/05/2008   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_titre import sd_titre
+
+from SD.sd_cham_no import sd_cham_no
+from SD.sd_carte import sd_carte
+from SD.sd_l_table import sd_l_table
+
+
+class sd_voisinage(AsBase):
+#-------------------------------
+    nomj = SDNom(fin=12)
+    PTVOIS = AsVI()
+    ELVOIS = AsVI()
+
+
+class sd_maillage(sd_titre):
+#-------------------------------
+    nomj = SDNom(fin=8)
+
+    DIME = AsVI(lonmax=6, )
+
+    # un sd_maillage a toujours des noeuds :
+    NOMNOE = AsPn(ltyp=8)
+    COORDO = sd_cham_no()
+
+    # normalement, un sd_maillage a toujours une "sd_l_table" contenant des caractéristiques géométriques :
+    lt = sd_l_table(SDNom(nomj=''))
+
+    # si le sd_maillage a des groupes :
+    GROUPENO = Facultatif(AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', ))
+    GROUPEMA = Facultatif(AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', ))
+
+    # si le sd_maillage a des mailles :
+    CONNEX  = Facultatif(AsColl(acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', ))
+    TYPMAIL = Facultatif(AsVI())
+    NOMMAI  = Facultatif(AsPn(ltyp=8))
+
+    # si le sd_maillage a des super-mailles :
+    NOMACR  = Facultatif(AsVK8())
+    SUPMAIL = Facultatif(AsColl(acces='NO', stockage='DISPERSE', modelong='VARIABLE', type='I', ))
+    PARA_R  = Facultatif(AsVR())
+    TYPL    = Facultatif(AsVI())
+
+    # si le sd_maillage est linéique (tube_GV) :
+    abs_curv  = Facultatif(sd_carte(SDNom(nomj='.ABS_CURV')))
+
+    # Lorsque le sd_maillage sert de support a un sd_modele contenant des volumes finis :
+    VGE  = Facultatif(sd_voisinage())
+
+    ADAPTATION = Facultatif(AsVI(lonmax=1, ))
+    FORM = Facultatif(AsVK32(SDNom(debut=19), lonmax=2, ))
+
+
+    def u_dime(self):
+        dime=self.DIME.get()
+        nb_no    =dime[0]
+        nb_nl    =dime[1]
+        nb_ma    =dime[2]
+        nb_sm    =dime[3]
+        nb_sm_mx =dime[4]
+        dim_coor =dime[5]
+        return nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor
+
+# remarque :  la sd_maillage pouvant etre "volumineuse", on s'interdit (pour des raisons de temps CPU)
+#             de vérifier le contenu des gros objets.
+
+    def check_DIME(self,checker):
+        nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
+        assert nb_sm <= nb_sm_mx , (nb_sm, nb_sm_mx)
+        if nb_nl > 0 : assert nb_sm > 0
+        assert nb_no > 0  , nb_no
+        assert dim_coor in (2,3), dim_coor
+
+
+    def check_NOEUDS(self,checker):
+        nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
+        assert self.NOMNOE.nomuti == nb_no + nb_nl , (nb_no, nb_nl)
+        assert self.COORDO.VALE.lonmax == 3*nb_no , nb_no
+
+
+    def check_MAILLES(self,checker):
+        nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
+        if nb_ma == 0 : return
+        assert self.NOMMAI.nommax  == nb_ma , nb_ma
+        assert self.TYPMAIL.lonmax == nb_ma , nb_ma
+        assert self.CONNEX.nmaxoc  == nb_ma , nb_ma
+
+
+    def check_SSS(self,checker):
+        nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
+        if nb_sm == 0 : return
+        assert self.NOMACR.lonmax  == nb_sm    , nb_sm
+        assert self.PARA_R.lonmax  == 14*nb_sm , nb_sm
+        assert self.SUPMAIL.nmaxoc  == nb_sm    , nb_sm
+
+    def check_TYPL(self,checker):
+        nb_no, nb_nl, nb_ma, nb_sm, nb_sm_mx, dim_coor = self.u_dime()
+        if nb_nl == 0 : return
+        assert self.TYPL.lonmax  == nb_nl    , nb_nl
+        typl=self.TYPL.get()
+        for k in typl :
+            assert  k in (-1, -2) , typl
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_mater.py b/Aster/Cata/cataSTA10/SD/sd_mater.py
new file mode 100644 (file)
index 0000000..2f5443f
--- /dev/null
@@ -0,0 +1,95 @@
+#@ MODIF sd_mater SD  DATE 06/05/2008   AUTEUR MARKOVIC D.MARKOVIC 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_fonction import sd_fonction
+
+
+
+class sd_mater_XDEP(AsBase):
+#---------------------------
+    # on dirait une fonction, mais c'est plutot la concaténation de plusieurs fonctions
+    nomj = SDNom(fin=19)
+    PROL = AsVK24()
+    VALE = AsVR()
+
+
+class sd_compor1(AsBase):
+#-----------------------
+    nomj = SDNom(fin=19)
+    VALC = AsVC(SDNom(), )
+    VALK = AsVK8(SDNom(), )
+    VALR = AsVR(SDNom(), )
+
+
+    # parfois, THER_NL crée une sd_fonction pour BETA
+    def check_compor1_i_VALK(self, checker):
+        nom= self.nomj().strip()
+        if nom[8:16]=='.THER_NL' :
+            valk=list(self.VALK.get_stripped())
+            if valk :
+                nbk2=self.VALK.lonuti
+                nbr=self.VALR.lonuti
+                nbc=self.VALC.lonuti
+                nbk=nbk2-nbr-nbc
+                k2=valk.index('BETA')
+                k=k2-nbr-nbc
+                nomfon=valk[nbr+nbc+nbk/2+k]
+                sd2=sd_fonction(nomfon) ; sd2.check(checker)
+        if nom[8:16]=='.GLRC_DA' :
+            valk=list(self.VALK.get_stripped())
+            if valk :
+                nbk2=self.VALK.lonuti
+                nbr=self.VALR.lonuti
+                nbc=self.VALC.lonuti
+                nbk=nbk2-nbr-nbc
+                for fon in ('FMEX1'  ,'FMEX2'  ,'FMEY1'  ,'FMEY2' , 
+                            'DFMEX1' ,'DFMEX2' ,'DFMEY1' ,'DFMEY2',
+                            'DDFMEX1','DDFMEX2','DDFMEY1','DDFMEY2'):
+                    k2=valk.index(fon)
+                    k=k2-nbr-nbc
+                    nomfon=valk[nbr+nbc+nbk/2+k]
+                    sd2=sd_fonction(nomfon) ; sd2.check(checker)
+
+
+class sd_mater(AsBase):
+#----------------------
+    nomj = SDNom(fin=8)
+    NOMRC = AsVK16(SDNom(nomj='.MATERIAU.NOMRC'), )
+    rdep = Facultatif(sd_mater_XDEP(SDNom(nomj='.&&RDEP')))  # à documenter
+    mzp  = Facultatif(sd_mater_XDEP(SDNom(nomj='.&&MZP' )))  # à documenter
+
+    # existence possible de la SD :
+    def exists(self):
+        return self.NOMRC.exists
+
+    # indirection vers les sd_compor1 de NOMRC :
+    def check_mater_i_NOMRC(self, checker):
+        lnom = self.NOMRC.get()
+        if not lnom: return
+        for nom in lnom:
+            if not nom.strip(): continue
+            nomc1=self.nomj()[:8]+'.'+nom
+            comp1 = sd_compor1(nomc1)
+
+            # parfois, comp1 est vide : ssls115g/DEFI_COQU_MULT
+            if comp1.VALK.get() : comp1.check(checker)
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_matr_asse.py b/Aster/Cata/cataSTA10/SD/sd_matr_asse.py
new file mode 100644 (file)
index 0000000..3f88479
--- /dev/null
@@ -0,0 +1,48 @@
+#@ MODIF sd_matr_asse SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+from SD.sd_matr_asse_gd import sd_matr_asse_gd
+from SD.sd_matr_asse_gene import sd_matr_asse_gene
+from SD.sd_matr_asse_com import sd_matr_asse_com
+
+#---------------------------------------------------------------------------------
+# classe "chapeau" à sd_matr_asse_gene et sd_matr_asse_gd ne servant que pour "check"
+#---------------------------------------------------------------------------------
+
+
+class sd_matr_asse(sd_matr_asse_com):
+#--------------------------------------------
+    nomj = SDNom(fin=19)
+
+
+    # pour orienter vers sd_matr_asse_gene ou sd_matr_asse_gd :
+    def check_matr_asse_1(self, checker):
+        # on est obligé de se protéger dans le cas des Facultatif(sd_matr_asse) :
+        if not self.REFA.get() : return
+        gene=self.REFA.get()[9].strip()=='GENE'
+        if  gene  :
+           sd2=sd_matr_asse_gene(self.nomj)
+        else :
+           sd2=sd_matr_asse_gd(self.nomj)
+        sd2.check(checker)
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_matr_asse_com.py b/Aster/Cata/cataSTA10/SD/sd_matr_asse_com.py
new file mode 100644 (file)
index 0000000..9a18dfb
--- /dev/null
@@ -0,0 +1,69 @@
+#@ MODIF sd_matr_asse_com SD  DATE 25/03/2008   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_titre import sd_titre
+
+from SD.sd_maillage import sd_maillage
+from SD.sd_nume_ddl import sd_nume_ddl
+from SD.sd_matr_cine import sd_matr_cine
+
+
+class sd_matr_asse_com(sd_titre):
+#-----------------------------
+    nomj = SDNom(fin=19)
+
+    REFA = AsVK24(lonmax=11,)
+    VALM = AsColl(acces='NU', stockage='DISPERSE', modelong='CONSTANT', type=Parmi('C', 'R'))
+    UALF = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='CONSTANT', type=Parmi('C', 'R')))
+    VALF = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type=Parmi('C', 'R')))
+    WALF = Facultatif(AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type=Parmi('C', 'R')))
+    CONL = Facultatif(OJBVect(type=Parmi('C', 'R')))
+    DIGS = Facultatif(OJBVect(type=Parmi('C', 'R'))) # seulement si solveurs LDLT et MULT_FRONT
+    LIME = Facultatif(AsVK24())
+    cine = Facultatif(sd_matr_cine(SDNom(nomj='')))
+
+    def exists(self):
+        # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+        return self.REFA.exists
+
+    def check_REFA(self, checker):
+        if not self.exists() : return
+        refa=self.REFA.get_stripped()
+        assert refa[9] in ('NOEU','GENE') , refa
+        lgene = refa[9] == 'GENE'
+        # pour les matrices generalisees, on ne sait pas ce qui est stocké dans refa[0]='' :
+        if not lgene :
+            sd2=sd_maillage(refa[0]) ; sd2.check(checker)
+            sd2=sd_nume_ddl(refa[1]) ; sd2.check(checker)
+        assert refa[2] in ('ELIMF','ELIML','') , refa
+        assert refa[4] in ('FETI','') , refa
+        # pour les matrices generalisees, refa[7] n'est pas toujours rempli :
+        if not lgene :
+            # glute à résorber : j'ajoute '' à la liste permise pour le test yyyy108e :
+            assert refa[7] in ('ASSE','DECT','DECP','') , refa
+        assert refa[8] in ('MS','MR') , refa
+        if refa[8]=='MS' :
+            assert self.VALM.nmaxoc == 1 , (refa,self.VALM.nmaxoc)
+        elif refa[8]=='MR' :
+            assert self.VALM.nmaxoc == 2 , (refa,self.VALM.nmaxoc)
+        assert refa[10] in ('MPI_COMPLET','MPI_INCOMPLET') , refa
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_matr_asse_gd.py b/Aster/Cata/cataSTA10/SD/sd_matr_asse_gd.py
new file mode 100644 (file)
index 0000000..e6a24bb
--- /dev/null
@@ -0,0 +1,38 @@
+#@ MODIF sd_matr_asse_gd SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+from SD.sd_matr_asse_com import sd_matr_asse_com
+from SD.sd_nume_ddl_gd import sd_nume_ddl_gd
+
+
+class sd_matr_asse_gd(sd_matr_asse_com):
+#--------------------------------------------
+    nomj = SDNom(fin=19)
+
+
+    # indirection vers sd_nume_ddl_gd à faire car FACT_LDLT modifie le sd_nume_ddl_gd de la sd_matr_asse :
+    def check_matr_asse_gd_i_REFA(self, checker):
+        # on est obligé de se protéger dans le cas des Facultatif(sd_matr_asse) :
+        if not self.REFA.get() : return
+        nom=self.REFA.get()[1]
+        sd2=sd_nume_ddl_gd(nom) ; sd2.check(checker)
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_matr_asse_gene.py b/Aster/Cata/cataSTA10/SD/sd_matr_asse_gene.py
new file mode 100644 (file)
index 0000000..4bef8f5
--- /dev/null
@@ -0,0 +1,42 @@
+#@ MODIF sd_matr_asse_gene SD  DATE 09/05/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_matr_asse_com import sd_matr_asse_com
+from SD.sd_nume_ddl_gene import sd_nume_ddl_gene
+
+
+class sd_matr_asse_gene(sd_matr_asse_com):
+#-----------------------------------------
+    nomj = SDNom(fin=19)
+
+    DESC = Facultatif(AsVI(lonmax=3,)) # PB_JACOT : n'existe pas toujours : exemple : fdlv105a
+
+    def exists(self):
+        return self.REFA.exists
+
+
+    # indirection vers sd_nume_ddl à faire car FACT_LDLT modifie le sd_nume_ddl_gene de la sd_matr_asse :
+    def check_matr_asse_gene_i_REFA(self, checker):
+        if not self.exists : return
+        nom=self.REFA.get()[1]
+        sd2=sd_nume_ddl_gene(nom) ; sd2.check(checker)
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_matr_cine.py b/Aster/Cata/cataSTA10/SD/sd_matr_cine.py
new file mode 100644 (file)
index 0000000..7bce4ec
--- /dev/null
@@ -0,0 +1,33 @@
+#@ MODIF sd_matr_cine SD  DATE 22/09/2008   AUTEUR DESOZA T.DESOZA 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+
+class sd_matr_cine(AsBase):
+#-----------------------
+    nomj = SDNom(fin=19)
+
+    CCID = AsVI()
+    CCII = Facultatif(AsVI())
+    CCLL = Facultatif(AsVI())
+    CCVA = Facultatif(AsObject(genr='V', xous='S', type=Parmi('R','C')))
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_matr_elem.py b/Aster/Cata/cataSTA10/SD/sd_matr_elem.py
new file mode 100644 (file)
index 0000000..0cea82e
--- /dev/null
@@ -0,0 +1,70 @@
+#@ MODIF sd_matr_elem SD  DATE 08/06/2009   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_resuelem import sd_resuelem
+from SD.sd_cham_no import sd_cham_no
+from SD.sd_modele import sd_modele
+from SD.sd_cham_mater import sd_cham_mater
+from SD.sd_cara_elem import sd_cara_elem
+
+
+class sd_matr_elem(AsBase):
+    nomj = SDNom(fin=19)
+    RERR = AsVK24(lonmax=5, )
+    RELR = Facultatif(AsVK24())
+    RECC = Facultatif(AsVK8())
+    TITR = AsVK80(SDNom(debut=19), optional=True)
+
+    # indirection par RELR :
+    def check_matr_elem_i_RELR(self, checker):
+        if not self.RELR.exists : return
+        lnom = self.RELR.get_stripped()
+        for nom in lnom:
+            if nom != '' :
+                # le nom est celui d'un resuelem ou parfois d'un cham_no (VECT_ASSE):
+                sd2 = sd_resuelem(nom)
+                if sd2.RESL.exists :
+                    sd2.check(checker)
+                else :
+                    sd2 = sd_cham_no(nom)
+                    sd2.check(checker)
+
+
+    def check_1(self, checker):
+        refe = self.RERR.get_stripped()
+        assert refe[2] in ('OUI_SOUS_STRUC', 'NON_SOUS_STRUC'), refe
+
+        # existence de RELR :
+        if refe[2] == 'NON_SOUS_STRUC':
+            assert self.RELR.exists
+
+        assert refe[1] != '', refe
+
+        sd2=sd_modele(refe[0]) ; sd2.check(checker)
+
+        if refe[3] != '' :
+            sd2=sd_cham_mater(refe[3]) ; sd2.check(checker)
+
+        if refe[4] != '' :
+            sd2=sd_cara_elem(refe[4]) ; sd2.check(checker)
+
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_melasflu.py b/Aster/Cata/cataSTA10/SD/sd_melasflu.py
new file mode 100644 (file)
index 0000000..ccad7a4
--- /dev/null
@@ -0,0 +1,195 @@
+#@ MODIF sd_melasflu SD  DATE 21/04/2008   AUTEUR MACOCCO K.MACOCCO 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_l_table import sd_l_table
+from SD.sd_table import sd_table
+from SD.sd_cham_no import sd_cham_no
+from SD.sd_matr_asse_gene import sd_matr_asse_gene
+from SD.sd_type_flui_stru import sd_type_flui_stru
+from SD.sd_resultat_dyn import sd_resultat_dyn
+from SD.sd_util import *
+
+
+class sd_melasflu(AsBase):
+#-------------------------------
+    nomj = SDNom(fin=8)
+
+    MASG = AsVR(SDNom(debut=19), )
+    VITE = AsVR(SDNom(debut=19), )
+    REMF = AsVK8(SDNom(debut=19), lonmax=2, )
+    FREQ = AsVR(SDNom(debut=19), )
+    NUMO = AsVI(SDNom(debut=19))
+    FACT = AsVR(SDNom(debut=19), )
+    DESC = AsVK16(SDNom(debut=19), lonmax=1, )
+
+    # si FAISCEAU_TRANS + couplage fluide-structure + BASE_MODALE/AMOR_REDUIT_CONN :
+    VCN  = Facultatif(AsVR())
+    VEN  = Facultatif(AsVR())
+    RAP  = Facultatif(AsVR())
+
+    sd_table   = sd_table(SDNom(nomj=''))
+    sd_l_table = Facultatif(sd_l_table(SDNom(nomj=''))) # Si FAISCEAU_AXIAL
+
+
+    # indirections via .REMF :
+    #----------------------------------
+    def check_melasflu_i_REMF(self, checker):
+        remf=self.REMF.get_stripped()
+        sd2 = sd_type_flui_stru(remf[0]) ; sd2.check(checker)
+        sd2 = sd_resultat_dyn(remf[1]) ; sd2.check(checker)
+
+
+    # Vérifications supplémentaires :
+    #----------------------------------
+    def check_veri1(self, checker):
+        remf=self.REMF.get()
+        desc=self.DESC.get_stripped()
+
+        # calcul de itypfl (type d'interaction fluide / structure) :
+        typfl = sd_type_flui_stru(remf[0])
+        itypfl=typfl.FSIC.get()[0]  # 1 -> FAISCEAU_TRANS
+                                    # 3 -> FAISCEAU_AXIAL
+        couplage=typfl.FSIC.get()[1]  # 1 -> prise en compte du couplage
+        assert itypfl > 0 , remf
+
+        # calcul de nbmode (nombre de modes) :
+        nbmode=self.NUMO.lonmax
+        assert nbmode > 0
+
+        # calcul de nbvite (nombre de vitesses) :
+        nbvite=self.VITE.lonmax
+        assert nbvite > 0
+
+        # vérification de l'objet .DESC :
+        #--------------------------------
+        assert len(desc)==1 , desc
+        assert desc[0] == 'DEPL' , desc
+
+        # vérification de l'objet .NUMO :
+        #--------------------------------
+        for x in self.NUMO.get() :
+            assert x >= 1 , numo
+
+        # vérification de l'objet .FACT :
+        #--------------------------------
+        if itypfl==3 :  # faisceau axial
+            assert self.FACT.lonmax == 3*nbmode*nbvite
+        else :
+            assert self.FACT.lonmax == 3*nbmode
+
+        # vérification de l'objet .MASG :
+        #--------------------------------
+        if itypfl==3 :  # faisceau axial
+            assert self.MASG.lonmax == nbmode*nbvite
+        else :
+            assert self.MASG.lonmax == nbmode
+
+        # vérification de l'objet .FREQ :
+        #--------------------------------
+        assert self.FREQ.lonmax == 2*nbmode*nbvite
+
+        # vérification existence .VCN et .VEN:
+        #-------------------------------------
+        if self.VCN.exists : assert self.VEN.exists
+        if self.VEN.exists : assert self.VCN.exists
+        if self.VEN.exists : assert itypfl == 1 and couplage == 1
+        if self.RAP.exists : assert (self.VEN.exists and self.VCN.exists)
+
+        # vérification de l'objet .VCN :
+        #--------------------------------
+        if self.VCN.exists :
+            fsvi=typfl.FSVI.get()
+            nbzone=fsvi[1]
+            nbval=0
+            for i in range(nbzone) :
+                nbval=nbval+fsvi[2+nbzone+i]
+            assert self.VCN.lonmax == nbmode*nbval*2
+
+        # vérification de l'objet .VEN :
+        #--------------------------------
+        if self.VEN.exists :
+            assert self.VEN.lonmax == nbmode*2
+
+        # vérification de l'objet .RAP :
+        #--------------------------------
+        if self.RAP.exists :
+            fsvi=typfl.FSVI.get()
+            nbzone=fsvi[1]
+            nbval=0
+            for i in range(nbzone) :
+                nbval=nbval+fsvi[2+nbzone+i]
+            assert self.RAP.lonmax == nbmode*nbval*2
+
+        # vérification de la SD table contenant les cham_no :
+        #----------------------------------------------------
+        tcham=self.sd_table
+        assert tcham.nb_column() == 1  , tcham
+        col1=tcham.get_column_name('NOM_CHAM')
+        assert col1, "Il manque la colonne NOM_CHAM"
+
+        data=col1.data.get()
+        mask=col1.mask.get()
+        profchno=''
+        for k in range(len(mask)):
+            if not mask[k] : continue
+            ch1=sd_cham_no(data[k])
+            ch1.check(checker)
+
+            # Tous les cham_no doivent avoir le meme prof_chno :
+            profchn1=ch1.REFE.get()[1]
+            if profchno == '':
+                profchno=profchn1
+            else:
+                assert profchn1 == profchno  ,(profchn1, profchno)
+
+
+        # vérification de la SD l_table :
+        #--------------------------------
+        if self.sd_l_table.LTNT.exists : assert itypfl == 3   # FAISCEAU_AXIAL
+        if itypfl == 3  : assert self.sd_l_table.LTNT.exists
+
+        if self.sd_l_table.LTNT.exists :
+            l_table = self.sd_l_table
+            l_table.check(checker)
+
+            # la l_table ne contient qu'une seule table nommée 'MATR_GENE'
+            sdu_compare(l_table.LTNT,checker,l_table.LTNT.lonuti,'==',1,"LONUTI(LTNT)==1")
+            sdu_compare(l_table.LTNT,checker,l_table.LTNT.get()[0].strip(),'==','MATR_GENE',"LTNT[0]==MATR_GENE")
+
+            # vérification de la table 'MATR_GENE' :
+            tmatgen=sd_table(l_table.LTNS.get()[0])
+            col1=tmatgen.get_column_name('NUME_VITE')
+            sdu_assert(None, checker, col1, "Manque colonne NUME_VITE")
+            col1=tmatgen.get_column_name('VITE_FLUI')
+            sdu_assert(None, checker, col1, "Manque colonne VITE_FLUI")
+
+            for x in 'MATR_RIGI', 'MATR_MASS', 'MATR_AMOR' :
+                col1=tmatgen.get_column_name(x)
+                sdu_assert(None, checker, col1, "Manque colonne : "+x)
+                data=col1.data.get()
+                mask=col1.mask.get()
+                for k in range(len(mask)):
+                    if not mask[k] : continue
+                    matgen=sd_matr_asse_gene(data[k])
+                    matgen.check(checker)
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_mode_cycl.py b/Aster/Cata/cataSTA10/SD/sd_mode_cycl.py
new file mode 100644 (file)
index 0000000..980f0dc
--- /dev/null
@@ -0,0 +1,95 @@
+#@ MODIF sd_mode_cycl SD  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_maillage import sd_maillage
+from SD.sd_interf_dyna_clas import sd_interf_dyna_clas
+#from SD.sd_base_modale import sd_base_modale
+from SD.sd_mode_meca import sd_mode_meca
+from SD.sd_util import *
+
+
+class sd_mode_cycl(AsBase):
+#--------------------------
+    nomj = SDNom(fin=8)
+    CYCL_TYPE = AsVK8(lonmax=1, )
+    CYCL_CMODE = AsVC()
+    CYCL_NBSC = AsVI(lonmax=1, )
+    CYCL_DIAM = AsVI()
+    CYCL_REFE = AsVK24(lonmax=3, )
+    CYCL_DESC = AsVI(lonmax=4, )
+    CYCL_FREQ = AsVR()
+    CYCL_NUIN = AsVI(lonmax=3, )
+
+
+    def u_dime(self) :
+        desc=self.CYCL_DESC.get()
+        nb_mod  = desc[0] ; assert nb_mod   >  0
+        nb_ddl  = desc[1] ; assert nb_ddl   >  0
+        nb_ddli = desc[2] ; assert nb_ddli  >= 0
+        nb_freq = desc[3] ; assert nb_freq  >  0
+        nb_diam=self.CYCL_DIAM.lonmax / 2  ; assert nb_diam > 0
+        assert self.CYCL_DIAM.lonmax == 2*nb_diam
+        return (nb_mod, nb_ddl, nb_ddli, nb_freq, nb_diam)
+
+    def check_REFE(self,checker) :
+        refe=self.CYCL_REFE.get_stripped()
+        sd2=sd_maillage(refe[0]); sd2.check
+        sd2=sd_interf_dyna_clas(refe[1]); sd2.check
+#        sd2=sd_base_modale(refe[2]); sd2.check
+        sd2=sd_mode_meca(refe[2]); sd2.check
+
+    def check_NUIN(self,checker) :
+        nuin=self.CYCL_NUIN.get()
+        assert nuin[0] >  0 , nuin
+        assert nuin[1] >  0 , nuin
+        assert nuin[2] >= 0 , nuin
+
+
+    def check_NBSC(self,checker) :
+        nbsc=self.CYCL_NBSC.get()
+        assert nbsc[0] > 0 , nbsc
+
+
+    def check_TYPE(self,checker) :
+        type=self.CYCL_TYPE.get_stripped()
+        assert type[0] in ('MNEAL', 'CRAIGB', 'CB_HARMO', 'AUCUN') ,type
+
+
+    def check_CMODE(self,checker) :
+        nb_mod, nb_ddl, nb_ddli, nb_freq, nb_diam = self.u_dime()
+        assert self.CYCL_CMODE.lonmax== nb_diam*nb_freq*(nb_mod+nb_ddl+nb_ddli)
+
+
+    def check_DIAM(self,checker) :
+        diam=self.CYCL_DIAM.get()
+        nb_diam=len(diam)/2
+        for x in diam[:nb_diam] : assert x >= 0 , diam
+        for x in diam[nb_diam:] : assert x >  0 , diam
+        sdu_tous_differents(self.CYCL_DIAM,checker,diam[:nb_diam])
+
+
+    def check_FREQ(self,checker) :
+        nb_mod, nb_ddl, nb_ddli, nb_freq, nb_diam = self.u_dime()
+        freq=self.CYCL_FREQ.get()
+        assert len(freq) == nb_diam*nb_freq ,(self.CYCL_DESC.get(),len(freq))
+        for x in freq : assert x >= 0 , freq
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_mode_meca.py b/Aster/Cata/cataSTA10/SD/sd_mode_meca.py
new file mode 100644 (file)
index 0000000..c3224d6
--- /dev/null
@@ -0,0 +1,31 @@
+#@ MODIF sd_mode_meca SD  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+from SD.sd_resultat_dyn import sd_resultat_dyn
+
+
+class sd_mode_meca(sd_resultat_dyn):
+#--------------------------------------------------
+    nomj = SDNom(fin=8)
+#    UTIL = Facultatif(AsVI(SDNom(debut=19)))  # AJACOT_PB : .UTIL n'existe pas pour sdlx201a
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_modele.py b/Aster/Cata/cataSTA10/SD/sd_modele.py
new file mode 100644 (file)
index 0000000..05e38d8
--- /dev/null
@@ -0,0 +1,62 @@
+#@ MODIF sd_modele SD  DATE 06/05/2008   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_ligrel    import sd_ligrel
+from SD.sd_maillage  import sd_maillage
+from SD.sd_prof_chno import sd_prof_chno
+from SD.sd_carte     import sd_carte
+from SD.sd_xfem      import sd_modele_xfem
+from SD.sd_l_table   import sd_l_table
+
+
+
+class sd_modele(AsBase):
+#-----------------------------
+    nomj = SDNom(fin=8)
+
+    MODELE = sd_ligrel()
+    NOEUD = Facultatif(AsVI())
+    MAILLE = Facultatif(AsVI())
+
+    # une sd_modele peut avoir une "sd_l_table" contenant des grandeurs caractéristiques de l'étude :
+    lt = Facultatif(sd_l_table(SDNom(nomj='')))
+
+    # Si le modèle vient de MODI_MODELE_XFEM :
+    xfem = Facultatif(sd_modele_xfem(SDNom(nomj='')))
+
+
+    def check_existence(self,checker) :
+        exi_liel=self.MODELE.LIEL.exists
+        exi_maille=self.MAILLE.exists
+        exi_noeud=self.NOEUD.exists
+
+        # si .LIEL => .MAILLE et .NOEUD
+        if exi_liel :
+            assert exi_maille
+            assert exi_noeud
+
+
+    def check_maillage(self,checker) :
+        # on est obligé de checker le maillage pour permettre la creation de la sd_voisinage
+        lgrf=self.MODELE.LGRF.get_stripped()
+        sd2 = sd_maillage(lgrf[0]); sd2.check(checker)
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_modele_gene.py b/Aster/Cata/cataSTA10/SD/sd_modele_gene.py
new file mode 100644 (file)
index 0000000..326c3cc
--- /dev/null
@@ -0,0 +1,116 @@
+#@ MODIF sd_modele_gene SD  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_interf_dyna_clas import sd_interf_dyna_clas
+#from SD.sd_base_modale import sd_base_modale
+from SD.sd_mode_meca import sd_mode_meca
+from SD.sd_macr_elem_dyna import sd_macr_elem_dyna
+from SD.sd_util import *
+
+
+
+class sd_modele_gene(AsBase):
+#-----------------------------
+    nomj = SDNom(fin=14)
+    MODG_LIPR = AsVI(SDNom(nomj='.MODG.LIPR'), )
+    MODG_LIDF = AsColl(SDNom(nomj='.MODG.LIDF'), acces='NU', stockage='DISPERSE', modelong='CONSTANT', type='K', ltyp=8, )
+    MODG_SSTR = AsColl(SDNom(nomj='.MODG.SSTR'), acces='NU', stockage='CONTIG', modelong='CONSTANT', type='R', ltyp=8, )
+    MODG_SSOR = AsColl(SDNom(nomj='.MODG.SSOR'), acces='NU', stockage='CONTIG', modelong='CONSTANT', type='R', ltyp=8, )
+    MODG_SSNO = AsPn(SDNom(nomj='.MODG.SSNO'), ltyp=8, )
+    MODG_SSME = AsColl(SDNom(nomj='.MODG.SSME'), acces='NU', stockage='CONTIG', modelong='CONSTANT', type='K', ltyp=8, )
+    MODG_DESC = AsVI(SDNom(nomj='.MODG.DESC'), lonmax=3, )
+    MODG_LIMA = AsColl(SDNom(nomj='.MODG.LIMA'), acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='R', ltyp=8, )
+
+
+
+    def check_dimensions(self,checker) :
+        nb_struc=self.MODG_SSME.nmaxoc
+        nb_liaison=self.MODG_LIDF.nmaxoc
+
+        assert  self.MODG_LIPR.lonmax == 9*nb_liaison
+        assert  self.MODG_LIMA.nmaxoc == 3*nb_liaison
+        assert  self.MODG_LIMA.nutioc == 3*nb_liaison
+
+        assert  self.MODG_SSNO.nomuti == nb_struc
+        assert  self.MODG_SSNO.nommax == nb_struc
+        assert  self.MODG_SSOR.nmaxoc == nb_struc
+        assert  self.MODG_SSOR.nutioc == nb_struc
+        assert  self.MODG_SSTR.nmaxoc == nb_struc
+        assert  self.MODG_SSTR.nutioc == nb_struc
+
+
+    def check_SSME(self,checker) :
+        nb_struc=self.MODG_SSME.nmaxoc
+        ssme=self.MODG_SSME.get()
+        for k in range(nb_struc) :
+            sd2=sd_macr_elem_dyna(ssme[k+1][0].strip()); sd2.check
+
+
+    def check_DESC(self,checker) :
+        desc=self.MODG_DESC.get()
+        nomgd=sdu_nom_gd(desc[2])
+        assert nomgd == 'DEPL_R', (nomgd, desc)
+        assert desc[0] > 2    and desc[0] < 15    , desc
+        assert desc[1] > 2*30 and desc[1] < 15*30 , desc
+
+
+    def check_SSOR(self,checker) :
+        nb_struc=self.MODG_SSME.nmaxoc
+        ssor=self.MODG_SSOR.get()
+        for k in range(nb_struc) :
+            assert len(ssor[k+1]) == 3 , ssor
+
+
+    def check_SSTR(self,checker) :
+        nb_struc=self.MODG_SSME.nmaxoc
+        sstr=self.MODG_SSTR.get()
+        for k in range(nb_struc) :
+            assert len(sstr[k+1]) == 3 , sstr
+
+
+    def check_LIDF(self,checker) :
+        lidf=self.MODG_LIDF.get()
+        nb_liaison=self.MODG_LIDF.nmaxoc
+        for k in range(nb_liaison) :
+            assert len(lidf[k+1]) == 5 , lidf
+            assert lidf[k+1][4].strip() in ('OUI', 'NON') , lidf
+
+
+    def check_LIPR_LIMA(self,checker) :
+        lipr=self.MODG_LIPR.get()
+        lima=self.MODG_LIMA.get()
+        nb_liaison=self.MODG_LIDF.nmaxoc
+        for k in range(nb_liaison) :
+            mat1_nlig=lipr[9*k+0] ; assert mat1_nlig > 0
+            mat1_ncol=lipr[9*k+1] ; assert mat1_ncol > 0
+            mat1_nume=lipr[9*k+2] ; assert mat1_nume == 3*k +1  , (mat1_nume, k)
+            assert len(lima[3*k+1]) == mat1_nlig*mat1_ncol
+
+            mat2_nlig=lipr[9*k+3] ; assert mat2_nlig > 0
+            mat2_ncol=lipr[9*k+4] ; assert mat2_ncol > 0
+            mat2_nume=lipr[9*k+5] ; assert mat2_nume == 3*k +2  , (mat2_nume, k)
+            assert len(lima[3*k+2]) == mat2_nlig*mat2_ncol
+
+            mat3_nlig=lipr[9*k+6] ; assert mat3_nlig > 0
+            mat3_ncol=lipr[9*k+7] ; assert mat3_ncol > 0
+            mat3_nume=lipr[9*k+8] ; assert mat3_nume == 3*k +3  , (mat3_nume, k)
+            assert len(lima[3*k+3]) == mat3_nlig*mat3_ncol
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_multi_appui.py b/Aster/Cata/cataSTA10/SD/sd_multi_appui.py
new file mode 100644 (file)
index 0000000..0c86986
--- /dev/null
@@ -0,0 +1,30 @@
+#@ MODIF sd_multi_appui SD  DATE 04/04/2007   AUTEUR ABBAS M.ABBAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+from SD import *
+
+class sd_multi_appui(AsBase):
+#------------------------------------  
+    nomj = SDNom(fin=19)
+    
+    FDEP=AsVK8()
+    FVIT=AsVK8()
+    FACC=AsVK8()
+    MULA=AsVI()
+    PSID=AsVR()
diff --git a/Aster/Cata/cataSTA10/SD/sd_nume_ddl.py b/Aster/Cata/cataSTA10/SD/sd_nume_ddl.py
new file mode 100644 (file)
index 0000000..8b454e0
--- /dev/null
@@ -0,0 +1,46 @@
+#@ MODIF sd_nume_ddl SD  DATE 17/07/2007   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from SD.sd_solveur import sd_solveur
+
+from SD.sd_nume_ddl_gene import sd_nume_ddl_gene
+from SD.sd_nume_ddl_gd import sd_nume_ddl_gd
+
+
+#---------------------------------------------------------------------------------
+# classe "chapeau" à sd_nume_ddl_gene et sd_nume_ddl_gd ne servant que pour "check"
+#---------------------------------------------------------------------------------
+
+
+class sd_nume_ddl(AsBase):
+#--------------------------------------------
+    nomj = SDNom(fin=14)
+
+
+    # pour orienter vers sd_nume_ddl_gene ou sd_nume_ddl_gd :
+    def check_nume_ddl_i_GENE(self, checker):
+        gene= aster.jeveux_exists(self.nomj()[:14]+'.NUME.ORIG')
+        if  gene  :
+           sd2=sd_nume_ddl_gene(self.nomj)
+        else :
+           sd2=sd_nume_ddl_gd(self.nomj)
+        sd2.check(checker)
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_nume_ddl_com.py b/Aster/Cata/cataSTA10/SD/sd_nume_ddl_com.py
new file mode 100644 (file)
index 0000000..3dd3aad
--- /dev/null
@@ -0,0 +1,38 @@
+#@ MODIF sd_nume_ddl_com SD  DATE 03/11/2008   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_solveur import sd_solveur
+from SD.sd_stockage import sd_stockage
+
+
+class sd_nume_ddl_com(sd_stockage):
+#----------------------------------
+    nomj = SDNom(fin=14)
+    NSLV = AsVK24(lonmax=1, )
+
+    # indirection vers SOLVEUR :
+    def check_nume_ddl_com_i_NSLV(self, checker):
+        lnom = self.NSLV.get()
+        if not lnom:  return
+        sd2=sd_solveur(lnom[0]); sd2.check(checker)
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_nume_ddl_gd.py b/Aster/Cata/cataSTA10/SD/sd_nume_ddl_gd.py
new file mode 100644 (file)
index 0000000..b0b3ad1
--- /dev/null
@@ -0,0 +1,31 @@
+#@ MODIF sd_nume_ddl_gd SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+from SD.sd_nume_ddl_com import sd_nume_ddl_com
+from SD.sd_nume_equa import sd_nume_equa
+
+
+class sd_nume_ddl_gd(sd_nume_ddl_com):
+#--------------------------------
+    nomj = SDNom(fin=14)
+    nume = sd_nume_equa(SDNom(nomj='.NUME'))
+    FETN = Facultatif(AsVK24())
diff --git a/Aster/Cata/cataSTA10/SD/sd_nume_ddl_gene.py b/Aster/Cata/cataSTA10/SD/sd_nume_ddl_gene.py
new file mode 100644 (file)
index 0000000..88ed512
--- /dev/null
@@ -0,0 +1,33 @@
+#@ MODIF sd_nume_ddl_gene SD  DATE 03/11/2008   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_nume_ddl_com import sd_nume_ddl_com
+from SD.sd_nume_eqge import sd_nume_eqge
+
+
+class sd_nume_ddl_gene(sd_nume_ddl_com):
+#---------------------------------------
+    nomj = SDNom(fin=14)
+    nume = Facultatif(sd_nume_eqge(SDNom(nomj='.NUME'))) # n'existe pas toujours : CALC_MATR_AJOU/fdlv106a
+
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_nume_eqge.py b/Aster/Cata/cataSTA10/SD/sd_nume_eqge.py
new file mode 100644 (file)
index 0000000..a9d5db9
--- /dev/null
@@ -0,0 +1,31 @@
+#@ MODIF sd_nume_eqge SD  DATE 11/02/2008   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_prof_vgen import sd_prof_vgen
+class sd_nume_eqge(sd_prof_vgen):
+    nomj = SDNom(fin=19)
+    REFN = AsVK24(SDNom(debut=19), lonmax=4, )
+    DESC = AsVI(SDNom(debut=19), lonmax=1, )
+    NEQU = AsVI(SDNom(debut=19), lonmax=1, )
+    ORIG = AsColl(SDNom(debut=19), acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_nume_equa.py b/Aster/Cata/cataSTA10/SD/sd_nume_equa.py
new file mode 100644 (file)
index 0000000..e3656f5
--- /dev/null
@@ -0,0 +1,30 @@
+#@ MODIF sd_nume_equa SD  DATE 03/11/2008   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_prof_chno import sd_prof_chno
+class sd_nume_equa(sd_prof_chno):
+    nomj = SDNom(fin=19)
+    NEQU = AsVI(lonmax=2,)
+    DELG = AsVI( )
+    REFN = AsVK24(lonmax=4,)
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_para_sensi.py b/Aster/Cata/cataSTA10/SD/sd_para_sensi.py
new file mode 100644 (file)
index 0000000..cf649d8
--- /dev/null
@@ -0,0 +1,27 @@
+#@ MODIF sd_para_sensi SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+from SD.sd_fonction import sd_fonction
+class sd_para_sensi(sd_fonction):
+    nomj = SDNom(fin=19)
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_partition.py b/Aster/Cata/cataSTA10/SD/sd_partition.py
new file mode 100644 (file)
index 0000000..2bccd8d
--- /dev/null
@@ -0,0 +1,26 @@
+#@ MODIF sd_partition SD  DATE 16/06/2009   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+class sd_partition(AsBase):
+    nomj = SDNom(fin=8)
+    NUPROC_MAILLE = AsVI(SDNom(nomj='.NUPROC.MAILLE'))
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_prof_chno.py b/Aster/Cata/cataSTA10/SD/sd_prof_chno.py
new file mode 100644 (file)
index 0000000..fd7380a
--- /dev/null
@@ -0,0 +1,30 @@
+#@ MODIF sd_prof_chno SD  DATE 03/11/2008   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+class sd_prof_chno(AsBase):
+    nomj = SDNom(fin=19)
+    PRNO = AsColl( acces='NU', stockage='CONTIG', modelong=Parmi('CONSTANT', 'VARIABLE'), type='I', )
+    LILI = AsObject( genr='N', xous='S', type='K', ltyp=24, )
+    NUEQ = AsVI( )
+    DEEQ = AsVI( )
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_prof_vgen.py b/Aster/Cata/cataSTA10/SD/sd_prof_vgen.py
new file mode 100644 (file)
index 0000000..17ad678
--- /dev/null
@@ -0,0 +1,31 @@
+#@ MODIF sd_prof_vgen SD  DATE 21/02/2008   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+class sd_prof_vgen(AsBase):
+    nomj = SDNom(fin=19)
+    PRNO = AsColl(SDNom(debut=19), acces='NU', stockage='DISPERSE', modelong='VARIABLE', type='I', )
+    LILI = AsObject(SDNom(debut=19), genr='N', xous='S', type='K', ltyp=8, )
+    NUEQ = AsVI(SDNom(debut=19), )
+    DEEQ = AsVI(SDNom(debut=19), )
+    DELG = AsVI(SDNom(debut=19), )
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_proj_mesu.py b/Aster/Cata/cataSTA10/SD/sd_proj_mesu.py
new file mode 100644 (file)
index 0000000..eb8e744
--- /dev/null
@@ -0,0 +1,87 @@
+#@ MODIF sd_proj_mesu SD  DATE 15/01/2008   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from sd_modele  import sd_modele
+
+
+
+class sd_proj_mesu(AsBase):
+#-------------------------------------
+    nomj = SDNom(fin=18)
+    PJMNO = AsVI()
+    PJMRG = AsVK8()
+    PJMBP = AsVR()
+    PJMRF = AsVK16(lonmax=5)
+
+    # si PROJ_MESU_MODAL :
+    PJMOR = Facultatif(AsVR())
+
+    # si MACR_ELEM_STAT :
+    PJMIG    = Facultatif(AsVR())
+    PJMMM    = Facultatif(AsObject(genr='V',type=Parmi('C', 'R')))
+
+
+    def exists(self):
+    #  retourne .true. si la SD semble exister
+        return self.PJMNO.exists
+
+
+    def check_1(self, checker):
+    #------------------------------------
+        if not self.exists() : return
+
+        nbutil=self.PJMNO.lonuti
+        assert nbutil > 0 , nbutil
+
+        # vérifications communes :
+        assert self.PJMRG.lonmax >= nbutil
+        n1=self.PJMBP.lonmax
+        nbmode=n1/nbutil
+        assert n1==nbutil*nbmode , (nbmode,nbutil,n1)
+        assert self.PJMRF.exists
+        pjmrf=self.PJMRF.get_stripped()
+        sd2=sd_modele(pjmrf[0]) ; sd2.check(checker)
+        assert pjmrf[1] != '' , pjmrf
+        assert pjmrf[2] != '' , pjmrf
+
+        # quel cas de figure : PROJ_MESU_MODAL ou MACR_ELEM_STAT ?
+        lproj=self.PJMOR.exists
+
+        # si PROJ_MESU_MODAL :
+        if lproj :
+            nbcapt=nbutil
+            assert self.PJMOR.lonmax >= 3*nbcapt
+            assert not self.PJMIG.exists
+            assert pjmrf[3] == '' , pjmrf
+            assert pjmrf[4] == '' , pjmrf
+
+        # si MACR_ELEM_STAT :
+        else :
+            nbddle=nbutil
+            assert self.PJMIG.exists
+            assert self.PJMMM.exists
+            n1=self.PJMIG.lonmax
+            nbmoid=n1/nbddle
+            assert n1==nbddle*nbmoid , (nbmodi,nbddle,n1)
+
+            assert pjmrf[3] != '' , pjmrf
+            sd2=sd_proj_mesu(pjmrf[4]) ; sd2.check(checker)
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_proj_modal.py b/Aster/Cata/cataSTA10/SD/sd_proj_modal.py
new file mode 100644 (file)
index 0000000..58889bb
--- /dev/null
@@ -0,0 +1,39 @@
+#@ MODIF sd_proj_modal SD  DATE 04/04/2007   AUTEUR ABBAS M.ABBAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+from SD import *
+
+class sd_proj_modal(AsBase):
+#------------------------------------
+    nomj = SDNom(fin=19)
+    
+    MASG=AsVR()
+    
+    AGEM=AsVR()
+    AGEP=AsVR()
+    VGEM=AsVR()
+    VGEP=AsVR()
+    DGEM=AsVR()
+    DGEP=AsVR()
+    RIGG=AsVR()
+    AMOG=AsVR()
+    BASM=AsVR()
+    FONG=Facultatif(AsVK24())
+    FORG=Facultatif(AsVR())
+    
diff --git a/Aster/Cata/cataSTA10/SD/sd_reperage_1d.py b/Aster/Cata/cataSTA10/SD/sd_reperage_1d.py
new file mode 100644 (file)
index 0000000..85e558a
--- /dev/null
@@ -0,0 +1,37 @@
+#@ MODIF sd_reperage_1d SD  DATE 30/06/2009   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+class sd_reperage_1d(AsBase):
+    nomj = SDNom(fin=19)
+    TYPE = AsVI(SDNom(debut=19), )
+    EXTR = AsVR(SDNom(debut=19), )
+    ORIG = AsVR(SDNom(debut=19), )
+    def check_1(self,checker):
+      type=self.TYPE.get()
+      extr=self.EXTR.get()
+      orig=self.ORIG.get()
+      assert len(extr) == len(orig)
+      assert len(extr) == len(type)
+      for k in range(len(type)):
+         assert  (type[k] <= 3) and (type[k] >= 1)
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_reperage_omega.py b/Aster/Cata/cataSTA10/SD/sd_reperage_omega.py
new file mode 100644 (file)
index 0000000..70be931
--- /dev/null
@@ -0,0 +1,35 @@
+#@ MODIF sd_reperage_omega SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+class sd_reperage_omega(AsBase):
+    nomj = SDNom(fin=13)
+    CREFF_EXTR = AsVR(SDNom(nomj='.CREFF.EXTR', debut=13), )
+    FACE__ORIG = AsVI(SDNom(nomj='.FACE .ORIG', debut=13), )
+    CREFF_ORIG = AsVR(SDNom(nomj='.CREFF.ORIG', debut=13), )
+    ARETE_EXTR = AsVI(SDNom(nomj='.ARETE.EXTR', debut=13), )
+    FACE__EXTR = AsVI(SDNom(nomj='.FACE .EXTR', debut=13), )
+    MAIL = AsColl(SDNom(debut=13), acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I', )
+    CREFM_ORIG = AsVR(SDNom(nomj='.CREFM.ORIG', debut=13), )
+    CREFM_EXTR = AsVR(SDNom(nomj='.CREFM.EXTR', debut=13), )
+    ARETE_ORIG = AsVI(SDNom(nomj='.ARETE.ORIG', debut=13), )
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_resuelem.py b/Aster/Cata/cataSTA10/SD/sd_resuelem.py
new file mode 100644 (file)
index 0000000..f2e3bd7
--- /dev/null
@@ -0,0 +1,52 @@
+#@ MODIF sd_resuelem SD  DATE 06/05/2008   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_ligrel import sd_ligrel
+
+
+class sd_resuelem(AsBase):
+    nomj = SDNom(fin=19)
+    NOLI = AsVK24(lonmax=4, )
+    DESC = AsVI(docu='RESL', )
+    RESL = AsColl(acces='NU', stockage='DISPERSE', modelong='VARIABLE', type=Parmi('C', 'R'))
+    RSVI = Facultatif(AsColl(acces='NU', stockage='CONTIG', modelong='VARIABLE', type='I'))
+
+    def exists(self):
+        # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+        return self.NOLI.exists
+
+    def check_1(self, checker):
+        if not self.exists() : return
+        noli = self.NOLI.get_stripped()
+        sd2=sd_ligrel(noli[0]) ; sd2.check(checker)
+        assert noli[1] != '' , noli
+        assert noli[2] in ('MPI_COMPLET','MPI_INCOMPLET') , noli
+        assert noli[3] in ('','VOISIN_VF') , noli
+        if noli[3]=='VOISIN_VF' : assert self.RSVI.exists
+
+        desc = self.DESC.get()
+        assert desc[0] > 0 and desc[0] < 1000 , desc
+        nbgr=desc[1]
+        assert nbgr > 0  , desc
+        assert len(desc)==nbgr+2, desc
+        assert self.RESL.nmaxoc == nbgr, desc
+        for k in desc :
+            assert k >= 0, desc
diff --git a/Aster/Cata/cataSTA10/SD/sd_resultat.py b/Aster/Cata/cataSTA10/SD/sd_resultat.py
new file mode 100644 (file)
index 0000000..922c9a5
--- /dev/null
@@ -0,0 +1,179 @@
+#@ MODIF sd_resultat SD  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_titre import sd_titre
+
+from SD.sd_l_table import sd_l_table
+from SD.sd_champ import sd_champ
+from SD.sd_l_charges import sd_l_charges
+from SD.sd_util import *
+
+
+class sd_resultat(sd_titre):
+#---------------------------------------
+    nomj = SDNom(fin=8)
+    TAVA = AsColl(SDNom(debut=19), acces='NU', stockage='CONTIG', modelong='CONSTANT', type='K', ltyp=8, )
+    NOVA = AsObject(SDNom(debut=19), genr='N', xous='S', type='K', ltyp=16, )
+    TACH = AsColl(SDNom(debut=19), acces='NU', stockage='CONTIG', modelong='CONSTANT', type='K', ltyp=24, )
+    ORDR = AsVI(SDNom(debut=19), )
+    DESC = AsObject(SDNom(debut=19), genr='N', xous='S', type='K', ltyp=16, )
+
+    # la déclaration suivante simplifie la fonction check_resultat_i_char
+    CHAR = Facultatif(AsVK24(SDNom(debut=19),))
+
+    sd_l_table = Facultatif(sd_l_table(SDNom(nomj='')))
+
+
+    # existence de la SD :
+    def exists(self):
+        return self.ORDR.exists
+
+
+    # indirection vers les champs de .TACH :
+    def check_resultat_i_TACH(self, checker):
+        tach = self.TACH.get()
+        for nosym in tach.keys():
+            for nom in tach[nosym] :
+                if not nom.strip(): continue
+                sd2 = sd_champ(nom)
+                sd2.check(checker)
+
+
+    # indirection vers les objets de .TAVA :
+    def check_resultat_i_TAVA(self, checker):
+        tava = self.TAVA.get()
+        S1=set()
+        for knova in tava.keys():
+            suffix=tava[knova][0][:5]
+            if not suffix.strip(): continue       # JP : est-ce possible ?
+            S1.add(suffix)
+        for suffix in S1 :
+            nom=self.nomj()[:19]+suffix
+            sd2 = AsObject(SDNom(nomj=nom,debut=0), xous='S', genr='V', type=Parmi('I','R','C','K'),
+                           ltyp=Parmi(4,8,16,24),) ; sd2.check(checker)
+
+
+    # indirection vers les sd_l_charges stockées comme paramètres sous le nom EXCIT :
+    def check_resultat_i_EXCIT(self, checker):
+        lnom = self.CHAR.get()
+        if not lnom: return
+        S1=set()
+        for nom in lnom:
+            if not nom.strip(): continue
+            S1.add(nom)
+        for nom in S1 :
+            sd2 = sd_l_charges(nomj=nom); sd2.check(checker)
+
+
+    # vérification de .ORDR :
+    def check_ORDR(self, checker):
+        V = self.ORDR
+        nuti=V.lonuti
+        nmax=V.lonmax
+        sdu_compare(V, checker, nuti, '> ', 0   , comment='nuti > 0')
+        sdu_compare(V, checker, nuti, '<=', nmax, comment='nuti <= nmax')
+
+        # les numeros d'ordre doivent etre tous différents :
+        sdu_tous_differents(V,checker,V.get()[:nuti],'1:NUTI')
+
+
+    # vérification des longueurs des différents objets :
+    def check_LONGUEURS(self, checker):
+        ordr = self.ORDR.get()
+        tach = self.TACH.get()
+        nova = self.NOVA.get()
+        tava = self.TAVA.get()
+        desc = self.DESC.get()
+
+        nbmax_ordr=len(ordr)   # la SD est concue pour stocker jusqu'à nbmax_ordr nume_ordre
+        nbmax_para=len(nova)   # la SD est concue pour stocker jusqu'à nbmax_para paramètres
+        nbmax_nosym=len(desc)  # la SD est concue pour stocker jusqu'à nbmax_nosym nom_cham
+
+        sdu_compare(self.TACH,checker,len(tach),'==',nbmax_nosym,'Incohérence TACH/DESC')
+        sdu_compare(self.TAVA,checker,len(tava),'==',nbmax_para, 'Incohérence TAVA/NOVA')
+
+        # .TACH
+        for ksym in tach.keys():
+            nosym=desc[ksym-1].strip()
+            sdu_compare(self.TACH,checker,len(tach[ksym]),'==',nbmax_ordr,nosym+' LONMAX(.TACH) != LONMAX(.ORDR)')
+
+
+        # objets trouvés dans .TAVA
+        for knova in tava.keys():
+            sdu_compare(tava,checker,len(tava[knova]),'==',4,'LONMAX(TAVA[ksym]==4')
+            suffix=tava[knova][0][:5]
+            npara=int(tava[knova][2])
+            if not suffix.strip(): continue
+            nom=self.nomj()[:19]+suffix
+            sd2 = AsObject(SDNom(nomj=nom,debut=0), xous='S', genr='V', type=Parmi('I','R','C','K'),
+                           ltyp=Parmi(4,8,16,24),)
+            sdu_compare(sd2,checker,len(sd2.get()),'==',npara*nbmax_ordr,'Incohérence LONMAX / LONMAX(.ORDR)')
+
+
+    # vérifications supplémentaires :
+    def check_veri1(self, checker):
+        ordr = self.ORDR.get()
+        nova = self.NOVA.get()
+        tava = self.TAVA.get()
+
+        nbmax_ordr=len(ordr)        # la SD est concue pour stocker jusqu'à nbmax_ordr nume_ordre
+        nbuti_ordr=self.ORDR.lonuti # la SD contient réellement nbuti_ordr nume_ordre
+
+
+        # objets trouvés dans .TAVA
+        for knova in tava.keys():
+            nova1=nova[knova-1].strip()
+            suffix=tava[knova][0][:5]
+            if not suffix.strip(): continue
+
+            nupara=int(tava[knova][1])
+            nbpara=int(tava[knova][2])
+            assert nupara <= nbpara, (nupara, nbpara)
+            acces=tava[knova][3].strip()
+            assert acces in ('PARA','ACCES') , acces
+
+            # on vérifie que les variables d'accès sont toutes différentes :
+            if acces == 'ACCES' :
+                # pour l'instant, on ne vérifie que 'INST' car 'FREQ', 'NUME_MODE', 'NOEUD_CMP' ne semblent pas tous différents ...
+                if nova1 != 'INST' : continue
+
+                nom=self.nomj()[:19]+suffix
+                sd2 = AsObject(SDNom(nomj=nom,debut=0),)
+                vect=sd2.get()
+                seq=[]
+                for k in range(nbuti_ordr) :
+                    seq.append(vect[k*nbpara+nupara-1])
+
+                sdu_tous_differents(sd2,checker,seq,nova1)
+
+            # on vérifie les éventuelles sd_l_charge (EXCIT) :
+            if nova1=="EXCIT" :
+                nom=self.nomj()[:19]+suffix
+                sd2 = AsObject(SDNom(nomj=nom,debut=0),)
+                vect=sd2.get()
+                S1=set()
+                for k in range(nbuti_ordr) :
+                    S1.add(vect[k*nbpara+nupara-1])
+                for nom in S1 :
+                    if nom.strip() != '' :
+                       sd2 = sd_l_charges(nomj=nom); sd2.check(checker)
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_resultat_dyn.py b/Aster/Cata/cataSTA10/SD/sd_resultat_dyn.py
new file mode 100644 (file)
index 0000000..40a507d
--- /dev/null
@@ -0,0 +1,50 @@
+#@ MODIF sd_resultat_dyn SD  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_resultat import sd_resultat
+from SD.sd_nume_ddl import sd_nume_ddl
+from SD.sd_matr_asse import sd_matr_asse
+from SD.sd_interf_dyna_clas import sd_interf_dyna_clas
+from SD.sd_proj_mesu import sd_proj_mesu
+
+
+class sd_resultat_dyn(sd_resultat):
+#--------------------------------------------------
+    nomj = SDNom(fin=8)
+    REFD = AsVK24(SDNom(debut=19), lonmax=7, )
+
+    # si utilisation de PROJ_MESU_MODAL :
+    PROJM = Facultatif(sd_proj_mesu())
+
+
+    # indirection vers les SD de .REFD :
+    def check_resultat_dyn_i_REFD(self, checker):
+        refd = self.REFD.get_stripped()
+        if not refd : return
+        for k in 0,1,2 :
+            if refd[k] :
+                sd2 = sd_matr_asse(refd[0]); sd2.check(checker)
+        if refd[3] :
+            sd2 = sd_nume_ddl(refd[3]); sd2.check(checker)
+        if refd[4] :
+            sd2 = sd_interf_dyna_clas(refd[4]); sd2.check(checker)
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_sddyna.py b/Aster/Cata/cataSTA10/SD/sd_sddyna.py
new file mode 100644 (file)
index 0000000..6cdcc86
--- /dev/null
@@ -0,0 +1,33 @@
+#@ MODIF sd_sddyna SD  DATE 04/04/2007   AUTEUR ABBAS M.ABBAS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+from SD import *
+
+class sd_sddyna(AsBase):
+#------------------------------------
+    nomj = SDNom(fin=15)
+
+    TYPE_SCH=AsVK16(SDNom(nomj='.TYPE_SCH'),lonmax=8)
+    PARA_SCH=Facultatif(AsVR(  SDNom(nomj='.PARA_SCH'),lonmax=4))
+    INI_CONT=Facultatif(AsVR(  SDNom(nomj='.INI_CONT'),lonmax=4))
+    NOM_SD  =Facultatif(AsVK24(SDNom(nomj='.NOM_SD'  ),lonmax=3))
+    TYPE_FOR=Facultatif(AsVI(  SDNom(nomj='.TYPE_FOR'),lonmax=2))
+    COEF_SCH=Facultatif(AsVR(  SDNom(nomj='.COEF_SCH'),lonmax=4))
+    INFO_SD =Facultatif(AsVL(  SDNom(nomj='.INFO_SD' ),lonmax=5))
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_solveur.py b/Aster/Cata/cataSTA10/SD/sd_solveur.py
new file mode 100644 (file)
index 0000000..3d73281
--- /dev/null
@@ -0,0 +1,43 @@
+#@ MODIF sd_solveur SD  DATE 05/10/2009   AUTEUR BOITEAU O.BOITEAU 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+class sd_solveur(AsBase):
+    nomj = SDNom(fin=19)
+    SLVK = AsVK24(SDNom(debut=19), lonmax=11, )
+    SLVR = AsVR(SDNom(debut=19), lonmax=4, )
+    SLVI = AsVI(SDNom(debut=19), lonmax=7, )
+
+
+    def check_SLVK(self,checker):
+    #---------------------------------------------
+        slvk = self.SLVK.get_stripped()
+        method=slvk[0]
+        if method == 'MUMPS' :
+            assert slvk[1] in ('AUTO', 'SANS'), slvk
+            assert slvk[2] in ('NONSYM', 'SYMGEN', 'SYMDEF', 'AUTO'), slvk
+            assert slvk[3] in ('AMD','AMF','PORD','METIS','QAMD','AUTO'), slvk
+            assert slvk[4] in ('OUI', 'NON'), slvk
+            assert slvk[5] in ('OUI', 'NON'), slvk
+        else :
+            pass
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_spectre.py b/Aster/Cata/cataSTA10/SD/sd_spectre.py
new file mode 100644 (file)
index 0000000..cbb128f
--- /dev/null
@@ -0,0 +1,198 @@
+#@ MODIF sd_spectre SD  DATE 19/06/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_titre import sd_titre
+from SD.sd_modele import sd_modele
+from SD.sd_cara_elem import sd_cara_elem
+from SD.sd_fonction import sd_fonction
+
+
+types_possibles=[  # liste des divers types de spectres :
+        'SPEC_LONG_COR_1',
+        'SPEC_LONG_COR_2',
+        'SPEC_LONG_COR_3',
+        'SPEC_LONG_COR_4',
+        'SPEC_CORR_CONV_1',
+        'SPEC_CORR_CONV_2',
+        'SPEC_FONC_FORME',
+        'SPEC_EXCI_POINT',]
+
+class sd_spectre(sd_titre):
+#------------------------------------
+    nomj = SDNom(fin=19)
+
+    VAIN = AsVI()
+    VATE = AsVK16()
+
+    VARE = Facultatif(AsVR())
+    VAVF = Facultatif(AsVK8(lonmax=1))
+    NNOE = Facultatif(AsVK8())
+
+
+    def u_type(self) :
+        vate=self.VATE.get()
+        type=vate[0].strip()
+        assert type  in  types_possibles
+        return type
+
+
+    def u_nbno(self) :
+        vain=self.VAIN.get()
+        intesp =vain[1]
+        nbno   =vain[2]
+        return (intesp,nbno)
+
+
+    def check_VAIN(self,checker):
+    #-------------------------------
+        vain=self.VAIN.get()
+        itype=vain[0]
+        assert itype in (1,2,3,4,11,21) , vain
+
+        type = self.u_type()
+        if itype==1 : assert type in ('SPEC_LONG_COR_1', 'SPEC_CORR_CONV_1')  ,vain
+        if itype==2 : assert type in ('SPEC_LONG_COR_2', 'SPEC_CORR_CONV_2')  ,vain
+        if itype==3 : assert type in ('SPEC_LONG_COR_3',)   ,vain
+        if itype==4 : assert type in ('SPEC_LONG_COR_4',)   ,vain
+        if itype==11 : assert type in ('SPEC_FONC_FORME',)  ,vain
+        if itype==21 : assert type in ('SPEC_EXCI_POINT',)  ,vain
+
+        if type in ('SPEC_EXCI_POINT','SPEC_FONC_FORME') :
+            assert len(vain)==3, vain
+            assert vain[1] in (0,1) ,vain
+            assert vain[2] >=0 ,vain
+        else :
+            assert len(vain)==1, vain
+
+
+
+    def check_VARE(self,checker):
+    #-------------------------------
+        vare=self.VARE.get()
+        type = self.u_type()
+
+        if type == 'SPEC_FONC_FORME' :
+            assert not vare
+            return
+
+        elif type == 'SPEC_EXCI_POINT' :
+            intesp, nbno= self.u_nbno()
+            if intesp==0 :
+                assert len(vare)==nbno, vare
+            else :
+                assert len(vare)==1, vare
+
+        else :
+            assert len(vare)==12, vare
+
+
+
+    def check_VATE(self,checker):
+    #-------------------------------
+        vate=self.VATE.get_stripped()
+        type = self.u_type()
+
+        if type == 'SPEC_EXCI_POINT' :
+        #---------------------------------
+            intesp, nbno= self.u_nbno()
+            if intesp==0 :
+                assert len(vate)==4+nbno, vate
+            else :
+                assert len(vate)==5, vate
+            sd2=sd_cara_elem(vate[1]) ; sd2.check()
+            sd2=sd_modele(vate[2]) ; sd2.check()
+            if vate[3]=='GRAPPE_2' :
+                assert vate[4] in ('ASC_CEN','ASC_EXC','DES_CEN','DES_EXC')
+            else :
+                for x in vate[4:] :
+                    assert x in ('FORCE','MOMENT')
+
+        elif type == 'SPEC_FONC_FORME' :
+        #---------------------------------
+            intesp, nbno= self.u_nbno()
+            if intesp==0 :
+                nbfonc=len(vate)-4
+                assert nbfonc>0, vate
+            else :
+                assert len(vate)==5, vate
+            sd2=sd_cara_elem(vate[1]) ; sd2.check()
+            sd2=sd_modele(vate[2]) ; sd2.check()
+            if vate[3]=='GRAPPE_1' :
+                assert vate[4] in ('DEBIT_180','DEBIT_300')
+            else :
+                for x in vate[4:] :
+                    sd2=sd_fonction(x) ; sd2.check()
+
+        elif type == 'SPEC_LONG_COR_1' :
+        #---------------------------------
+            sd2=sd_fonction(vate[2]) ; sd2.check()
+            assert vate[3] == 'VISC_CINE'
+
+        elif type == 'SPEC_LONG_COR_2' :
+        #---------------------------------
+            sd2=sd_fonction(vate[2]) ; sd2.check()
+            assert vate[5] == 'BETA'
+
+        elif type == 'SPEC_LONG_COR_3' :
+        #---------------------------------
+            sd2=sd_fonction(vate[2]) ; sd2.check()
+            assert vate[7] == 'BETA_2'
+
+        elif type == 'SPEC_LONG_COR_4' :
+        #---------------------------------
+            sd2=sd_fonction(vate[2]) ; sd2.check()
+            assert vate[5] == 'GAMMA'
+
+        elif type == 'SPEC_CORR_CONV_1' :
+        #---------------------------------
+            assert vate[9] == 'COEF_VITE_FLUI_O'
+            assert vate[10] in ('GENERALE', 'CORCOS', 'AU_YANG')
+
+        elif type == 'SPEC_CORR_CONV_2' :
+        #---------------------------------
+            sd2=sd_fonction(vate[1]) ; sd2.check()
+            assert vate[4] in ('GENERALE', 'CORCOS', 'AU_YANG')
+            assert vate[6] == 'COEF_VITE_FLUI_O'
+
+
+
+    def check_VAVF(self,checker):
+    #-------------------------------
+        vavf=self.VAVF.get_stripped()
+        type = self.u_type()
+
+        if type in ('SPEC_FONC_FORME', 'SPEC_EXCI_POINT') :
+            assert not vavf
+        else :
+            sd2=sd_fonction(vavf[0]) ; sd2.check()
+
+
+
+    def check_NNOE(self,checker):
+    #-------------------------------
+        nnoe=self.NNOE.get()
+        type = self.u_type()
+
+        if type in ('SPEC_FONC_FORME', 'SPEC_EXCI_POINT') :
+            intesp, nbno= self.u_nbno()
+            assert len(nnoe) == nbno
+        else :
+            assert not nnoe
diff --git a/Aster/Cata/cataSTA10/SD/sd_squelette.py b/Aster/Cata/cataSTA10/SD/sd_squelette.py
new file mode 100644 (file)
index 0000000..86e28fd
--- /dev/null
@@ -0,0 +1,61 @@
+#@ MODIF sd_squelette SD  DATE 03/11/2008   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_maillage import sd_maillage
+from SD.sd_util import *
+
+
+class sd_squelette(sd_maillage):
+#-------------------------------
+    nomj = SDNom(fin=8)
+    inv_skeleton = Facultatif(AsVI(SDNom(nomj='.INV.SKELETON'),))
+
+    CORRES       = Facultatif(AsVI())
+    NOMSST       = Facultatif(AsVK8(SDNom(debut=17),))
+
+    # ENSEMBLE__ : TRANS , ANGL_NAUT
+    TRANS        = Facultatif(AsVK8(lonmax=3))
+    ANGL_NAUT    = Facultatif(AsVK8(lonmax=3))
+
+
+    def check_SKELETON(self,checker):
+        if not self.inv_skeleton.exists : return
+        skeleton=self.inv_skeleton.get()
+        dime=self.DIME.get()
+        nbno=dime[0]
+        assert len(skeleton)==2*nbno, (dime,len(skeleton))
+        for k in skeleton :
+            assert k > 0 , skeleton
+
+
+    def check_TRANS_ANGL_NAUT(self,checker):
+        trans     =self.TRANS.get()
+        angl_naut =self.ANGL_NAUT.get()
+        assert (trans and angl_naut) or ((not trans) and (not angl_naut))
+
+
+    def check_CORRES(self,checker):
+        if not self.CORRES.exists : return
+        dime=self.DIME.get()
+        corres=self.CORRES.get()
+        sdu_tous_differents(self.CORRES,checker)
+        assert len(corres) == dime[0], (dime, len(corres))
diff --git a/Aster/Cata/cataSTA10/SD/sd_stoc_lciel.py b/Aster/Cata/cataSTA10/SD/sd_stoc_lciel.py
new file mode 100644 (file)
index 0000000..6407ce3
--- /dev/null
@@ -0,0 +1,31 @@
+#@ MODIF sd_stoc_lciel SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+class sd_stoc_lciel(AsBase):
+    nomj = SDNom(fin=19)
+    SCDI = AsVI()
+    SCBL = AsVI()
+    SCHC = AsVI()
+    SCIB = AsVI()
+    SCDE = AsVI(lonmax=6)
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_stoc_mltf.py b/Aster/Cata/cataSTA10/SD/sd_stoc_mltf.py
new file mode 100644 (file)
index 0000000..9221f7d
--- /dev/null
@@ -0,0 +1,44 @@
+#@ MODIF sd_stoc_mltf SD  DATE 08/06/2009   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+class sd_stoc_mltf(AsBase):
+    nomj = SDNom(fin=19)
+    ADNT = AsVI()
+    ADPI = AsVI()
+    ADRE = AsVI()
+    ANCI = AsVI()
+    DECA = AsVI()
+    DESC = AsVI(lonmax=5,)
+    FILS = AsVI()
+    FRER = AsVI()
+    GLOB = AsVS()
+    LFRN = AsVI()
+    LGBL = AsVI()
+    LGSN = AsVI()
+    LOCL = AsVS()
+    NBAS = AsVI()
+    NBLI = AsVI()
+    NCBL = AsVI()
+    NOUV = AsVI()
+    RENU = AsVK8(lonmax=1,)
+    SEQU = AsVI()
+    SUPN = AsVI()
diff --git a/Aster/Cata/cataSTA10/SD/sd_stoc_morse.py b/Aster/Cata/cataSTA10/SD/sd_stoc_morse.py
new file mode 100644 (file)
index 0000000..1e803df
--- /dev/null
@@ -0,0 +1,29 @@
+#@ MODIF sd_stoc_morse SD  DATE 29/03/2010   AUTEUR BOITEAU O.BOITEAU 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+class sd_stoc_morse(AsBase):
+    nomj = SDNom(fin=19)
+    SMDE = AsVI(lonmax=6)
+    SMHC = AsVS()
+    SMDI = AsVI()
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_stockage.py b/Aster/Cata/cataSTA10/SD/sd_stockage.py
new file mode 100644 (file)
index 0000000..5700bee
--- /dev/null
@@ -0,0 +1,33 @@
+#@ MODIF sd_stockage SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+from SD.sd_stoc_mltf import sd_stoc_mltf
+from SD.sd_stoc_morse import sd_stoc_morse
+from SD.sd_stoc_lciel import sd_stoc_lciel
+
+class sd_stockage(AsBase):
+    nomj = SDNom(fin=14)
+    slcs = Facultatif(sd_stoc_lciel(SDNom(nomj='.SLCS')))
+    mltf = Facultatif(sd_stoc_mltf(SDNom(nomj='.MLTF')))
+    smos = sd_stoc_morse(SDNom(nomj='.SMOS'))
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_surface.py b/Aster/Cata/cataSTA10/SD/sd_surface.py
new file mode 100644 (file)
index 0000000..796bfab
--- /dev/null
@@ -0,0 +1,38 @@
+#@ MODIF sd_surface SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+from SD.sd_surface_1d import sd_surface_1d
+
+
+class sd_surface(AsBase):
+#-----------------------------
+    nomj = SDNom(fin=8)
+    NSDS = AsVK24(lonmax=1, )
+    NOMA = AsVK8(lonmax=1, )
+
+
+    # indirection vers sd_surface_1d :
+    def check_surface_i_NSDS(self, checker):
+        lnom = self.NSDS.get()
+        #if not lnom:  return
+        sd2=sd_surface_1d(lnom[0]); sd2.check(checker)
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_surface_1d.py b/Aster/Cata/cataSTA10/SD/sd_surface_1d.py
new file mode 100644 (file)
index 0000000..b4c7ec0
--- /dev/null
@@ -0,0 +1,36 @@
+#@ MODIF sd_surface_1d SD  DATE 22/10/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_reperage_1d import sd_reperage_1d
+from SD.sd_reperage_omega import sd_reperage_omega
+
+
+class sd_surface_1d(AsBase):
+#--------------------------------
+    nomj = SDNom(fin=13)
+    sgtel      = sd_reperage_1d(SDNom(nomj='.SGTEL'))
+    repom      = sd_reperage_omega(SDNom(nomj=''))
+    CONEX_ORIG = AsVI(SDNom(nomj='.CONEX.ORIG'))
+    CONEX_EXTR = AsVI(SDNom(nomj='.CONEX.EXTR'))
+    DESC       = AsVR(SDNom(debut=13), lonmax=6, )
+
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_table.py b/Aster/Cata/cataSTA10/SD/sd_table.py
new file mode 100644 (file)
index 0000000..59fbdc9
--- /dev/null
@@ -0,0 +1,75 @@
+#@ MODIF sd_table SD  DATE 09/05/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_titre import sd_titre
+
+
+class sd_table(sd_titre):
+#-------------------------------------
+    nomj = SDNom(fin=17)
+    TBNP = AsVI(SDNom(debut=19), lonmax=2, )
+    TBBA = AsVK8(SDNom(debut=19), lonmax=1, )
+    TBLP = AsVK24(SDNom(debut=19), )
+
+
+    def exists(self):
+        # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+        return self.TBNP.exists
+
+    def nb_column(self):
+        # retourne le nombre de colonnes de la table :
+        shape = self.TBNP.get()
+        return shape[0]
+
+    def get_column(self, i):
+        # retourne la colonne de numéro i
+        nom = self.nomj()[:19]+".%04d"%i
+        return Colonne( nom )
+
+    def get_column_name(self, name):
+        # retourne la colonne de nom name
+        shape = self.TBNP.get()
+        desc = self.TBLP.get()
+        for n in range(shape[0]):
+            nom = desc[4*n]
+            nom2= desc[4*n+2]
+            if nom.strip()==name.strip() :
+                return Colonne(nom2)
+        return None
+
+    def check_table_1(self, checker):
+        if not self.exists() : return
+        shape = self.TBNP.get()
+        desc = self.TBLP.get()
+        for n in range(shape[0]):
+            nom = desc[4*n+2]
+            col = Colonne(nom)
+            col.check(checker)
+            data = col.data.get()
+            if data is not None:
+                if col.data.lonuti != shape[1]:
+                    checker.err(self,"Taille inconsitante %d!=%d" %
+                                (col.data.lonuti,shape[1]))
+
+class Colonne(AsBase):
+    nomj = SDNom(debut=0, fin=24)
+    data = OJBVect(SDNom("  ",debut=17,fin=19))
+    mask = OJBVect(SDNom("LG",debut=17,fin=19))
diff --git a/Aster/Cata/cataSTA10/SD/sd_table_container.py b/Aster/Cata/cataSTA10/SD/sd_table_container.py
new file mode 100644 (file)
index 0000000..58a4653
--- /dev/null
@@ -0,0 +1,85 @@
+#@ MODIF sd_table_container SD  DATE 28/07/2009   AUTEUR TORKHANI M.TORKHANI 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+from SD.sd_table import sd_table, Colonne
+from SD.sd_vect_elem import sd_vect_elem
+from SD.sd_matr_elem import sd_matr_elem
+from SD.sd_cham_elem import sd_cham_elem
+from SD.sd_mode_meca import sd_mode_meca
+# --------------------------------------------------------------------
+# sd_table contenant les colonnes nommée "NOM_OBJET","TYPE_OBJET",
+# et "NOM_SD"
+# --------------------------------------------------------------------
+
+
+
+class sd_table_container(sd_table):
+#-------------------------------------
+    nomj = SDNom(fin=19)
+
+    def check_table_container(self, checker):
+
+        # vérification de l'existence de la table     
+        if not self.exists() : 
+           checker.err(self,"La sd_table_container %s ne semble"
+                             +"pas exister" %(nomj))
+
+        # on vérifie la présence des paramètres 
+        # 'NOM_OBJET','TYPE_OBJET','NOM_SD'
+        param=['NOM_OBJET','TYPE_OBJET','NOM_SD']
+        shape = self.TBNP.get()
+        assert shape[0]>2 # la table à au moins 3 paramètres
+        for n in param:
+          col=self.get_column_name(n)
+          if col == None:
+             checker.err(self,"Paramètre %s manquant!" %(n))
+
+          # on vérifie que les colonnes ne sont pas vides 
+          data = col.data.get()
+          if data is not None:
+             if col.data.lonuti != shape[1]:
+                  checker.err(self,"Taille inconsitante %d!=%d" %
+                                (col.data.lonuti,shape[1]))
+
+        
+        # on vérifie le contenu de la colonne NOM_SD
+        col1=self.get_column_name('TYPE_OBJET')
+        col2=self.get_column_name('NOM_SD')
+        nbli=col1.data.lonuti
+        lnom1=col1.data.get_stripped()
+        lnom2=col2.data.get_stripped()
+        for k in range(nbli):
+          if lnom1[k][:9]=='VECT_ELEM':
+             sd5=sd_vect_elem(lnom2[k])
+             sd5.check(checker)
+          elif lnom1[k][:9]=='MATR_ELEM':
+             sd5=sd_matr_elem(lnom2[k])
+             sd5.check(checker)
+          elif lnom1[k][:9]=='CHAM_ELEM':
+             sd5=sd_cham_elem(lnom2[k])
+             sd5.check(checker)
+          elif lnom1[k][:11]=='MODE_MECA':
+             sd5=sd_mode_meca(lnom2[k])
+             sd5.check(checker)
+          else:
+             assert 0,lnom1[k]
+             
diff --git a/Aster/Cata/cataSTA10/SD/sd_table_fonction.py b/Aster/Cata/cataSTA10/SD/sd_table_fonction.py
new file mode 100644 (file)
index 0000000..37e64e6
--- /dev/null
@@ -0,0 +1,50 @@
+#@ MODIF sd_table_fonction SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+from SD.sd_table import sd_table, Colonne
+from SD.sd_fonction import sd_fonction
+
+# --------------------------------------------------------------------
+# sd_table dont une colonne nommée "FONCTION[_C]" contient des fonctions
+# --------------------------------------------------------------------
+
+
+
+class sd_table_fonction(sd_table):
+#-------------------------------------
+    nomj = SDNom(fin=17)
+
+
+    def check_table_fonction_i_COL_FONC(self, checker):
+        shape = self.TBNP.get()
+        if shape is None: return
+        desc = self.TBLP.get()
+        for n in range(shape[0]):
+            nomcol=desc[4*n].strip()
+            if not (nomcol == 'FONCTION' or nomcol == 'FONCTION_C') : continue
+            nom = desc[4*n+2]
+            col = Colonne(nom)
+            lnom = col.data.get()
+            if not lnom : return
+            for nom1 in lnom :
+                if not nom1.strip() : continue
+                sd2=sd_fonction(nom1) ; sd2.check(checker)
diff --git a/Aster/Cata/cataSTA10/SD/sd_titre.py b/Aster/Cata/cataSTA10/SD/sd_titre.py
new file mode 100644 (file)
index 0000000..791f9c1
--- /dev/null
@@ -0,0 +1,27 @@
+#@ MODIF sd_titre SD  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from SD import *
+
+# -----------------------------------------------------------------------------
+# Description de la structure de données
+class sd_titre(AsBase):
+    TITR = AsVK80(SDNom(debut=19), optional=True)
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_tran_gene.py b/Aster/Cata/cataSTA10/SD/sd_tran_gene.py
new file mode 100644 (file)
index 0000000..92662dd
--- /dev/null
@@ -0,0 +1,151 @@
+#@ MODIF sd_tran_gene SD  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_titre import sd_titre
+from SD.sd_nume_ddl_gene import sd_nume_ddl_gene
+from SD.sd_matr_asse_gene import sd_matr_asse_gene
+from SD.sd_proj_mesu import sd_proj_mesu
+from SD.sd_util import *
+
+
+class sd_tran_gene(sd_titre) :
+#--------------------------------------
+    nomj = SDNom(fin=19)
+
+    # objets commencant en 19 :
+    ACCE = AsVR()  # gros objet
+    VITE = AsVR()  # gros objet
+    DEPL = AsVR()  # gros objet
+
+    INST = AsVR()  # gros objet
+    ORDR = AsVI()  # gros objet
+    DESC = AsVI(lonmax=5, )
+#    REFD = AsVK24(lonmax=6, )
+    REFD = AsVK24(lonmax=7, )
+    PTEM = AsVR()
+
+    # si CHOC :
+    DLOC = Facultatif(AsVR())
+    ICHO = Facultatif(AsVI())
+    INTI = Facultatif(AsVK8())
+    FCHO = Facultatif(AsVR())
+    NCHO = Facultatif(AsVK8())
+    SST  = Facultatif(AsVK8())
+    VCHO = Facultatif(AsVR())
+    VINT = Facultatif(AsVR())
+
+    # si nbexcit > 0 :
+    FACC = Facultatif(AsVK8())
+    FDEP = Facultatif(AsVK8())
+    FVIT = Facultatif(AsVK8())
+    IPSD = Facultatif(AsVR())
+
+    # si RELA_EFFO_DEPL :
+    REDN = Facultatif(AsVK24(lonmax=1, ))
+    REDC = Facultatif(AsVI())
+    REDD = Facultatif(AsVR())
+
+    # si utilisation de PROJ_MESU_MODAL :
+    PROJM = Facultatif(sd_proj_mesu(SDNom(debut=8)))
+
+
+
+
+    def u_dime(self):
+        desc=self.DESC.get()
+        nbmode=desc[1] ; assert nbmode >  0
+        nbchoc=desc[2] ; assert nbchoc >= 0
+        nbrede=desc[3] ; assert nbmode >= 0
+        nbsauv=self.ORDR.lonmax  ; assert nbsauv > 0
+        if self.FACC.exists :
+            nbexcit=self.FACC.lonmax / 2  ; assert nbexcit >= 0
+        else :
+            nbexcit=0
+        return (nbmode, nbchoc, nbsauv, nbexcit, nbrede)
+
+
+    def check_DESC(self,checker):
+        desc=self.DESC.get()
+        assert desc[0] in (1,2,3) , desc
+
+
+    def check_REFD(self,checker):
+        # AJACOT : j'avais cru comprendre des choses ... mais sdld104a me prouve le contraire !
+        # à revoir ?????
+        return
+        refd=self.REFD.get_stripped()
+        assert refd[0] != '' , refd
+        sd2= sd_matr_asse_gene(refd[0]) ; sd2.check()
+        assert refd[1] != '' , refd
+        sd2= sd_matr_asse_gene(refd[0]) ; sd2.check()
+        if refd[2] != '' :
+            sd2= sd_matr_asse_gene(refd[2]) ; sd2.check()
+        assert refd[3] != '' , refd
+        sd2= sd_nume_ddl_gene(refd[3]) ; sd2.check()
+        assert refd[4] == '' , refd
+        # test de refd[5] trop compliqué : je craque !
+
+
+    def check_ORDR_INST_PTEM(self,checker):
+        nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime()
+        assert self.ORDR.lonmax == nbsauv
+        assert self.INST.lonmax == nbsauv
+        assert self.PTEM.lonmax in (1, nbsauv)
+        sdu_tous_differents(self.ORDR,checker) # AJACOT_PB : j'aimerais bien "tous_différents"
+        sdu_tous_differents(self.INST,checker) #      mais il y a sdld102a  => fiche à émettre ?
+
+
+    def check_DEPL_VITE_ACCE(self,checker):
+        nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime()
+        assert self.DEPL.lonmax == nbsauv*nbmode
+        assert self.VITE.lonmax == nbsauv*nbmode
+        assert self.ACCE.lonmax == nbsauv*nbmode
+
+
+    def check_CHOC(self,checker):
+        nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime()
+        if nbchoc == 0 : return
+        assert self.DLOC.lonmax == 6*nbsauv*nbchoc
+        assert self.VCHO.lonmax == 3*nbsauv*nbchoc
+        assert self.FCHO.lonmax == 3*nbsauv*nbchoc
+        assert self.INTI.lonmax == nbchoc
+        assert self.ICHO.lonmax == nbsauv*nbchoc
+        assert self.NCHO.lonmax == 2*nbchoc
+        assert self.VINT.lonmax == nbsauv*nbchoc
+        assert self.SST.lonmax  == 2*nbchoc
+
+
+    def check_EXCIT(self,checker):
+        nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime()
+        if nbexcit == 0 : return
+        assert self.FACC.lonmax == 2*nbexcit
+        assert self.FDEP.lonmax == 2*nbexcit
+        assert self.FVIT.lonmax == 2*nbexcit
+        #assert self.IPSD.lonmax == nbexcit*neq # JP : neq != nbmode. Que vaut neq ??
+
+
+    def check_RELA_DEPL(self,checker):
+        nbmode, nbchoc, nbsauv, nbexcit, nbrede = self.u_dime()
+        if nbrede == 0 : return
+        assert self.REDC.lonmax == nbsauv*nbrede
+        assert self.REDD.lonmax == nbsauv*nbrede
+        assert self.REDN.lonmax == nbrede
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_type_flui_stru.py b/Aster/Cata/cataSTA10/SD/sd_type_flui_stru.py
new file mode 100644 (file)
index 0000000..fa3cceb
--- /dev/null
@@ -0,0 +1,339 @@
+#@ MODIF sd_type_flui_stru SD  DATE 09/05/2007   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_cara_elem import sd_cara_elem
+from SD.sd_modele import sd_modele
+from SD.sd_fonction import sd_fonction
+from SD.sd_mater import sd_mater
+from SD.sd_util import *
+
+
+class sd_type_flui_stru(AsBase):
+#===============================================================
+    nomj = SDNom(fin=8)
+    FSIC = AsVI(SDNom(debut=19),lonmax=2,)
+
+    FSGM = Facultatif(AsVK8(SDNom(debut=19)))
+    FSVR = Facultatif(AsVR(SDNom(debut=19)))
+    FSVK = Facultatif(AsVK8(SDNom(debut=19)))
+    FSVI = Facultatif(AsVI(SDNom(debut=19)))
+    FSCR = Facultatif(AsVR(SDNom(debut=19)))
+    FSGR = Facultatif(AsVR(SDNom(debut=19)))
+    UNIT_FAISCEAU = Facultatif(AsVI(lonmax=2,))
+    UNIT_GRAPPES  = Facultatif(AsVI(lonmax=2,))
+
+
+    def exists(self):
+        # retourne "vrai" si la SD semble exister (et donc qu'elle peut etre vérifiée)
+        return self.FSIC.exists
+
+
+    def u_veri1(self):
+    #-----------------------
+        # retourne 2 variables utiles pour les routines chech_xxxx
+        #   type_faisceau   : type de faisceau (configuration)
+        #   couplage : indicateur de couplage
+        fsic=self.FSIC.get()
+        type_faisceau=fsic[0]
+        couplage=fsic[1]
+        return type_faisceau, couplage
+
+
+
+    def check_FSIC(self,checker):   # objet .FSIC
+    #===============================================================
+        fsic=self.FSIC.get()
+        type_faisceau, couplage= self.u_veri1()
+        assert type_faisceau in (1,2,3,4), (type_faisceau, fsic)
+        assert couplage in (0,1), (couplage,fsic)
+
+
+
+    def check_FSVI(self,checker):   # objet .FSVI
+    #===============================================================
+        fsvi=self.FSVI.get()
+        type_faisceau, couplage= self.u_veri1()
+
+        if type_faisceau == 1 :  # FAISCEAU_TRANS
+        #-----------------------------------------
+            nbzone=fsvi[1]
+            sdu_compare(self.FSVI,checker,nbzone,'>',0,"nbzone > 0")
+            if couplage :
+                assert len(fsvi)==2+2*nbzone, fsvi
+                assert fsvi[0] in (1,2), fsvi
+                for indic in fsvi[2:2+nbzone] :
+                    assert indic > 0 , (nbzone,fsvi,self)
+                for nbpt in fsvi[2+nbzone:2+2*nbzone] :
+                    assert nbpt >= 0 , (nbzone,fsvi,self)  # =0 possible : sdll136a
+            else :
+                assert len(fsvi)==2
+
+        if type_faisceau == 2 : # GRAPPE
+        #-----------------------------------------
+            sdu_assert(self.FSVI, checker, not fsvi, "type_faisceau == GRAPPE => FSVI ne doit pas exister")
+
+        if type_faisceau == 3 :  # FAISCEAU_AXIAL
+        #-----------------------------------------
+            lsimplif=fsvi[0]
+            # lsimplif=1 : faisceau simplifié
+            # lsimplif=0 : faisceau complet
+
+            nbtype=fsvi[4] # nombre de types de grille
+            lgrille=nbtype > 0
+            # lgrille=1 : on utilise des grilles
+            # lgrille=0 : on n'utilise pas de grille
+
+            assert fsvi[0] in (0,1), fsvi
+            assert fsvi[1] in (1,2,3), fsvi
+            assert fsvi[2] in (1,2), fsvi
+
+            if not lsimplif :     # faisceau complet
+                if lgrille :
+                    assert len(fsvi)==6+nbtype, fsvi
+                    assert min(fsvi[3:]) > 0, fsvi
+                else:
+                    assert len(fsvi)==5, fsvi
+                    assert fsvi[3]  >= 0, fsvi
+
+            else :                # faisceau simplifié
+                nbzone=fsvi[3]
+                if lgrille :
+                    assert len(fsvi)==6+nbtype+nbzone, fsvi
+                    assert min(fsvi[3:]) > 0, fsvi
+                else:
+                    assert len(fsvi)==6+nbzone, fsvi
+                    assert fsvi[3]  > 0, fsvi
+
+        if type_faisceau == 4 :  # COQUE_COAX
+        #-----------------------------------------
+            assert len(fsvi)==2, fsvi
+            assert fsvi[0] in (0,1), fsvi
+            assert fsvi[1] in (1,2,3), fsvi
+
+
+
+    def check_FSVK(self,checker):   # objet .FSVK
+    #===============================================================
+        fsvk=self.FSVK.get()
+        fsvi=self.FSVI.get()
+        type_faisceau, couplage= self.u_veri1()
+
+        if type_faisceau == 1 :  # FAISCEAU_TRANS
+        #-----------------------------------------
+            nbzone=fsvi[1]
+            assert len(fsvk)==4+nbzone, fsvk
+            carel=fsvk[0].strip()
+            assert carel != '', fsvk
+            sd2=sd_cara_elem(carel); sd2.check(checker)
+            assert fsvk[1].strip() in ('DX', 'DY', 'DZ'), fsvk
+            for k in range(2,4+nbzone) :
+               sd2=sd_fonction(fsvk[k]); sd2.check(checker)
+
+        elif type_faisceau == 2 :  # GRAPPE
+        #-----------------------------------------
+            if couplage :
+                assert len(fsvk)==4,(fsvk,self)
+                assert fsvk[0] != '',(fsvk,self)
+                # on pourrait vérifier que fsvk[1] est un nom de noeud
+                assert fsvk[1] != '',(fsvk,self)
+                sd2=sd_cara_elem(fsvk[2].strip()); sd2.check(checker)
+                sd2=sd_modele(fsvk[3].strip()); sd2.check(checker)
+            else:
+                assert not fsvk,(fsvk,self)
+
+        elif type_faisceau == 3 :  # FAISCEAU_AXIAL
+        #-----------------------------------------
+            lsimplif=fsvi[0]
+            if not lsimplif :
+                assert len(fsvk)==3,(fsvk,self)
+                sd2=sd_fonction(fsvk[0].strip()); sd2.check(checker)
+                sd2=sd_fonction(fsvk[1].strip()); sd2.check(checker)
+                sd2=sd_cara_elem(fsvk[2].strip()); sd2.check(checker)
+            else:
+                assert len(fsvk)==2,(fsvk,self)
+                sd2=sd_fonction(fsvk[0].strip()); sd2.check(checker)
+                sd2=sd_fonction(fsvk[1].strip()); sd2.check(checker)
+
+        elif type_faisceau == 4 :  # COQUE_COAX
+        #-----------------------------------------
+            assert len(fsvk)==3,(fsvk,self)
+            sd2=sd_cara_elem(fsvk[0].strip()); sd2.check(checker)
+            sd2=sd_mater(fsvk[1].strip()); sd2.check(checker)
+            sd2=sd_mater(fsvk[2].strip()); sd2.check(checker)
+
+
+
+    def check_FSVR(self,checker):   # objet .FSVR
+    #===============================================================
+        fsvr=self.FSVR.get()
+        fsvi=self.FSVI.get()
+        type_faisceau, couplage= self.u_veri1()
+
+        if type_faisceau == 1 :  # FAISCEAU_TRANS
+        #-----------------------------------------
+            nbzone=fsvi[1]
+            if couplage :
+                assert len(fsvr)==3+2*nbzone,(fsvr,self)
+            else :
+                assert len(fsvr)==1,(fsvr,self)
+            sdu_tous_compris(self.FSVR,checker,vmin=0.,comment="FSVR > 0")
+
+        elif type_faisceau == 2 :  # GRAPPE
+        #-----------------------------------------
+            if couplage :
+                assert len(fsvr)==2,(fsvr,self)
+                sdu_tous_compris(self.FSVR,checker,vmin=0.,comment="FSVR > 0")
+            else :
+                assert not fsvr,(fsvr,self)
+
+        elif type_faisceau == 3 :  # FAISCEAU_AXIAL
+        #-----------------------------------------
+            lsimplif=fsvi[0]
+            if not lsimplif :
+                if fsvi[2]==1 : # enceinte circulaire
+                    assert len(fsvr)==8,(fsvr,self)
+                else:           # enceinte rectangulaire
+                    assert len(fsvr)==10,(fsvr,self)
+            else :
+                nbzone=fsvi[3]
+                if fsvi[2]==1 : # enceinte circulaire
+                    assert len(fsvr)==8+nbzone,(fsvr,self)
+                    sdu_tous_compris(self.FSVR,checker,fsvi[8:],vmin=0.,comment="FSVR > 0")
+                else:           # enceinte rectangulaire
+                    assert len(fsvr)==10+nbzone,(fsvr,self)
+                    sdu_tous_compris(self.FSVR,checker,fsvi[10:],vmin=0.,comment="FSVR > 0")
+
+        elif type_faisceau == 4 :  # COQUE_COAX
+        #-----------------------------------------
+            assert len(fsvr)==7,(fsvr,self)
+            sdu_tous_compris(self.FSVR,checker,vmin=0.,comment="FSVR > 0")
+
+
+
+    def check_FSGM(self,checker):   # objet .FSGM
+    #===============================================================
+        fsgm=self.FSGM.get()
+        fsvi=self.FSVI.get()
+        type_faisceau, couplage= self.u_veri1()
+
+        if type_faisceau in (1,2) :
+        #-----------------------------------------
+            assert not fsgm,(fsvi,self)
+
+        elif type_faisceau == 3 :  # FAISCEAU_AXIAL
+        #-----------------------------------------
+            nb1=fsvi[3]  # nbgrma ou nbzone
+            if nb1==0 :
+                assert len(fsgm)==1,(fsgm,self)
+            else :
+                assert len(fsgm)==nb1,(fsgm,self)
+                sdu_tous_differents(self.FSGM,checker,comment='FAISCEAU_AXIAL')
+
+        elif type_faisceau == 4 :  # COQUE_COAX
+        #-----------------------------------------
+            assert len(fsgm)==2,(fsgm,self)
+            sdu_tous_differents(self.FSGM,checker,comment='COQUE_COAX')
+
+
+
+    def check_FSGR(self,checker):   # objet .FSGR
+    #===============================================================
+        fsgr=self.FSGR.get()
+        fsvi=self.FSVI.get()
+        type_faisceau, couplage= self.u_veri1()
+
+        if type_faisceau in (1,2,4) :
+        #-----------------------------------------
+            assert not fsgr,(fsvi,self)
+
+        elif type_faisceau ==3 :
+        #-----------------------------------------
+            nbzone=fsvi[3]
+            nbtype=fsvi[4] # nombre de types de grille
+            if nbtype==0 :
+                assert not fsgr,(fsvi,self)
+            else :   # il y a des grilles
+                lsimplif=fsvi[0]
+                if lsimplif :
+                    nbgrille=fsvi[6+nbzone]
+                else :
+                    nbgrille=fsvi[5]
+                assert len(fsgr)==nbgrille+6*nbtype,(fsgr,self)
+
+
+
+    def check_FSCR(self,checker):   # objet .FSCR
+    #===============================================
+        fscr=self.FSCR.get()
+        fsvi=self.FSVI.get()
+        type_faisceau, couplage= self.u_veri1()
+
+        if type_faisceau in (1,2,4) :
+        #-----------------------------------------
+            assert not fscr,(fsgm,self)
+
+        elif type_faisceau ==3 :
+        #-----------------------------------------
+            lsimplif=fsvi[0]
+            if lsimplif :
+                nbtube=fsvi[5]
+                assert len(fscr)==2*nbtube,(fscr,self)
+            else :
+                assert not fscr,(fsvi,self)
+
+
+
+    def check_UNIT_FAISCEAU(self,checker):   # objet .UNIT.FAISCEAU
+    #===============================================================
+        unite=self.UNIT_FAISCEAU.get()
+        fsvi=self.FSVI.get()
+        type_faisceau, couplage= self.u_veri1()
+
+        if type_faisceau in (2,3,4) :
+        #-----------------------------------------
+            assert not unite,(fsvi,self)
+
+        elif type_faisceau == 1 :
+        #-----------------------------------------
+            assert len(unite)==2,(unite,self)
+            assert unite[0] > 0 ,(unite,self)
+            assert unite[1] > 0 ,(unite,self)
+
+
+
+    def check_UNIT_GRAPPES(self,checker):   # objet .UNIT.GRAPPES
+    #===============================================================
+        unite=self.UNIT_GRAPPES.get()
+        fsvi=self.FSVI.get()
+        type_faisceau, couplage= self.u_veri1()
+
+        if type_faisceau in (1,3,4) :
+        #-----------------------------------------
+            assert not unite,(fsvi,self)
+
+        elif type_faisceau == 2 :
+        #-----------------------------------------
+            if couplage :
+                assert len(unite)==2,(unite,self)
+                assert unite[0] > 0 ,(unite,self)
+                assert unite[1] > 0 ,(unite,self)
+            else :
+                assert not unite, (fsic,self)
diff --git a/Aster/Cata/cataSTA10/SD/sd_util.py b/Aster/Cata/cataSTA10/SD/sd_util.py
new file mode 100644 (file)
index 0000000..a4f290b
--- /dev/null
@@ -0,0 +1,191 @@
+#@ MODIF sd_util SD  DATE 19/04/2010   AUTEUR GREFFET N.GREFFET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+"""
+   Utilitaires pour la vérification des SD
+"""
+
+# pour utilisation dans eficas
+try:
+   import aster
+except:
+   pass
+
+import copy
+
+
+#  1) Utilitaires pour vérifier certaines propriétés.
+#     Ces utilitaires ne provoquent pas d'arret mais écrivent des messages dans un "checker"
+#  -----------------------------------------------------------------------------------------
+
+
+#   1.1 Utilitaires pour des scalaires :
+#   ------------------------------------
+
+def sdu_assert(ojb, checker, bool,comment=''):
+    # Vérifie que le booléen (bool) est vrai
+    if not bool :
+            checker.err(ojb, "condition non respectée :  (%s)" % (comment,))
+
+def sdu_compare(ojb, checker, val1, comp, val2, comment=''):
+    # Vérifie que la relation de comparaison entre val1 et val2 est respectée :
+    #   comp= '==' / '!=' / '>=' / '>' / '<=' / '<'
+    comp=comp.strip()
+    ok = 0
+    if comp == "==" :
+       ok = val1 == val2
+       comp1 = "n'est pas égale au"
+    elif comp == "!=" :
+       ok = val1 != val2
+       comp1 = "est égale au"
+    elif comp == ">=" :
+       ok = val1 >= val2
+       comp1 = "est inférieure strictement au"
+    elif comp == "<=" :
+       ok = val1 <= val2
+       comp1 = "est supérieure strictement au"
+    elif comp == ">" :
+       ok = val1 > val2
+       comp1 = "est inférieure ou égale au"
+    elif comp == "<" :
+       ok = val1 < val2
+       comp1 = "est supérieure ou égale au"
+    else :
+       sdu_assert(ojb, checker, 0, 'sdu_compare: opérateur de comparaison interdit: '+comp)
+
+    if not ok :
+            checker.err(ojb, "condition non respectée pour le test suivant : longueur séquence (%s) %s nombre d'éléments différents dans la séquence (%s) (%s)" % (val1,comp1,val2,comment))
+
+
+#   1.2 Utilitaires pour des séquences :
+#   ------------------------------------
+
+def sdu_tous_differents(ojb,checker,sequence=None,comment=''):
+    # Vérifie que les éléments de la séquence sont tous différents.
+    # Si l'argument sequence est None, on prend l'ensemble de l'ojb.
+
+    if sequence :
+        seq=sequence
+    else :
+        seq=ojb.get()
+
+    sdu_compare(ojb, checker, len(seq), '==', len(set(seq)), comment='Tous les éléments de la séquence devraient être différents, mais ils ne le sont pas'+comment)
+
+
+def sdu_tous_non_blancs(ojb,checker,sequence=None,comment=''):
+    # Vérifie que les éléments (chaines) de la séquence sont tous "non blancs".
+    # Si l'argument sequence est None, on prend l'ensemble de l'ojb.
+
+    if sequence :
+        seq=sequence
+    else :
+        seq=ojb.get()
+
+    for elem in seq :
+        assert len(elem.strip()) > 0 , (seq,self, 'tous "non blancs" '+comment)
+
+
+def sdu_tous_compris(ojb,checker,sequence=None,vmin=None,vmax=None,comment=''):
+    # Vérifie que toutes les valeurs de la sequence sont comprises entre vmin et vmax
+    # Les bornes vmin et vmax sont autorisées
+    # Si l'argument sequence est None, on prend l'ensemble de l'ojb.
+
+    assert (not vmin is None) or (not vmax is None),'Il faut fournir au moins une des valeurs vmin ou vmax'
+    if sequence :
+        seq=sequence
+    else:
+        seq=ojb.get()
+
+    ier = 0
+    for v in seq :
+       if vmin and v < vmin : ier = 1
+       if vmax and v > vmax : ier = 1
+    if ier == 1 : checker.err( ojb, "L'objet doit contenir des valeurs dans l'intervalle : [%s, %s] "  % (vmin,vmax))
+
+
+
+def sdu_monotone(seqini) :
+    #-------------------------------
+    # vérifie qu'une séquence est triée par ordre croissant (ou décroissant)
+    # retourne :
+    #    3 : ni croissant ni décroissant  (désordre)
+    #    1 : croissant
+    #   -1 : décroissant
+    #    0 : constant
+
+    n=len(seqini)
+    if isinstance(seqini,tuple) :
+        seq=list(seqini)
+    else :
+        seq=seqini
+
+    seq2=copy.deepcopy(seq)
+    seq2.sort()
+    seq3=copy.deepcopy(seq)
+    seq3.sort()
+    seq3.reverse()
+
+    croiss=1
+    decroiss=1
+    for k in range(n) :
+        if seq[k] != seq2[k] :
+            croiss=0
+        if seq[k] != seq3[k] :
+            decroiss=0
+
+    if   croiss==1 and decroiss==1 :
+        return 0
+    elif croiss==1 and decroiss==0 :
+        return 1
+    elif croiss==0 and decroiss==1 :
+        return -1
+    elif croiss==0 and decroiss==0 :
+        return 3
+
+
+
+#  2) Utilitaires de questionnement :
+#  -----------------------------------------------------------------------------------------
+
+def sdu_nom_gd(numgd) :
+    # retourne le nom de la grandeur de numéro (numgd)
+    assert numgd > 0 and numgd <1000 , numgd
+    ptn=aster.getvectjev('&CATA.GD.NOMGD')
+    return ptn[numgd-1].strip()
+
+def sdu_licmp_gd(numgd) :
+    # retourne la liste des cmps de la grandeur de numéro (numgd)
+    nomgd=sdu_nom_gd(numgd)
+    nocmp=aster.getcolljev('&CATA.GD.NOMCMP')
+    return nocmp[nomgd.ljust(8)]
+
+
+
+#  3) Utilitaires pour la vérification de l'existence des objets :
+#  -----------------------------------------------------------------------------------------
+
+def sdu_ensemble(lojb) :
+    # vérifie que les objets JEVEUX de lojb existent simultanément :
+    assert len(lojb) > 1 , lojb
+    lexi=[]
+    for obj1 in lojb :
+        lexi.append(obj1.exists)
+    for x in lexi[1:] :
+        assert x==lexi[0] , (lojb,lexi)
diff --git a/Aster/Cata/cataSTA10/SD/sd_vect_elem.py b/Aster/Cata/cataSTA10/SD/sd_vect_elem.py
new file mode 100644 (file)
index 0000000..7a1a7aa
--- /dev/null
@@ -0,0 +1,35 @@
+#@ MODIF sd_vect_elem SD  DATE 08/06/2009   AUTEUR PELLET J.PELLET 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+from SD.sd_matr_elem import sd_matr_elem
+
+class sd_vect_elem(sd_matr_elem):
+    nomj = SDNom(fin=19)
+    RELC = Facultatif(AsColl(acces='NO', stockage='CONTIG', modelong='CONSTANT', type='I', ))
+
+
+    def check_RELC(self, checker):
+        if not self.RELC.exists : return
+        lchar = self.RELC.get()
+        for nochar in lchar.keys() :
+            for k in lchar[nochar] :
+                assert k in (0,1) , lchar
+
diff --git a/Aster/Cata/cataSTA10/SD/sd_xfem.py b/Aster/Cata/cataSTA10/SD/sd_xfem.py
new file mode 100644 (file)
index 0000000..a4af5cd
--- /dev/null
@@ -0,0 +1,131 @@
+#@ MODIF sd_xfem SD  DATE 11/01/2010   AUTEUR COLOMBO D.COLOMBO 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+from SD import *
+
+from SD.sd_cham_no   import sd_cham_no
+from SD.sd_cham_elem import sd_cham_elem
+from SD.sd_carte     import sd_carte
+from SD.sd_util      import *
+
+
+
+#-------------------------------
+#       I. sd fiss_xfem
+#-------------------------------
+
+class sd_fiss_xfem(AsBase):
+    nomj = SDNom(fin=8)
+
+    INFO   = AsVK16(lonmax=2,)   # info discontinuite
+
+# I.1) objets relatifs aux level sets
+
+    LNNO   = sd_cham_no()
+    LTNO   = sd_cham_no()
+    GRLNNO = sd_cham_no()
+    GRLTNO = sd_cham_no()
+    BASLOC = sd_cham_no()
+    FONDFISS        = Facultatif(AsVR())
+    BASEFOND        = Facultatif(AsVR())
+    FONDMULT        = Facultatif(AsVI())
+    CARAFOND        = Facultatif(AsVR(lonmax=12,))
+
+# I.2) objets relatifs a l'enrichissement
+
+    GROUP_MA_ENRI   = AsVI()
+    GROUP_NO_ENRI   = AsVI()
+    STNO   = sd_cham_no()
+    STNOR  = sd_cham_no()
+
+    MAILFISS_CTIP  = Facultatif(AsVI(SDNom(nomj='.MAILFISS  .CTIP')))
+    MAILFISS_HEAV  = Facultatif(AsVI(SDNom(nomj='.MAILFISS  .HEAV')))
+    MAILFISS_HECT  = Facultatif(AsVI(SDNom(nomj='.MAILFISS  .HECT')))
+    MAILFISS_INDIC = AsVI(SDNom(nomj='.MAILFISS .INDIC'), lonmax=6, )
+    LISNOH         = Facultatif(AsVI())
+
+# I.3) objets relatifs a la propagation
+
+    PRO_MES_EL  = Facultatif(sd_cham_elem(SDNom(nomj='.PRO.MES_EL')))
+    PRO_NORMAL  = Facultatif(sd_cham_elem(SDNom(nomj='.PRO.NORMAL')))
+    PRO_RAYON_TORE  = Facultatif(AsVR(SDNom(nomj='.PRO.RAYON_TORE'),lonmax=1,))
+    PRO_NOEUD_TORE  = Facultatif(AsVL(SDNom(nomj='.PRO.NOEUD_TORE')))
+    PRO_MOD_GRILLE  = Facultatif(AsVK8(SDNom(nomj='.PRO.MOD_GRILLE'),lonmax=1,))
+
+# I.4) objets relatifs au contact
+
+    BASCO  = Facultatif(sd_cham_no())
+    LISCO  = Facultatif(AsVR(SDNom(nomj='.LISCO')))
+    LISEQ  = Facultatif(AsVI(SDNom(nomj='.LISEQ')))
+    LISRL  = Facultatif(AsVI(SDNom(nomj='.LISRL')))
+    LISUP  = Facultatif(AsVI(SDNom(nomj='.LISUP')))    
+
+
+# 1.5) verifications d'existence :
+
+    def check_existence(self,checker) :
+        sdu_ensemble((self.FONDFISS, self.FONDMULT))
+        sdu_ensemble((self.LISRL, self.LISCO))
+        sdu_ensemble((self.PRO_MES_EL.CELD, self.PRO_NORMAL.CELD))
+        sdu_ensemble((self.PRO_RAYON_TORE, self.PRO_NOEUD_TORE))
+
+
+#-------------------------------
+#       II. sd modele
+#-------------------------------
+
+class sd_modele_xfem(AsBase):
+    nomj = SDNom(fin=8)
+
+# II.1) objets relatifs aux sous-elements
+
+    TOPOSE_PIN  = sd_cham_elem(SDNom(nomj='.TOPOSE.PIN'))
+    TOPOSE_CNS  = sd_cham_elem(SDNom(nomj='.TOPOSE.CNS'))
+    TOPOSE_HEA  = sd_cham_elem(SDNom(nomj='.TOPOSE.HEA'))
+    TOPOSE_LON  = sd_cham_elem(SDNom(nomj='.TOPOSE.LON'))
+    TOPOSE_AIN  = sd_cham_elem(SDNom(nomj='.TOPOSE.AIN'))
+    TOPOSE_CRI  = Facultatif(sd_cham_elem(SDNom(nomj='.TOPOSE.CRI')))
+
+# II.2) objets relatifs aux facettes de contact
+
+    TOPOFAC_PI  = sd_cham_elem(SDNom(nomj='.TOPOFAC.PI'))
+    TOPOFAC_AI  = sd_cham_elem(SDNom(nomj='.TOPOFAC.AI'))
+    TOPOFAC_CF  = sd_cham_elem(SDNom(nomj='.TOPOFAC.CF'))
+    TOPOFAC_LO  = sd_cham_elem(SDNom(nomj='.TOPOFAC.LO'))
+    TOPOFAC_BA  = sd_cham_elem(SDNom(nomj='.TOPOFAC.BA'))
+
+    TOPOFAC_GM  = sd_cham_elem(SDNom(nomj='.TOPOFAC.GM'))
+    TOPOFAC_GE  = sd_cham_elem(SDNom(nomj='.TOPOFAC.GE'))
+    TOPOFAC_OE  = sd_cham_elem(SDNom(nomj='.TOPOFAC.OE'))
+    TOPOFAC_OM  = sd_cham_elem(SDNom(nomj='.TOPOFAC.OM'))
+
+# II.3) objets concatenes relatifs aux level sets
+
+    LNNO   = sd_cham_no()
+    LTNO   = sd_cham_no()
+    BASLOC = sd_cham_no()
+    STNO   = sd_cham_no()
+
+# II.4) autres objets
+
+    XFEM_CONT   = AsVI(lonmax=1) # contact ou pas
+    FISS   = AsVK8()             # noms des fissures
+    NFIS   = AsVI(lonmax=1,)     # nombre de fissures
+    XMAFIS = sd_carte()          # pour chaque maille : nom de la fissure
diff --git a/Aster/Cata/cataSTA10/SD/utilsd.py b/Aster/Cata/cataSTA10/SD/utilsd.py
new file mode 100644 (file)
index 0000000..5c9668f
--- /dev/null
@@ -0,0 +1,91 @@
+#@ MODIF utilsd SD  DATE 10/09/2007   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+"""
+   Utilitaire sur le catalogue des structures de données.
+"""
+
+__revision__ = "$Id: utilsd.py,v 1.1.2.2 2010-06-03 09:16:27 pnoyret Exp $"
+
+import sys
+import os
+from glob     import glob
+from optparse import OptionParser
+
+# ----- get bibpyt location
+main = sys.argv[0]
+if os.path.islink(main):
+   main = os.path.realpath(main)
+bibpyt = os.path.normpath(os.path.join(
+      os.path.dirname(os.path.abspath(main)), os.pardir))
+sys.path.append(bibpyt)
+
+# -----------------------------------------------------------------------------
+def import_sd(nomsd):
+   """Import une SD.
+   """
+   try:
+      mod = __import__('SD.%s' % nomsd, globals(), locals(), [nomsd])
+      klass = getattr(mod, nomsd)
+   except (ImportError, AttributeError), msg:
+      print msg
+      raise ImportError, "impossible d'importer la SD '%s'" % nomsd
+   return klass
+
+# -----------------------------------------------------------------------------
+def tree(nom, *args):
+   """Retourne l'arbre des sd en arguments
+   """
+   l = []
+   for i, sd in enumerate(args):
+      if len(args) > 1 and i > 0:
+         l.append('-'*80)
+      sd_class = import_sd(sd)
+      tmpobj = sd_class(nomj=nom)
+      l.append(tmpobj.dump())
+   return os.linesep.join(l)
+
+# -----------------------------------------------------------------------------
+# -----------------------------------------------------------------------------
+if __name__ == '__main__':
+   # command arguments parser
+   parser = OptionParser(usage=__doc__)
+   parser.add_option('-t', '--tree', dest='tree',
+         action='store_true', default=False,
+         help="affiche une SD sous forme d'arbre")
+   parser.add_option('--nom', dest='nom',
+         action='store', default='^'*8,
+         help="nom du concept dans les représentations")
+   parser.add_option('-a', '--all', dest='all',
+         action='store_true', default=False,
+         help="construit la liste des SD à partir des fichiers 'sd_*.py' trouvés")
+   
+   opts, l_sd = parser.parse_args()
+   if opts.all:
+      l_fich = glob(os.path.join(bibpyt, 'SD', 'sd_*.py'))
+      l_sd = [os.path.splitext(os.path.basename(f))[0] for f in l_fich]
+   
+   if len(l_sd) == 0:
+      parser.error('quelle(s) structure(s) de données ?')
+
+   if opts.tree:
+      print tree(opts.nom, *l_sd)
+
diff --git a/Aster/Cata/cataSTA10/__init__.py b/Aster/Cata/cataSTA10/__init__.py
new file mode 100644 (file)
index 0000000..3cdb1ca
--- /dev/null
@@ -0,0 +1,18 @@
+import os,sys
+sys.modules["Cata"]=sys.modules[__name__]
+rep_macro = os.path.dirname(__file__)
+sys.path.insert(0,rep_macro)
+rep_macro=os.path.join(rep_macro,'Macro')
+sys.path.insert(0,rep_macro)
+
+if sys.modules.has_key("SD"):
+  del sys.modules["SD"]
+for k in sys.modules.keys():
+  if k[0:3] == "SD.":
+    del sys.modules[k]
+
+
+from cata import *
+from math import ceil
+from Extensions import param2
+pi=param2.Variable('pi',pi)
diff --git a/Aster/Cata/cataSTA10/cata.py b/Aster/Cata/cataSTA10/cata.py
new file mode 100755 (executable)
index 0000000..ea93f30
--- /dev/null
@@ -0,0 +1,27430 @@
+#& MODIF ENTETE  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+# faire que la division soit toujours réelle
+from __future__ import division
+
+import Accas
+from Accas import *
+from Accas import _F
+from math import sin, cos, tan, asin, acos, atan2, atan, sinh, cosh, tanh
+from math import pi ,exp,log, log10, sqrt
+import ops
+
+try:
+  import aster
+except ImportError:
+  pass
+
+
+# -----------------------------------------------------------------------------
+JdC = JDC_CATA(code='ASTER',
+               execmodul=None,
+               regles = (AU_MOINS_UN('DEBUT','POURSUITE'),
+                         AU_MOINS_UN('FIN'),
+                         A_CLASSER(('DEBUT','POURSUITE'),'FIN')))
+# Type le plus general
+class entier   (ASSD):
+   def __init__(self,valeur=None,**args):
+      ASSD.__init__(self,**args)
+      self.valeur=valeur
+
+   def __adapt__(self,validator):
+      if validator.name == "list":
+         #validateur liste,cardinalité
+         return (self,)
+      elif validator.name == "type":
+         #validateur type
+         return validator.adapt(self.valeur or 0)
+      else:
+         #validateur into et valid
+         return self
+
+class reel(ASSD):
+   def __init__(self,valeur=None,**args):
+      ASSD.__init__(self,**args)
+      self.valeur=valeur
+
+   def __call__(self):
+      return self.valeur
+
+   def __adapt__(self,validator):
+      if validator.name == "list":
+         #validateur liste,cardinalité
+         return (self,)
+      elif validator.name == "type":
+         #validateur type
+         return validator.adapt(self.valeur or 0.)
+      else:
+         #validateur into et valid
+         return self
+
+# -----------------------------------------------------------------------------
+# Type geometriques
+class no  (GEOM):pass
+class grno(GEOM):pass
+class ma  (GEOM):pass
+class grma(GEOM):pass
+
+# -----------------------------------------------------------------------------
+from SD.co_cabl_precont     import cabl_precont
+from SD.co_cara_elem        import cara_elem
+from SD.co_cham_mater       import cham_mater
+from SD.co_char_acou        import char_acou
+from SD.co_char_cine_acou   import char_cine_acou
+from SD.co_char_cine_meca   import char_cine_meca
+from SD.co_char_cine_ther   import char_cine_ther
+from SD.co_char_meca        import char_meca
+from SD.co_char_ther        import char_ther
+from SD.co_contact          import char_contact
+from SD.co_compor           import compor_sdaster
+from SD.co_courbe           import courbe_sdaster
+from SD.co_fiss_xfem        import fiss_xfem
+from SD.co_fond_fiss        import fond_fiss
+from SD.co_interf_dyna_clas import interf_dyna_clas
+from SD.co_gfibre           import gfibre_sdaster
+from SD.co_listis           import listis_sdaster
+from SD.co_list_inst        import list_inst
+from SD.co_melasflu         import melasflu_sdaster
+from SD.co_mode_cycl        import mode_cycl
+from SD.co_nume_ddl_gene    import nume_ddl_gene
+from SD.co_nume_ddl         import nume_ddl_sdaster
+from SD.co_sd_feti          import sd_feti_sdaster
+from SD.co_spectre          import spectre_sdaster
+from SD.co_surface          import surface_sdaster
+from SD.co_tran_gene        import tran_gene
+from SD.co_type_flui_stru   import type_flui_stru
+
+# -----------------------------------------------------------------------------
+# modeles :
+from SD.co_modele      import modele_sdaster
+from SD.co_modele_gene import modele_gene
+
+# -----------------------------------------------------------------------------
+# materiau
+from SD.co_mater import mater_sdaster
+
+# -----------------------------------------------------------------------------
+# macro-elements :
+from SD.co_macr_elem_dyna import macr_elem_dyna
+from SD.co_macr_elem_stat import macr_elem_stat
+
+# -----------------------------------------------------------------------------
+# liste :
+from SD.co_listr8 import listr8_sdaster
+
+# -----------------------------------------------------------------------------
+# maillage :
+from SD.co_maillage  import maillage_sdaster
+from SD.co_squelette import squelette
+
+# -----------------------------------------------------------------------------
+# champs
+from SD.co_champ     import cham_gd_sdaster
+from SD.co_cham_no   import cham_no_sdaster
+from SD.co_carte     import carte_sdaster
+from SD.co_cham_elem import cham_elem
+
+# -----------------------------------------------------------------------------
+# resultat : (evol_sdaster,mode_stat,mode_meca)
+from SD.co_resultat     import resultat_sdaster, resultat_jeveux
+from SD.co_resultat_dyn import resultat_dyn
+from SD.co_mode_meca    import mode_meca
+
+# -----------------------------------------------------------------------------
+class acou_harmo    (resultat_dyn):pass
+class dyna_harmo    (resultat_dyn):pass
+class dyna_trans    (resultat_dyn):pass
+class harm_gene     (resultat_dyn):pass
+class mode_acou     (resultat_dyn):pass
+class mode_flamb    (resultat_dyn):pass
+class mode_gene     (resultat_dyn):pass
+
+# -----------------------------------------------------------------------------
+class comb_fourier  (resultat_sdaster):pass
+class fourier_elas  (resultat_sdaster):pass
+class fourier_ther  (resultat_sdaster):pass
+class mult_elas     (resultat_sdaster):pass
+class theta_geom    (resultat_sdaster):pass
+
+# -----------------------------------------------------------------------------
+# resultat_sdaster/evol_sdaster :
+class evol_sdaster(resultat_sdaster):pass
+class evol_char(evol_sdaster):pass
+class evol_elas(evol_sdaster):pass
+class evol_noli(evol_sdaster):pass
+class evol_ther(evol_sdaster):pass
+class evol_varc(evol_sdaster):pass
+
+# -----------------------------------------------------------------------------
+# resultat_sdaster/mode_meca :
+class mode_meca_c(mode_meca):pass
+
+# -----------------------------------------------------------------------------
+# fonctions / nappe / para_sensi
+from SD.co_fonction import fonction_sdaster, para_sensi, fonction_c, nappe_sdaster
+
+# -----------------------------------------------------------------------------
+# matr_asse :
+from SD.co_matr_asse      import matr_asse
+from SD.co_matr_asse_gene import matr_asse_gene
+from SD.co_matr_asse_gene import matr_asse_gene_r
+from SD.co_matr_asse_gene import matr_asse_gene_c
+
+from SD.co_matr_asse_gd import matr_asse_gd, \
+                               matr_asse_depl_r, matr_asse_depl_c, \
+                               matr_asse_pres_r, matr_asse_pres_c, \
+                               matr_asse_temp_r, matr_asse_temp_c
+
+# -----------------------------------------------------------------------------
+# matr_elem :
+from SD.co_matr_elem import matr_elem, \
+                            matr_elem_depl_r, matr_elem_depl_c, \
+                                              matr_elem_pres_c, \
+                            matr_elem_temp_r
+
+# -----------------------------------------------------------------------------
+# table :
+from SD.co_table import table_sdaster, table_jeveux
+from SD.co_table_fonction import table_fonction
+from SD.co_table_container import table_container
+
+# -----------------------------------------------------------------------------
+# vect_asse_gene :
+from SD.co_vect_asse_gene import vect_asse_gene
+
+# -----------------------------------------------------------------------------
+# vect_elem :
+from SD.co_vect_elem import vect_elem, \
+                            vect_elem_depl_r, \
+                            vect_elem_pres_r, vect_elem_pres_c, \
+                            vect_elem_temp_r
+
+#& MODIF COMMUN  DATE 20/04/2010   AUTEUR JAUBERT A.JAUBERT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PROIX J.M.PROIX
+def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
+           RELATION  =SIMP( statut='o',typ='TXM',defaut="ELAS",into=C_RELATION()),
+           b_monox     = BLOC(condition = "RELATION == 'MONOCRISTAL' ",
+                                 fr="SD issue de DEFI_COMPOR",
+                   COMPOR =SIMP(statut='o',typ=compor_sdaster,max=1),),
+           b_polyx     = BLOC(condition = "RELATION == 'POLYCRISTAL' ",
+                                 fr="SD issue de DEFI_COMPOR",
+                   COMPOR =SIMP(statut='o',typ=compor_sdaster,max=1),),
+           b_zmat      = BLOC(condition = "RELATION == 'ZMAT' ",
+                                 fr="Comportement de la bibliotheque Zmat",
+                   NB_VARI =SIMP(statut='o',typ='I',max=1),
+                   UNITE =SIMP(statut='o',typ='I',max=1),),
+
+# KITs
+           b_kit_ddi = BLOC(condition = "RELATION == 'KIT_DDI' ",
+                            fr="relations de couplage fluage-plasticite",
+               RELATION_KIT    =SIMP(statut='o',typ='TXM',min=2,max=2,validators=NoRepeat(),
+                                 into=(
+                                       "VMIS_CINE_LINE",
+                                       "VMIS_ISOT_TRAC",
+                                       "VMIS_ISOT_LINE",
+                                       "VMIS_ISOT_PUIS",
+                                       "GLRC_DM",
+                                       "GRANGER_FP",
+                                       "GRANGER_FP_INDT",
+                                       "GRANGER_FP_V",
+                                       "BETON_UMLV_FP",
+                                       "ROUSS_PR",
+                                       "BETON_DOUBLE_DP",
+                                       "ENDO_ISOT_BETON",
+                                       "MAZARS"
+                                       ),),
+                   ),
+           b_kit_thm = BLOC(condition = "RELATION in ['KIT_HHM','KIT_HH','KIT_HM','KIT_THHM','KIT_THH','KIT_THM','KIT_THV']",
+                            fr="lois de comportements thermo-hydro-mecaniques",
+               RELATION_KIT    =SIMP(statut='o',typ='TXM',max=9,validators=NoRepeat(),
+                                 into=(
+# MECA
+                                       "ELAS",
+                                       "CJS",
+                                       "HUJEUX",
+                                       "CAM_CLAY",
+                                       "BARCELONE",
+                                       "LAIGLE",
+                                       "LETK",
+                                       "DRUCK_PRAGER",
+                                       "DRUCK_PRAG_N_A",
+                                       "VISC_DRUC_PRAG",
+                                       "ELAS_GONF",
+                                       "HOEK_BROWN_EFF",
+                                       "HOEK_BROWN_TOT",
+                                       "MAZARS",
+                                       "ENDO_ISOT_BETON",
+                                       "JOINT_BANDIS",
+# THMC
+                                       "GAZ",
+                                       "LIQU_SATU",
+                                       "LIQU_GAZ_ATM",
+                                       "LIQU_VAPE_GAZ",
+                                       "LIQU_AD_GAZ_VAPE",
+                                       "LIQU_AD_GAZ",
+                                       "LIQU_VAPE",
+                                       "LIQU_GAZ",
+# HYDR
+                                       "HYDR_UTIL",
+                                       "HYDR_VGM",
+                                       "HYDR",
+                                       "HYDR_ENDO",
+                                       ),),
+                                       ),
+           b_kit_meta = BLOC(condition = "RELATION in ('META_LEMA_ANI','META_P_CL_PT_RE','META_P_CL_PT','META_P_CL_RE','META_P_CL',\
+       'META_P_IL_PT_RE','META_P_IL_PT','META_P_IL_RE','META_P_IL','META_P_INL_PT_RE','META_P_INL_PT','META_P_INL_RE','META_P_INL',\
+           'META_V_CL_PT_RE','META_V_CL_PT','META_V_CL_RE','META_V_CL','META_V_IL_PT_RE','META_V_IL_PT','META_V_IL_RE','META_V_IL',\
+           'META_V_INL_PT_RE','META_V_INL_PT','META_V_INL_RE','META_V_INL')",
+                            fr="nombre de phases metallurgiques",
+               RELATION_KIT    =SIMP(statut='o',typ='TXM',max=1,validators=NoRepeat(),
+                                 into=("ACIER","ZIRC"),),
+                                 ),
+
+           DEFORMATION       =SIMP(statut='f',typ='TXM',defaut="PETIT",
+                                   into=("PETIT","PETIT_REAC","GROT_GDEP","SIMO_MIEHE","GDEF_HYPO_ELAS","GREEN_REAC")),
+           ALGO_C_PLAN       =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
+           RESI_DEBO_MAXI    =SIMP(statut='f',typ='R',fr="Critère d'arret absolu pour assurer la condition de contraintes planes",),
+
+           b_resideborst     =BLOC(condition = " RESI_DEBO_MAXI == None ",
+                                      fr="Critère d'arret relatif pour assurer la condition de contraintes planes",
+               RESI_DEBO_RELA   =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+                                  ),
+
+           ALGO_1D           =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
+           ITER_MAXI_DEBORST =SIMP(statut='f',typ='I',defaut= 1),
+           RESI_INTE_RELA    =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           ITER_INTE_MAXI    =SIMP(statut='f',typ='I',defaut= 10 ),
+
+           b_redec_local      = BLOC(condition = "DEFORMATION in ('PETIT','PETIT_REAC','GROT_GDEP')",
+                                     fr="Nombre de redécoupages internes du pas de temps",
+               ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
+                                     ),
+
+           RESO_INTE         =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+                                   into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE","IMPLICITE_RELI")),
+           TYPE_MATR_TANG    =SIMP(statut='f',typ='TXM',into=("PERTURBATION","VERIFICATION","TANGENTE_SECANTE")),
+
+           b_perturb         =BLOC(condition = " (TYPE_MATR_TANG != None) and (TYPE_MATR_TANG != 'TANGENTE_SECANTE') ",
+                                   fr="Calcul de la matrice tangente par perturbation, valeur de la perturbation",
+                VALE_PERT_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-5),
+                                  ),
+
+           b_tangsec        = BLOC(condition = " TYPE_MATR_TANG == 'TANGENTE_SECANTE' ",
+                                   fr="Modification evolutive de la matrice tangente/secante",
+                 SEUIL        =SIMP(statut='f',typ='R',defaut= 3. ),
+                 AMPLITUDE    =SIMP(statut='f',typ='R',defaut= 1.5 ),
+                 TAUX_RETOUR  =SIMP(statut='f',typ='R',defaut= 0.05 ),
+                                  ),
+
+           PARM_THETA      =SIMP(statut='f',typ='R',defaut= 1. ),
+           PARM_ALPHA      =SIMP(statut='f',typ='R',defaut= 1. ),
+
+           regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+
+         ) ;
+#& MODIF COMMUN  DATE 12/04/2010   AUTEUR MICHEL S.MICHEL 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE REZETTE C.REZETTE
+def C_CONVERGENCE() : return FACT(statut='d',
+           regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA','RESI_COMP_RELA'),),
+           b_refe_rela    =BLOC(condition = "RESI_REFE_RELA != None",
+             regles=(AU_MOINS_UN('SIGM_REFE','EPSI_REFE','FLUX_THER_REFE','FORC_REFE',
+                                  'FLUX_HYD1_REFE','FLUX_HYD2_REFE','VARI_REFE','DEPL_REFE','LAGR_REFE'),),
+             FORC_REFE       =SIMP(statut='f',typ='R',min=2,max=2,
+                fr="Force et Moment de référence pour les éléments de structure."),
+             SIGM_REFE       =SIMP(statut='f',typ='R'),
+             DEPL_REFE       =SIMP(statut='f',typ='R'),
+             EPSI_REFE       =SIMP(statut='f',typ='R'),
+             FLUX_THER_REFE  =SIMP(statut='f',typ='R'),
+             FLUX_HYD1_REFE  =SIMP(statut='f',typ='R'),
+             FLUX_HYD2_REFE  =SIMP(statut='f',typ='R'),
+             VARI_REFE       =SIMP(statut='f',typ='R'),
+             LAGR_REFE       =SIMP(statut='f',typ='R'),
+           ),
+           RESI_REFE_RELA  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
+           RESI_COMP_RELA  =SIMP(statut='f',typ='R'),
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),
+           ITER_GLOB_ELAS  =SIMP(statut='f',typ='I',defaut=25),
+           TYPE            =SIMP(statut='f',typ='TXM',defaut="PIC",into=("PIC","PLATEAU")),
+           b_plateau    =BLOC(condition = "TYPE == 'PLATEAU' ",
+
+             PLATEAU_ITER    =SIMP(statut='f',typ='I',defaut=3, val_min =2),
+             PLATEAU_RELA    =SIMP(statut='f',typ='R',defaut=1E-3),
+           ),
+
+
+           ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+         );
+#& MODIF COMMUN  DATE 08/09/2009   AUTEUR SFAYOLLE S.FAYOLLE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE SFAYOLLE
+
+def C_IMPL_EX() : return FACT(statut='d',
+           REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1),
+           PREDICTION      =SIMP(statut='f',typ='TXM',defaut="TANGENTE"),
+         );
+#& MODIF COMMUN  DATE 20/07/2009   AUTEUR GENIAUT S.GENIAUT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE REZETTE C.REZETTE
+def C_INCREMENT() : return FACT(statut='o',
+           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
+           LIST_INST       =SIMP(statut='o',typ=(listr8_sdaster,list_inst)),
+           NUME_INST_INIT  =SIMP(statut='f',typ='I'),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           NUME_INST_FIN   =SIMP(statut='f',typ='I'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           ERRE_TEMPS      =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
+                                 fr="Adaptation temporelle pour les modélisations HM instationnaires",
+                                 ang="Time adaptation for unstationary HM models"),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6 ),
+         );
+#& MODIF COMMUN  DATE 07/07/2009   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE REZETTE C.REZETTE
+def C_NEWTON() : return FACT(statut='d',
+           REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1,val_min=0),
+           PREDICTION      =SIMP(statut='f',typ='TXM',into=("DEPL_CALCULE","TANGENTE","ELASTIQUE","EXTRAPOL") ),
+           MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
+           PAS_MINI_ELAS   =SIMP(statut='f',typ='R',val_min=0.0),
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+           REAC_ITER_ELAS  =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+         );
+#& MODIF COMMUN  DATE 27/04/2010   AUTEUR DESROCHES X.DESROCHES 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE VABHHTS J.PELLET
+# ce fichier contient la liste des "into" possibles pour le mot cle NOM_CHAM
+# c'est a dire les noms de champs des SD RESULTAT (DATA de la routine RSCRSD)
+def C_NOM_CHAM_INTO() : return  ("ACCE",    #COMMUN#
+                        "ACCE_ABSOLU",
+                        "ALPH0_ELGA_EPSP",
+                        "ALPHP_ELGA_ALPH0",
+                        "COMPORTEMENT",
+                        "COMPORTHER",
+                        "CRIT_ELNO_RUPT",
+                        "DCHA_ELGA_SIGM",
+                        "DCHA_ELNO_SIGM",
+                        "DCHA_NOEU_SIGM",
+                        "DEDE_ELNO_DLDE",
+                        "DEDE_NOEU_DLDE",
+                        "DEGE_ELNO_DEPL",
+                        "DEGE_NOEU_DEPL",
+                        "DEPL",
+                        "DEPL_ABSOLU",
+                        "DESI_ELNO_DLSI",
+                        "DESI_NOEU_DLSI",
+                        "DETE_ELNO_DLTE",
+                        "DETE_NOEU_DLTE",
+                        "DISS_ELGA",
+                        "DISS_ELNO_ELGA",
+                        "DURT_ELGA_META",
+                        "DURT_ELNO_META",
+                        "DURT_NOEU_META",
+                        "ECIN_ELEM_DEPL",
+                        "EFGE_ELNO_CART",
+                        "EFGE_ELNO_DEPL",
+                        "EFGE_NOEU_CART",
+                        "EFGE_NOEU_DEPL",
+                        "ENDO_ELGA",
+                        "ENDO_ELNO_ELGA",
+                        "ENDO_ELNO_SIGA",
+                        "ENDO_ELNO_SINO",
+                        "ENDO_NOEU_SINO",
+                        "ENEL_ELGA",
+                        "ENEL_ELNO_ELGA",
+                        "ENEL_NOEU_ELGA",
+                        "EPEQ_ELNO_TUYO",
+                        "EPVC_ELGA",
+                        "EPVC_ELNO",
+                        "EPFD_ELGA",
+                        "EPFD_ELNO",
+                        "EPFP_ELGA",
+                        "EPFP_ELNO",
+                        "EPME_ELGA_DEPL",
+                        "EPME_ELNO_DEPL",
+                        "EPMG_ELGA_DEPL",
+                        "EPMG_ELNO_DEPL",
+                        "EPMG_NOEU_DEPL",
+                        "EPOT_ELEM_DEPL",
+                        "EPSA_ELNO",
+                        "EPSA_NOEU",
+                        "EPSG_ELGA_DEPL",
+                        "EPSG_ELNO_DEPL",
+                        "EPSG_NOEU_DEPL",
+                        "EPSI_ELGA_DEPL",
+                        "EPSI_ELNO_DEPL",
+                        "EPSI_ELNO_TUYO",
+                        "EPSI_NOEU_DEPL",
+                        "EPSP_ELGA",
+                        "EPSP_ELNO",
+                        "EPSP_NOEU",
+                        "EQUI_ELGA_EPME",
+                        "EQUI_ELGA_EPSI",
+                        "EQUI_ELGA_SIGM",
+                        "EQUI_ELNO_EPME",
+                        "EQUI_ELNO_EPSI",
+                        "EQUI_ELNO_SIGM",
+                        "EQUI_NOEU_EPME",
+                        "EQUI_NOEU_EPSI",
+                        "EQUI_NOEU_SIGM",
+                        "ERRE_ELEM_SIGM",
+                        "ERRE_ELEM_TEMP",
+                        "ERRE_ELNO_ELEM",
+                        "ERRE_NOEU_ELEM",
+                        "ERZ1_ELEM_SIGM",
+                        "ERZ2_ELEM_SIGM",
+                        "QIRE_ELEM_SIGM",
+                        "QIRE_ELNO_ELEM",
+                        "QIRE_NOEU_ELEM",
+                        "QIZ1_ELEM_SIGM",
+                        "QIZ2_ELEM_SIGM",
+                        "SING_ELEM",
+                        "SING_ELNO_ELEM",
+                        "ETOT_ELEM",
+                        "ETOT_ELGA",
+                        "ETOT_ELNO_ELGA",
+                        "EXTR_ELGA_VARI",
+                        "EXTR_ELNO_VARI",
+                        "EXTR_NOEU_VARI",
+                        "FLHN_ELGA",
+                        "FLUX_ELGA_TEMP",
+                        "FLUX_ELNO_TEMP",
+                        "FLUX_NOEU_TEMP",
+                        "FORC_NODA",
+                        "FSUR_2D",
+                        "FSUR_3D",
+                        "FVOL_2D",
+                        "FVOL_3D",
+                        "GRAD_NOEU_THETA",
+                        "HYDR_ELNO_ELGA",
+                        "HYDR_NOEU_ELGA",
+                        "INDI_LOCA_ELGA",
+                        "INTE_ELNO_ACTI",
+                        "INTE_ELNO_REAC",
+                        "INTE_NOEU_ACTI",
+                        "INTE_NOEU_REAC",
+                        "IRRA",
+                        "LANL_ELGA",
+                        "META_ELGA_TEMP",
+                        "META_ELNO_TEMP",
+                        "META_NOEU_TEMP",
+                        "MODE_FLAMB",
+                        "PMPB_ELGA_SIEF",
+                        "PMPB_ELNO_SIEF",
+                        "PMPB_NOEU_SIEF",
+                        "PRES",
+                        "PRES_DBEL_DEPL",
+                        "PRES_ELNO_DBEL",
+                        "PRES_ELNO_IMAG",
+                        "PRES_ELNO_REEL",
+                        "PRES_NOEU_DBEL",
+                        "PRES_NOEU_IMAG",
+                        "PRES_NOEU_REEL",
+                        "PROJ_ELEM_SIGN",
+                        "PROJ_ELEM_SIGT",
+                        "PROJ_ELEM_SIT1",
+                        "PROJ_ELEM_SIT2",
+                        "RADI_ELGA_SIGM",
+                        "RADI_ELNO_SIGM",
+                        "RADI_NOEU_SIGM",
+                        "REAC_NODA",
+                        "SIEF_ELGA",
+                        "SIEF_ELGA_DEPL",
+                        "SIEF_ELNO",
+                        "SIEF_ELNO_ELGA",
+                        "SIEF_NOEU",
+                        "SIEF_NOEU_ELGA",
+                        "SIEF_SENO_SEGA",
+                        "SIEQ_ELNO_TUYO",
+                        "SIGM_ELNO_CART",
+                        "SIGM_ELNO_COQU",
+                        "SIGM_ELNO_DEPL",
+                        "SIGM_ELNO_SIEF",
+                        "SIGM_ELNO_TUYO",
+                        "SIGM_NOEU_CART",
+                        "SIGM_NOEU_COQU",
+                        "SIGM_NOEU_DEPL",
+                        "SIGM_NOEU_SIEF",
+                        "SIGM_NOZ1_ELGA",
+                        "SIGM_NOZ2_ELGA",
+                        "SIPO_ELNO_DEPL",
+                        "SIPO_ELNO_SIEF",
+                        "SIPO_NOEU_DEPL",
+                        "SIPO_NOEU_SIEF",
+                        "SIRE_ELNO_DEPL",
+                        "SIRE_NOEU_DEPL",
+                        "SOUR_ELGA_ELEC",
+                        "TEMP",
+                        "THETA",
+                        "VALE_CONT",
+                        "VALE_NCOU_MAXI",
+                        "VARI_ELGA",
+                        "VARI_ELNO",
+                        "VARI_ELNO_COQU",
+                        "VARI_ELNO_ELGA",
+                        "VARI_ELNO_TUYO",
+                        "VARI_NOEU",
+                        "VARI_NOEU_ELGA",
+                        "VITE",
+                        "VITE_ABSOLU",
+                        "VITE_VENT",
+                        )
+#& MODIF COMMUN  DATE 14/12/2009   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
+# RESPONSABLE DESROCHES X.DESROCHES
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# ce fichier contient la liste des  noms des grandeurs de CODE_ASTER
+def C_NOM_GRANDEUR() : return  ( #COMMUN# 
+"ABSC_R",
+"ADRSJEVE",
+"ADRSJEVN",
+"CAARPO",
+"CACABL",
+"CACOQU",
+"CADISA",
+"CADISK",
+"CADISM",
+"CAFI_R",
+"CAGEBA",
+"CAGEPO",
+"CAGNBA",
+"CAGNPO",
+"CAMASS",
+"CAORIE",
+"CAPOUF",
+"CARCRI",
+"CASECT",
+"CHLI_R",
+"CODE_I",
+"COEH_F",
+"COEH_R",
+"COMPOR",
+"CORR_R",
+"CRRU_R",
+"DBEL_R",
+"DCEL_I",
+"DDLI_C",
+"DDLI_F",
+"DDLI_R",
+"DDLM_C",
+"DDLM_R",
+"DEPL_C",
+"DEPL_F",
+"DEPL_R",
+"DISS_R",
+"DOMMAG",
+"DURT_R",
+"ENER_R",
+"EPSI_C",
+"EPSI_F",
+"EPSI_R",
+"ERRE_R",
+"FACY_R",
+"FELECR",
+"FISS_R",
+"FLAPLA",
+"FLUN_F",
+"FLUN_R",
+"FLUX_F",
+"FLUX_R",
+"FORC_C",
+"FORC_F",
+"FORC_R",
+"FREQ_R",
+"FTHM_F",
+"FTHM_R",
+"G",
+"GEOM_R",
+"G_DEPL_R",
+"HARMON",
+"HYDR_R",
+"IMPE_C",
+"IMPE_F",
+"IMPE_R",
+"IND_LOCA",
+"INFC_R",
+"INST_R",
+"INTE_R",
+"INTLOC",
+"IRRA_R",
+"ITECREL",
+"ITEDEC",
+"J",
+"LISTMA",
+"MACOMP",
+"MASS_R",
+"MATE_F",
+"NBSP_I",
+"NEUT_F",
+"NEUT_I",
+"NEUT_K16",
+"NEUT_K24",
+"NEUT_K8",
+"NEUT_R",
+"NUMC_I",
+"NUMMOD",
+"ONDE_F",
+"ONDE_R",
+"PESA_R",
+"PILO_K",
+"PILO_R",
+"POSI",
+"PREC",
+"PRES_C",
+"PRES_F",
+"PRES_R",
+"RAYO_F",
+"RAYO_R",
+"RCCM_K",
+"RCCM_R",
+"RESCREL",
+"RICE_TRA",
+"ROTA_R",
+"SECTION",
+"SIEF_C",
+"SIEF_R",
+"SIZZ_R",
+"SOUR_F",
+"SOUR_R",
+"SPMA_R",
+"STAOUDYN",
+"TEMP_C",
+"TEMP_F",
+"TEMP_R",
+"THETA",
+"VALO_R",
+"VANL_R",
+"VAR2_R",
+"VARI_R",
+"VENTCX_F",
+"VNOR_C",
+"VNOR_F",
+"VOISIN",
+"WEIBULL",
+"XCONTAC",
+                                 )
+#& MODIF COMMUN  DATE 29/03/2007   AUTEUR GRANET S.GRANET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# ce fichier contient la liste des PARA possibles pour les fonctions et les nappes
+def C_PARA_FONCTION() : return  ( #COMMUN#
+                   "DX","DY","DZ","DRX","DRY","DRZ","TEMP","TSEC",
+                   "INST","X","Y","Z","EPSI","META","FREQ","PULS","DSP",
+                   "AMOR","ABSC","SIGM","HYDR","SECH","PORO","SAT",
+                   "PGAZ","PCAP","PLIQ","PVAP","PAD","VITE","ENDO",
+                   "NORM","EPAIS","NEUT1","NEUT2",)
+#& MODIF COMMUN  DATE 07/07/2009   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE REZETTE C.REZETTE
+def C_RECH_LINEAIRE() : return FACT(statut='f',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="CORDE",into=("CORDE","MIXTE") ),
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-1 ),
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 3,val_max=999),
+           ITER_LINE_CRIT  =SIMP(statut='f',typ='I',defaut= 20),
+           PAS_MINI_CRIT   =SIMP(statut='f',typ='R',defaut=0.0E+0),
+           RHO_MIN         =SIMP(statut='f',typ='R',defaut=1.0E-2),
+           RHO_MAX         =SIMP(statut='f',typ='R',defaut=1.0E+1),
+           RHO_EXCL        =SIMP(statut='f',typ='R',defaut=0.9E-2,val_min=0.),
+         );
+#& MODIF COMMUN  DATE 20/04/2010   AUTEUR JAUBERT A.JAUBERT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE PROIX J.M.PROIX
+def C_RELATION() : return (             "ELAS",            # RESP. : PROIX J.M.PROIX   #COMMUN#
+                                        "ARME",            # RESP. : PEYRARD C.PEYRARD
+                                        "ASSE_CORN",       # RESP. : PEYRARD C.PEYRARD
+                                        "BARCELONE",       # RESP. : ELGHARIB J.ELGHARIB
+                                        "BETON_DOUBLE_DP", # RESP. : ELGHARIB J.ELGHARIB
+                                        "BETON_RAG",       # RESP. : DEBONNIERES P.DEBONNIERES
+                                        "BETON_REGLE_PR",  # RESP. : NECS
+                                        "BETON_UMLV_FP",   # RESP. : LEPAPE Y.LEPAPE
+                                        "CAM_CLAY",        # RESP. : ELGHARIB J.ELGHARIB
+                                        "CJS",             # RESP. : CHAVANT C.CHAVANT
+                                        "CORR_ACIER",      # RESP. : LEPAPE Y.LEPAPE
+                                        "CZM_EXP_REG",     # RESP. : LAVERNE J.LAVERNE
+                                        "CZM_EXP",         # RESP. : LAVERNE J.LAVERNE
+                                        "CZM_LIN_REG",     # RESP. : LAVERNE J.LAVERNE
+                                        "CZM_OUV_MIX",     # RESP. : LAVERNE J.LAVERNE
+                                        "CZM_TAC_MIX",     # RESP. : LAVERNE J.LAVERNE
+                                        "CZM_FAT_MIX",     # RESP. : LAVERNE J.LAVERNE
+                                        "DIS_BILI_ELAS",   # RESP. : FLEJOU J.L.FLEJOU
+                                        "DIS_CHOC",        # RESP. : DEVESA G.DEVESA
+                                        "DIS_ECRO_CINE",   # RESP. : FLEJOU J.L.FLEJOU
+                                        "DIS_GOUJ2E_ELAS", # RESP. : ANGLES J.ANGLES
+                                        "DIS_GOUJ2E_PLAS", # RESP. : ANGLES J.ANGLES
+                                        "DIS_GRICRA",      # RESP. : FERNANDES R.FERNANDES
+                                        "DIS_VISC",        # RESP. : FLEJOU J.L.FLEJOU
+                                        "DRUCK_PRAGER",    # RESP. : FERNANDES R.FERNANDES
+                                        "DRUCK_PRAG_N_A",  # RESP. : FERNANDES R.FERNANDES
+                                        "VISC_DRUC_PRAG",  # RESP. : ELGHARIB J.ELGHARIB
+                                        "ELAS_GONF",       # RESP. : GRANET S.GRANET
+                                        "ELAS_HYPER",      # RESP. : ABBAS M.ABBAS
+                                        "ENDO_FRAGILE",    # RESP. : MICHEL S.MICHEL
+                                        "ENDO_SCALAIRE",   # RESP. : MICHEL S.MICHEL
+                                        "ENDO_ISOT_BETON", # RESP. : MICHEL S.MICHEL
+                                        "ENDO_ORTH_BETON", # RESP. : MICHEL S.MICHEL
+                                        "GATT_MONERIE",    # RESP. : DEBONNIERES P.DEBONNIERES
+                                        "GLRC_DAMAGE",     # RESP. : MARKOVIC D.MARKOVIC
+                                        "GLRC_DM",         # RESP. : MARKOVIC D.MARKOVIC
+                                        "GRANGER_FP_INDT", # RESP. : ROSPARS C.ROSPARS
+                                        "GRANGER_FP",      # RESP. : ROSPARS C.ROSPARS
+                                        "GRANGER_FP_V",    # RESP. : ROSPARS C.ROSPARS
+                                        "GRAN_IRRA_LOG",   # RESP. : FERNANDES R.FERNANDES
+                                        "GRILLE_CINE_LINE",# RESP. : ROSPARS C.ROSPARS
+                                        "GRILLE_ISOT_LINE",# RESP. : ROSPARS C.ROSPARS
+                                        "GRILLE_PINTO_MEN",# RESP. : ROSPARS C.ROSPARS
+                                        "HOEK_BROWN_EFF",  # RESP. : CHAVANT C.CHAVANT
+                                        "HOEK_BROWN",      # RESP. : CHAVANT C.CHAVANT
+                                        "HOEK_BROWN_TOT",  # RESP. : CHAVANT C.CHAVANT
+                                        "HUJEUX",          # RESP. : FOUCAULT A.FOUCAULT
+                                        "IRRAD3M",         # RESP. : FLEJOU J.L.FLEJOU
+                                        "JOINT_BA",        # RESP. : MICHEL S.MICHEL
+                                        "JOINT_BANDIS",
+                                        "JOINT_MECA_RUPT", # RESP. : KAZYMYRENKO C.KAZYMYRENKO 
+                                        "KIT_DDI",         # RESP. : CHAVANT C.CHAVANT
+                                        "KIT_HHM",         # RESP. : GRANET S.GRANET
+                                        "KIT_HH",          # RESP. : GRANET S.GRANET
+                                        "KIT_HM",          # RESP. : GRANET S.GRANET
+                                        "KIT_THHM",        # RESP. : GRANET S.GRANET
+                                        "KIT_THH",         # RESP. : GRANET S.GRANET
+                                        "KIT_THM",         # RESP. : GRANET S.GRANET
+                                        "KIT_THV",         # RESP. : GRANET S.GRANET
+                                        "LABORD_1D",       # RESP. : VOLDOIRE F.VOLDOIRE
+                                        "LAIGLE",          # RESP. : ELGHARIB J.ELGHARIB
+                                        "LEMAITRE_IRRA",   # RESP. : FERNANDES R.FERNANDES
+                                        "LEMAITRE",        # RESP. : DEBONNIERES P.DEBONNIERES
+                                        "LEMA_SEUIL",      # RESP. : LECLERC S.LECLERC
+                                        "LETK",            # RESP. : ELGHARIB J.ELGHARIB
+                                        "LMARC_IRRA",      # RESP. : FERNANDES R.FERNANDES
+                                        "LMARC",           # RESP. : None
+                                        "MAZARS",          # RESP. : MICHEL S.MICHEL
+                                        "META_LEMA_ANI",   # RESP. : CANO V.CANO
+                                        "META_P_CL_PT_RE", # RESP. : CANO V.CANO
+                                        "META_P_CL_PT",    # RESP. : CANO V.CANO
+                                        "META_P_CL_RE",    # RESP. : CANO V.CANO
+                                        "META_P_CL",       # RESP. : CANO V.CANO
+                                        "META_P_IL_PT_RE", # RESP. : CANO V.CANO
+                                        "META_P_IL_PT",    # RESP. : CANO V.CANO
+                                        "META_P_IL_RE",    # RESP. : CANO V.CANO
+                                        "META_P_IL",       # RESP. : CANO V.CANO
+                                        "META_P_INL_PT_RE",# RESP. : CANO V.CANO
+                                        "META_P_INL_PT",   # RESP. : CANO V.CANO
+                                        "META_P_INL_RE",   # RESP. : CANO V.CANO
+                                        "META_P_INL",      # RESP. : CANO V.CANO
+                                        "META_V_CL_PT_RE", # RESP. : CANO V.CANO
+                                        "META_V_CL_PT",    # RESP. : CANO V.CANO
+                                        "META_V_CL_RE",    # RESP. : CANO V.CANO
+                                        "META_V_CL",       # RESP. : CANO V.CANO
+                                        "META_V_IL_PT_RE", # RESP. : CANO V.CANO
+                                        "META_V_IL_PT",    # RESP. : CANO V.CANO
+                                        "META_V_IL_RE",    # RESP. : CANO V.CANO
+                                        "META_V_IL",       # RESP. : CANO V.CANO
+                                        "META_V_INL_PT_RE",# RESP. : CANO V.CANO
+                                        "META_V_INL_PT",   # RESP. : CANO V.CANO
+                                        "META_V_INL_RE",   # RESP. : CANO V.CANO
+                                        "META_V_INL",      # RESP. : CANO V.CANO
+                                        "MONOCRISTAL",     # RESP. : PROIX J.M.PROIX
+                                        "MULTIFIBRE",      # RESP. : FLEJOU J.L.FLEJOU
+                                        "NORTON_HOFF",     # RESP. : MICHEL S.MICHEL
+                                        "PINTO_MENEGOTTO", # RESP. : ROSPARS C.ROSPARS
+                                        "POLYCRISTAL",     # RESP. : PROIX J.M.PROIX
+                                        "ROUSSELIER",      # RESP. : CANO V.CANO
+                                        "ROUSS_PR",        # RESP. : PARROT A.PARROT
+                                        "ROUSS_VISC",      # RESP. : CANO V.CANO
+                                        "RUPT_FRAG",       # RESP. : LAVERNE J.LAVERNE
+                                        "SANS",            # RESP. : MICHEL S.MICHEL
+                                        "VENDOCHAB",       # RESP. : PROIX J.M.PROIX
+                                        "VISC_CIN1_CHAB",  # RESP. : PROIX J.M.PROIX
+                                        "VISC_CIN2_CHAB",  # RESP. : PROIX J.M.PROIX
+                                        "VISC_CIN2_MEMO",  # RESP. : PROIX J.M.PROIX
+                                        "VISC_IRRA_LOG",   # RESP. : FERNANDES R.FERNANDES
+                                        "VISC_ISOT_LINE",  # RESP. : MICHEL S.MICHEL
+                                        "VISC_ISOT_TRAC",  # RESP. : PROIX J.M.PROIX
+                                        "VISCOCHAB",       # RESP. : GENIAUT S.GENIAUT
+                                        "VISC_TAHERI",     # RESP. : TAHERI S.TAHERI
+                                        "VMIS_ASYM_LINE",  # RESP. : PROIX J.M.PROIX
+                                        "VMIS_CIN1_CHAB",  # RESP. : PROIX J.M.PROIX
+                                        "VMIS_CIN2_CHAB",  # RESP. : PROIX J.M.PROIX
+                                        "VMIS_CIN2_MEMO",  # RESP. : PROIX J.M.PROIX
+                                        "VMIS_CINE_LINE",  # RESP. : PROIX J.M.PROIX
+                                        "VMIS_ECMI_LINE",  # RESP. : PROIX J.M.PROIX
+                                        "VMIS_ECMI_TRAC",  # RESP. : PROIX J.M.PROIX
+                                        "VMIS_ISOT_LINE",  # RESP. : PROIX J.M.PROIX
+                                        "VMIS_ISOT_PUIS",  # RESP. : PROIX J.M.PROIX
+                                        "VMIS_ISOT_TRAC",  # RESP. : PROIX J.M.PROIX
+                                        "VMIS_POU_FLEJOU", # RESP. : FLEJOU J.L.FLEJOU
+                                        "VMIS_POU_LINE",   # RESP. : PROIX J.M.PROIX
+                                        "ZMAT",            # RESP. : PROIX J.M.PROIX
+                                        "IMPLEX_FRAG",     # RESP. : BARGELLINI R.BARGELLINI
+                                        "IMPLEX_ISOT_BETO",# RESP. : BARGELLINI R.BARGELLINI
+                                        "IMPLEX_ISOT_LINE",# RESP. : BARGELLINI R.BARGELLINI
+                                     ) 
+#& MODIF COMMUN  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE REZETTE C.REZETTE
+def C_SOLVEUR() : return FACT(statut='d',
+           METHODE=SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","FETI","PETSC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_direct_hybride =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' or METHODE=='FETI' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON","DECOUPE") ),
+           ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+             b_ldltinc       =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+               NIVE_REMPLISSAGE    =SIMP(statut='f',typ='I',defaut= 0 ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+               ),
+             b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),             
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             FILTRAGE_MATRICE =SIMP(statut='f',typ='R',defaut=-1.0,),
+             MIXER_PRECISION =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             ),
+           b_feti          =BLOC(condition = "METHODE == 'FETI' ",fr="Paramètres de la méthode FETI 1",
+             PARTITION       =SIMP(statut='o',typ=sd_feti_sdaster),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.E-6,val_min=0.),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+             REAC_RESI       =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+             TYPE_REORTHO_DD =SIMP(statut='f',typ='TXM',defaut="GSM",into=("SANS","GS","GSM","IGSM") ),
+             NB_REORTHO_DD   =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+             NB_REORTHO_INST =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+             PRE_COND        =SIMP(statut='f',typ='TXM',defaut="LUMPE",into=("LUMPE","SANS") ),
+             SCALING         =SIMP(statut='f',typ='TXM',defaut="MULT",into=("SANS","MULT") ),
+             VERIF_SDFETI    =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+             TEST_CONTINU    =SIMP(statut='f',typ='R',defaut=1.E-8,val_min=0.),
+             INFO_FETI       =SIMP(statut='f',typ='TXM',defaut='FFFFFFFFFFFFFFFFFFFFFFFF'),
+             STOCKAGE_GI     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON","CAL") ),
+             NB_SD_PROC0     =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+             ACCELERATION_SM =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+             ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+               NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+               REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+             ),             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
+           ),
+
+
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         );
+#& MODIF COMMUN  DATE 27/06/2005   AUTEUR D6BHHJP J.P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+#
+# ce fichier contient la liste des "into" possibles pour le mot cle TYPE_CHAM
+def C_TYPE_CHAM_INTO() : #COMMUN#
+   l=[]
+   for gd in C_NOM_GRANDEUR() :
+        for typ in ("ELEM","ELNO","ELGA","CART","NOEU") :
+             l.append(typ+"_"+gd)
+   return tuple(l)
+
+#& MODIF COMMANDE  DATE 22/09/2009   AUTEUR SELLENET N.SELLENET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE FLEJOU J-L.FLEJOU
+AFFE_CARA_ELEM=OPER(nom="AFFE_CARA_ELEM",op=  19,sd_prod=cara_elem,
+   fr="Affectation de caractéristiques à des éléments de structure",
+   reentrant='n',
+   UIinfo ={"groupes":("Modélisation",)},
+   regles = (AU_MOINS_UN('POUTRE','BARRE','COQUE','CABLE','DISCRET','DISCRET_2D','MASSIF',
+                         'GRILLE','MULTIFIBRE','RIGI_PARASOL'),
+             PRESENT_PRESENT('MULTIFIBRE','GEOM_FIBRE'),),
+   MODELE = SIMP(statut='o',typ=modele_sdaster ),
+   INFO   = SIMP(statut='f',typ='I', defaut= 1 ,into=(1,2) ),
+   VERIF  = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=("MAILLE","NOEUD") ),
+
+#  ============================================================================
+   POUTRE               = FACT(statut= 'f',max= '**',
+      regles               = (UN_PARMI('MAILLE','GROUP_MA'),),
+      MAILLE               = SIMP(statut= 'f',typ= ma  ,validators= NoRepeat(),max= '**'),
+      GROUP_MA             = SIMP(statut= 'f',typ= grma,validators= NoRepeat(),max= '**'),
+      SECTION              = SIMP(statut= 'o',typ= 'TXM' ,into= ("GENERALE","RECTANGLE","CERCLE") ),
+      PREC_AIRE            = SIMP(statut= 'f',typ= 'R',defaut= 0.01),
+      PREC_INERTIE         = SIMP(statut= 'f',typ= 'R',defaut= 0.1),
+      b_generale           = BLOC(condition = "SECTION == 'GENERALE'",
+         VARI_SECT            = SIMP(statut= 'f',typ= 'TXM',into= ("CONSTANT","HOMOTHETIQUE"),defaut= "CONSTANT"),
+         b_constant           = BLOC(condition = "VARI_SECT == 'CONSTANT'",
+            CARA                 = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 4 ,max= 15,
+                                       fr= "A,IY,IZ,JX sont des paramètres obligatoires",
+                                       into= ("A","IY","IZ","AY","AZ","EY","EZ","JX","RY","RZ","RT",
+                                             "JG","IYR2","IZR2","AI") ),
+            VALE                    = SIMP(statut= 'o',typ= 'R',min= 4 ,max= 15), ),
+         b_homothetique       = BLOC(condition = "VARI_SECT == 'HOMOTHETIQUE'",
+            CARA                 = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 8 ,max= 30,
+                                       fr= "A1,A2,IY1,IY2,IZ1,IZ2,JX1,JX2 sont des paramètres obligatoires",
+                                       into= ("A1","IY1","IZ1","AY1","AZ1","EY1","EZ1","JX1","RY1",
+                                             "RZ1","RT1","JG1","IYR21","IZR21","AI1",
+                                             "A2","IY2","IZ2","AY2","AZ2","EY2","EZ2","JX2","RY2",
+                                             "RZ2","RT2","JG2","IYR22","IZR22","AI2") ),
+            VALE                 = SIMP(statut= 'o',typ= 'R',min= 8 ,max= 30),),
+      ),
+      b_rectangle          = BLOC(condition = "SECTION == 'RECTANGLE'",
+         VARI_SECT            = SIMP(statut= 'f',typ= 'TXM',into= ("CONSTANT","HOMOTHETIQUE","AFFINE"),defaut= "CONSTANT"),
+         b_constant           = BLOC(condition = "VARI_SECT == 'CONSTANT'",
+            CARA                 = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 1 ,max= 4,
+                                       into= ("H","EP", "HY","HZ","EPY","EPZ") ),
+            VALE                 = SIMP(statut= 'o',typ= 'R',min= 1 ,max= 4), ),
+         b_homothetique       = BLOC(condition = "VARI_SECT == 'HOMOTHETIQUE'",
+            CARA                 = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 2 ,max= 8,
+                                       into= ("H1","HZ1","HY1","EP1","EPY1","EPZ1",
+                                          "H2","HZ2","HY2","EP2","EPY2","EPZ2") ),
+            VALE                 = SIMP(statut= 'o',typ= 'R',min= 2 ,max= 8), ),
+         b_affine             = BLOC(condition = "VARI_SECT == 'AFFINE'",
+            CARA                 = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 3 ,max= 6,
+                                       into= ("HY","EPY", "HZ1","EPZ1","HZ2","EPZ2") ),
+            VALE                 = SIMP(statut= 'o',typ= 'R',min= 3 ,max= 6), ),
+      ),
+      b_cercle             = BLOC(condition = "SECTION == 'CERCLE'",
+         VARI_SECT            = SIMP(statut= 'f',typ= 'TXM',into= ("CONSTANT","HOMOTHETIQUE"),defaut= "CONSTANT"),
+         b_constant           = BLOC(condition = "VARI_SECT == 'CONSTANT'",
+            CARA                 = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 1 ,max= 2,
+                                       fr= "R est un paramètre obligatoire",
+                                       into= ("R","EP") ),
+            VALE                 = SIMP(statut= 'o',typ= 'R',min= 1 ,max= 2), ),
+         b_homothetique       = BLOC(condition = "VARI_SECT == 'HOMOTHETIQUE'",
+            CARA                 = SIMP(statut= 'o',typ= 'TXM',validators= NoRepeat(),min= 2 ,max= 4,
+                                       fr= "R1, R2 sont des paramètres obligatoires",
+                                       into= ("R1","R2","EP1","EP2") ),
+            VALE                 = SIMP(statut= 'o',typ= 'R',min= 2 ,max= 4), ),
+         MODI_METRIQUE     = SIMP(statut= 'f',typ= 'TXM',defaut= "NON",into= ("OUI","NON") ),
+         FCX               = SIMP(statut= 'f',typ= (fonction_sdaster,nappe_sdaster,formule) ),
+         TUYAU_NSEC        = SIMP(statut= 'f',typ= 'I',val_max= 32,defaut= 16),
+         TUYAU_NCOU        = SIMP(statut= 'f',typ= 'I',val_max= 10,defaut= 3),
+      ),
+   ),
+
+#  ============================================================================
+   BARRE                = FACT(statut='f',max='**',
+      regles               = (UN_PARMI('MAILLE','GROUP_MA'),),
+      MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+      SECTION              = SIMP(statut='o',typ='TXM',into=("GENERALE","RECTANGLE","CERCLE") ),
+      b_generale           = BLOC(condition = "SECTION=='GENERALE'",
+         CARA                 = SIMP(statut='o',typ='TXM',into=("A",) ),
+         VALE                 = SIMP(statut='o',typ='R',min=1,max=1 ), ),
+      b_rectangle          = BLOC(condition = "SECTION=='RECTANGLE'",
+         CARA                 = SIMP(statut='o',typ='TXM',
+                                    into=("H","EP","HZ","HY","EPY","EPZ"),
+                                    validators=NoRepeat(),min=1,max=4 ),
+         VALE                 = SIMP(statut='o',typ='R',min=1,max=4 ), ),
+      b_cercle             =  BLOC(condition = "SECTION=='CERCLE'",
+         CARA                 = SIMP(statut='o',typ='TXM',validators=NoRepeat(),min=1,max=2,into=("R","EP") ),
+         VALE                 = SIMP(statut='o',typ='R',min=1,max=2 ), ),
+      FCX                  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+   ),
+
+#  ============================================================================
+   COQUE                = FACT(statut='f',max='**',
+      regles               = (UN_PARMI('MAILLE','GROUP_MA' ),
+                              PRESENT_PRESENT( 'EXCENTREMENT','INER_ROTA' ),
+                              AU_MOINS_UN('EPAIS','EPAIS_F',),
+                              PRESENT_ABSENT('EPAIS','EPAIS_F',),
+                              EXCLUS('ANGL_REP','VECTEUR'),),
+      MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+      EPAIS                = SIMP(statut='f',typ='R' ),
+      EPAIS_F              = SIMP(statut='f',typ=(para_sensi,),min=1 ,max=1 ),
+      ANGL_REP             = SIMP(statut='f',typ='R',min=2,max=2),
+      VECTEUR              = SIMP(statut='f',typ='R',min=3,max=3),
+      A_CIS                = SIMP(statut='f',typ='R',defaut= 0.8333333E0),
+      COEF_RIGI_DRZ        = SIMP(statut='f',typ='R',defaut= 1.0E-5 ),
+      COQUE_NCOU           = SIMP(statut='f',typ='I',defaut= 1 ),
+      EXCENTREMENT         = SIMP(statut='f',typ='R' ),
+      INER_ROTA            = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+      MODI_METRIQUE        = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+   ),
+
+#  ============================================================================
+   CABLE                = FACT(statut='f',max='**',
+      regles               = (UN_PARMI('MAILLE','GROUP_MA'),),
+      MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+      N_INIT               = SIMP(statut='f',typ='R',defaut= 5000. ),
+      SECTION              = SIMP(statut='f',typ='R' ),
+      FCX                  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+   ),
+
+#  ============================================================================
+   DISCRET              = FACT(statut='f',max='**',
+      REPERE               = SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
+      AMOR_HYST            = SIMP(statut='f',typ='R' ),
+
+      SYME                 = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),),
+      b_SYME_OUI           = BLOC(condition="SYME=='OUI'",
+         fr="SYMETRIQUE: Affectation de matrices de rigidité, de masse ou d'amortissement à des mailles ou noeuds",
+         CARA                 = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,defaut="None",
+            into=("K_T_D_N", "K_T_D_L", "K_TR_D_N", "K_TR_D_L", "K_T_N", "K_T_L", "K_TR_N", "K_TR_L",
+                  "M_T_D_N",            "M_TR_D_N",             "M_T_N", "M_T_L", "M_TR_N", "M_TR_L",
+                  "A_T_D_N", "A_T_D_L", "A_TR_D_N", "A_TR_D_L", "A_T_N", "A_T_L", "A_TR_N", "A_TR_L",),),
+         #  Affection des caractéristiques de RIGIDITE/AMORTISSEMENT/MASSE
+         b_AK_T_D_N            = BLOC(condition = "((CARA=='K_T_D_N')or(CARA=='A_T_D_N'))",
+            fr="NOEUD: 3 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=3 ,max=3 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=3 ,max=3 ),),
+         b_AK_T_D_L            = BLOC(condition = "((CARA=='K_T_D_L')or(CARA=='A_T_D_L'))",
+            fr="SEGMENT: 3 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=3 ,max=3 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=3 ,max=3 ),),
+         b_AK_TR_D_N           = BLOC(condition = "((CARA=='K_TR_D_N')or(CARA=='A_TR_D_N'))",
+            fr="NOEUD: 6 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=6 ,max=6 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=6 ,max=6 ),),
+         b_AK_TR_D_L           = BLOC(condition = "((CARA=='K_TR_D_L')or(CARA=='A_TR_D_L'))",
+            fr="SEGMENT: 6 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=6 ,max=6 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=6 ,max=6 ),),
+         b_MAK_T_N              = BLOC(condition = "((CARA=='K_T_N')or(CARA=='A_T_N')or(CARA=='M_T_N'))",
+            fr="NOEUD: 6 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=6 ,max=6 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=6 ,max=6 ),),
+         b_MAK_T_L              = BLOC(condition = "((CARA=='K_T_L')or(CARA=='A_T_L')or(CARA=='M_T_L'))",
+            fr="SEGMENT: 21 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=21,max=21),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=21 ,max=21 ),),
+         b_MAK_TR_N             = BLOC(condition = "((CARA=='K_TR_N')or(CARA=='A_TR_N')or(CARA=='M_TR_N'))",
+            fr="NOEUD: 21 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=21,max=21),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=21 ,max=21 ),),
+         b_MAK_TR_L             = BLOC(condition = "((CARA=='K_TR_L')or(CARA=='A_TR_L')or(CARA=='M_TR_L'))",
+            fr="SEGMENT: 78 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=78,max=78),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=78 ,max=78 ),),
+         #  Affection des caractéristiques de MASSE
+         b_M_T_D_N           = BLOC(condition = "(CARA=='M_T_D_N')",
+            fr="NOEUD: 1 valeur de masse",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=1 ,max=1 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=1 ,max=1 ),),
+         b_M_TR_D_N           = BLOC(condition = "(CARA=='M_TR_D_N')",
+            fr="NOEUD: 1 valeur de masse, 6 valeurs du tenseur d'inertie, 3 composantes du vecteur d'excentrement",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=10,max=10),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=10 ,max=10 ),),
+      ),
+      #     éléments à matrice non-symétrique
+      #        b_MAK_T_N_NS       'K_T_N'     'A_T_N'    'M_T_N'
+      #        b_MAK_T_L_NS       'K_T_L'     'A_T_L'    'M_T_L'
+      #        b_MAK_TR_N_NS      'K_TR_N'    'A_TR_N'   'M_TR_N'
+      #        b_MAK_TR_L_NS      'K_TR_L'    'A_TR_L'   'M_TR_L'
+      b_SYME_NON           = BLOC(condition="SYME=='NON'",
+         fr="NON-SYMETRIQUE: Affectation de matrices de rigidité, de masse ou d'amortissement à des mailles ou noeuds",
+         CARA                 = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,defaut="None",
+            into=("K_T_N", "K_T_L", "K_TR_N", "K_TR_L",
+                  "M_T_N", "M_T_L", "M_TR_N", "M_TR_L",
+                  "A_T_N", "A_T_L", "A_TR_N", "A_TR_L",),),
+         #  Affection des caractéristiques de RIGIDITE/AMORTISSEMENT/MASSE : NON-SYMETRIQUE
+         b_MAK_T_N_NS           = BLOC(condition = "((CARA=='K_T_N')or(CARA=='A_T_N')or(CARA=='M_T_N'))",
+            fr="NOEUD: 9 valeurs (matrice pleine par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=9 ,max=9 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=9 ,max=9 ),),
+         b_MAK_T_L_NS           = BLOC(condition = "((CARA=='K_T_L')or(CARA=='A_T_L')or(CARA=='M_T_L'))",
+            fr="SEGMENT: 36 valeurs (matrice pleine par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=36,max=36),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=36 ,max=36 ),),
+         b_MAK_TR_N_NS          = BLOC(condition = "((CARA=='K_TR_N')or(CARA=='A_TR_N')or(CARA=='M_TR_N'))",
+            fr="NOEUD: 36 valeurs (matrice pleine par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=36,max=36),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=36 ,max=36 ),),
+         b_MAK_TR_L_NS          = BLOC(condition = "((CARA=='K_TR_L')or(CARA=='A_TR_L')or(CARA=='M_TR_L'))",
+            fr="SEGMENT: 144 valeurs (matrice pleine par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=144,max=144),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=144 ,max=144 ),),
+      ),
+   ),
+#  ============================================================================
+   DISCRET_2D           = FACT(statut='f',max='**',
+      REPERE               = SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
+      AMOR_HYST            = SIMP(statut='f',typ='R' ),
+      SYME                 = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),),
+      b_SYME_OUI           = BLOC(condition="SYME=='OUI'",
+         fr="SYMETRIQUE: Affectation de matrices de rigidité, de masse ou d'amortissement à des mailles ou noeuds",
+         CARA                 = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,defaut="None",
+            into=("K_T_D_N", "K_T_D_L", "K_TR_D_N", "K_TR_D_L", "K_T_N", "K_T_L", "K_TR_N", "K_TR_L",
+                  "M_T_D_N",            "M_TR_D_N",             "M_T_N", "M_T_L", "M_TR_N", "M_TR_L",
+                  "A_T_D_N", "A_T_D_L", "A_TR_D_N", "A_TR_D_L", "A_T_N", "A_T_L", "A_TR_N", "A_TR_L",),),
+         #  Affection des caractéristiques de RIGIDITE/AMORTISSEMENT/MASSE
+         b_AK_T_D_N            = BLOC(condition = "((CARA=='K_T_D_N')or(CARA=='A_T_D_N'))",
+            fr="NOEUD: 2 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=2 ,max=2 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=2 ,max=2 ),),
+         b_AK_T_D_L            = BLOC(condition = "((CARA=='K_T_D_L')or(CARA=='A_T_D_L'))",
+            fr="SEGMENT: 2 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=2 ,max=2 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=2 ,max=2 ),),
+         b_AK_TR_D_N           = BLOC(condition = "((CARA=='K_TR_D_N')or(CARA=='A_TR_D_N'))",
+            fr="NOEUD: 3 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=3 ,max=3 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=3 ,max=3 ),),
+         b_AK_TR_D_L           = BLOC(condition = "((CARA=='K_TR_D_L')or(CARA=='A_TR_D_L'))",
+            fr="SEGMENT: 3 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=3 ,max=3 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=3 ,max=3 ),),
+         b_MAK_T_N              = BLOC(condition = "((CARA=='K_T_N')or(CARA=='A_T_N')or(CARA=='M_T_N'))",
+            fr="NOEUD: 3 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=3 ,max=3 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=3 ,max=3 ),),
+         b_MAK_T_L              = BLOC(condition = "((CARA=='K_T_L')or(CARA=='A_T_L')or(CARA=='M_T_L'))",
+            fr="SEGMENT: 10 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=10,max=10),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=10 ,max=10 ),),
+         b_MAK_TR_N             = BLOC(condition = "((CARA=='K_TR_N')or(CARA=='A_TR_N')or(CARA=='M_TR_N'))",
+            fr="NOEUD: 6 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=6 ,max=6),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=6 ,max=6 ),),
+         b_MAK_TR_L             = BLOC(condition = "((CARA=='K_TR_L')or(CARA=='A_TR_L')or(CARA=='M_TR_L'))",
+            fr="SEGMENT: 21 valeurs (triangulaire supérieure par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=21,max=21),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=21 ,max=21 ),),
+         #  Affection des caractéristiques de MASSE
+         b_M_T_D_N            = BLOC(condition = "(CARA=='M_T_D_N')",
+            fr="NOEUD: 1 valeur de masse",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=1 ,max=1 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=1 ,max=1 ),),
+         b_M_TR_D_N           = BLOC(condition = "(CARA=='M_TR_D_N')",
+            fr="NOEUD: 1 valeur de masse (m), 1 valeur d'inertie (Izz), 2 composantes du vecteur d'excentrement",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=4 ,max=4 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=4 ,max=4 ),),
+      ),
+      #     éléments à matrice non-symétrique
+      #        b_MAK_T_N_NS       'K_T_N'     'A_T_N'    'M_T_N'
+      #        b_MAK_T_L_NS       'K_T_L'     'A_T_L'    'M_T_L'
+      #        b_MAK_TR_N_NS      'K_TR_N'    'A_TR_N'   'M_TR_N'
+      #        b_MAK_TR_L_NS      'K_TR_L'    'A_TR_L'   'M_TR_L'
+      b_SYME_NON           = BLOC(condition="SYME=='NON'",
+         fr="NON-SYMETRIQUE: Affectation de matrices de rigidité, de masse ou d'amortissement à des mailles ou noeuds",
+         CARA                 = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,defaut="None",
+            into=("K_T_N", "K_T_L", "K_TR_N", "K_TR_L",
+                  "M_T_N", "M_T_L", "M_TR_N", "M_TR_L",
+                  "A_T_N", "A_T_L", "A_TR_N", "A_TR_L",),),
+         #  Affection des caractéristiques de RIGIDITE/AMORTISSEMENT/MASSE : NON-SYMETRIQUE
+         b_MAK_T_N_NS           = BLOC(condition = "((CARA=='K_T_N')or(CARA=='A_T_N')or(CARA=='M_T_N'))",
+            fr="NOEUD: 4 valeurs (matrice pleine par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=4 ,max=4 ),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=4 ,max=4 ),),
+         b_MAK_T_L_NS           = BLOC(condition = "((CARA=='K_T_L')or(CARA=='A_T_L')or(CARA=='M_T_L'))",
+            fr="SEGMENT: 16 valeurs (matrice pleine par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=16,max=16),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=16 ,max=16 ),),
+         b_MAK_TR_N_NS          = BLOC(condition = "((CARA=='K_TR_N')or(CARA=='A_TR_N')or(CARA=='M_TR_N'))",
+            fr="NOEUD: 9 valeurs (matrice pleine par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=9 ,max=9),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=9 ,max=9 ),),
+         b_MAK_TR_L_NS          = BLOC(condition = "((CARA=='K_TR_L')or(CARA=='A_TR_L')or(CARA=='M_TR_L'))",
+            fr="SEGMENT: 36 valeurs (matrice pleine par colonne)",
+            regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                                    UN_PARMI('VALE','VALE_F'),),
+            MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            VALE                 = SIMP(statut='f',typ='R',min=36,max=36),
+            VALE_F               = SIMP(statut='f',typ=(para_sensi,),min=36 ,max=36 ),),
+      ),
+   ),
+#  ============================================================================
+   ORIENTATION          = FACT(statut='f',max='**',
+      regles               = (UN_PARMI('MAILLE','GROUP_MA','NOEUD','GROUP_NO' ),),
+      MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+      NOEUD                = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+      GROUP_NO             = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+      CARA                 = SIMP(statut='o',typ='TXM',
+                                 into=("VECT_Y","ANGL_VRIL","VECT_X_Y","ANGL_NAUT","GENE_TUYAU") ),
+      VALE                 = SIMP(statut='o',typ='R',max='**'),
+      PRECISION            = SIMP(statut='f',typ='R',defaut= 1.0E-4 ),
+      CRITERE              = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+   ),
+
+# ============================================================================
+   DEFI_ARC             = FACT(statut='f',max='**',
+      regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                              UN_PARMI('ORIE_ARC','CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE',
+                                       'POIN_TANG','NOEUD_POIN_TANG','GROUP_NO_POIN_TG'),
+                              PRESENT_PRESENT('ORIE_ARC','RAYON'),
+                              EXCLUS('COEF_FLEX','COEF_FLEX_XY'),
+                              EXCLUS('COEF_FLEX','COEF_FLEX_XZ'),
+                              EXCLUS('INDI_SIGM','INDI_SIGM_XY'),
+                              EXCLUS('INDI_SIGM','INDI_SIGM_XZ'),
+                              PRESENT_PRESENT('COEF_FLEX_XY','COEF_FLEX_XZ'),
+                              PRESENT_PRESENT('INDI_SIGM_XY','INDI_SIGM_XZ'),),
+      MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+      ORIE_ARC             = SIMP(statut='f',typ='R'),
+      CENTRE               = SIMP(statut='f',typ='R',max='**'),
+      NOEUD_CENTRE         = SIMP(statut='f',typ=no),
+      GROUP_NO_CENTRE      = SIMP(statut='f',typ=grno),
+      POIN_TANG            = SIMP(statut='f',typ='R',max='**'),
+      NOEUD_POIN_TANG      = SIMP(statut='f',typ=no),
+      GROUP_NO_POIN_TG     = SIMP(statut='f',typ=grno),
+      RAYON                = SIMP(statut='f',typ='R'),
+      COEF_FLEX            = SIMP(statut='f',typ='R'),
+      INDI_SIGM            = SIMP(statut='f',typ='R'),
+      COEF_FLEX_XY         = SIMP(statut='f',typ='R'),
+      INDI_SIGM_XY         = SIMP(statut='f',typ='R'),
+      COEF_FLEX_XZ         = SIMP(statut='f',typ='R'),
+      INDI_SIGM_XZ         = SIMP(statut='f',typ='R'),
+      PRECISION            = SIMP(statut='f',typ='R',defaut= 1.0E-3),
+      CRITERE              = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+   ),
+
+#============================================================================
+   MASSIF               = FACT(statut='f',max='**',
+      regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                              UN_PARMI('ANGL_REP','ANGL_AXE','ANGL_EULER'),
+                              EXCLUS('ANGL_REP','ANGL_EULER'),
+                              EXCLUS('ANGL_REP','ANGL_AXE'),
+                              EXCLUS('ANGL_REP','ORIG_AXE'),
+                              PRESENT_PRESENT('ANGL_AXE','ORIG_AXE'), ),
+      MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+      ANGL_REP             = SIMP(statut='f',typ='R',max=3),
+      ANGL_EULER           = SIMP(statut='f',typ='R',min=3,max=3),
+      ANGL_AXE             = SIMP(statut='f',typ='R',max=2),
+      ORIG_AXE             = SIMP(statut='f',typ='R',max=3),
+   ),
+
+#  ============================================================================
+   POUTRE_FLUI          = FACT(statut='f',max='**',
+      regles               = (UN_PARMI('MAILLE','GROUP_MA'),),
+      MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+      B_T                  = SIMP(statut='o',typ='R'),
+      B_N                  = SIMP(statut='o',typ='R'),
+      B_TN                 = SIMP(statut='o',typ='R',defaut= 0.E+0 ),
+      A_FLUI               = SIMP(statut='o',typ='R'),
+      A_CELL               = SIMP(statut='o',typ='R'),
+      COEF_ECHELLE         = SIMP(statut='o',typ='R'),
+   ),
+
+#  ============================================================================
+   GRILLE               = FACT(statut='f',max='**',
+      regles               = (UN_PARMI('MAILLE','GROUP_MA'),
+                              EXCLUS('ANGL_REP','ORIG_AXE'),
+                              ENSEMBLE('ORIG_AXE','AXE')),
+      MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+      SECTION              = SIMP(statut='o',typ='R'),
+      ANGL_REP             = SIMP(statut='f',typ='R',max=2),
+      EXCENTREMENT         = SIMP(statut='f',typ='R'),
+      ORIG_AXE             = SIMP(statut='f',typ='R',max='**'),
+      AXE                  = SIMP(statut='f',typ='R',max='**'),
+      COEF_RIGI_DRZ        = SIMP(statut='f',typ='R',defaut= 1.0E-10 ),
+      GRILLE_NCOU          = SIMP(statut='f',typ='I',defaut= 1,),
+   ),
+
+#============================================================================
+   RIGI_PARASOL         = FACT(statut='f',max='**',
+      regles               = (UN_PARMI('COEF_GROUP','FONC_GROUP'),
+                              UN_PARMI('COOR_CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+                              EXCLUS('GROUP_MA_POI1','GROUP_MA_SEG2'),),
+      GROUP_MA             = SIMP(statut='o',typ=ma,validators=NoRepeat(),max='**',
+         fr="Surface servant à répartir les caractéristiques des discrets"),
+      GROUP_MA_POI1        = SIMP(statut='f',typ=ma,validators=NoRepeat(),max=1,
+         fr="Mailles de type point correspondant aux discrets"),
+      GROUP_MA_SEG2        = SIMP(statut='f',typ=ma,validators=NoRepeat(),max=1,
+         fr="Mailles de type seg2 correspondant aux discrets"),
+      FONC_GROUP           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+      COEF_GROUP           = SIMP(statut='f',typ='R',max='**'),
+      REPERE               = SIMP(statut='f',typ='TXM',into=("LOCAL","GLOBAL") ),
+      CARA                 = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=2,
+                                 into=("K_TR_D_N","K_T_D_N","K_TR_D_L","K_T_D_L",
+                                       "A_TR_D_N","A_T_D_N","A_TR_D_L","A_T_D_L") ),
+      VALE                 = SIMP(statut='o',typ='R',max='**'),
+      GROUP_NO_CENTRE      = SIMP(statut='f',typ=grno),
+      NOEUD_CENTRE         = SIMP(statut='f',typ=no),
+      COOR_CENTRE          = SIMP(statut='f',typ='R',min=2,max=3),
+      EUROPLEXUS           = SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON"),
+   ),
+
+#============================================================================
+   RIGI_MISS_3D         = FACT(statut='f',max='**',
+      GROUP_MA_POI1        = SIMP(statut='o',typ=ma,max=1),
+      GROUP_MA_SEG2        = SIMP(statut='f',typ=ma,max=1),
+      FREQ_EXTR            = SIMP(statut='o',typ='R',max=1),
+      UNITE_RESU_IMPE      = SIMP(statut='f',typ='I',defaut=30),
+   ),
+
+#============================================================================
+   GEOM_FIBRE           = SIMP(statut='f',max=1,typ=gfibre_sdaster,
+      fr="Donner le nom de la SD regroupant tous les groupes de fibres (issue de DEFI_GEOM_FIBRE)"),
+   MULTIFIBRE           = FACT(statut='f',max='**',
+      regles               = (AU_MOINS_UN('GROUP_MA','MAILLE'),),
+      GROUP_MA             = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+      MAILLE               = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+      GROUP_FIBRE          = SIMP(statut='o',typ='TXM',max='**'),
+   ),
+);
+#& MODIF COMMANDE  DATE 16/09/2008   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE None
+AFFE_CHAR_ACOU=OPER(nom="AFFE_CHAR_ACOU",op=  68,sd_prod=char_acou,
+                    fr="Affectation de charges et conditions aux limites acoustiques constantes",
+                    reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+         regles=(AU_MOINS_UN('PRES_IMPO','VITE_FACE','IMPE_FACE','LIAISON_UNIF' ),),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         METHODE         =SIMP(statut='c',typ='TXM',fr="Stratégie de résolution pour les pressions imposées",
+                               into=('DUALISATION',),defaut='DUALISATION',),
+                               # METHODE='ELIMINATION' est traité dans le fortran mais dangereux actuellement
+         PRES_IMPO       =FACT(statut='f',max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           PRES            =SIMP(statut='o',typ='C' ),
+         ),
+         VITE_FACE       =FACT(statut='f',max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           VNOR            =SIMP(statut='o',typ='C' ),
+         ),
+         IMPE_FACE       =FACT(statut='f',max='**',
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           IMPE            =SIMP(statut='o',typ='C' ),
+         ),
+         LIAISON_UNIF    =FACT(statut='f',max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE' ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 20/04/2010   AUTEUR JAUBERT A.JAUBERT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+def affe_char_cine_prod(MECA_IMPO,THER_IMPO,ACOU_IMPO,EVOL_IMPO,**args):
+  if MECA_IMPO != None  : return char_cine_meca
+  if THER_IMPO != None  : return char_cine_ther
+  if ACOU_IMPO != None  : return char_cine_acou
+  if EVOL_IMPO != None  :
+      if AsType(EVOL_IMPO) in (evol_elas,evol_noli) :
+          return char_cine_meca
+      elif AsType(EVOL_IMPO) in (evol_ther,) :
+          return char_cine_ther
+      else :
+          raise AsException("Extension à faire ...")
+
+  raise AsException("type de concept resultat non prevu")
+
+
+AFFE_CHAR_CINE=OPER(nom="AFFE_CHAR_CINE",op= 101,sd_prod=affe_char_cine_prod
+                    ,fr="Affectation de conditions aux limites cinématiques constantes pour un traitement sans dualisation",
+                     reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+         regles=(UN_PARMI('MECA_IMPO','THER_IMPO','ACOU_IMPO','EVOL_IMPO'),
+                 ),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         EVOL_IMPO  =SIMP(statut='f',typ=(evol_noli,evol_elas,evol_ther),fr="Pour imposer tous les ddls d'un evol_xxx"),
+         MECA_IMPO       =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+                               'TEMP','PRE1','PRE2','UI2','UI3','VI2','VI3','WI2','WI3','UO2',
+                               'UO3','VO2','VO3','WO2','WO3','UI4','UI5','VI4','VI5','WI4',
+                               'WI5','UO4','UO5','VO4','VO5','WO4','WO5','UI6','UO6','VI6',
+                               'VO6','WI6','WO6','WO','WI1','WO1','GONF',
+                               'H1X','H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+                               'E3X','E3Y','E3Z','E4X','E4Y','E4Z','V11','V12','V13','V21','V22',
+                               'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21',
+                               'PRES22','PRES23','PRES31','PRES32','PRES33','LH1'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
+             GRX             =SIMP(statut='f',typ='R' ),
+             PRES            =SIMP(statut='f',typ='R' ),
+             PHI             =SIMP(statut='f',typ='R' ),
+             TEMP            =SIMP(statut='f',typ='R' ),
+             PRE1            =SIMP(statut='f',typ='R' ),
+             PRE2            =SIMP(statut='f',typ='R' ),
+             UI2             =SIMP(statut='f',typ='R' ),
+             UI3             =SIMP(statut='f',typ='R' ),
+             UI4             =SIMP(statut='f',typ='R' ),
+             UI5             =SIMP(statut='f',typ='R' ),
+             UI6             =SIMP(statut='f',typ='R' ),
+             UO2             =SIMP(statut='f',typ='R' ),
+             UO3             =SIMP(statut='f',typ='R' ),
+             UO4             =SIMP(statut='f',typ='R' ),
+             UO5             =SIMP(statut='f',typ='R' ),
+             UO6             =SIMP(statut='f',typ='R' ),
+             VI2             =SIMP(statut='f',typ='R' ),
+             VI3             =SIMP(statut='f',typ='R' ),
+             VI4             =SIMP(statut='f',typ='R' ),
+             VI5             =SIMP(statut='f',typ='R' ),
+             VI6             =SIMP(statut='f',typ='R' ),
+             VO2             =SIMP(statut='f',typ='R' ),
+             VO3             =SIMP(statut='f',typ='R' ),
+             VO4             =SIMP(statut='f',typ='R' ),
+             VO5             =SIMP(statut='f',typ='R' ),
+             VO6             =SIMP(statut='f',typ='R' ),
+             WI2             =SIMP(statut='f',typ='R' ),
+             WI3             =SIMP(statut='f',typ='R' ),
+             WI4             =SIMP(statut='f',typ='R' ),
+             WI5             =SIMP(statut='f',typ='R' ),
+             WI6             =SIMP(statut='f',typ='R' ),
+             WO2             =SIMP(statut='f',typ='R' ),
+             WO3             =SIMP(statut='f',typ='R' ),
+             WO4             =SIMP(statut='f',typ='R' ),
+             WO5             =SIMP(statut='f',typ='R' ),
+             WO6             =SIMP(statut='f',typ='R' ),
+             WO              =SIMP(statut='f',typ='R' ),
+             WI1             =SIMP(statut='f',typ='R' ),
+             WO1             =SIMP(statut='f',typ='R' ),
+             GONF            =SIMP(statut='f',typ='R' ),
+             H1X             =SIMP(statut='f',typ='R' ),
+             H1Y             =SIMP(statut='f',typ='R' ),
+             H1Z             =SIMP(statut='f',typ='R' ),
+             E1X             =SIMP(statut='f',typ='R' ),
+             E1Y             =SIMP(statut='f',typ='R' ),
+             E1Z             =SIMP(statut='f',typ='R' ),
+             E2X             =SIMP(statut='f',typ='R' ),
+             E2Y             =SIMP(statut='f',typ='R' ),
+             E2Z             =SIMP(statut='f',typ='R' ),
+             E3X             =SIMP(statut='f',typ='R' ),
+             E3Y             =SIMP(statut='f',typ='R' ),
+             E3Z             =SIMP(statut='f',typ='R' ),
+             E4X             =SIMP(statut='f',typ='R' ),
+             E4Y             =SIMP(statut='f',typ='R' ),
+             E4Z             =SIMP(statut='f',typ='R' ),
+             V11             =SIMP(statut='f',typ='R' ),
+             V12             =SIMP(statut='f',typ='R' ),
+             V13             =SIMP(statut='f',typ='R' ),
+             V21             =SIMP(statut='f',typ='R' ),
+             V22             =SIMP(statut='f',typ='R' ),
+             V23             =SIMP(statut='f',typ='R' ),
+             V31             =SIMP(statut='f',typ='R' ),
+             V32             =SIMP(statut='f',typ='R' ),
+             V33             =SIMP(statut='f',typ='R' ),
+             PRES11          =SIMP(statut='f',typ='R' ),
+             PRES12          =SIMP(statut='f',typ='R' ),
+             PRES13          =SIMP(statut='f',typ='R' ),
+             PRES21          =SIMP(statut='f',typ='R' ),
+             PRES22          =SIMP(statut='f',typ='R' ),
+             PRES23          =SIMP(statut='f',typ='R' ),
+             PRES31          =SIMP(statut='f',typ='R' ),
+             PRES32          =SIMP(statut='f',typ='R' ),
+             PRES33          =SIMP(statut='f',typ='R' ),
+             LH1             =SIMP(statut='f',typ='R' ),
+         ),
+         THER_IMPO       =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP','TEMP_INF','TEMP_SUP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TEMP_SUP        =SIMP(statut='f',typ='R' ),
+           TEMP            =SIMP(statut='f',typ='R' ),
+           TEMP_INF        =SIMP(statut='f',typ='R' ),
+         ),
+         ACOU_IMPO       =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           PRES            =SIMP(statut='o',typ='C' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+def affe_char_cine_f_prod(MECA_IMPO,THER_IMPO,**args):
+  if MECA_IMPO != None  : return char_cine_meca
+  if THER_IMPO != None  : return char_cine_ther
+  raise AsException("type de concept resultat non prevu")
+
+AFFE_CHAR_CINE_F=OPER(nom="AFFE_CHAR_CINE_F",op= 101,sd_prod=affe_char_cine_f_prod,
+                      fr="Affectation de conditions aux limites cinématiques fonction d'un (ou plusieurs) paramètres"
+                        +" pour un traitement sans dualisation",
+                     reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+         regles=(UN_PARMI('MECA_IMPO','THER_IMPO')),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         MECA_IMPO       =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','TEMP','PHI'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           DX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRX             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRY             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRZ             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           GRX             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PHI             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         THER_IMPO       =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP','TEMP_INF','TEMP_SUP' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TEMP_SUP        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP_INF        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 13/04/2010   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+AFFE_CHAR_MECA=OPER(nom="AFFE_CHAR_MECA",op=   7,sd_prod=char_meca,
+                    fr="Affectation de charges et conditions aux limites mécaniques constantes",
+                     reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+         regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','CHAMNO_IMPO','LIAISON_DDL','LIAISON_XFEM','FORCE_NODALE',
+                             'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',
+                             'PRES_REP','FORCE_POUTRE','FORCE_COQUE','LIAISON_OBLIQUE',
+                             'FORCE_ELEC','INTE_ELEC','PESANTEUR','ROTATION','IMPE_FACE',
+                             'VITE_FACE','RELA_CINE_BP','EPSI_INIT',
+                             'LIAISON_GROUP','LIAISON_UNIF','FLUX_THM_REP','LIAISON_SOLIDE',
+                             'LIAISON_ELEM','ONDE_FLUI','LIAISON_CHAMNO','VECT_ASSE','LIAISON_COQUE',
+                             'LIAISON_MAIL','LIAISON_CYCL','FORCE_TUYAU',
+                             'EFFE_FOND','EVOL_CHAR','ARLEQUIN','DDL_POUTRE',),
+                         ),
+         VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
+         EVOL_CHAR       =SIMP(statut='f',fr="Champ de pression issu d'un autre calcul",
+                               typ=evol_char ),
+
+         PESANTEUR       =FACT(statut='f',max='**',fr="Champ de pesanteur",
+            GROUP_MA         =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            MAILLE           =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            GRAVITE          =SIMP(statut='o',typ='R',min=1,max=1),
+            DIRECTION        =SIMP(statut='o',typ='R',min=3,max=3),),
+
+         METHODE         =SIMP(statut='c',typ='TXM',fr="Stratégie de résolution pour les déplacements imposés",
+                               into=('DUALISATION',),defaut='DUALISATION',),
+                               # METHODE='ELIMINATION' est traité dans le fortran mais dangereux actuellement
+         ROTATION        =SIMP(statut='f',typ='R',fr="Champ de rotation", min=4,max=4),
+         b_rotation      =BLOC ( condition = "ROTATION != None",
+           CENTRE          =SIMP(statut='f',typ='R',defaut=(0.,0.,0.),max=3),),
+
+         DDL_IMPO        =FACT(statut='f',max='**',
+             fr="Impose à des noeuds une ou plusieurs valeurs de déplacement (ou de certaines grandeurs asscociées)",
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                     AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+                                 'TEMP','PRE1','PRE2','UI2','UI3','VI2','VI3','WI2','WI3','UO2',
+                                 'UO3','VO2','VO3','WO2','WO3','UI4','UI5','VI4','VI5','WI4',
+                                 'WI5','UO4','UO5','VO4','VO5','WO4','WO5','UI6','UO6','VI6',
+                                 'VO6','WI6','WO6','WO','WI1','WO1','GONF','LIAISON',
+                                 'H1X','H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+                                 'E3X','E3Y','E3Z','E4X','E4Y','E4Z','LAGS_C','V11','V12','V13','V21','V22',
+                                 'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21','PRES22','PRES23',
+                                 'PRES31','PRES32','PRES33',),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             LIAISON         =SIMP(statut='f',typ='TXM',into=('ENCASTRE',)),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
+             GRX             =SIMP(statut='f',typ='R' ),
+             PRES            =SIMP(statut='f',typ='R' ),
+             PHI             =SIMP(statut='f',typ='R' ),
+             TEMP            =SIMP(statut='f',typ='R' ),
+             PRE1            =SIMP(statut='f',typ='R' ),
+             PRE2            =SIMP(statut='f',typ='R' ),
+             UI2             =SIMP(statut='f',typ='R' ),
+             UI3             =SIMP(statut='f',typ='R' ),
+             UI4             =SIMP(statut='f',typ='R' ),
+             UI5             =SIMP(statut='f',typ='R' ),
+             UI6             =SIMP(statut='f',typ='R' ),
+             UO2             =SIMP(statut='f',typ='R' ),
+             UO3             =SIMP(statut='f',typ='R' ),
+             UO4             =SIMP(statut='f',typ='R' ),
+             UO5             =SIMP(statut='f',typ='R' ),
+             UO6             =SIMP(statut='f',typ='R' ),
+             VI2             =SIMP(statut='f',typ='R' ),
+             VI3             =SIMP(statut='f',typ='R' ),
+             VI4             =SIMP(statut='f',typ='R' ),
+             VI5             =SIMP(statut='f',typ='R' ),
+             VI6             =SIMP(statut='f',typ='R' ),
+             VO2             =SIMP(statut='f',typ='R' ),
+             VO3             =SIMP(statut='f',typ='R' ),
+             VO4             =SIMP(statut='f',typ='R' ),
+             VO5             =SIMP(statut='f',typ='R' ),
+             VO6             =SIMP(statut='f',typ='R' ),
+             WI2             =SIMP(statut='f',typ='R' ),
+             WI3             =SIMP(statut='f',typ='R' ),
+             WI4             =SIMP(statut='f',typ='R' ),
+             WI5             =SIMP(statut='f',typ='R' ),
+             WI6             =SIMP(statut='f',typ='R' ),
+             WO2             =SIMP(statut='f',typ='R' ),
+             WO3             =SIMP(statut='f',typ='R' ),
+             WO4             =SIMP(statut='f',typ='R' ),
+             WO5             =SIMP(statut='f',typ='R' ),
+             WO6             =SIMP(statut='f',typ='R' ),
+             WO              =SIMP(statut='f',typ='R' ),
+             WI1             =SIMP(statut='f',typ='R' ),
+             WO1             =SIMP(statut='f',typ='R' ),
+             GONF            =SIMP(statut='f',typ='R' ),
+             H1X             =SIMP(statut='f',typ='R' ),
+             H1Y             =SIMP(statut='f',typ='R' ),
+             H1Z             =SIMP(statut='f',typ='R' ),
+             E1X             =SIMP(statut='f',typ='R' ),
+             E1Y             =SIMP(statut='f',typ='R' ),
+             E1Z             =SIMP(statut='f',typ='R' ),
+             E2X             =SIMP(statut='f',typ='R' ),
+             E2Y             =SIMP(statut='f',typ='R' ),
+             E2Z             =SIMP(statut='f',typ='R' ),
+             E3X             =SIMP(statut='f',typ='R' ),
+             E3Y             =SIMP(statut='f',typ='R' ),
+             E3Z             =SIMP(statut='f',typ='R' ),
+             E4X             =SIMP(statut='f',typ='R' ),
+             E4Y             =SIMP(statut='f',typ='R' ),
+             E4Z             =SIMP(statut='f',typ='R' ),
+             LAGS_C          =SIMP(statut='f',typ='R' ),
+             V11             =SIMP(statut='f',typ='R' ),
+             V12             =SIMP(statut='f',typ='R' ),
+             V13             =SIMP(statut='f',typ='R' ),
+             V21             =SIMP(statut='f',typ='R' ),
+             V22             =SIMP(statut='f',typ='R' ),
+             V23             =SIMP(statut='f',typ='R' ),
+             V31             =SIMP(statut='f',typ='R' ),
+             V32             =SIMP(statut='f',typ='R' ),
+             V33             =SIMP(statut='f',typ='R' ),
+             PRES11          =SIMP(statut='f',typ='R' ),
+             PRES12          =SIMP(statut='f',typ='R' ),
+             PRES13          =SIMP(statut='f',typ='R' ),
+             PRES21          =SIMP(statut='f',typ='R' ),
+             PRES22          =SIMP(statut='f',typ='R' ),
+             PRES23          =SIMP(statut='f',typ='R' ),
+             PRES31          =SIMP(statut='f',typ='R' ),
+             PRES32          =SIMP(statut='f',typ='R' ),
+             PRES33          =SIMP(statut='f',typ='R' ),
+           ),
+
+
+
+         DDL_POUTRE    =FACT(statut='f',max='**',
+             fr="Bloque des DDLs dans un repère local d'une poutre",
+             regles=(AU_MOINS_UN('GROUP_NO','NOEUD'),
+                     AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ'),
+                     UN_PARMI('VECT_Y','ANGL_VRIL'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
+#  définition du repère local
+             VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3),
+             ANGL_VRIL       =SIMP(statut='f',typ='R',),
+#  restriction sur les mailles servant à définir le repère local
+             GROUP_MA        =SIMP(statut='f',typ=grma,),
+             MAILLE          =SIMP(statut='f',typ=ma,),
+                            ),
+
+
+
+           FACE_IMPO       =FACT(statut='f',max='**',
+             fr="Impose à tous les noeuds d'une face une ou plusieurs valeurs de déplacement (ou de certaines grandeurs associées)",
+             regles=(UN_PARMI('GROUP_MA','MAILLE',),
+                     AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+                                 'TEMP','PRE1','PRE2','DNOR','DTAN'),
+                     EXCLUS('DNOR','DX'),
+                     EXCLUS('DNOR','DY'),
+                     EXCLUS('DNOR','DZ'),
+                     EXCLUS('DNOR','DRX'),
+                     EXCLUS('DNOR','DRY'),
+                     EXCLUS('DNOR','DRZ'),
+                     EXCLUS('DTAN','DX'),
+                     EXCLUS('DTAN','DY'),
+                     EXCLUS('DTAN','DZ'),
+                     EXCLUS('DTAN','DRX'),
+                     EXCLUS('DTAN','DRY'),
+                     EXCLUS('DTAN','DRZ'),),
+#  rajout d'un mot clé REPERE :/ LOCAL /GLOBAL
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             SANS_GROUP_MA   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             SANS_MAILLE     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
+             DNOR            =SIMP(statut='f',typ='R' ),
+             DTAN            =SIMP(statut='f',typ='R' ),
+             GRX             =SIMP(statut='f',typ='R' ),
+             PRES            =SIMP(statut='f',typ='R' ),
+             PHI             =SIMP(statut='f',typ='R' ),
+             TEMP            =SIMP(statut='f',typ='R' ),
+             PRE1            =SIMP(statut='f',typ='R' ),
+             PRE2            =SIMP(statut='f',typ='R' ),
+           ),
+
+         CHAMNO_IMPO  =FACT(statut='f',max='**',
+             fr="Impose des DDLs aux valeurs d'un concept cham_no_sdaster",
+#  type de cham_no_sdaster CO()
+             CHAM_NO         =SIMP(statut='o',typ=cham_no_sdaster), #CO()
+             COEF_MULT       =SIMP(statut='o',typ='R' ),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ),
+
+
+           LIAISON_DDL     =FACT(statut='f',max='**',
+             fr="Définit une relation linéaire entre des DDLs de deux ou plusieurs noeuds",
+             regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno ,max='**'),
+             NOEUD           =SIMP(statut='f',typ=no   ,max='**'),
+             DDL             =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT       =SIMP(statut='o',typ='R'  ,max='**'),
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+           ),
+
+           LIAISON_OBLIQUE =FACT(statut='f',max='**',
+             fr="Applique à des noeuds la meme valeur de déplacement définie composante par composante"
+              +" dans un repère oblique quelconque",
+             regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                     UN_PARMI('DX','DY','DZ','DRX','DRY','DRZ'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             ANGL_NAUT       =SIMP(statut='o',typ='R',max=3),
+             DX              =SIMP(statut='f',typ='R' ),
+             DY              =SIMP(statut='f',typ='R' ),
+             DZ              =SIMP(statut='f',typ='R' ),
+             DRX             =SIMP(statut='f',typ='R' ),
+             DRY             =SIMP(statut='f',typ='R' ),
+             DRZ             =SIMP(statut='f',typ='R' ),
+           ),
+
+           LIAISON_GROUP   =FACT(statut='f',max='**',
+             fr="Définit la meme relation linéaire entre certains DDLs de couples de noeuds",
+             regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                     UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                     EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                     EXCLUS('GROUP_MA_1','NOEUD_2'),
+                     EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                     EXCLUS('GROUP_NO_1','MAILLE_2'),
+                     EXCLUS('MAILLE_1','GROUP_NO_2'),
+                     EXCLUS('MAILLE_1','NOEUD_2'),
+                     EXCLUS('NOEUD_1','GROUP_MA_2'),
+                     EXCLUS('NOEUD_1','MAILLE_2'),
+                     EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+
+               GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+               MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+               GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+               MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+               GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+               NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+               GROUP_NO_2      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+               NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+
+             SANS_NOEUD      =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+             SANS_GROUP_NO   =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+             DDL_1           =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT_1     =SIMP(statut='o',typ='R'  ,max='**'),
+             DDL_2           =SIMP(statut='o',typ='TXM',max='**'),
+             COEF_MULT_2     =SIMP(statut='o',typ='R'  ,max='**'),
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+             SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             TRAN            =SIMP(statut='f',typ='R',max=3),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+             CENTRE          =SIMP(statut='f',typ='R',max=3),
+           ),
+
+           LIAISON_MAIL    =FACT(statut='f',max='**',
+             fr="Définit des relations linéaires permettant de recoller deux bords d'une structure",
+             regles=(AU_MOINS_UN('GROUP_MA_MAIT','MAILLE_MAIT'),
+                     AU_MOINS_UN('GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL','NOEUD_ESCL')),
+              GROUP_MA_MAIT   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              MAILLE_MAIT     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              MAILLE_ESCL     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+              NOEUD_ESCL      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+
+              TYPE_RACCORD    =SIMP(statut='o',typ='TXM',defaut="MASSIF",into=("MASSIF","COQUE","COQUE_MASSIF","MASSIF_COQUE",)),
+
+              b_MASSIF     =BLOC ( condition = "TYPE_RACCORD == 'MASSIF'",
+                 regles=( PRESENT_PRESENT('DDL_MAIT','DDL_ESCL'),),
+              TRAN            =SIMP(statut='f',typ='R',max=3 ),
+              ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),
+              CENTRE          =SIMP(statut='f',typ='R',max=3 ),
+              DDL_MAIT        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+              DDL_ESCL        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+              ),
+              b_COQUE_MASSIF =BLOC ( condition = "TYPE_RACCORD == 'COQUE_MASSIF'",
+                 EPAIS           =SIMP(statut='o',typ='R'),
+                 CHAM_NORMALE    =SIMP(statut='o',typ=cham_no_sdaster),
+              ),
+              ELIM_MULT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+
+           LIAISON_CYCL    =FACT(statut='f',max='**',
+             fr="Définit des relations linéaires permettant de recoller les bords de deux parties symétriquement cycliques",
+             regles=(AU_MOINS_UN('GROUP_MA_MAIT1','MAILLE_MAIT1'),
+                     AU_MOINS_UN('GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL','NOEUD_ESCL'),
+                     PRESENT_PRESENT('DDL_MAIT','DDL_ESCL'),
+                     ),
+              GROUP_MA_MAIT1   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              MAILLE_MAIT1     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_MA_MAIT2   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              MAILLE_MAIT2     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              MAILLE_ESCL     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+              NOEUD_ESCL     =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+              TRAN            =SIMP(statut='f',typ='R',max=3 ),
+              ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),
+              CENTRE          =SIMP(statut='f',typ='R',max=3 ),
+              COEF_MAIT1            =SIMP(statut='f',typ='R',max=1 ),
+              COEF_MAIT2            =SIMP(statut='f',typ='R',max=1 ),
+              COEF_ESCL            =SIMP(statut='f',typ='R',max=1 ),
+              DDL_MAIT        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+              DDL_ESCL        =SIMP(statut='f',typ='TXM',into=("DNOR",) ),
+         ),
+
+
+           LIAISON_SOLIDE  =FACT(statut='f',max='**',
+             fr="Modélise une partie indéformable d'une structure."
+              +" Les mots clés TRAN et ANGL_NAUT permettent d'imposer le déplacement de la partie indéformable.",
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+                     ENSEMBLE('CENTRE','ANGL_NAUT'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             TRAN            =SIMP(statut='f',typ='R',max=3 ),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),
+             CENTRE          =SIMP(statut='f',typ='R',max=3 ),
+             DIST_MIN        =SIMP(statut='f',typ='R'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ),
+
+           LIAISON_ELEM    =FACT(statut='f',max='**',
+             fr="Modélise le raccord d'une partie massive 3D avec une poutre ou avec un tuyau, le raccord d'une coque"
+              +" avec une poutre ou avec un tuyau",
+             regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                     UN_PARMI('GROUP_NO_2','NOEUD_2'),),
+             OPTION          =SIMP(statut='o',typ='TXM',into=("3D_TUYAU","3D_POU","COQ_POU","COQ_TUYAU") ),
+             GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+             CARA_ELEM       =SIMP(statut='f',typ=(cara_elem) ),
+             AXE_POUTRE      =SIMP(statut='f',typ='R',max=3),
+             ANGL_MAX        =SIMP(statut='f',typ='R',defaut= 1. ),
+           ),
+
+           LIAISON_UNIF    =FACT(statut='f',max='**',
+             fr="Impose une meme valeur (inconnue) à des DDLs d'un ensemble de noeuds",
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             DDL             =SIMP(statut='o',typ='TXM',max='**'),
+           ),
+
+         LIAISON_CHAMNO  =FACT(statut='f',max='**',
+             fr="Définit une relation linéaire entre tous les DDLs présents dans un concept CHAM_NO",
+#  type de cham_no_sdaster CO()
+             CHAM_NO         =SIMP(statut='o',typ=cham_no_sdaster), #CO()
+             COEF_IMPO       =SIMP(statut='o',typ='R' ),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ),
+
+         LIAISON_XFEM      =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),
+
+         CONTACT_XFEM      =SIMP(statut='f',typ=char_contact,min=1,max=1,),
+
+
+#         SIMP(statut='f',typ='TXM',defaut="NON" ),
+
+         VECT_ASSE       =SIMP(statut='f',typ=cham_no_sdaster ),
+#
+# FORCES
+#
+         FORCE_NODALE    =FACT(statut='f',fr="Applique à des noeuds des forces nodales",max='**',
+           regles=(AU_MOINS_UN('GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           FX              =SIMP(statut='f',typ='R' ),
+           FY              =SIMP(statut='f',typ='R' ),
+           FZ              =SIMP(statut='f',typ='R' ),
+           MX              =SIMP(statut='f',typ='R' ),
+           MY              =SIMP(statut='f',typ='R' ),
+           MZ              =SIMP(statut='f',typ='R' ),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+         ),
+
+         FORCE_FACE      =FACT(statut='f',max='**',
+             fr="Applique des forces surfaciques sur une face d'élément volumique",
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+           ),
+
+         FORCE_ARETE     =FACT(statut='f',max='**',
+         fr="Applique des forces linéiques à une arete d'élément volumique ou de coque",
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ' ),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+             MX              =SIMP(statut='f',typ='R' ),
+             MY              =SIMP(statut='f',typ='R' ),
+             MZ              =SIMP(statut='f',typ='R' ),
+           ),
+
+         FORCE_CONTOUR   =FACT(statut='f',max='**',
+             fr="Applique des forces linéiques au bord d'un domaine 2D ou AXIS ou AXIS_FOURIER",
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+             MX              =SIMP(statut='f',typ='R' ),
+             MY              =SIMP(statut='f',typ='R' ),
+             MZ              =SIMP(statut='f',typ='R' ),
+           ),
+
+         FORCE_INTERNE   =FACT(statut='f',max='**',
+             fr="Applique des forces volumiques (2D ou 3D) à un domaine volumique",
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ' ),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             FX              =SIMP(statut='f',typ='R' ),
+             FY              =SIMP(statut='f',typ='R' ),
+             FZ              =SIMP(statut='f',typ='R' ),
+           ),
+
+         SIGM_INTERNE   =FACT(statut='f',max='**',
+             fr="Applique des contraintes volumiques (2D ou 3D) à un domaine volumique",
+             #INST            =SIMP(statut='f',typ='R' ),
+             SIGM            =SIMP(statut='o',typ=(cham_elem,carte_sdaster)),
+           ),
+
+         PRES_REP        =FACT(statut='f',max='**',
+             fr="Applique une pression à un domaine de milieu continu 2D ou 3D, ou à un domaine de coques et tuyaux",
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','FISSURE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE','FISSURE'),
+                     AU_MOINS_UN('PRES','CISA_2D' ),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             FISSURE         =SIMP(statut='f',typ=fiss_xfem,min=1,max=100,),
+             PRES            =SIMP(statut='f',typ='R' ),
+             CISA_2D         =SIMP(statut='f',typ='R' ),
+           ),
+
+         EFFE_FOND       =FACT(statut='f',max='**',
+           fr="Calcul l'effet de fond sur une branche de tuyauterie (modélisation 3D) soumise à une pression",
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+           GROUP_MA_INT    =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           PRES            =SIMP(statut='o',typ='R' ),
+         ),
+
+         EPSI_INIT       =FACT(statut='f',max='**',
+             fr="Applique un chargement de déformation initiale à un élément 2D, 3D ou de structure",
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ','EPX',
+                                 'KY','KZ','EXX','EYY','EXY','KXX','KYY','KXY'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             EPXX            =SIMP(statut='f',typ='R' ),
+             EPYY            =SIMP(statut='f',typ='R' ),
+             EPZZ            =SIMP(statut='f',typ='R' ),
+             EPXY            =SIMP(statut='f',typ='R' ),
+             EPXZ            =SIMP(statut='f',typ='R' ),
+             EPYZ            =SIMP(statut='f',typ='R' ),
+             EPX             =SIMP(statut='f',typ='R' ),
+             KY              =SIMP(statut='f',typ='R' ),
+             KZ              =SIMP(statut='f',typ='R' ),
+             EXX             =SIMP(statut='f',typ='R' ),
+             EYY             =SIMP(statut='f',typ='R' ),
+             EXY             =SIMP(statut='f',typ='R' ),
+             KXX             =SIMP(statut='f',typ='R' ),
+             KYY             =SIMP(statut='f',typ='R' ),
+             KXY             =SIMP(statut='f',typ='R' ),
+           ),
+
+         ARLEQUIN        =FACT(statut='f',min=1,max='**',
+           fr="Définit les paramètres de la méthode Arlequin",
+           GROUP_MA_1     =SIMP(statut='o',typ=grma,max='**'),
+           GROUP_MA_2     =SIMP(statut='o',typ=grma,max='**'),
+           GROUP_MA_COLL  =SIMP(statut='f',typ=grma,max='**'),
+           CARA_ELEM      =SIMP(statut='f',typ=cara_elem ),
+           COND_LIM       =SIMP(statut='f',typ=char_meca ),
+           COLLAGE        =SIMP(statut='f',typ='TXM',defaut="GROSSIER",into=("GROSSIER","FIN","GROUP_MA_1","GROUP_MA_2"),),
+           regles         =(UN_PARMI('POIDS_1','POIDS_2','POIDS_GROSSIER','POIDS_FIN',),),
+           POIDS_1        =SIMP(statut='f',typ='R'),
+           POIDS_2        =SIMP(statut='f',typ='R'),
+           POIDS_GROSSIER =SIMP(statut='f',typ='R'),
+           UNITE_GMSH     =SIMP(statut='f',typ='I',defaut=0,max=1),
+           POIDS_FIN      =SIMP(statut='f',typ='R'),),
+
+        FORCE_POUTRE    =FACT(statut='f',max='**',
+             fr="Applique des forces linéiques sur des éléments de type poutre",
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','N','VY','VZ'),
+                     PRESENT_ABSENT('FX','N','VY','VZ'),
+                     PRESENT_ABSENT('FY','N','VY','VZ'),
+                     PRESENT_ABSENT('FZ','N','VY','VZ'),
+                     PRESENT_ABSENT('N','FX','FY','FZ'),
+                     PRESENT_ABSENT('VY','FX','FY','FZ'),
+                     PRESENT_ABSENT('VZ','FX','FY','FZ'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE",) ),
+#  rajour d'un mot clé REPERE :/ LOCAL /GLOBAL
+               FX              =SIMP(statut='f',typ='R' ),
+               FY              =SIMP(statut='f',typ='R' ),
+               FZ              =SIMP(statut='f',typ='R' ),
+
+               N               =SIMP(statut='f',typ='R' ),
+               VY              =SIMP(statut='f',typ='R' ),
+               VZ              =SIMP(statut='f',typ='R' ),
+
+           ),
+
+         FORCE_TUYAU     =FACT(statut='f',max='**',
+             fr="Applique une pression sur des éléments TUYAU",
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             PRES            =SIMP(statut='f',typ='R' ),
+           ),
+
+         FORCE_COQUE     =FACT(statut='f',max='**',
+             fr="Applique des forces surfaciques sur des éléments de types coques",
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('FX','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('FY','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('FZ','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MX','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MY','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('MZ','PRES','F1','F2','F3','MF1','MF2'),
+                     PRESENT_ABSENT('F1','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('F2','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('F3','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('MF1','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('MF2','FX','FY','FZ','MX','MY','MZ','PRES'),
+                     PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
+#  rajour d'un mot clé REPERE :/ LOCAL /GLOBAL
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+
+               FX              =SIMP(statut='f',typ='R' ),
+               FY              =SIMP(statut='f',typ='R' ),
+               FZ              =SIMP(statut='f',typ='R' ),
+               MX              =SIMP(statut='f',typ='R' ),
+               MY              =SIMP(statut='f',typ='R' ),
+               MZ              =SIMP(statut='f',typ='R' ),
+
+               F1              =SIMP(statut='f',typ='R' ),
+               F2              =SIMP(statut='f',typ='R' ),
+               F3              =SIMP(statut='f',typ='R' ),
+               MF1             =SIMP(statut='f',typ='R' ),
+               MF2             =SIMP(statut='f',typ='R' ),
+
+             PRES            =SIMP(statut='f',typ='R' ),
+             PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL",) ),
+           ),
+
+           LIAISON_COQUE   =FACT(statut='f',max='**',
+             fr="Permet de représenter le raccord entre des éléments de coques au moyen des relations linéaires",
+             GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+           ),
+
+         RELA_CINE_BP    =FACT(statut='f',max='**',
+           fr="Etablir des relations cinématiques permettant de relier les noeuds cable aux noeuds du béton, et spécifier"
+              +" la prise en compte des contraintes initiales dans les cables",
+           CABLE_BP        =SIMP(statut='o',typ=cabl_precont ),
+           SIGM_BPEL       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           RELA_CINE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           DIST_MIN        =SIMP(statut='f',typ='R'),
+         ),
+
+         FORCE_ELEC      =FACT(statut='f',max='**',
+             fr="Appliquer la force de LAPLACE agissant sur un conducteur principal, due à la présence d'un conducteur"
+                 +" secondaire droit",
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+
+             POSITION        =SIMP(statut='f',typ='TXM',fr="Direction prédéfinie",into=("PARA","INFI","FINI",) ),
+             b_fxyz  =BLOC ( condition = "POSITION == None",
+                  FX   =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+                  FY   =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+                  FZ   =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+                       ),
+
+             b_para     =BLOC ( condition = "POSITION == 'PARA'",
+               regles=(UN_PARMI('TRANS','DIST'),),
+               TRANS           =SIMP(statut='f',typ='R',max=3),
+               DIST            =SIMP(statut='f',typ='R' ),
+               b_point2        =BLOC ( condition = "DIST != None",
+                 POINT2           =SIMP(statut='o',typ='R',max=3),
+               ),
+             ),
+             b_fini_infi     =BLOC ( condition = "(POSITION == 'FINI') or (POSITION == 'INFI')",
+               POINT1          =SIMP(statut='o',typ='R',max=3),
+               POINT2          =SIMP(statut='o',typ='R',max=3),
+             ),
+           ),
+
+
+
+
+        INTE_ELEC       =FACT(statut='f',max='**',
+             fr="Appliquer la force de LAPLACE agissant sur un conducteur principal, due à la présence d'un conducteur"
+               +" secondaire non nécessairement droit",
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('GROUP_MA_2','MAILLE_2','TRANS','SYME'),
+                     EXCLUS('TRANS','SYME'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             TRANS           =SIMP(statut='f',typ='R' ,max='**'),
+             SYME            =SIMP(statut='f',typ='R' ,max='**'),
+           ),
+
+
+         IMPE_FACE       =FACT(statut='f',fr="Applique une impédance acoustique à une face",max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE' ),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             IMPE            =SIMP(statut='o',typ='R' ),
+           ),
+
+         VITE_FACE       =FACT(statut='f',fr="Impose des vitesses normales à une face (phénomène ACOUSTIQUE), ",max='**',
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             VNOR            =SIMP(statut='o',typ='R' ),
+           ),
+
+
+
+         ONDE_FLUI       =FACT(statut='f',max='**',
+             fr="Applique une amplitude de pression d'onde incidente sinusoidale arrivant normalement à une face",
+             regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             PRES            =SIMP(statut='o',typ='R' ),
+           ),
+
+         FLUX_THM_REP    =FACT(statut='f',max='**',
+             fr="Applique à un domaine de milieu continu 2D ou 3D un flux de chaleur et/ou un apport de masse fluide"
+                 +" (flux hydraulique)",
+             regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                     PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                     AU_MOINS_UN('FLUN','FLUN_HYDR1','FLUN_HYDR2'),),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             FLUN            =SIMP(statut='f',typ='R' ),
+             FLUN_HYDR1      =SIMP(statut='f',typ='R' ),
+             FLUN_HYDR2      =SIMP(statut='f',typ='R' ),
+           ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+
+
+#& MODIF COMMANDE  DATE 16/09/2008   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+AFFE_CHAR_MECA_C=OPER(nom="AFFE_CHAR_MECA_C",op=   7,sd_prod=char_meca,
+                     fr="Affectation de charges et conditions aux limites mécaniques complexes",
+                     reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+         regles=(AU_MOINS_UN('DDL_IMPO','FORCE_POUTRE','LIAISON_DDL', ),),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         METHODE         =SIMP(statut='c',typ='TXM',fr="Stratégie de résolution pour les déplacements imposés",
+                               into=('DUALISATION',),defaut='DUALISATION',),
+                               # METHODE='ELIMINATION' est traité dans le fortran mais dangereux actuellement
+         DDL_IMPO        =FACT(statut='f',max='**',
+           fr="Impose à des noeuds une ou plusieurs valeurs de déplacement (ou de certaines grandeurs asscociées)",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD',),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI','LIAISON', ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           LIAISON         =SIMP(statut='f',typ='TXM',into=('ENCASTRE',)),
+           DX              =SIMP(statut='f',typ='C' ),
+           DY              =SIMP(statut='f',typ='C' ),
+           DZ              =SIMP(statut='f',typ='C' ),
+           DRX             =SIMP(statut='f',typ='C' ),
+           DRY             =SIMP(statut='f',typ='C' ),
+           DRZ             =SIMP(statut='f',typ='C' ),
+           GRX             =SIMP(statut='f',typ='C' ),
+           PRES            =SIMP(statut='f',typ='C' ),
+           PHI             =SIMP(statut='f',typ='C' ),
+         ),
+         FORCE_POUTRE    =FACT(statut='f',max='**',
+           fr="Applique des forces linéiques sur des éléments de type poutre",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','N','VY','VZ',),
+                   PRESENT_ABSENT('FX','N','VY','VZ',),
+                   PRESENT_ABSENT('FY','N','VY','VZ',),
+                   PRESENT_ABSENT('FZ','N','VY','VZ',),
+                   PRESENT_ABSENT('N','FX','FY','FZ',),
+                   PRESENT_ABSENT('VY', 'FX','FY','FZ',),
+                   PRESENT_ABSENT('VZ','FX','FY','FZ', ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE") ),
+           FX              =SIMP(statut='f',typ='C' ),
+           FY              =SIMP(statut='f',typ='C' ),
+           FZ              =SIMP(statut='f',typ='C' ),
+           N               =SIMP(statut='f',typ='C' ),
+           VY              =SIMP(statut='f',typ='C' ),
+           VZ              =SIMP(statut='f',typ='C' ),
+         ),
+         LIAISON_DDL     =FACT(statut='f',max='**',
+           fr="Définit une relation linéaire entre les DDLs de deux ou plusieurs noeuds",
+           regles=(UN_PARMI('GROUP_NO','NOEUD', ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT       =SIMP(statut='o',typ='R'  ,max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ='C' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 13/04/2010   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+AFFE_CHAR_MECA_F=OPER(nom="AFFE_CHAR_MECA_F",op=7,sd_prod=char_meca,
+                      fr="Affectation de charges et conditions aux limites mécaniques fonction d'un (ou plusieurs) paramètres",
+                      reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+        regles=(AU_MOINS_UN('DDL_IMPO','FACE_IMPO','LIAISON_DDL','FORCE_NODALE',
+                            'FORCE_FACE','FORCE_ARETE','FORCE_CONTOUR','FORCE_INTERNE',
+                            'PRES_REP','FORCE_POUTRE','VITE_FACE','IMPE_FACE','ONDE_PLANE',
+                            'LIAISON_OBLIQUE','EPSI_INIT','LIAISON_GROUP','LIAISON_UNIF',
+                            'LIAISON_SOLIDE','FORCE_COQUE','LIAISON_COQUE','FORCE_TUYAU',
+                            'EFFE_FOND','FLUX_THM_REP',),),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         VERI_NORM       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         METHODE         =SIMP(statut='c',typ='TXM',fr="Stratégie de résolution pour les déplacements imposés",
+                               into=('DUALISATION',),defaut='DUALISATION',),
+                               # METHODE='ELIMINATION' est traité dans le fortran mais dangereux actuellement
+
+         DDL_IMPO        =FACT(statut='f',max='**',
+           fr="Impose à des noeuds une ou plusieurs valeurs de déplacement (ou de certaines grandeurs asscociées) fournies"
+               +" par l'intermédiaire d'un concept fonction ",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+                               'TEMP','PRE1','PRE2','LIAISON','H1X',
+                               'H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+                               'E3X','E3Y','E3Z','E4X','E4Y','E4Z','LAGS_C'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           LIAISON         =SIMP(statut='f',typ='TXM',into=('ENCASTRE',)),
+           DX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRX             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRY             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRZ             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           GRX             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PHI             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRE1            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRE2            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           H1X             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           H1Y             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           H1Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E1X             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E1Y             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E1Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E2X             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E2Y             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E2Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E3X             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E3Y             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E3Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E4X             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E4Y             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           E4Z             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           LAGS_C          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         FACE_IMPO       =FACT(statut='f',max='**',
+           fr="Impose à tous les noeuds d'une face une ou plusieurs valeurs de déplacement (ou de certaines grandeurs associées)"
+              +" fournies par l'intérmédiaire d'un concept fonction",
+           regles=(UN_PARMI('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI','TEMP','PRE1','PRE2','DNOR','DTAN'),
+                   EXCLUS('DNOR','DX'),
+                   EXCLUS('DNOR','DY'),
+                   EXCLUS('DNOR','DZ'),
+                   EXCLUS('DNOR','DRX'),
+                   EXCLUS('DNOR','DRY'),
+                   EXCLUS('DNOR','DRZ'),
+                   EXCLUS('DTAN','DX'),
+                   EXCLUS('DTAN','DY'),
+                   EXCLUS('DTAN','DZ'),
+                   EXCLUS('DTAN','DRX'),
+                   EXCLUS('DTAN','DRY'),
+                   EXCLUS('DTAN','DRZ'),),
+#  rajout d un mot cle REPERE : / GLOBAL / LOCAL
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           SANS_GROUP_MA   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           SANS_MAILLE     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           DX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRX             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRY             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRZ             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           GRX             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PHI             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRE1            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRE2            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DNOR            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DTAN            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         LIAISON_DDL     =FACT(statut='f',max='**',
+           fr="Définit une relation linéaire entre des DDLs de deux ou plusieurs noeuds, les valeurs sont fournies par"
+               +" l'intermediaire d'un concept de type fonction",
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),UN_PARMI('COEF_MULT','COEF_MULT_FONC'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT       =SIMP(statut='f',typ='R',max='**'),
+           COEF_MULT_FONC  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         LIAISON_OBLIQUE =FACT(statut='f',max='**',
+           fr="Applique à des noeuds la meme valeur de déplacement définie composante par composante dans un repère oblique"
+              +" quelconque, les valeurs sont fournis par l'intermédiaire d'un concept fonction",
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                   UN_PARMI('DX','DY','DZ','DRX','DRY','DRZ'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,max='**'),
+           ANGL_NAUT       =SIMP(statut='o',typ='R',max=3),
+           DX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRX             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRY             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DRZ             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         LIAISON_GROUP   =FACT(statut='f',max='**',
+           fr="Définit la meme relation linéaire entre certains DDLs de couples de noeuds, les valeurs sont fournies par"
+               +" l'intermédiaire de concept fonction",
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                   EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                   EXCLUS('GROUP_MA_1','NOEUD_2'),
+                   EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                   EXCLUS('GROUP_NO_1','MAILLE_2'),
+                   EXCLUS('MAILLE_1','GROUP_NO_2'),
+                   EXCLUS('MAILLE_1','NOEUD_2'),
+                   EXCLUS('NOEUD_1','GROUP_MA_2'),
+                   EXCLUS('NOEUD_1','MAILLE_2'),
+                   EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           DDL_1           =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+           DDL_2           =SIMP(statut='o',typ='TXM',max='**'),
+           COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           TRAN            =SIMP(statut='f',typ='R',max=3),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+           CENTRE          =SIMP(statut='f',typ='R',max=3),
+         ),
+
+          LIAISON_UNIF    =FACT(statut='f',max='**',
+           fr="Impose une meme valeur (inconnue) à des DDLs d'un ensemble de noeuds",
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           DDL             =SIMP(statut='o',typ='TXM',max='**'),
+         ),
+
+
+         LIAISON_SOLIDE  =FACT(statut='f',max='**',
+           fr="Modélise une partie indéformable d'une structure."
+            +" Les mots clés TRAN et ANGL_NAUT permettent d'imposer le déplacement de la partie indéformable.",
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+                   ENSEMBLE('CENTRE','ANGL_NAUT'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           TRAN            =SIMP(statut='f',typ='R',max=3 ),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3 ),
+           CENTRE          =SIMP(statut='f',typ='R',max=3 ),
+           DIST_MIN        =SIMP(statut='f',typ='R'),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+         ),
+
+
+
+         FORCE_NODALE    =FACT(statut='f',max='**',
+           fr="Applique à des noeuds des forces nodales dont les valeurs des composantes sont fournies par l'intermédiaire"
+               +" d'un concept fonction",
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           FX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           ANGL_NAUT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max=3 ),
+         ),
+
+         FORCE_FACE      =FACT(statut='f',max='**',
+           fr="Applique des forces surfaciques sur une face d'élément volumique dont les valeurs des composantes sont fournies"
+               +" par l'intermédiaire d'un concept fonction",
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         FORCE_ARETE     =FACT(statut='f',max='**',
+           fr="Applique des forces linéiques à une arete d'élément volumique ou de coque dont les valeurs des composantes sont"
+               +" fournies par l'intermédiaire d'un concept fonction",
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         FORCE_CONTOUR   =FACT(statut='f',max='**',
+           fr="Applique des forces linéiques au bord d'un domaine 2D ou AXIS ou AXIS_FOURIER, dont les valeurs des composantes"
+               +" sont fournies par l'intermédiaire d'un concept fonction",
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         FORCE_INTERNE   =FACT(statut='f',max='**',
+           fr="Applique des forces volumiques (2D ou 3D) à un domaine volumique, dont les valeurs des composantes sont fournies"
+               +" par l'intermédiaire d'un concept fonction",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         PRES_REP        =FACT(statut='f',max='**',
+           fr="Applique une pression à un domaine de milieu continu 2D ou 3D ou à un domaine de coques et tuyaux, dont les"
+               +" valeurs imposées (pression et/ou cisaillement) sont fournies par l'intermédiaire d'un concept fonction",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','FISSURE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE','FISSURE'),
+                   AU_MOINS_UN('PRES','CISA_2D'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FISSURE         =SIMP(statut='f',typ=fiss_xfem,min=1,max=100,),
+           PRES            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           CISA_2D         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         EFFE_FOND       =FACT(statut='f',max='**',
+           fr="Calcul l'effet de fond sur une branche de tuyauterie (modélisation 3D) soumise"
+               +" à une pression dont la valeur est fournie par l'intermédiaire d'un concept fonction",
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),),
+           GROUP_MA_INT    =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           PRES            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         EPSI_INIT       =FACT(statut='f',max='**',
+           fr="Applique un chargement de déformation initiale à un élément 2D, 3D ou de structure dont les composantes"
+               +" du tenseur de déformation sont fournies par l'intermédiaire d'un concept fonction",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           EPXX            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPYY            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPZZ            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPXY            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPXZ            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPYZ            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         FORCE_POUTRE    =FACT(statut='f',max='**',
+           fr="Applique des forces linéiques sur des éléments de type poutre dont les valeurs sont fournies par"
+               +" l'intermédiaire d'un concept fonction",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','N','VY','VZ'),
+                   PRESENT_ABSENT('FX','N','VY','VZ'),
+                   PRESENT_ABSENT('FY','N','VY','VZ'),
+                   PRESENT_ABSENT('FZ','N','VY','VZ'),
+                   PRESENT_ABSENT('N','FX','FY','FZ'),
+                   PRESENT_ABSENT('VY','FX','FY','FZ'),
+                   PRESENT_ABSENT('VZ','FX','FY','FZ'),),
+#  rajout d un mot cle REPERE : / GLOBAL / LOCAL
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FORCE",into=("VENT","FORCE") ),
+           FX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           N               =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         FORCE_TUYAU     =FACT(statut='f',max='**',
+           fr="Applique une pression sur des éléments TUYAU, la valeur est fournie par l'intermédiaire d'un concept fonction",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           PRES            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         FORCE_COQUE     =FACT(statut='f',max='**',
+           fr="Applique des forces surfaciques sur des éléments de types coques dont les valeurs sont fournies par"
+               +" l'intermédiaires d'un concept fonction",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('FX','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('FY','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('FZ','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('MX','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('MY','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('MZ','PRES','F1','F2','F3','MF1','MF2'),
+                   PRESENT_ABSENT('F1','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('F2','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('F3','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('MF1','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('MF2','PRES','FX','FY','FZ','MX','MY','MZ'),
+                   PRESENT_ABSENT('PRES','FX','FY','FZ','MX','MY','MZ','F1','F2','F3','MF1','MF2'),),
+#  rajout d un mot cle REPERE : / GLOBAL / LOCAL
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MX              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MY              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MZ              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           F1              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           F2              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           F3              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MF1             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MF2             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PRES            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PLAN            =SIMP(statut='f',typ='TXM',defaut="MAIL",
+                                 into=("SUP","INF","MOY","MAIL") ),
+         ),
+
+         LIAISON_COQUE   =FACT(statut='f',max='**',
+           fr="Permet de représenter le raccord entre des éléments de coques au moyen des relations linéaires",
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES",) ),
+         ),
+
+
+         VITE_FACE       =FACT(statut='f',max='**',
+           fr="Impose des vitesses normales à une face (phénomène ACOUSTIQUE) dont les valeurs sont fournies par"
+               +" l'intermédiaire d'un concept fonction",
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           VNOR            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         IMPE_FACE       =FACT(statut='f',max='**',
+           fr="Applique à une face une impédance acoustique dont la valeur est fournie par l'intermédiaire"
+               +" d'un concept fonction",
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('GROUP_MA','MAILLE'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           IMPE            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         ONDE_PLANE      =FACT(statut='f',max='**',
+           fr="Impose un chargement sismique par onde plane dont la valeur est fournie par l'intermédiaire"
+               +" d'un concept fonction",
+           DIRECTION       =SIMP(statut='o',typ='R',max='**'),
+           TYPE_ONDE       =SIMP(statut='o',typ='TXM' ),
+           FONC_SIGNAL     =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DIST_ORIG       =SIMP(statut='o',typ='R' ),
+         ),
+
+
+
+         FLUX_THM_REP    =FACT(statut='f',max='**',
+           fr="Applique à un domaine continue 2D ou 3D un flux de chaleur et/ou un apport de masse fluide (flux hydraulique)"
+               +" dont les valeurs des flux sont fournies par l'intermédiaire d'un concept fonction",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FLUN','FLUN_HYDR1','FLUN_HYDR2'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FLUN            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUN_HYDR1      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUN_HYDR2      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+
+
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE None
+AFFE_CHAR_OPS011=OPER(nom="AFFE_CHAR_OPS011",op= 190,sd_prod=char_ther,
+                      fr="Affectation de charges et conditions limites thermiques spécifique à CARA_TORSION",
+                      reentrant='n',
+            UIinfo={"groupes":("Outils métier",)},
+         regles=(AU_MOINS_UN('CARA_TORSION', ),),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         VERI_DDL        =SIMP(statut='f',typ='TXM',defaut="OUI",
+                               into=("OUI","NON") ),
+         CARA_TORSION    =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 16/09/2008   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+AFFE_CHAR_THER=OPER(nom="AFFE_CHAR_THER",op=34,sd_prod=char_ther
+                    ,fr="Affectation de charges et conditions aux limites thermiques constantes",
+                    reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+      regles=(AU_MOINS_UN('TEMP_IMPO','SOURCE','FLUX_REP','ECHANGE',
+                          'ECHANGE_PAROI','GRAD_TEMP_INIT','LIAISON_DDL','LIAISON_GROUP',
+                          'LIAISON_UNIF','LIAISON_CHAMNO','RAYONNEMENT','LIAISON_MAIL' ),),
+         MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
+         METHODE         =SIMP(statut='c',typ='TXM',fr="Stratégie de résolution pour les températures imposées",
+                               into=('DUALISATION',),defaut='DUALISATION',),
+                               # METHODE='ELIMINATION' est traité dans le fortran mais dangereux actuellement
+
+         TEMP_IMPO       =FACT(statut='f',max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP_SUP','TEMP','TEMP_INF'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TEMP            =SIMP(statut='f',typ='R'),
+           TEMP_INF        =SIMP(statut='f',typ='R'),
+           TEMP_SUP        =SIMP(statut='f',typ='R'), ),
+
+         FLUX_REP        =FACT(statut='f',max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_PRESENT('CARA_TORSION','GROUP_MA'),
+                   AU_MOINS_UN('FLUN','FLUN_INF','FLUN_SUP','CARA_TORSION') ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FLUN            =SIMP(statut='f',typ='R'),
+           FLUN_INF        =SIMP(statut='f',typ='R'),
+           FLUN_SUP        =SIMP(statut='f',typ='R'),
+           CARA_TORSION    =SIMP(statut='f',typ=table_sdaster),
+         ),
+
+
+         RAYONNEMENT     =FACT(statut='f',max='**',
+           fr="Attention, exprimer les températures en Celsius si rayonnement",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           SIGMA           =SIMP(statut='o',typ='R'),
+           EPSILON         =SIMP(statut='o',typ='R'),
+           TEMP_EXT        =SIMP(statut='o',typ='R'),
+         ),
+
+         ECHANGE         =FACT(statut='f',max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('COEF_H','COEF_H_INF','COEF_H_SUP'),
+                   ENSEMBLE('COEF_H','TEMP_EXT',),
+                   ENSEMBLE('COEF_H_INF','TEMP_EXT_INF'),
+                             ENSEMBLE('COEF_H_SUP','TEMP_EXT_SUP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           COEF_H          =SIMP(statut='f',typ='R'),
+           TEMP_EXT        =SIMP(statut='f',typ='R'),
+           COEF_H_INF      =SIMP(statut='f',typ='R'),
+           TEMP_EXT_INF    =SIMP(statut='f',typ='R'),
+           COEF_H_SUP      =SIMP(statut='f',typ='R'),
+           TEMP_EXT_SUP    =SIMP(statut='f',typ='R'),
+         ),
+
+         SOURCE          =FACT(statut='f',max='**',
+           regles=(UN_PARMI('SOUR','SOUR_CALCULEE',),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('SOUR_CALCULEE','TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           SOUR            =SIMP(statut='f',typ='R'),
+           SOUR_CALCULEE   =SIMP(statut='f',typ=(cham_elem) ),
+         ),
+
+         GRAD_TEMP_INIT  =FACT(statut='f',max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FLUX_X','FLUX_Y','FLUX_Z'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FLUX_X          =SIMP(statut='f',typ='R' ),
+           FLUX_Y          =SIMP(statut='f',typ='R' ),
+           FLUX_Z          =SIMP(statut='f',typ='R' ),
+                         ),
+
+         LIAISON_DDL     =FACT(statut='f',max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD', ),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ='R' ),
+         ),
+
+         LIAISON_GROUP   =FACT(statut='f',max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                             EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                             EXCLUS('GROUP_MA_1','NOEUD_2'),
+                   EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                             EXCLUS('GROUP_NO_1','MAILLE_2'),
+                             EXCLUS('MAILLE_1','GROUP_NO_2'),
+                             EXCLUS('MAILLE_1','NOEUD_2'),
+                             EXCLUS('NOEUD_1','GROUP_MA_2'),
+                             EXCLUS('NOEUD_1','MAILLE_2'),
+                             EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           DDL_1           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+           DDL_2           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP",) ),
+           COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ='R' ),
+           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           TRAN            =SIMP(statut='f',typ='R',max='**'),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max='**'),
+           CENTRE          =SIMP(statut='f',typ='R',max='**'),
+         ),
+
+         LIAISON_MAIL    =FACT(statut='f',max='**',
+           regles=(AU_MOINS_UN('GROUP_MA_MAIT','MAILLE_MAIT'),
+                   AU_MOINS_UN('GROUP_MA_ESCL','MAILLE_ESCL','GROUP_NO_ESCL',
+                               'NOEUD_ESCL'),),
+           GROUP_MA_MAIT   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_MAIT     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_ESCL   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_ESCL     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_ESCL   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_ESCL      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TRAN            =SIMP(statut='f',typ='R',max='**' ),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max='**' ),
+           CENTRE          =SIMP(statut='f',typ='R',max='**' ),
+           ELIM_MULT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+
+         ECHANGE_PAROI   =FACT(statut='f',max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           COEF_H          =SIMP(statut='f',typ='R'),
+           TRAN            =SIMP(statut='f',typ='R',min=2,max=3),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+           CENTRE          =SIMP(statut='f',typ='R',min=2,max=3),
+                         ),
+
+         LIAISON_UNIF    =FACT(statut='f',max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+         ),
+
+         LIAISON_CHAMNO  =FACT(statut='f',max='**',
+           CHAM_NO         =SIMP(statut='o',typ=cham_no_sdaster),# CO()# "il faut definir une structure de donnee generique chamno"
+           COEF_IMPO       =SIMP(statut='o',typ='R' ),
+           NUME_LAGR       =SIMP(statut='f',typ='TXM',defaut="NORMAL",into=("NORMAL","APRES") ),
+         ),
+
+         CONVECTION      =FACT(statut='f',max='**',
+           VITESSE         =SIMP(statut='o',typ=(cham_no_sdaster) ),
+         ),
+
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 16/09/2008   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+AFFE_CHAR_THER_F=OPER(nom="AFFE_CHAR_THER_F",op=34,sd_prod=char_ther,
+                     fr="Affectation de charges et conditions aux limites thermiques fonction d'un (ou plusieurs)"
+                         +" paramètres (temps, ...)",
+                     reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+      regles=(AU_MOINS_UN('TEMP_IMPO','SOURCE','FLUX_REP','FLUX_NL','ECHANGE',
+                          'ECHANGE_PAROI','LIAISON_DDL','LIAISON_GROUP','LIAISON_UNIF',
+                          'GRAD_TEMP_INIT','RAYONNEMENT'),),
+         MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
+
+         TEMP_IMPO       =FACT(statut='f',max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),
+                   AU_MOINS_UN('TEMP_SUP','TEMP','TEMP_INF'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',into=("TEMP",) ),
+           TEMP            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP_INF        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP_SUP        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         FLUX_REP        =FACT(statut='f',max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FLUN','FLUN_INF','FLUN_SUP','FLUX_X','FLUX_Y','FLUX_Z'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FLUN            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUN_INF        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUN_SUP        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUX_X          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUX_Y          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUX_Z          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         FLUX_NL         =FACT(statut='f',max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FLUN            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+
+         RAYONNEMENT     =FACT(statut='f',max='**',
+           fr="Attention, exprimer les températures en Celsius si rayonnement",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           SIGMA           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           EPSILON         =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP_EXT        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+
+
+         ECHANGE         =FACT(statut='f',max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('COEF_H','COEF_H_INF','COEF_H_SUP'),
+                   ENSEMBLE('COEF_H','TEMP_EXT'),
+                   ENSEMBLE('COEF_H_INF','TEMP_EXT_INF'),
+                   ENSEMBLE('COEF_H_SUP','TEMP_EXT_SUP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           COEF_H          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP_EXT        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           COEF_H_INF      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP_EXT_INF    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           COEF_H_SUP      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP_EXT_SUP    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+
+         SOURCE          =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           SOUR            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         GRAD_TEMP_INIT  =FACT(statut='f',max='**',
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),
+                   PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                   AU_MOINS_UN('FLUX_X','FLUX_Y','FLUX_Z'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           FLUX_X          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUX_Y          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FLUX_Z          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         ECHANGE_PAROI   =FACT(statut='f',max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1'),
+                        UN_PARMI('GROUP_MA_2','MAILLE_2'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           COEF_H          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TRAN            =SIMP(statut='f',typ='R',min=2,max=3),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+           CENTRE          =SIMP(statut='f',typ='R',min=2,max=3),
+         ),
+
+        LIAISON_DDL     =FACT(statut='f',max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',max='**',into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT       =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         LIAISON_GROUP   =FACT(statut='f',max='**',
+           regles=(UN_PARMI('GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                   UN_PARMI('GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),
+                             EXCLUS('GROUP_MA_1','GROUP_NO_2'),
+                        EXCLUS('GROUP_MA_1','NOEUD_2'),
+                   EXCLUS('GROUP_NO_1','GROUP_MA_2'),
+                        EXCLUS('GROUP_NO_1','MAILLE_2'),
+                        EXCLUS('MAILLE_1','GROUP_NO_2'),
+                        EXCLUS('MAILLE_1','NOEUD_2'),
+                        EXCLUS('NOEUD_1','GROUP_MA_2'),
+                        EXCLUS('NOEUD_1','MAILLE_2'),
+                        EXCLUS('SANS_NOEUD','SANS_GROUP_NO'),),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           SANS_NOEUD      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           SANS_GROUP_NO   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           DDL_1           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT_1     =SIMP(statut='o',typ='R',max='**'),
+           DDL_2           =SIMP(statut='f',typ='TXM',max='**',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+           COEF_MULT_2     =SIMP(statut='o',typ='R',max='**'),
+           COEF_IMPO       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           SOMMET          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           TRAN            =SIMP(statut='f',typ='R',max='**'),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max='**'),
+           CENTRE          =SIMP(statut='f',typ='R',max='**'),
+         ),
+
+         LIAISON_UNIF    =FACT(statut='f',max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           DDL             =SIMP(statut='f',typ='TXM',defaut="TEMP",
+                                 into=("TEMP","TEMP_INF","TEMP_SUP") ),
+         ),
+
+         CONVECTION      =FACT(statut='f',max='**',
+           VITESSE         =SIMP(statut='o',typ=cham_no_sdaster ),
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 12/05/2009   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+AFFE_MATERIAU=OPER(nom="AFFE_MATERIAU",op=6,sd_prod=cham_mater,
+                   fr="Affecter des matériaux à des zones géométriques d'un maillage",
+                         reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+         MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster),
+         MODELE          =SIMP(statut='f',typ=modele_sdaster),
+
+         #  affectation du nom du matériau (par mailles):
+         #  ----------------------------------------------
+         AFFE            =FACT(statut='o',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           MATER           =SIMP(statut='o',typ=mater_sdaster,max=30),
+         ),
+
+         #  affectation de comportement (multifibres pour l'instant):
+         #  ----------------------------------------------
+         AFFE_COMPOR        =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           COMPOR          =SIMP(statut='o',typ=compor_sdaster,max=1),
+         ),
+
+         #  affectation des variables de commande :
+         #  --------------------------------------------------
+         # un mot clé caché qui ne sert qu'à boucler sur les VARC possibles :
+         LIST_NOM_VARC =SIMP(statut='c',typ='TXM', defaut=("TEMP","CORR","IRRA","HYDR","SECH","EPSA",
+                                                           "M_ACIER","M_ZIRC","NEUT1","NEUT2")),
+
+         AFFE_VARC    =FACT(statut='f',max='**',
+          regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                  PRESENT_ABSENT('GROUP_MA','TOUT'),
+                  PRESENT_ABSENT('MAILLE','TOUT'),
+                  AU_MOINS_UN('EVOL','CHAMP_GD','VALE_REF'),
+                  EXCLUS('EVOL','CHAMP_GD'),
+                  ),
+
+          TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ), # [défaut]
+          GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+          MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+
+          NOM_VARC        =SIMP(statut='o',typ='TXM', into=("TEMP","CORR","IRRA","HYDR","SECH","M_ACIER","M_ZIRC",
+                                                            "EPSA","NEUT1","NEUT2")),
+          CHAMP_GD        =SIMP(statut='f',typ=cham_gd_sdaster,),
+          EVOL            =SIMP(statut='f',typ=evol_sdaster,),
+
+          B_EVOL          =BLOC(condition="EVOL!=None",
+              NOM_CHAM      =SIMP(statut='f',typ='TXM'),
+              PROL_DROITE   =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+              PROL_GAUCHE   =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+              FONC_INST     =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+          ),
+          VALE_REF          =SIMP(statut='f',typ='R'),
+         ),
+
+         #  mots clés cachés pour les variables de commande NEUTi :
+         #  -------------------------------------------------------
+         VARC_NEUT1   =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="NEUT1"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="NEUT_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("X1")),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("NEUT1")),
+         ),
+         VARC_NEUT2   =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="NEUT2"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="NEUT_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("X1")),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("NEUT2")),
+         ),
+
+         #  mots clés cachés pour variable de commande TEMP :
+         #  --------------------------------------------------
+         VARC_TEMP    =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="TEMP"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="TEMP_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("TEMP",)),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("TEMP",)),
+           VALE_DEF        =SIMP(statut='c',typ='R',max=1,min=1,defaut=(0.,)),
+         ),
+
+         #  mots clés cachés pour variable de commande SECH :
+         #  --------------------------------------------------
+         VARC_SECH    =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="SECH"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="TEMP_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("TEMP",)),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("SECH",)),
+         ),
+
+         #  mots clés cachés pour variable de commande HYDR :
+         #  --------------------------------------------------
+         VARC_HYDR    =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="HYDR"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="HYDR_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("HYDR",)),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("HYDR",)),
+         ),
+
+         #  mots clés cachés pour variable de commande CORR :
+         #  --------------------------------------------------
+         VARC_CORR    =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="CORR"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="CORR_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("CORR",)),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("CORR",)),
+         ),
+
+         #  mots clés cachés pour variable de commande IRRA :
+         #  --------------------------------------------------
+         VARC_IRRA    =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="IRRA"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="IRRA_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("IRRA",)),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("IRRA",)),
+         ),
+
+         #  mots clés cachés pour variable de commande EPSA :
+         #  --------------------------------------------------
+         VARC_EPSA    =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="EPSA"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="EPSI_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=6,min=6,defaut=("EPXX","EPYY","EPZZ","EPXY","EPXZ","EPYZ",)),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=6,min=6,defaut=("EPSAXX","EPSAYY","EPSAZZ","EPSAXY","EPSAXZ","EPSAYZ",)),
+         ),
+         #  mots clés cachés pour variable de commande metallurgique ACIER :
+         #  -----------------------------------------------------------------
+         VARC_M_ACIER  =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="M_ACIER"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="VARI_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=7,min=7,defaut=("V1","V2","V3","V4","V5","V6","V7")),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=7,min=7,defaut=("PFERRITE","PPERLITE","PBAINITE",
+                                                                          "PMARTENS","TAUSTE","TRANSF","TACIER",)),
+         ),
+         #  mots clés cachés pour variable de commande metallurgique ZIRCALOY :
+         #  --------------------------------------------------------------------
+         VARC_M_ZIRC  =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="M_ZIRC"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="VARI_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=4,min=4,defaut=("V1","V2","V3","V4")),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=4,min=4,defaut=("ALPHPUR","ALPHBETA","TZIRC","TEMPS")),
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+
+
+#& MODIF COMMANDE  DATE 20/04/2010   AUTEUR JAUBERT A.JAUBERT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+AFFE_MODELE=OPER(nom="AFFE_MODELE",op=18,sd_prod=modele_sdaster,
+            UIinfo={"groupes":("Modélisation",)},
+                 fr="Définir le phénomène physique modélisé et le type d'éléments finis sur le maillage",reentrant='n',
+         regles=(AU_MOINS_UN('AFFE','AFFE_SOUS_STRUC'),),
+         MAILLAGE        =SIMP(statut='o',typ=(maillage_sdaster) ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         VERIF           =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=2,into=("MAILLE","NOEUD") ),
+#
+#====
+# Définition des grandeurs caractéristiques
+#====
+#
+         GRANDEUR_CARA =FACT(statut='f',max=1,
+         fr="Grandeurs caractéristiques pour l'adimensionnement des indicateurs d'erreur HM",
+         ang="Characteristic data for HM error estimators adimensionalisation",
+#
+            LONGUEUR      =SIMP(statut='f',typ='R',val_min=0,
+                                fr ="Longueur caractéristique",
+                                ang="Characteristic length",),
+            PRESSION      =SIMP(statut='f',typ='R',val_min=0,
+                                fr ="Pression caractéristique",
+                                ang="Characteristic pressure",),
+            TEMPERATURE   =SIMP(statut='f',typ='R',val_min=0,
+                                fr ="Température caractéristique",
+                                ang="Characteristic temperature",),),
+#
+         AFFE_SOUS_STRUC =FACT(statut='f',
+           regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           SUPER_MAILLE    =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+           PHENOMENE       =SIMP(statut='f',typ='TXM',defaut="MECANIQUE",into=("MECANIQUE",) ),
+         ),
+         AFFE            =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           PHENOMENE       =SIMP(statut='o',typ='TXM',
+                                 into=("MECANIQUE","THERMIQUE","ACOUSTIQUE") ),
+                b_mecanique     =BLOC( condition = "PHENOMENE=='MECANIQUE'",
+                                        fr="modélisations mécaniques",
+                    MODELISATION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=(
+                                  "2D_DIS_T",        # RESP. : FLEJOU J.L.FLEJOU
+                                  "2D_DIS_TR",       # RESP. : FLEJOU J.L.FLEJOU
+                                  "2D_FLUI_ABSO",    # RESP. : DEVESA G.DEVESA
+                                  "2D_FLUI_PESA",    # RESP. : GREFFET N.GREFFET
+                                  "2D_FLUI_STRU",    # RESP. : GREFFET N.GREFFET
+                                  "2D_FLUIDE",       # RESP. : GREFFET N.GREFFET
+                                  "3D",              # RESP. : DESROCHES X.DESROCHES
+                                  "3D_ABSO",         # RESP. : DEVESA G.DEVESA
+                                  "3D_FAISCEAU",     # RESP. : VOLDOIRE F.VOLDOIRE
+                                  "3D_FLUI_ABSO",    # RESP. : DEVESA G.DEVESA
+                                  "3D_FLUIDE",       # RESP. : GREFFET N.GREFFET
+                                  "3D_INCO",         # RESP. : MICHEL S.MICHEL
+                                  "3D_INCO_GD",      # RESP. : MICHEL S.MICHEL
+                                  "3D_SI",           # RESP. : DESROCHES X.DESROCHES
+                                  "3D_GRAD_EPSI",    # RESP. : MICHEL S.MICHEL
+                                  "3D_GRAD_VARI",    # RESP. : MICHEL S.MICHEL
+                                  "3D_XFEM_CONT",    # RESP. : GENIAUT S.GENIAUT
+                                  "3D_JOINT",        # RESP. : LAVERNE J.LAVERNE
+                                  "3D_INTERFACE",    # RESP. : LAVERNE J.LAVERNE
+                                  "AXIS",            # RESP. : LEFEBVRE J.P.LEFEBVRE
+                                  "AXIS_FLUI_STRU",  # RESP. : GREFFET N.GREFFET
+                                  "AXIS_FLUIDE",     # RESP. : GREFFET N.GREFFET
+                                  "AXIS_FOURIER",    # RESP. : DESROCHES X.DESROCHES
+                                  "AXIS_INCO",       # RESP. : MICHEL S.MICHEL
+                                  "AXIS_INCO_GD",    # RESP. : MICHEL S.MICHEL
+                                  "AXIS_SI",         # RESP. : DESROCHES X.DESROCHES
+                                  "AXIS_GRAD_VARI",  # RESP. : MICHEL S.MICHEL
+                                  "AXIS_JOINT",      # RESP. : LAVERNE J.LAVERNE
+                                  "AXIS_INTERFACE",  # RESP. : LAVERNE J.LAVERNE
+                                  "AXIS_ELDI",       # RESP. : LAVERNE J.LAVERNE
+                                  "BARRE",           # RESP. : FLEJOU J.L.FLEJOU
+                                  "2D_BARRE",        # RESP. : FLEJOU J.L.FLEJOU
+                                  "C_PLAN",          # RESP. : LEFEBVRE J.P.LEFEBVRE
+                                  "C_PLAN_XFEM_CONT",# RESP. : GENIAUT S.GENIAUT
+                                  "C_PLAN_SI",       # RESP. : DESROCHES X.DESROCHES
+                                  "C_PLAN_GRAD_EPSI",# RESP. : MICHEL S.MICHEL
+                                  "CABLE",           # RESP. : FLEJOU J.L.FLEJOU
+                                  "CABLE_POULIE",    # RESP. : None
+                                  "COQUE_3D",        # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE_AXIS",      # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE_C_PLAN",    # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE_D_PLAN",    # RESP. : DESROCHES X.DESROCHES
+                                  "D_PLAN",          # RESP. : LEFEBVRE J.P.LEFEBVRE
+                                  "D_PLAN_XFEM_CONT",# RESP. : GENIAUT S.GENIAUT
+                                  "D_PLAN_GRAD_EPSI",# RESP. : MICHEL S.MICHEL
+                                  "D_PLAN_GRAD_VARI",# RESP. : MICHEL S.MICHEL
+                                  "PLAN_JOINT",      # RESP. : LAVERNE J.LAVERNE
+                                  "PLAN_INTERFACE",  # RESP. : LAVERNE J.LAVERNE
+                                  "PLAN_ELDI",       # RESP. : LAVERNE J.LAVERNE
+                                  "D_PLAN_ABSO",     # RESP. : DEVESA G.DEVESA
+                                  "D_PLAN_INCO",     # RESP. : MICHEL S.MICHEL
+                                  "D_PLAN_INCO_GD",  # RESP. : MICHEL S.MICHEL
+                                  "D_PLAN_SI",       # RESP. : DESROCHES X.DESROCHES
+                                  "DIS_T",           # RESP. : FLEJOU J.L.FLEJOU
+                                  "DIS_TR",          # RESP. : FLEJOU J.L.FLEJOU
+                                  "DKT",             # RESP. : DESROCHES X.DESROCHES
+                                  "DKTG",            # RESP. : MARKOVIC D.MARKOVIC
+                                  "DST",             # RESP. : DESROCHES X.DESROCHES
+                                  "FLUI_STRU",       # RESP. : GREFFET N.GREFFET
+                                  "GRILLE_EXCENTRE", # RESP. : ROSPARS C.ROSPARS
+                                  "GRILLE_MEMBRANE", # RESP. : ROSPARS C.ROSPARS
+                                  "POU_C_T",         # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_E",         # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_EM",        # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_T",         # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_T_GD",      # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_TG",        # RESP. : FLEJOU J.L.FLEJOU
+                                  "POU_D_TGM",       # RESP. : FLEJOU J.L.FLEJOU
+                                  "Q4G",             # RESP. : DESROCHES X.DESROCHES
+                                  "TUYAU_3M",        # RESP. : PROIX J.M.PROIX
+                                  "TUYAU_6M",        # RESP. : PROIX J.M.PROIX
+                                  "SHB8",            # RESP. : DESROCHES X.DESROCHES
+                                  "D_PLAN_HHM",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HM",       # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THH",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THHM",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THM",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HHMD",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2MD",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HMD",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THHD",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THH2D",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THVD",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THH2MD",   # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THHMD",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THMD",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HHMS",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2MS",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HMS",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THHS",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THH2S",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THVS",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THH2MS",   # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THHMS",    # RESP. : GRANET S.GRANET
+                                  "D_PLAN_THMS",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HM_P",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HHD",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HHS",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2D",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2S",     # RESP. : GRANET S.GRANET
+                                  "D_PLAN_2DG",      # RESP. : GRANET S.GRANET
+                                  "D_PLAN_DIL",      # RESP. : GRANET S.GRANET
+                                  "AXIS_THH",        # RESP. : GRANET S.GRANET
+                                  "AXIS_THHM",       # RESP. : GRANET S.GRANET
+                                  "AXIS_THM",        # RESP. : GRANET S.GRANET
+                                  "AXIS_HHM",        # RESP. : GRANET S.GRANET
+                                  "AXIS_HM",         # RESP. : GRANET S.GRANET
+                                  "AXIS_HH2MD",      # RESP. : GRANET S.GRANET
+                                  "AXIS_HHMD",       # RESP. : GRANET S.GRANET
+                                  "AXIS_HMD",        # RESP. : GRANET S.GRANET
+                                  "AXIS_THHD",       # RESP. : GRANET S.GRANET
+                                  "AXIS_THH2D",      # RESP. : GRANET S.GRANET
+                                  "AXIS_THVD",       # RESP. : GRANET S.GRANET
+                                  "AXIS_THHMD",      # RESP. : GRANET S.GRANET
+                                  "AXIS_THH2MD",     # RESP. : GRANET S.GRANET
+                                  "AXIS_THMD",       # RESP. : GRANET S.GRANET
+                                  "AXIS_HH2MS",      # RESP. : GRANET S.GRANET
+                                  "AXIS_HHMS",       # RESP. : GRANET S.GRANET
+                                  "AXIS_HMS",        # RESP. : GRANET S.GRANET
+                                  "AXIS_THHS",       # RESP. : GRANET S.GRANET
+                                  "AXIS_THH2S",      # RESP. : GRANET S.GRANET
+                                  "AXIS_THVS",       # RESP. : GRANET S.GRANET
+                                  "AXIS_THHMS",      # RESP. : GRANET S.GRANET
+                                  "AXIS_THH2MS",     # RESP. : GRANET S.GRANET
+                                  "AXIS_THMS",       # RESP. : GRANET S.GRANET
+                                  "AXIS_HHD",        # RESP. : GRANET S.GRANET
+                                  "AXIS_HHS",        # RESP. : GRANET S.GRANET
+                                  "AXIS_HH2D",       # RESP. : GRANET S.GRANET
+                                  "AXIS_HH2S",       # RESP. : GRANET S.GRANET
+                                  "3D_HHM" ,         # RESP. : GRANET S.GRANET
+                                  "3D_HM",           # RESP. : GRANET S.GRANET
+                                  "3D_THH",          # RESP. : GRANET S.GRANET
+                                  "3D_THV",          # RESP. : GRANET S.GRANET
+                                  "3D_THHM",         # RESP. : GRANET S.GRANET
+                                  "3D_THM",          # RESP. : GRANET S.GRANET
+                                  "3D_HHMD",         # RESP. : GRANET S.GRANET
+                                  "3D_HMD",          # RESP. : GRANET S.GRANET
+                                  "3D_THHD",         # RESP. : GRANET S.GRANET
+                                  "3D_THVD",         # RESP. : GRANET S.GRANET
+                                  "3D_THHMD",        # RESP. : GRANET S.GRANET
+                                  "3D_THMD",         # RESP. : GRANET S.GRANET
+                                  "3D_HHMS",         # RESP. : GRANET S.GRANET
+                                  "3D_HMS",          # RESP. : GRANET S.GRANET
+                                  "3D_THHS",         # RESP. : GRANET S.GRANET
+                                  "3D_THVS",         # RESP. : GRANET S.GRANET
+                                  "3D_THHMS",        # RESP. : GRANET S.GRANET
+                                  "3D_THMS",         # RESP. : GRANET S.GRANET
+                                  "3D_THH2MD",       # RESP. : GRANET S.GRANET
+                                  "3D_THH2MS",       # RESP. : GRANET S.GRANET
+                                  "3D_HH2MD",        # RESP. : GRANET S.GRANET
+                                  "3D_HH2MS",        # RESP. : GRANET S.GRANET
+                                  "3D_THH2S",        # RESP. : GRANET S.GRANET
+                                  "3D_THH2D",        # RESP. : GRANET S.GRANET
+                                  "3D_HHD",          # RESP. : GRANET S.GRANET
+                                  "3D_HHS",          # RESP. : GRANET S.GRANET
+                                  "3D_HH2D",         # RESP. : GRANET S.GRANET
+                                  "3D_HH2S",         # RESP. : GRANET S.GRANET
+                                  "VF1",             # RESP. : GRANET S.GRANET
+                                  "3D_HH2SUDM",      # RESP. : GRANET S.GRANET
+                                  "3D_HH2SUDA",      # RESP. : GRANET S.GRANET
+                                  "3D_HH2SUC",       # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2SUDM",  # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2SUC",   # RESP. : GRANET S.GRANET
+                                  "D_PLAN_HH2SUDA",  # RESP. : GRANET S.GRANET
+                                  "2D_JOINT_HMS",
+                                                                      )  )  ),
+
+                b_thermique     =BLOC( condition = "PHENOMENE=='THERMIQUE'",
+                                        fr="modélisations thermiques",
+                    MODELISATION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=(
+                                  "3D",              # RESP. : DURAND C.DURAND
+                                  "3D_DIAG",         # RESP. : DURAND C.DURAND
+                                  "AXIS",            # RESP. : DURAND C.DURAND
+                                  "AXIS_DIAG",       # RESP. : DURAND C.DURAND
+                                  "AXIS_FOURIER",    # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE",           # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE_AXIS",      # RESP. : DESROCHES X.DESROCHES
+                                  "COQUE_PLAN",      # RESP. : DESROCHES X.DESROCHES
+                                  "PLAN",            # RESP. : DURAND C.DURAND
+                                  "PLAN_DIAG",       # RESP. : DURAND C.DURAND
+                                                                      ),),),
+
+                b_acoustique    =BLOC( condition = "PHENOMENE=='ACOUSTIQUE'",
+                                        fr="modélisations acoustiques",
+                     MODELISATION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=(
+                                  "3D",              # RESP. : None
+                                  "PLAN"             # RESP. : None
+                                                                       ), ),),
+
+         ),
+
+         PARTITION         =FACT(statut='d',
+             PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="MAIL_DISPERSE",
+                                   into=("MAIL_CONTIGU","MAIL_DISPERSE","SOUS_DOMAINE","CENTRALISE",)),
+             b_dist_sd          =BLOC(condition = "PARALLELISME == 'SOUS_DOMAINE'",
+                 PARTITION       =SIMP(statut='o',typ=sd_feti_sdaster),
+                 CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+             ),
+             b_dist_maille          =BLOC(condition = "PARALLELISME in ('MAIL_DISPERSE','MAIL_CONTIGU')",
+                 CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,val_min=0),
+             ),
+         ),
+
+         VERI_JACOBIEN  =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI',
+                              fr ="Vérification de la forme des mailles (jacobiens tous de meme signe).",),
+) ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+AIDE=PROC(nom="AIDE",op=42,
+       UIinfo={"groupes":("Modélisation",)},
+       fr="Interroger et imprimer une documentation partielle sur les noms des concepts déjà définis et sur les couples"
+           +" (type d'éléments, option) disponibles dans la version.",
+       regles=(AU_MOINS_UN('CONCEPT','TYPE_ELEM', ),),
+       UNITE       =SIMP(statut='f',typ='I',defaut=8),  
+       TYPE_ELEM   =FACT(fr="couple type_elem option",statut='f',
+         INITEL       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                        ),
+       CONCEPT     =FACT(statut='f',max='**',
+         NOM          =SIMP(fr="liste des noms de concept",statut='f',typ='TXM',validators=NoRepeat(),max='**',defaut="*"),
+         OPTION       =SIMP(fr="option d'édition de concept",statut='f',typ='TXM',defaut="TOUT_TYPE",
+                                 into=("TOUT_TYPE","CREER","A_CREER",) ),
+         ),
+) ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+ASSE_MAILLAGE=OPER(nom="ASSE_MAILLAGE",op= 105,sd_prod=maillage_sdaster,
+                   fr="Assembler deux maillages pour en former un nouveau",
+                   reentrant='n',
+                   UIinfo={"groupes":("Maillage",)},
+         MAILLAGE_1 =  SIMP(statut='o',typ=maillage_sdaster,),
+         MAILLAGE_2 =  SIMP(statut='o',typ=maillage_sdaster,),
+         OPERATION  =  SIMP(statut='o',typ='TXM',into=("SOUS_STR","SUPERPOSE","COLLAGE"),),
+         b_collage  =  BLOC(condition = "OPERATION == 'COLLAGE'",
+           COLLAGE  =  FACT(statut='o',
+              GROUP_MA_1     =SIMP(statut='o',typ=grma),
+              GROUP_MA_2     =SIMP(statut='o',typ=grma),
+                             ),
+                           ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BODEL C.BODEL
+def asse_matr_gene_prod(METHODE,**args):
+    if   (METHODE=="INITIAL") : return matr_asse_gene_r
+    elif (args['OPTION']=="RIGI_GENE_C") : return matr_asse_gene_c
+    else : return matr_asse_gene_r
+
+ASSE_MATR_GENE=OPER(nom="ASSE_MATR_GENE",op= 128,sd_prod=asse_matr_gene_prod,
+                    fr="Assemblage des matrices généralisées de macro éléments pour construction de la matrice globale généralisée",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         METHODE          =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","INITIAL") ),
+         b_option     =BLOC(condition = "METHODE == 'CLASSIQUE'",
+           OPTION          =SIMP(statut='o',typ='TXM',into=("RIGI_GENE","RIGI_GENE_C","MASS_GENE","AMOR_GENE") ),
+           ),
+)  ;
+#& MODIF COMMANDE  DATE 06/10/2008   AUTEUR DEVESA G.DEVESA 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+def asse_matrice_prod(MATR_ELEM,**args):
+  if AsType(MATR_ELEM) == matr_elem_depl_r : return matr_asse_depl_r
+  if AsType(MATR_ELEM) == matr_elem_depl_c : return matr_asse_depl_c
+  if AsType(MATR_ELEM) == matr_elem_temp_r : return matr_asse_temp_r
+  if AsType(MATR_ELEM) == matr_elem_pres_c : return matr_asse_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+ASSE_MATRICE=OPER(nom="ASSE_MATRICE",op=12,sd_prod=asse_matrice_prod,
+                  fr="Construction d'une matrice assemblée",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         MATR_ELEM       =SIMP(statut='o',
+                               typ=(matr_elem_depl_r,matr_elem_depl_c,matr_elem_temp_r,matr_elem_pres_c) ),
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl_sdaster),
+         SYME            =SIMP(statut='f',typ='TXM',into=("OUI",) ),         
+         CHAR_CINE       =SIMP(statut='f',typ=(char_cine_meca,char_cine_ther,char_cine_acou) ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BODEL C.BODEL
+ASSE_VECT_GENE=OPER(nom="ASSE_VECT_GENE",op= 140,sd_prod=vect_asse_gene,
+                    fr="Projection des chargements sur la base modale d'une sous structure",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         METHODE          =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("CLASSIQUE","INITIAL") ),
+         b_nume     =BLOC(condition = "METHODE == 'CLASSIQUE'",
+             CHAR_SOUS_STRUC =FACT(statut='o',max='**',
+             SOUS_STRUC      =SIMP(statut='o',typ='TXM' ),
+             VECT_ASSE       =SIMP(statut='o',typ=cham_no_sdaster ),
+           ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+
+ASSE_VECTEUR=OPER(nom="ASSE_VECTEUR",op=13,sd_prod=cham_no_sdaster,
+                  fr="Construire un champ aux noeuds par assemblage de vecteurs élémentaires",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         VECT_ELEM       =SIMP(statut='o',typ=vect_elem,max='**'),
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl_sdaster ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2,) ),
+)  ;
+#& MODIF COMMANDE  DATE 14/12/2009   AUTEUR DEVESA G.DEVESA 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+CALC_AMOR_MODAL=OPER(nom="CALC_AMOR_MODAL",op= 172,sd_prod=listr8_sdaster,
+                     fr="Création d'une liste d'amortissements modaux calculés selon la règle du RCC-G",
+                     reentrant='n',
+            UIinfo={"groupes":("Résolution",)},
+       regles=(EXCLUS('AMOR_RAYLEIGH','ENER_SOL',),
+               EXCLUS('AMOR_RAYLEIGH','AMOR_INTERNE',),
+               EXCLUS('AMOR_RAYLEIGH','AMOR_SOL',),
+               PRESENT_PRESENT('ENER_SOL','AMOR_INTERNE'),
+               PRESENT_PRESENT('ENER_SOL','AMOR_SOL'),
+               ),
+         AMOR_RAYLEIGH   =FACT(statut='f',
+           AMOR_ALPHA      =SIMP(statut='o',typ='R'),
+           AMOR_BETA       =SIMP(statut='o',typ='R'),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+         ),
+         ENER_SOL        =FACT(statut='f',
+           regles=(UN_PARMI('GROUP_NO_RADIER','GROUP_MA_RADIER'),
+                   PRESENT_ABSENT('COEF_GROUP','FONC_GROUP'),
+#  Peut-on remplacer les deux règles suivantes par un ENSEMBLE_('KRX','KRY','KRZ')
+                   PRESENT_PRESENT('KRX','KRY'),
+                   PRESENT_PRESENT('KRX','KRZ'),
+                   PRESENT_ABSENT('COOR_CENTRE','NOEUD_CENTRE'),
+                   PRESENT_ABSENT('GROUP_NO_CENTRE','NOEUD_CENTRE'),
+                   PRESENT_ABSENT('GROUP_NO_CENTRE','COOR_CENTRE'),),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","RIGI_PARASOL") ),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+           GROUP_NO_RADIER =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           GROUP_MA_RADIER =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           FONC_GROUP      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           COEF_GROUP      =SIMP(statut='f',typ='R',max='**'),
+           KX              =SIMP(statut='o',typ='R' ),
+           KY              =SIMP(statut='o',typ='R' ),
+           KZ              =SIMP(statut='o',typ='R' ),
+           KRX             =SIMP(statut='f',typ='R' ),
+           KRY             =SIMP(statut='f',typ='R' ),
+           KRZ             =SIMP(statut='f',typ='R' ),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+           COOR_CENTRE     =SIMP(statut='f',typ='R',max=3),
+         ),
+         AMOR_INTERNE    =FACT(statut='f',
+           ENER_POT        =SIMP(statut='o',typ=table_sdaster ),
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+           AMOR_REDUIT     =SIMP(statut='o',typ='R',max='**'),
+         ),
+         AMOR_SOL        =FACT(statut='f',
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           FONC_AMOR_GEO   =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule),max='**' ),
+           HOMOGENE        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 0.3 ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+CALC_CHAM_ELEM=OPER(nom="CALC_CHAM_ELEM",op=38,sd_prod=cham_elem,
+                    fr="Calculer un champ élémentaire en thermique et en accoustique à partir de champs déjà calculés",
+                    reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+
+         regles=(EXCLUS('TOUT','GROUP_MA',),EXCLUS('TOUT','MAILLE',),),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+
+#
+#
+#  introduire un mot cle de type modelisation : mécanique,thermique,...
+#
+
+         OPTION          =SIMP(statut='o',typ='TXM',
+                               into=("FLUX_ELGA_TEMP","FLUX_ELNO_TEMP",
+                                     "PRES_ELNO_DBEL","PRES_ELNO_REEL","PRES_ELNO_IMAG",
+                                     "COOR_ELGA"), ),
+
+         b_thermique  =BLOC(condition="OPTION in ('FLUX_ELNO_TEMP','FLUX_ELGA_TEMP',)",
+           TEMP            =SIMP(statut='o',typ=(cham_no_sdaster,)),
+         ),
+
+         b_acoustique  =BLOC(condition="OPTION in ('PRES_ELNO_DBEL','PRES_ELNO_REEL','PRES_ELNO_IMAG',)",
+           PRES            =SIMP(statut='o',typ=(cham_no_sdaster,)),
+         ),
+
+
+
+         EXCIT           =FACT(statut='f',max='**',
+               regles=(EXCLUS('FONC_MULT','COEF_MULT', ),),
+               CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou)),
+               FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+               COEF_MULT       =SIMP(statut='f',typ='R'), ),
+
+         INST            =SIMP(statut='f',typ='R',defaut= 0.E+0),
+         ACCE            =SIMP(statut='f',typ=cham_no_sdaster),
+         NUME_COUCHE     =SIMP(statut='f',typ='I',defaut= 1),
+         NIVE_COUCHE     =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY") ),
+         MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0 ),
+         ANGLE           =SIMP(statut='f',typ='I',defaut= 0),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+
+CALC_CHAR_CINE=OPER(nom="CALC_CHAR_CINE",op= 102,sd_prod=cham_no_sdaster,
+                    fr="Calcul des seconds membres associés à des charges cinématiques (conditions aux limites non dualisées)",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl_sdaster ),
+         CHAR_CINE       =SIMP(statut='o',typ=(char_cine_meca,char_cine_ther,char_cine_acou ),validators=NoRepeat(),max='**' ),
+         INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+def calc_char_seisme_prod(MATR_MASS,**args ):
+  if AsType(MATR_MASS) == matr_asse_depl_r : return cham_no_sdaster
+  raise AsException("type de concept resultat non prevu")
+
+CALC_CHAR_SEISME=OPER(nom="CALC_CHAR_SEISME",op=  92,sd_prod=calc_char_seisme_prod,
+                      reentrant='n',fr="Calcul du chargement sismique",
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         regles=(UN_PARMI('MONO_APPUI','MODE_STAT' ),),
+         MATR_MASS       =SIMP(statut='o',typ=matr_asse_depl_r,fr="Matrice de masse" ),
+         DIRECTION       =SIMP(statut='o',typ='R',max=6,fr="Directions du séisme imposé"),
+         MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),         
+         MODE_STAT       =SIMP(statut='f',typ=(mode_meca,) ),
+         b_mode_stat     =BLOC ( condition = "MODE_STAT != None",
+           regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
+           NOEUD           =SIMP(statut='f',typ=no,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2010   AUTEUR BOTTONI M.BOTTONI 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BOTTONI M.BOTTONI
+
+from Macro.calc_ecrevisse_ops import calc_ecrevisse_ops
+
+def calc_ecrevisse_prod(self,CHARGE_MECA,CHARGE_THER1,CHARGE_THER2,TABLE,DEBIT,**args):
+
+  self.type_sdprod(CHARGE_MECA,char_meca)
+  self.type_sdprod(CHARGE_THER1,char_ther)
+  self.type_sdprod(CHARGE_THER2,char_ther)
+  self.type_sdprod(TABLE,table_sdaster)
+  self.type_sdprod(DEBIT,table_sdaster)
+  return None
+
+
+
+CALC_ECREVISSE=MACRO(nom="CALC_ECREVISSE",op=calc_ecrevisse_ops,sd_prod=calc_ecrevisse_prod,reentrant='n',
+                     UIinfo={"groupes":("Outils metier",)},fr="Procedure de couplage avec Ecrevisse",
+
+        regles             = (UN_PARMI('LOGICIEL','VERSION'),),
+
+#      CONCEPTS SORTANTS : 2 CHARGEMENTS THERMIQUE + 1 MECANIQUE + 2 TABLES POUR LE POST-TRAITEMENT
+#      ********************************************
+         CHARGE_MECA        =SIMP(statut='o',typ=CO),
+         CHARGE_THER1       =SIMP(statut='o',typ=CO),
+         CHARGE_THER2       =SIMP(statut='o',typ=CO),
+         TABLE              =SIMP(statut='o',typ=CO),
+         DEBIT              =SIMP(statut='o',typ=CO),
+
+
+#      MODELES MECANIQUES
+#      ********************************************
+         MODELE_MECA        =SIMP(statut='o',typ=modele_sdaster),
+         MODELE_THER        =SIMP(statut='o',typ=modele_sdaster),
+
+
+#      DONNEES GEOMETRIQUES RELATIVES AUX RESULTATS
+#      ********************************************
+         RESULTAT           =FACT(statut='o',min=1,max=1,
+           MECANIQUE           =SIMP(statut='o',typ=resultat_sdaster),
+           THERMIQUE           =SIMP(statut='o',typ=resultat_sdaster),
+           regles=(EXCLUS('NUME_ORDRE','INST'),),
+           NUME_ORDRE          =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           INST                =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         ),
+
+#      DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+#      *******************************************
+
+         FISSURE            =FACT(statut='o',min=1,max='**',
+           PREFIXE_FICHIER     =SIMP(statut='f',typ='TXM',validators=LongStr(1,8),),
+           GROUP_MA            =SIMP(statut='o',typ=grma,validators=NoRepeat(),min=2,max=2,
+                                     fr="Groupe(s) des noeuds definissant les levres de la fissure"),
+           GROUP_NO_ORIG       =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+           GROUP_NO_EXTR       =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+           ZETA                =SIMP(statut='o',typ='R',fr="Coefficient de la perte de charge singuliere a l'entree [zeta]" ),
+           RUGOSITE            =SIMP(statut='o',typ='R',fr="Rugosite absolu (metres) [eps]" ),
+           OUVERT_REMANENTE    =SIMP(statut='o',typ='R',val_min=0.,fr="Ouverture remanente"),
+           TORTUOSITE          =SIMP(statut='f',typ='R',defaut=1.0, val_min=0., val_max=1.0,
+                                       fr="Coefficient de tortuosite de la fissure" ),
+           SECTION             =SIMP(statut='o',typ='TXM',into=("ELLIPSE","RECTANGLE"),fr="Type de section [is]" ),
+           b_section_ellipse   =BLOC(condition="SECTION=='ELLIPSE'",fr="Fissure a section elliptique",
+             LISTE_COTES_BL      =SIMP(statut='f',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant le petit axe de la section",
+                                       validators=NoRepeat() ),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant le petit axe de la section", ),
+           ),
+           b_section_rectangle =BLOC(condition="SECTION=='RECTANGLE'",fr="Fissure a section rectangulaire",
+             LISTE_COTES_BL      =SIMP(statut='f',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant la largeur de la section",
+                                       validators=NoRepeat() ),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant la largeur de la section", ),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A L"ECOULEMENT
+#      ********************************
+
+         ECOULEMENT         =FACT(statut='o',min=1,max=1,
+           PRES_ENTREE         =SIMP(statut='o',typ='R',fr="Pression de stagnation a l'entree (Pa) [pe]" ),
+           PRES_SORTIE         =SIMP(statut='o',typ='R',fr="Pression de stagnation a la sortie (Pa) [ps]" ),
+           FLUIDE_ENTREE       =SIMP(statut='o',typ='I',into=(1,2,3,4,5,6),fr="Condition du fluide a l'entree [iflow]" ),
+           b_condition_1       =BLOC(condition="FLUIDE_ENTREE==1",fr="Eau sous-refroidie ou saturee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_2       =BLOC(condition="FLUIDE_ENTREE==2",fr="Fluide diphasique",
+             TITR_MASS           =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+           ),
+           b_condition_3       =BLOC(condition="FLUIDE_ENTREE==3",fr="Vapeur saturee ou surchauffee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_4       =BLOC(condition="FLUIDE_ENTREE==4",fr="Air + vapeur surchauffee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             PRES_PART           =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_5       =BLOC(condition="FLUIDE_ENTREE==5",fr="Air + vapeur saturee",
+             TITR_MASS           =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+             PRES_PART           =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_6       =BLOC(condition="FLUIDE_ENTREE==6",fr="Air seul",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+         ),
+
+
+#      CHOIX DES MODELES
+#      *****************
+
+         MODELE_ECRE        =FACT(statut='o',min=1,max=1,
+           IVENAC              =SIMP(statut='f', typ='I', into=(0,1), defaut=0,
+                                     fr="Calcul ECREVISSE avec prise en compte de la vena contracta"),
+           ECOULEMENT          =SIMP(statut='o',typ='TXM',into=("SATURATION","GELE"),
+                                     fr="Type de modele d'ecoulement diphasique [imod]" ),
+           b_ecou_gele         =BLOC(condition="ECOULEMENT=='GELE'",fr="Modele d'ecoulement gele",
+             PRESS_EBULLITION    =SIMP(statut='o',typ='R',fr="Pression d'ebullition [corrp*psat(t)]" ),
+           ),
+           FROTTEMENT          =SIMP(statut='o',typ='I',into=(-3,-2,-1,0,1,2,3),fr="Correlation de frottement [ifrot]" ),
+           b_frottement        =BLOC(condition="FROTTEMENT<0",fr="Modele d'ecoulement gele",
+             REYNOLDS_LIM        =SIMP(statut='o',typ='R',fr="Coefficient de Reynolds limite [relim]" ),
+             FROTTEMENT_LIM      =SIMP(statut='o',typ='R',fr="Coefficient de frottement impose [frtlim]" ),
+           ),
+
+           TRANSFERT_CHAL      =SIMP(statut='o',typ='I',into=(-2,-1,0,1,2),fr="Transfert de chaleur [ichal]" ),
+           b_transchal         =BLOC(condition="TRANSFERT_CHAL<0", fr="Cas diphasique",
+             XMINCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux min [xminch]"),
+             XMAXCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux max [xmaxch]"),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+#      ********************************************
+
+         CONVERGENCE        =FACT(statut='o',min=1,max=1,
+           KGTEST              =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 0.5E+0,
+                                     fr="Parametre de l'algorithme iteratif [kgtest]" ),
+           ITER_GLOB_MAXI      =SIMP(statut='f',typ='I',defaut= 400,
+                                     fr="Nombre maximum d'iterations de la methode de Newton [itnmax]" ),
+           CRIT_CONV_DEBI      =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 1.E-5,
+                                     fr="Critere de convergence en debit [precdb]" ),
+         ),
+
+#      GENERAL
+#      *******
+
+         COURBES            =SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
+                                  fr="Generation eventuelle des courbes" ),
+         LOGICIEL           =SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
+         VERSION            =SIMP(statut='f',typ='TXM',defaut="3.1.2",into = ("3.1.1","3.1.2")),
+         ENTETE             =SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
+         IMPRESSION         =SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
+         INFO               =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+
+)  ;
+#& MODIF COMMANDE  DATE 27/04/2010   AUTEUR DESROCHES X.DESROCHES 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+def calc_elem_prod(RESULTAT,**args):
+   if AsType(RESULTAT) != None : return AsType(RESULTAT)
+   raise AsException("type de concept resultat non prevu")
+
+CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
+            UIinfo={"groupes":("Post traitements",)},
+            fr="Compléter ou créer un résultat en calculant des champs par éléments (contraintes, déformations,... )",
+     MODELE          =SIMP(statut='f',typ=modele_sdaster),
+     CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+     CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+
+     RESULTAT        =SIMP(statut='o',typ=resultat_sdaster,
+                                      fr="Résultat d'une commande globale"),
+
+     regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                    'NOEUD_CMP','LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS'),
+             CONCEPT_SENSIBLE("SEPARE"),
+             DERIVABLE('RESULTAT'),),
+     TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+     NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+     NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+     NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+     NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+     INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+     FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+     LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+     LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+     CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+     b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6),),
+     b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+         PRECISION       =SIMP(statut='o',typ='R'),),
+     LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+     TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+     GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                           fr="le calcul ne sera effectué que sur ces mailles là"),
+     MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**',
+                           fr="le calcul ne sera effectué que sur ces mailles là"),
+
+#    definition d'un repere local
+
+     REPE_COQUE      =FACT(statut='f',max='**',
+                           fr="définiton du lieu de post-traitement",
+                           regles=EXCLUS('ANGL_REP','VECTEUR'),
+          TOUT         =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+          GROUP_MA     =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',),
+          MAILLE       =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**',),
+
+          NUME_COUCHE  =SIMP(statut='f',typ='I',defaut= 1,
+                             fr="numero de couche dans l'épaisseur de la coque ou du tuyau" ),
+          NIVE_COUCHE  =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY"),
+                             fr="position dans l'épaisseur de la coque, ou de la couche" ),
+
+          ANGLE        =SIMP(statut='f',typ='I',defaut= 0,
+                             fr="angle de dépouillement pour les tuyaux, en degres à partir de la génératrice" ),
+
+          PLAN         =SIMP(statut='f',typ='TXM',defaut="MAIL",into=("SUP","INF","MOY","MAIL"),
+                               fr="Plan de calcul pour les plaques excentrées" ),
+
+          ANGL_REP     =SIMP(statut='f',typ='R',min=2,max=2,
+                           fr="définition du repere de post-traitement, par défaut ANGL_REP=(0.,0.)"),
+          VECTEUR      =SIMP(statut='f',typ='R',min=3,max=3,
+                           fr="définition du repere de post-traitement, par défaut VECTEUR=(1.,0.,0.)"),
+                            ),
+
+#    options pour des resultats lineaires
+
+     b_lineaire =BLOC( condition = "AsType(RESULTAT) in (evol_elas,dyna_trans,dyna_harmo,mode_meca,\
+                                                         comb_fourier,mult_elas,fourier_elas,mode_flamb)",
+                                                               fr="options mecaniques lineaires",
+          TYPE_OPTION =SIMP(statut='f',typ='TXM',defaut='TOUTES',fr="type d'options mecaniques lineaires",
+                           into=("SIGM_MASSIF","SIGM_STRUCT","EPSI","ENER","CRIT","DERIVEES",
+                                 "INDI_ERREUR","AUTRES","TOUTES"),
+                           ),
+          b_toutes=BLOC( condition = "TYPE_OPTION == 'TOUTES'",fr="toutes les options evol elas",
+               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="SIEF_ELNO_ELGA",
+                              #  contraintes
+                           into=( "SIEF_ELNO_ELGA","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
+                                  "SIPO_ELNO_DEPL","EFGE_ELNO_DEPL","EFGE_ELNO_CART","SIGM_ELNO_CART",
+                                  "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF","SIGM_ELNO_TUYO","PROJ_ELEM_SIGM",
+                              # déformations
+                                 "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPSG_ELGA_DEPL","EPSG_ELNO_DEPL",
+                                 "EPME_ELNO_DEPL","EPME_ELGA_DEPL","DEGE_ELNO_DEPL","EPSI_ELNO_TUYO",
+                                 "EPVC_ELNO","EPVC_ELGA",
+                              #  ENER
+                                 "EPOT_ELEM_DEPL","ECIN_ELEM_DEPL","ENEL_ELGA","ENEL_ELNO_ELGA",
+                                 "ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM","DISS_ELGA","DISS_ELNO_ELGA",
+                              #  estimateurs erreur
+                                 "SIGM_NOZ1_ELGA","ERZ1_ELEM_SIGM","SIGM_NOZ2_ELGA","ERZ2_ELEM_SIGM",
+                                 "SIRE_ELNO_DEPL","ERRE_ELEM_SIGM","ERRE_ELNO_ELEM",
+                                 "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",
+                                 "SING_ELEM","SING_ELNO_ELEM",
+                              #  CRIT
+                                 "EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","CRIT_ELNO_RUPT",
+                                 "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME",
+                                 "ENDO_ELGA","ENDO_ELNO_ELGA",
+                                 "ENDO_ELNO_SIGA","ENDO_ELNO_SINO","SIEQ_ELNO_TUYO","EPEQ_ELNO_TUYO",
+                              #  derivees
+                                 "DEUL_ELGA_DEPL","DEDE_ELNO_DLDE","DESI_ELNO_DLSI",
+                              #  autres
+                                 "VALE_NCOU_MAXI","PRES_DBEL_DEPL"),),
+
+               NOM_CHAM  =SIMP(statut='f',typ='TXM',fr="nom du champ pour VALE_NCOU_MAXI", ),
+               NOM_CMP   =SIMP(statut='f',typ='TXM',fr="nom de la composante pour VALE_NCOU_MAXI",  ),
+
+                b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \
+                                        (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \
+                                        (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \
+                                        (type(OPTION)==type(()) and 'QIZ2_ELEM_SIGM' in OPTION)",
+                    RESU_DUAL=SIMP(statut='o',typ=evol_elas,fr="resultat du probleme dual"),),
+
+               b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \
+                               (type(OPTION)==type(()) and  'SING_ELEM' in OPTION)",
+                    PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,
+                                  fr="precision demandee pour calculer la carte de taille des elements"),
+                    TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERRE_ELEM_SIGM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
+                                                              "QIRE_ELEM_SIGM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",),
+                                   fr="choix de l'estimateur d'erreur"),),
+
+               EXCIT           =FACT(statut='f',max='**',
+                                     fr="Charges contenant les températures, les efforts répartis pour les poutres...",
+                                     regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+                    CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca) ),
+                    FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                    FONC_MULT_C     =SIMP(statut='f',typ=fonction_c),
+                    COEF_MULT       =SIMP(statut='f',typ='R'),
+                    COEF_MULT_C     =SIMP(statut='f',typ='C'),
+                    PHAS_DEG        =SIMP(statut='f',typ='R'),
+                    PUIS_PULS       =SIMP(statut='f',typ='I'),
+                    TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),),
+
+
+                            ),
+#             fin bloc b_toutes
+
+          b_sigm_massif =BLOC( condition = "TYPE_OPTION == 'SIGM_MASSIF'",
+                                     fr="options de contraintes elasticite 2D et 3D",
+              OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut='SIEF_ELNO_ELGA',
+                            fr="option de calcul des contraintes",
+                           into=( "SIEF_ELNO_ELGA","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",),),
+
+                    b_charge =BLOC( condition = "OPTION in ('SIGM_ELNO_DEPL','SIEF_ELGA_DEPL',) or \
+                                      (type(OPTION)==type(()) and  'SIGM_ELNO_DEPL' in OPTION ) or \
+                                      (type(OPTION)==type(()) and  'SIEF_ELGA_DEPL' in OPTION ) ",
+                                      fr="charge contenant les temperatures ou autre charge",
+                         EXCIT           =FACT(statut='f',max='**',
+                         CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca) ),),
+                                    ),
+                                  ),
+
+          b_sigm_struct =BLOC( condition = "TYPE_OPTION == 'SIGM_STRUCT'",
+                                      fr="options de contraintes elasticite poutres, coques, tuyaux",
+               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut='SIEF_ELNO_ELGA',
+                            fr="option de calcul des contraintes ou efforts generalises",
+                            into=( "SIEF_ELNO_ELGA","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL","SIGM_ELNO_TUYO",
+                                   "SIPO_ELNO_DEPL","EFGE_ELNO_DEPL","EFGE_ELNO_CART","SIGM_ELNO_CART",
+                                   "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF"),),
+
+               b_charge =BLOC( condition = "OPTION in ('SIGM_ELNO_DEPL','SIEF_ELGA_DEPL',\
+                                                       'SIPO_ELNO_DEPL','EFGE_ELNO_DEPL',) or \
+                                            (type(OPTION)==type(()) and  'SIGM_ELNO_DEPL' in OPTION ) or \
+                                            (type(OPTION)==type(()) and  'SIEF_ELGA_DEPL' in OPTION ) or \
+                                            (type(OPTION)==type(()) and  'SIPO_ELNO_DEPL' in OPTION ) or \
+                                            (type(OPTION)==type(()) and  'EFGE_ELNO_DEPL' in OPTION ) ",
+                                            fr="charge contenant les temperatures ou les efforts répartis (poutres) ou autre",
+                    EXCIT           =FACT(statut='f',max='**',
+                                          regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+                         CHARGE          =SIMP(statut='f',typ=(char_meca,char_cine_meca) ),
+                         FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                         FONC_MULT_C     =SIMP(statut='f',typ=fonction_c),
+                         COEF_MULT       =SIMP(statut='f',typ='R'),
+                         COEF_MULT_C     =SIMP(statut='f',typ='C'),
+                         PHAS_DEG        =SIMP(statut='f',typ='R'),
+                         PUIS_PULS       =SIMP(statut='f',typ='I'),
+                         TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),),
+                             ),
+
+
+                            ),
+#          fin bloc contraintes struct
+
+          b_epsi         =BLOC( condition = "TYPE_OPTION=='EPSI'",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPME_ELNO_DEPL","EPME_ELGA_DEPL",
+                                 "DEGE_ELNO_DEPL","EPSI_ELNO_TUYO","EPVC_ELNO","EPVC_ELGA",),
+                                 ),
+b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_ELGA_DEPL','EPSI_ELNO_DEPL','EPSI_ELNO_TUYO' ) or \
+                                      (type(OPTION)==type(()) and  'EPSI_ELNO_DEPL' in OPTION ) or \
+                                      (type(OPTION)==type(()) and  'EPSI_ELNO_TUYO' in OPTION ) or \
+                                      (type(OPTION)==type(()) and  'EPSI_ELGA_DEPL' in OPTION ) or \
+                                      (type(OPTION)==type(()) and  'EPME_ELNO_DEPL' in OPTION ) or \
+                                      (type(OPTION)==type(()) and  'EPME_ELGA_DEPL' in OPTION ) ",
+                                      fr="charge contenant les temperatures",
+                    EXCIT           =FACT(statut='f',max='**',
+                         CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou,char_cine_meca,) ),),
+                                 ),
+                                       ),
+          b_ener         =BLOC( condition = "TYPE_OPTION=='ENER'",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("EPOT_ELEM_DEPL","ECIN_ELEM_DEPL","ENEL_ELGA","ENEL_ELNO_ELGA",
+                                 "ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM","DISS_ELGA","DISS_ELNO_ELGA",),
+                                 ),
+               b_charge =BLOC( condition = "OPTION in ('EPOT_ELEM_DEPL','ECIN_ELEM_DEPL','ENEL_ELGA','ENEL_ELNO_ELGA',) or \
+                                      (type(OPTION)==type(()) and  'EPOT_ELEM_DEPL' in OPTION ) or \
+                                      (type(OPTION)==type(()) and  'ENEL_ELGA' in OPTION ) or \
+                                      (type(OPTION)==type(()) and  'ENEL_ELNO_ELGA' in OPTION ) or \
+                                      (type(OPTION)==type(()) and  'ECIN_ELEM_DEPL' in OPTION ) ",
+                                      fr="charge contenant les temperatures",
+                    EXCIT           =FACT(statut='f',max='**',
+                         CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou) ),),
+                              ),
+                                 ),
+
+          b_crit         =BLOC( condition = "TYPE_OPTION=='CRIT'",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",
+                                 "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME",
+                                 "ENDO_ELGA","ENDO_ELNO_ELGA",
+                                 "ENDO_ELNO_SIGA","ENDO_ELNO_SINO","CRIT_ELNO_RUPT","SIEQ_ELNO_TUYO","EPEQ_ELNO_TUYO",
+                                 ) ),
+                EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+                     CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
+                                 ),
+
+          b_derivees         =BLOC( condition = "TYPE_OPTION=='DERIVEES'",
+                  OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("DEUL_ELGA_DEPL","DEDE_ELNO_DLDE","DESI_ELNO_DLSI",
+                                 ) ),),
+
+          b_autres         =BLOC( condition = "TYPE_OPTION=='AUTRES'",
+                  OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("VALE_NCOU_MAXI","PRES_DBEL_DEPL",
+                                 ) ),
+               b_maxi    =BLOC( condition = "OPTION=='VALE_NCOU_MAXI' or \
+                                (type(OPTION)==type(()) and 'VALE_NCOU_MAXI' in OPTION)",
+                    NOM_CHAM  =SIMP(statut='o',typ='TXM',fr="Nom du champ pour VALE_NCOU_MAXI" ),
+                    NOM_CMP   =SIMP(statut='o',typ='TXM',fr="Nom de la composante pour VALE_NCOU_MAXI"),),
+                                 ),
+
+          b_indi_erreur        =BLOC( condition = "TYPE_OPTION=='INDI_ERREUR'",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="ERRE_ELEM_SIGM",
+                           into=("SIGM_NOZ1_ELGA","ERZ1_ELEM_SIGM","SIGM_NOZ2_ELGA","ERZ2_ELEM_SIGM",
+                                 "SIRE_ELNO_DEPL","ERRE_ELEM_SIGM","ERRE_ELNO_ELEM",
+                                 "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",
+                                 "SING_ELEM","SING_ELNO_ELEM",
+                                 )),
+
+               b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \
+                                        (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \
+                                        (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \
+                                        (type(OPTION)==type(()) and 'QIZ2_ELEM_SIGM' in OPTION)",
+                    RESU_DUAL=SIMP(statut='o',typ=evol_elas,fr="resultat du probleme dual"),),
+
+               b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \
+                               (type(OPTION)==type(()) and  'SING_ELEM' in OPTION)",
+                    PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,
+                                  fr="precision demandee pour calculer la carte de taille des elements" ),
+                    TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERRE_ELEM_SIGM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
+                                                              "QIRE_ELEM_SIGM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",),
+                                   fr="choix de l'estimateur d'erreur"),),
+
+               EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+                     CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
+                                 ),
+                                 ),
+#    fin bloc lineaire
+
+#    statique ou dynamique non lineaire : evol_noli
+     b_noli          =BLOC( condition = "AsType(RESULTAT) == evol_noli",fr="options mecaniques non lineaires",
+          TYPE_OPTION =SIMP(statut='f',typ='TXM',defaut='TOUTES',fr="type d'options mecaniques non lineaires",
+                           into=("SIGM_MASSIF","SIGM_STRUCT","EPSI","ENER","CRIT","FLUX",
+                                 "VARI","INDI_ERREUR","TOUTES","AUTRES"),
+                          ),
+          b_toutes =BLOC( condition = "TYPE_OPTION == 'TOUTES'",fr="toutes les options evol noli",
+               OPTION      =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=( "SIEF_ELNO_ELGA","PROJ_ELEM_SIGM",
+                                  "SIGM_ELNO_TUYO","SIGM_ELNO_COQU","PROJ_ELNO_SIGM",
+                                  "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF","EFGE_ELNO_CART",
+                                  "FLHN_ELGA",
+                                  # EPSI
+                                  "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPSG_ELNO_DEPL","EPSG_ELGA_DEPL",
+                                 "EPME_ELNO_DEPL","EPME_ELGA_DEPL","EPMG_ELNO_DEPL","EPMG_ELGA_DEPL",
+                                 "DEGE_ELNO_DEPL","EPSI_ELNO_TUYO",
+                                 "EPSP_ELNO","EPSP_ELGA",
+                                 "EPFD_ELNO","EPFD_ELGA","EPVC_ELNO","EPVC_ELGA",
+                                 "EPFP_ELNO","EPFP_ELGA",
+                                 "VARI_ELNO_ELGA","VARI_ELNO_TUYO","VARI_ELNO_COQU","CRIT_ELNO_RUPT",
+                                 "EXTR_ELGA_VARI","EXTR_ELNO_VARI",
+                                 # CRIT
+                                 "EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","SIEQ_ELNO_TUYO","EPEQ_ELNO_TUYO",
+                                 "ERRE_ELEM_SIGM","ERRE_ELNO_ELEM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
+                                 "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",
+                                 "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME",
+                                 "DCHA_ELNO_SIGM","DCHA_ELGA_SIGM","RADI_ELNO_SIGM","RADI_ELGA_SIGM",
+                                 "ENDO_ELGA","ENDO_ELNO_ELGA","INDI_LOCA_ELGA","SING_ELEM",
+                                 "SING_ELNO_ELEM","ENDO_ELNO_SIGA","ENDO_ELNO_SINO",
+                                 "PMPB_ELNO_SIEF","PMPB_ELGA_SIEF","ENEL_ELGA","ENEL_ELNO_ELGA",
+                                 "ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM","VALE_NCOU_MAXI",
+                                 "DISS_ELGA","DISS_ELNO_ELGA"),
+                               ),
+               NORME =SIMP(statut='f',typ='TXM',defaut="VMIS",
+                                 into=("VMIS","TOTAL","VMIS_CINE","TOTAL_CINE"),
+                                 fr="Type de norme pour les options RADI_ et DCHA_"),
+
+               NOM_CHAM  =SIMP(statut='f',typ='TXM',fr="Nom du champ pour VALE_NCOU_MAXI"),
+               NOM_CMP   =SIMP(statut='f',typ='TXM',fr="Nom de la composante pour VALE_NCOU_MAXI"),
+
+               b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \
+                                        (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \
+                                        (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \
+                                        (type(OPTION)==type(()) and 'QIZ2_ELEM_SIGM' in OPTION)",
+                    RESU_DUAL=SIMP(statut='o',typ=(evol_elas,evol_noli),fr="resultat du probleme dual"),),
+
+               b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \
+                               (type(OPTION)==type(()) and  'SING_ELEM' in OPTION)",
+                    PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,
+                                  fr="precision demandee pour calculer la carte de taille des elements" ),
+                    TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERRE_ELEM_SIGM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
+                                                              "QIRE_ELEM_SIGM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",),
+                                   fr="choix de l'estimateur d'erreur"),),
+
+
+               b_extr = BLOC( condition = "OPTION in ('EXTR_ELNO_VARI','EXTR_ELGA_VARI')",
+                             NOM_VARI =SIMP(statut='o',typ='TXM',min= 1,max=1,fr="nom de la variable à extraire",
+                         into=("DPORO","DRHOLQ","DPVP","SATLIQ","EVP","IND_ETA","D","IND_END","TEMP_MAX","GAMP","PCR",
+                               "SEUIL_HYD","IND_HYD","PCOHE","COMP_ROC","SEUIL_ISO","ANG_DEV","X11","X22","X33","X12","X13","X23",
+                               "DIST_DEV","DEV_SUR_CRIT","DIST_ISO","NB_ITER","ARRET","NB_REDE","SIGNE",
+                               "RDEV_1","RDEV_2","RDEV_3","RISO","EPSIVPLA","IND_1","IND_2","IND_3","IND_4",),),
+                            ),
+               EXCIT           =FACT(statut='f',max='**',
+                                      regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+                    CHARGE          =SIMP(statut='o',typ=char_meca ),
+                    FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                    FONC_MULT_C     =SIMP(statut='f',typ=fonction_c),
+                    COEF_MULT       =SIMP(statut='f',typ='R'),
+                    COEF_MULT_C     =SIMP(statut='f',typ='C'),
+                    PHAS_DEG        =SIMP(statut='f',typ='R'),
+                    PUIS_PULS       =SIMP(statut='f',typ='I'),
+                    TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),),
+                         ),
+
+          b_flux =BLOC( condition = "TYPE_OPTION == 'FLUX'",
+                                      fr="option de calcul de flux hydraulique 2D et 3D",
+               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                              #  flux hydraulique
+                           into=( "FLHN_ELGA",),),
+                            ),
+
+          b_sigm_massif =BLOC( condition = "TYPE_OPTION == 'SIGM_MASSIF'",
+                                      fr="options de contraintes non lin 2D et 3D",
+               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                              #  contraintes
+                           into=( "SIEF_ELNO_ELGA",),),
+                            ),
+
+          b_sigm_struct =BLOC( condition = "TYPE_OPTION == 'SIGM_STRUCT'",
+                                       fr="options de contraintes non lin poutres, coques",
+               OPTION =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                              #  contraintes
+                           into=( "SIEF_ELNO_ELGA","EFGE_ELNO_CART","SIGM_ELNO_TUYO","SIGM_ELNO_COQU",
+                           "SIGM_ELNO_SIEF","SIPO_ELNO_SIEF",),),
+                             ),
+
+          b_epsi         =BLOC( condition = "TYPE_OPTION=='EPSI'",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=( "EPSI_ELNO_DEPL","EPSI_ELGA_DEPL","EPSG_ELNO_DEPL","EPSG_ELGA_DEPL",
+                                 "EPME_ELNO_DEPL","EPME_ELGA_DEPL","EPMG_ELNO_DEPL","EPMG_ELGA_DEPL",
+                                 "EPSP_ELNO","EPSP_ELGA","DEGE_ELNO_DEPL","EPVC_ELNO","EPVC_ELGA",
+                                 "EPFD_ELNO","EPFD_ELGA","EPFP_ELNO","EPFP_ELGA"),
+                                 ),
+               EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+                    CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
+                                 ),
+         b_epstuyo       =BLOC( condition = "OPTION == 'EPSI_ELNO_TUYO' or \
+                                  (type(OPTION)==type(()) and  'EPSI_ELNO_TUYO' in OPTION) ",
+              EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+                    CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
+                               ),
+
+          b_vari         =BLOC( condition = "TYPE_OPTION=='VARI'",
+                                       fr="Calcul et extraction des variables internes",
+                   OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                                   into=("VARI_ELNO_ELGA","VARI_ELNO_TUYO","VARI_ELNO_COQU",
+                                         "EXTR_ELGA_VARI","EXTR_ELNO_VARI"),
+                                 ),
+          b_extr         =BLOC( condition = "OPTION in ('EXTR_ELNO_VARI','EXTR_ELGA_VARI')",
+                   NOM_VARI =SIMP(statut='o',typ='TXM',min= 1,max=1,fr="nom de la variable à extraire",
+                         into=("DPORO","DRHOLQ","DPVP","SATLIQ","EVP","IND_ETA","D","IND_END","TEMP_MAX","GAMP","PCR",
+                               "SEUIL_HYD","IND_HYD","PCOHE","COMP_ROC","SEUIL_ISO","ANG_DEV","X11","X22","X33","X12","X13","X23",
+                               "DIST_DEV","DEV_SUR_CRIT","DIST_ISO","NB_ITER","ARRET","NB_REDE","SIGNE",
+                               "RDEV_1","RDEV_2","RDEV_3","RISO","EPSIVPLA","IND_1","IND_2","IND_3","IND_4"),),
+                            ),
+                           ),
+
+          b_ener         =BLOC( condition = "TYPE_OPTION=='ENER'",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("ETOT_ELGA","ETOT_ELNO_ELGA","ETOT_ELEM","ENEL_ELGA","ENEL_ELNO_ELGA",
+                                 "DISS_ELGA","DISS_ELNO_ELGA",),
+                                 ),
+               EXCIT           =FACT(statut='f',max='**',fr="charge contenant les temperatures",
+                    CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
+                                 ),
+
+          b_crit         =BLOC( condition = "TYPE_OPTION=='CRIT'",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("EQUI_ELNO_SIGM","EQUI_ELGA_SIGM",
+                                 "EQUI_ELNO_EPSI","EQUI_ELGA_EPSI","EQUI_ELNO_EPME","EQUI_ELGA_EPME",
+                                 "ENDO_ELNO_SIGA","ENDO_ELNO_SINO","CRIT_ELNO_RUPT",
+                                 "ENDO_ELGA","ENDO_ELNO_ELGA",
+                                 "PMPB_ELNO_SIEF","PMPB_ELGA_SIEF","SIEQ_ELNO_TUYO","EPEQ_ELNO_TUYO",
+                                 ) ),
+                                 ),
+
+          b_autres         =BLOC( condition = "TYPE_OPTION=='AUTRES'",
+                  OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("VALE_NCOU_MAXI",) ),
+               b_maxi    =BLOC( condition = "OPTION=='VALE_NCOU_MAXI' or \
+                                (type(OPTION)==type(()) and 'VALE_NCOU_MAXI' in OPTION)",
+                    NOM_CHAM  =SIMP(statut='o',typ='TXM',fr="Nom du champ pour VALE_NCOU_MAXI" ),
+                    NOM_CMP   =SIMP(statut='o',typ='TXM',fr="Nom de la composante pour VALE_NCOU_MAXI"),),
+                                 ),
+
+          b_indi_erreur         =BLOC( condition = "TYPE_OPTION=='INDI_ERREUR'",
+               OPTION    =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="ERRE_ELEM_SIGM",
+                           into=("ERRE_ELEM_SIGM","ERRE_ELNO_ELEM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
+                                 "DCHA_ELNO_SIGM","DCHA_ELGA_SIGM","RADI_ELNO_SIGM","RADI_ELGA_SIGM",
+                                 "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",
+                                 "SING_ELEM","SING_ELNO_ELEM",) ),
+
+               b_erre_qi =BLOC(condition = "OPTION in ('QIRE_ELEM_SIGM','QIZ1_ELEM_SIGM','QIZ2_ELEM_SIGM') or \
+                                        (type(OPTION)==type(()) and 'QIRE_ELEM_SIGM' in OPTION) or \
+                                        (type(OPTION)==type(()) and 'QIZ1_ELEM_SIGM' in OPTION) or \
+                                        (type(OPTION)==type(()) and 'QIZ2_ELEM_SIGM' in OPTION)",
+                RESU_DUAL    =SIMP(statut='o',typ=(evol_elas,evol_noli),fr="resultat du probleme dual")),
+
+               b_sing =BLOC(condition= "OPTION == 'SING_ELEM' or \
+                               (type(OPTION)==type(()) and  'SING_ELEM' in OPTION)",
+                    PREC_ERR=SIMP(statut='o',typ='R',val_min= 0.,
+                                  fr="precision demandee pour calculer la carte de taille des elements" ),
+                    TYPE_ESTI=SIMP(statut='f',typ='TXM',into=("ERRE_ELEM_SIGM","ERZ1_ELEM_SIGM","ERZ2_ELEM_SIGM",
+                                                              "QIRE_ELEM_SIGM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",),
+                                   fr="choix de l'estimateur d'erreur"),),
+
+               b_indic = BLOC( condition ="OPTION in ('DCHA_ELNO_SIGM','DCHA_ELGA_SIGM','RADI_ELNO_SIGM','RADI_ELGA_SIGM') or\
+                                            (type(OPTION)==type(()) and 'DCHA_ELNO_SIGM' in OPTION) or\
+                                            (type(OPTION)==type(()) and 'DCHA_ELGA_SIGM' in OPTION) or\
+                                            (type(OPTION)==type(()) and 'RADI_ELNO_SIGM' in OPTION) or\
+                                            (type(OPTION)==type(()) and 'RADI_ELGA_SIGM' in OPTION) ",
+                    NORME =SIMP(statut='f',typ='TXM',defaut="VMIS",
+                                 into=("VMIS","TOTAL","VMIS_CINE","TOTAL_CINE") ),
+                                 ),
+                                 ),
+                                 ),
+#          fin bloc evol_noli
+
+#           thermique : evol_ther, fourier_ther
+     b_ther          =BLOC( condition = "AsType(RESULTAT) in (evol_ther,fourier_ther,)" ,fr="options thermiques",
+          OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("DEUL_ELGA_TEMP","DETE_ELNO_DLTE","FLUX_ELGA_TEMP","FLUX_ELNO_TEMP",
+                                  "HYDR_ELNO_ELGA","DURT_ELGA_META","DURT_ELNO_META",
+                                  "SOUR_ELGA_ELEC","ERRE_ELEM_TEMP","ERRE_ELNO_ELEM",),),
+               EXCIT           =FACT(statut='f',max='**',
+                    regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+                    CHARGE          =SIMP(statut='o',typ=char_ther ),
+                    FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                    FONC_MULT_C     =SIMP(statut='f',typ=fonction_c),
+                    COEF_MULT       =SIMP(statut='f',typ='R'),
+                    COEF_MULT_C     =SIMP(statut='f',typ='C'),
+                    PHAS_DEG        =SIMP(statut='f',typ='R'),
+                    PUIS_PULS       =SIMP(statut='f',typ='I'),
+                    TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),
+                                     ),
+                                 ),
+
+#    acoustique
+     b_acou          =BLOC( condition = "AsType(RESULTAT) in (acou_harmo,mode_acou,)",fr="options acoustiques",
+          OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                           into=("PRES_ELNO_DBEL","PRES_ELNO_REEL","PRES_ELNO_IMAG",
+                                 "INTE_ELNO_ACTI","INTE_ELNO_REAC",
+                                 ),),
+          EXCIT           =FACT(statut='f',max='**',
+                regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
+                CHARGE          =SIMP(statut='o',typ=char_acou ),
+                FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                FONC_MULT_C     =SIMP(statut='f',typ=fonction_c),
+                COEF_MULT       =SIMP(statut='f',typ='R'),
+                COEF_MULT_C     =SIMP(statut='f',typ='C'),
+                PHAS_DEG        =SIMP(statut='f',typ='R'),
+                PUIS_PULS       =SIMP(statut='f',typ='I'),
+                TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",),),),
+                                 ),
+
+
+#    Choix du solveur (utilisé actuellement pour estimateur d'erreur ZZ1) :
+     SOLVEUR         =FACT(statut='d', fr="Méthode de résolution des systèmes linéaires",
+     METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("LDLT","MUMPS","MULT_FRONT",) ),
+
+
+       b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+         RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+       ),
+
+       b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+         RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+       ),
+       b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                              fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+         NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+         STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+       ),
+
+       b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+         TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+         PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+         POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+         RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+         ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+         PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+         RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+         OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         ),
+     ),
+
+
+
+     SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                           fr="Liste des paramètres de sensibilité.",
+                           ang="List of sensitivity parameters"),
+     INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+     TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+) ;
+#& MODIF COMMANDE  DATE 28/01/2010   AUTEUR BODEL C.BODEL 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# RESPONSABLE NISTOR I.NISTOR
+
+from Macro.calc_essai_ops import calc_essai_ops
+
+def calc_essai_prod(self,RESU_IDENTIFICATION,
+                    RESU_MODIFSTRU,
+                    **args):
+
+    if RESU_IDENTIFICATION != None:
+        for res in RESU_IDENTIFICATION:
+            self.type_sdprod(res['TABLE'],table_fonction)
+
+    MTYPES = {
+        'MODELE'    : modele_sdaster,
+        'MODE_MECA' : mode_meca,
+        'NUME_DDL'  : nume_ddl_sdaster,
+        'MAILLAGE'  : maillage_sdaster,
+        'MASS_MECA' : matr_asse_depl_r,
+        'RIGI_MECA' : matr_asse_depl_r,
+        'AMOR_MECA' : matr_asse_depl_r,
+        'MACR_ELEM' : macr_elem_stat,
+        'PROJ_MESU' : mode_gene,
+        'BASE_ES'   : mode_meca,
+        'BASE_LMME' : mode_meca,
+        'MODE_STA'  : mode_meca,
+              }
+    if RESU_MODIFSTRU != None:
+        for res in RESU_MODIFSTRU:
+            for mc, typ in MTYPES.items():
+                if res[mc]:
+                    self.type_sdprod(res[mc], typ)
+    return None
+
+
+CALC_ESSAI = MACRO(nom       = 'CALC_ESSAI',
+                   op        = calc_essai_ops,
+                   sd_prod   = calc_essai_prod,
+                   reentrant = 'n',
+                   UIinfo    = {"groupes":("Outils métier",)},
+                   fr        = "Outil de post-traitement interactif pour Meidee ",
+                   INTERACTIF  = SIMP( statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI' ),
+                   RESU_IDENTIFICATION = FACT( statut='f',max='**',
+                                               TABLE = SIMP(statut='f', typ=CO),
+                                             ),
+                   RESU_MODIFSTRU = FACT( statut='f', max=1,
+                                          MODELE=SIMP(statut='f',typ=CO,defaut=None),
+                                          MODE_MECA=SIMP(statut='f',typ=CO,defaut=None),
+                                          MAILLAGE=SIMP(statut='f',typ=CO,defaut=None),
+                                          NUME_DDL=SIMP(statut='f',typ=CO,defaut=None),
+                                          MASS_MECA=SIMP(statut='f',typ=CO,defaut=None),
+                                          RIGI_MECA=SIMP(statut='f',typ=CO,defaut=None),
+                                          AMOR_MECA=SIMP(statut='f',typ=CO,defaut=None),
+                                          MACR_ELEM=SIMP(statut='f',typ=CO,defaut=None),
+                                          PROJ_MESU=SIMP(statut='f',typ=CO,defaut=None),
+                                          BASE_ES=SIMP(statut='f',typ=CO,defaut=None),
+                                          BASE_LMME=SIMP(statut='f',typ=CO,defaut=None),
+                                          MODE_STA=SIMP(statut='f',typ=CO,defaut=None),
+                                         ),
+
+                   b_inter    = BLOC( condition="INTERACTIF=='NON'",
+
+                             EXPANSION        = FACT( statut='f',max='**',
+                                                      CALCUL           = SIMP(statut='o',typ=mode_meca),
+                                                      NUME_MODE_CALCUL = SIMP(statut='f',typ='I',validators=NoRepeat(),
+                                                                              max='**',defaut=0),
+                                                      MESURE           = SIMP(statut='o',typ=mode_meca),
+                                                      NUME_MODE_MESURE = SIMP(statut='f',typ='I',validators=NoRepeat(),
+                                                                              max='**',defaut=0),
+                                                      RESOLUTION       = SIMP(statut='f',typ='TXM',defaut='SVD',into=('SVD','LU')),
+                                                      b_reso           = BLOC(condition = "RESOLUTION=='SVD'",
+                                                                              EPS = SIMP(statut='f',typ='R', defaut = 0.)
+                                                                       )
+                                                    ),
+                             IDENTIFICATION   = FACT( statut='f',max='**',   
+                                                      ALPHA   = SIMP(statut='f',typ='R', defaut = 0.),
+                                                      EPS     = SIMP(statut='f',typ='R', defaut = 0.),
+                                                      OBSERVABILITE  = SIMP(statut='o',typ=mode_meca),
+                                                      COMMANDABILITE = SIMP(statut='o',typ=mode_meca),
+                                                      INTE_SPEC      = SIMP(statut='o',typ=table_sdaster),
+                                                      RESU_EXPANSION = SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON')),
+                                                      BASE           = SIMP(statut='o',typ=mode_meca),
+                                                     ),
+                             MODIFSTRUCT = FACT( statut='f', max=1,
+                                                 MESURE = SIMP(statut='o', typ=mode_meca),
+                                                 MODELE_SUP = SIMP(statut='o', typ=modele_sdaster),
+                                                 MATR_RIGI = SIMP(statut='o', typ=matr_asse_depl_r),
+                                                 RESOLUTION = SIMP(statut='f', typ='TXM',
+                                                               into=('ES', 'LMME'), defaut='ES'),
+                                                 b_resol = BLOC( condition = "RESOLUTION=='LMME'",
+                                                                 MATR_MASS = SIMP(statut='o', typ=matr_asse_depl_r),
+                                                                ),
+                                                 NUME_MODE_MESU   = SIMP(statut='o', typ='I',max='**'),
+                                                 NUME_MODE_CALCUL = SIMP(statut='o', typ='I',max='**'),
+                                                 MODELE_MODIF = SIMP(statut='o', typ=modele_sdaster),
+                                               ),
+                             # Si on realise une modification structurale, on donne les DDL capteurs et interface
+                             b_modif   = BLOC( condition="MODIFSTRUCT!=None",
+                                   GROUP_NO_CAPTEURS  = FACT( statut='f', max='**',
+                                                              GROUP_NO = SIMP(statut='o',typ='TXM', max='**'),
+                                                              NOM_CMP  = SIMP(statut='o',typ='TXM', max='**'),
+                                                            ),
+                                   GROUP_NO_EXTERIEUR = FACT( statut='f', max='**',
+                                                              GROUP_NO = SIMP(statut='o',typ='TXM', max='**'),
+                                                              NOM_CMP  = SIMP(statut='o',typ='TXM', max='**'),
+                                                            ),
+                                               ),
+                                          ),
+                        );
+
+#& MODIF COMMANDE  DATE 28/04/2009   AUTEUR ASSIRE A.ASSIRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+from Macro.calc_europlexus_ops import calc_europlexus_ops
+
+def calc_europlexus_prod(self,COURBE=None,**args):
+  if COURBE is not None:
+      self.type_sdprod(args['TABLE_COURBE'],table_sdaster) 
+  return evol_noli
+
+CALC_EUROPLEXUS = MACRO(nom="CALC_EUROPLEXUS",op=calc_europlexus_ops,sd_prod=calc_europlexus_prod,
+        reentrant='n',
+        #UIinfo={"groupes":("Dynamique rapide",)},
+        fr="Chainage Code_Aster-Europlexus",
+
+        LOGICIEL = SIMP(statut='f', typ='TXM', defaut='/home/europlex/EPXD/EUROPLEXUS_GESTION/runepx_d'),
+
+        MODELE     = SIMP(statut='o',typ=modele_sdaster),
+        CARA_ELEM  = SIMP(statut='o',typ=cara_elem),
+
+        FONC_PARASOL = FACT(statut='f',
+           NFKT       = SIMP(statut='f',typ=(fonction_sdaster,)),
+           NFKR       = SIMP(statut='f',typ=(fonction_sdaster,)),
+           GROUP_MA   = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           ),
+
+
+        CHAM_MATER = SIMP(statut='o',typ=cham_mater),
+
+        EXCIT      = FACT(statut='o',max='**',
+           CHARGE         = SIMP(statut='o',typ=(char_meca,)),
+           FONC_MULT      = SIMP(statut='o',typ=(fonction_sdaster,)),
+          ),
+
+        DIME = FACT(statut='o', regles=(AU_MOINS_UN('UNITE_DIME','Q4GS','FORCE',
+                                                    'PT6L','ZONE','POUT','ECRO',
+                                                    'APPU','BLOQ','PRESS','PMAT',
+                                                    'DKT3','DEPL','FNOM','TABLE','FTAB',
+                                                    'MTTI','NEPE','LIAI',), ),                   
+           UNITE_DIME=SIMP(statut='f',typ='I'),
+
+           Q4GS  = SIMP(statut='f',typ='I'),
+           FORCE = SIMP(statut='f',typ='I'),
+           PT6L  = SIMP(statut='f',typ='I'),
+           ZONE  = SIMP(statut='f',typ='I'),
+           POUT  = SIMP(statut='f',typ='I'),
+           ECRO  = SIMP(statut='f',typ='I'),
+           APPU  = SIMP(statut='f',typ='I'),
+           BLOQ  = SIMP(statut='f',typ='I'),
+           PRESS = SIMP(statut='f',typ='I',min=2,max=2,),
+           PMAT  = SIMP(statut='f',typ='I'),
+           DKT3  = SIMP(statut='f',typ='I'),
+           DEPL  = SIMP(statut='f',typ='I'),
+           FNOM  = SIMP(statut='f',typ='I'),
+           TABLE = SIMP(statut='f',typ='I',min=2,max=2,),
+           FTAB  = SIMP(statut='f',typ='I'),
+           MTTI  = SIMP(statut='f',typ='I'),
+           NEPE  = SIMP(statut='f',typ='I'),
+           LIAI  = SIMP(statut='f',typ='I'),
+             ),
+
+        CALCUL = FACT(statut='o',
+           TYPE_DISCRETISATION  = SIMP(statut='o',typ='TXM',defaut='AUTO',into=('AUTO','UTIL')),
+           INST_FIN             = SIMP(statut='o',typ='R'),
+           INST_INIT            = SIMP(statut='o',typ='R'),
+           NMAX                 = SIMP(statut='f',typ='R'),
+
+           b_auto =BLOC( condition = "TYPE_DISCRETISATION=='AUTO'",
+              CSTAB  = SIMP(statut='o',typ='R',max='**',defaut=0.3),
+#              DTMAX  = SIMP(statut='f',typ='R',max='**'),
+                       ),
+
+           b_util =BLOC( condition = "TYPE_DISCRETISATION=='UTIL'",
+              PASFIX   = SIMP(statut='o',typ='R',max='**'),
+                       ),
+           ),
+
+
+        OBSERVATION     =FACT(statut='f',max='**',
+           SUIVI_DDL       = SIMP(statut='o',typ='TXM',defaut="OUI",max=1,into=("OUI","NON")),
+        b_suivi          =BLOC(condition = "SUIVI_DDL == 'OUI' ",
+                               regles=( AU_MOINS_UN('PAS_NBRE','PAS_INST',), 
+                                        EXCLUS('PAS_NBRE','PAS_INST',), 
+                                        EXCLUS('GROUP_NO','TOUT_GROUP_NO',), 
+                                        EXCLUS('GROUP_MA','TOUT_GROUP_MA',), ),
+           NOM_CHAM        = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**', defaut = ('DEPL',), 
+                                  into=('DEPL','VITE','ACCE','SIEF_ELGA','EPSI_ELGA','VARI_ELGA'),),
+           PAS_INST        = SIMP(statut='f',typ='R'),
+           PAS_NBRE        = SIMP(statut='f',typ='I'),
+           GROUP_NO        = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           GROUP_MA        = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           TOUT_GROUP_NO   = SIMP(statut='f',typ='TXM',into=('OUI',),),
+           TOUT_GROUP_MA   = SIMP(statut='f',typ='TXM',into=('OUI',),),
+                             ),
+        ),
+
+
+        ARCHIVAGE        =FACT(statut='f', regles=( AU_MOINS_UN('PAS_NBRE','PAS_INST',), EXCLUS('PAS_NBRE','PAS_INST',), ),
+           PAS_INST     = SIMP(statut='f',typ='R'),
+           PAS_NBRE     = SIMP(statut='f',typ='I'),
+           CONT_GENER   = SIMP(statut='o',typ='TXM',defaut="NON",max=1,into=("OUI","NON")),
+                             ),                
+        COURBE  =  FACT(statut='f',max='**', regles=(EXCLUS('GROUP_NO','GROUP_MA')),
+           UNITE_ALIT = SIMP(statut='f',typ='I'),
+            NOM_CHAM   = SIMP(statut='f',typ='TXM'),
+            NOM_CMP    = SIMP(statut='f',typ='TXM'),
+#             NOEUD      = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+#             MAILLE     = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+            GROUP_NO   = SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+            GROUP_MA   = SIMP(statut='f',typ=grma,validators=NoRepeat(),max=1),
+
+            b_maille = BLOC(condition = "GROUP_MA != None", regles=(AU_MOINS_UN('NUM_GAUSS')),
+              NUM_GAUSS = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),),
+         ),
+        b_courbe = BLOC(condition = "COURBE != None",
+                        regles=(AU_MOINS_UN('PAS_NBRE_COURBE','PAS_INST_COURBE',),
+                                AU_MOINS_UN('TABLE_COURBE',)),          
+          PAS_INST_COURBE      = SIMP(statut='f',typ='R'),
+          PAS_NBRE_COURBE       = SIMP(statut='f',typ='I'),
+                  TABLE_COURBE      = SIMP(statut='f', typ=CO),
+          ),
+        DOMAINES = FACT(statut='f',max='**',
+             GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             IDENTIFIANT =  SIMP(statut='f',typ='I'),), 
+        INTERFACES = FACT(statut='f',max='**',
+             GROUP_MA_1 = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             GROUP_MA_2 = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             TOLE        =  SIMP(statut='f',typ='R'),
+             IDENT_DOMAINE_1  = SIMP(statut='f',typ='I'), 
+             IDENT_DOMAINE_2  = SIMP(statut='f',typ='I'),),
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=( 1, 2 ) ),
+        ) ;
+#& MODIF COMMANDE  DATE 06/07/2009   AUTEUR GALENNE E.GALENNE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ANGLES J.ANGLES
+def calc_fatigue_prod(TYPE_CALCUL,OPTION,**args):
+  if TYPE_CALCUL == "CUMUL_DOMMAGE" : return cham_elem
+  if TYPE_CALCUL == "FATIGUE_MULTI" and OPTION == "DOMA_ELGA": return cham_elem
+  if TYPE_CALCUL == "FATIGUE_MULTI" and OPTION == "DOMA_NOEUD": return cham_no_sdaster
+  if TYPE_CALCUL == "FATIGUE_VIBR" : return cham_elem
+  raise AsException("type de calcul non prevu")
+
+CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant='n',
+                  fr="Calculer un champ de dommage de fatigue subit par une structure et déterminer le plan critique"
+                      +" dans lequel le cisaillement est maximal.",
+            UIinfo={"groupes":("Post traitements",)},
+
+         TYPE_CALCUL = SIMP(statut='o',typ='TXM',
+                               into=("CUMUL_DOMMAGE","FATIGUE_MULTI","FATIGUE_VIBR") ),
+
+         b_cumul_domma   =BLOC(condition = "TYPE_CALCUL == 'CUMUL_DOMMAGE'",
+                               fr="Calcul d un champ de dommage subi par une structure.",
+           regles=(PRESENT_PRESENT('DOMMAGE','MATER', ),),
+           OPTION          =SIMP(statut='o',typ='TXM',
+                                 into=("DOMA_ELNO_SIGM","DOMA_ELGA_SIGM",
+                                       "DOMA_ELNO_EPSI","DOMA_ELGA_EPSI",
+                                       "DOMA_ELNO_EPME","DOMA_ELGA_EPME") ),
+           
+             b_sigm   =BLOC(condition = "OPTION == 'DOMA_ELNO_SIGM' or OPTION == 'DOMA_ELGA_SIGM'",
+                               fr="Calcul a partir d un champ de contraintes.",
+               HISTOIRE        =FACT(statut='o',
+               RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,
+                                                   evol_noli) ),
+               EQUI_GD         =SIMP(statut='f',typ='TXM',defaut="VMIS_SG",
+                                 into=("VMIS_SG",) ),
+                                   ),
+                           ),
+             b_epsi   =BLOC(condition = "OPTION != 'DOMA_ELNO_SIGM' and OPTION != 'DOMA_ELGA_SIGM'",
+                               fr="Calcul a partir d un champ de déformations.",
+               HISTOIRE        =FACT(statut='o',
+               RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,
+                                                   evol_noli) ),
+               EQUI_GD         =SIMP(statut='o',typ='TXM',defaut="INVA_2_SG",
+                                 into=("INVA_2_SG",) ),
+                                    ),
+                           ),
+           DOMMAGE         =SIMP(statut='o',typ='TXM',
+                               into=("WOHLER","MANSON_COFFIN","TAHERI_MANSON",
+                                     "TAHERI_MIXTE",) ),
+           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+           TAHERI_NAPPE    =SIMP(statut='f',typ=(nappe_sdaster,formule) ),
+           TAHERI_FONC     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         
+         b_domma_moda   =BLOC(condition = "TYPE_CALCUL == 'FATIGUE_VIBR'",
+                               fr="Calcul d un champ de dommage en dynamique vibratoire",
+           regles=(PRESENT_PRESENT('DOMMAGE','MATER', ),),
+           OPTION          =SIMP(statut='o',typ='TXM',
+                                 into=("DOMA_ELNO_SIGM","DOMA_ELGA_SIGM",) ),
+           CORR_SIGM_MOYE = SIMP(statut='o',typ='TXM',into=("GOODMAN","GERBER")),
+           HISTOIRE        =FACT(statut='o',
+             RESULTAT  =SIMP(statut='o',typ=(evol_elas, evol_noli) ),
+             MODE_MECA        =SIMP(statut='o',typ=(mode_meca) ),
+             NUME_MODE        =SIMP(statut='o',typ='I',min=1 ,max='**'),
+             FACT_PARTICI        =SIMP(statut='o',typ='R',min=1, max='**',defaut=1. ),
+             EQUI_GD         =SIMP(statut='f',typ='TXM',defaut="VMIS_SG",
+                                 into=("VMIS_SG",) ),
+           ),
+           DOMMAGE         =SIMP(statut='o',typ='TXM',
+                               into=("WOHLER",) ),
+           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+         ),
+
+         b_fatigue_multi   =BLOC(condition = "TYPE_CALCUL == 'FATIGUE_MULTI'",
+                                 fr="Plan critique dans le cas de la fatigue multiaxiale à grand nombre de cycles.",
+           TYPE_CHARGE   =SIMP(statut='o',typ='TXM',into=("PERIODIQUE","NON_PERIODIQUE") ),
+           OPTION        =SIMP(statut='o',typ='TXM',into=("DOMA_ELGA","DOMA_NOEUD") ),
+           RESULTAT      =SIMP(statut='o',typ=(evol_elas, evol_noli) ),
+           CHAM_MATER    =SIMP(statut='o',typ=(cham_mater) ),
+           MAILLAGE      =SIMP(statut='o',typ=maillage_sdaster ),
+           regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),),
+           GROUP_MA      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**' ),
+           MAILLE        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**' ),
+           GROUP_NO      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**' ),
+           NOEUD         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**' ),
+           COEF_PREECROU =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           b_period       =BLOC(condition = "TYPE_CHARGE == 'PERIODIQUE'",
+               CRITERE       =SIMP(statut='o',typ='TXM',into=("MATAKE_MODI_AC","DANG_VAN_MODI_AC","VMIS_TRESCA") ),
+               b_fati_p  =BLOC(condition = "(CRITERE == 'MATAKE_MODI_AC' or CRITERE == 'DANG_VAN_MODI_AC')",
+                   METHODE       =SIMP(statut='o',typ='TXM',into=("CERCLE_EXACT",) ),
+               ),
+           ),
+           b_non_period   =BLOC(condition = "TYPE_CHARGE == 'NON_PERIODIQUE'",
+               CRITERE       =SIMP(statut='o',typ='TXM',
+                                   into=("MATAKE_MODI_AV","DANG_VAN_MODI_AV","FATESOCI_MODI_AV","VMIS_TRESCA") ),
+               b_fati_np  =BLOC(condition = 
+                               "(CRITERE == 'MATAKE_MODI_AV' or CRITERE == 'DANG_VAN_MODI_AV' or CRITERE == 'FATESOCI_MODI_AV')",
+                   PROJECTION    =SIMP(statut='o',typ='TXM',into=("UN_AXE", "DEUX_AXES") ),
+                   DELTA_OSCI    =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+               ),
+           ),
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+CALC_FLUI_STRU=OPER(nom="CALC_FLUI_STRU",op= 144,sd_prod=melasflu_sdaster,
+                    reentrant='n',
+                    fr="Calculer les paramètres modaux d'une structure soumise à un écoulement",
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         VITE_FLUI       =FACT(statut='f',
+                               fr="Définir la plage de vitesse fluide étudiée",
+           VITE_MIN        =SIMP(statut='f',typ='R' ),
+           VITE_MAX        =SIMP(statut='f',typ='R' ),
+           NB_POIN         =SIMP(statut='f',typ='I' ),
+         ),
+         BASE_MODALE     =FACT(statut='o',
+                               
+           regles=(AU_MOINS_UN('AMOR_REDUIT','AMOR_UNIF','AMOR_REDUIT_CONN'),),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**',val_min=0.E+00),
+           AMOR_UNIF       =SIMP(statut='f',typ='R',val_min=0.E+00 ),
+           AMOR_REDUIT_CONN=SIMP(statut='f',typ='R',max='**',val_min=0.E+00),
+         ),
+         TYPE_FLUI_STRU  =SIMP(statut='o',typ=type_flui_stru ),
+         IMPRESSION      =FACT(statut='f',
+                               fr="Choix des informations à imprimer dans le fichier RESULTAT",
+           PARA_COUPLAGE   =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           DEFORMEE        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+def calc_fonc_interp_prod(FONCTION, NOM_PARA_FONC, **args):
+   if   AsType(FONCTION) == nappe_sdaster:
+      return nappe_sdaster
+   elif AsType(FONCTION) == fonction_sdaster:
+      return fonction_sdaster
+   elif AsType(FONCTION) == fonction_c:
+      return fonction_c
+   elif AsType(FONCTION) == formule_c:
+      return fonction_c
+   elif AsType(FONCTION) == formule:
+      if NOM_PARA_FONC != None:
+         return nappe_sdaster
+      return fonction_sdaster
+   elif AsType(FONCTION) == para_sensi:
+      return para_sensi
+   raise AsException("type de concept resultat non prevu")
+
+CALC_FONC_INTERP=OPER(nom="CALC_FONC_INTERP",op= 134,sd_prod=calc_fonc_interp_prod,
+                      docu="U4.32.01-e",reentrant='n',
+           fr="Définit une fonction (ou une nappe) à partir d'une fonction FORMULE à 1 ou 2 variables",
+           UIinfo={"groupes":("Fonction",)},
+         regles=(UN_PARMI('VALE_PARA','LIST_PARA'),),
+         FONCTION        =SIMP(statut='o',typ=(formule,fonction_sdaster,nappe_sdaster,fonction_c) ),
+         VALE_PARA       =SIMP(statut='f',typ='R',max='**'),
+         LIST_PARA       =SIMP(statut='f',typ=listr8_sdaster ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM'),
+         NOM_PARA        =SIMP(statut='f',typ='TXM'),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',into=("EXCLU","CONSTANT","LINEAIRE") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("EXCLU","CONSTANT","LINEAIRE") ),
+         NOM_PARA_FONC   =SIMP(statut='f',typ='TXM'),
+         b_eval_nappe    =BLOC(condition = "NOM_PARA_FONC != None",             
+            regles=(UN_PARMI('VALE_PARA_FONC','LIST_PARA_FONC'),),
+            VALE_PARA_FONC  =SIMP(statut='f',typ='R',max='**'),
+            LIST_PARA_FONC  =SIMP(statut='f',typ=listr8_sdaster ),
+            INTERPOL_FONC   =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG")),
+            PROL_DROITE_FONC=SIMP(statut='f',typ='TXM',into=("EXCLU","CONSTANT","LINEAIRE") ),
+            PROL_GAUCHE_FONC=SIMP(statut='f',typ='TXM',into=("EXCLU","CONSTANT","LINEAIRE") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+from Macro.calc_fonction_ops import calc_fonction_ops
+def calc_fonction_prod(self,DERIVE,EXTRACTION,INTEGRE,INVERSE,COMB,COMB_C,
+                       ENVELOPPE,FRACTILE,SPEC_OSCI,ASSE,FFT,COMPOSE,CORR_ACCE,PUISSANCE,
+                       LISS_ENVELOP,ABS, **args):
+
+   if (INTEGRE     != None): return fonction_sdaster
+   if (DERIVE      != None): return fonction_sdaster
+   if (INVERSE     != None): return fonction_sdaster
+   if (COMB        != None): 
+      type_vale=AsType(COMB[0]['FONCTION'])
+      for mcfact in COMB :
+          if(AsType(mcfact['FONCTION'])!=type_vale):
+             raise AsException("CALC_FONCTION/COMB : pas de types hétérogènes nappe/fonction")
+      return type_vale
+   if (COMB_C      != None):
+      vale=COMB_C[0]['FONCTION']
+      if(AsType(vale) == nappe_sdaster):
+         for mcfact in COMB_C[1:] :
+             if(AsType(mcfact['FONCTION'])!=nappe_sdaster):
+                raise AsException("CALC_FONCTION/COMB_C : pas de types hétérogènes nappe/fonction")
+         return nappe_sdaster
+      else:
+         for mcfact in COMB_C :
+             if(AsType(mcfact['FONCTION'])==nappe_sdaster):
+                raise AsException("CALC_FONCTION/COMB_C : pas de types hétérogènes nappe/fonction")
+         return fonction_c
+   if (ENVELOPPE   != None): return AsType(ENVELOPPE[0]['FONCTION'])
+   if (FRACTILE    != None): return AsType(FRACTILE[0] ['FONCTION'])
+   if (EXTRACTION  != None): return fonction_sdaster
+   if (SPEC_OSCI   != None): return nappe_sdaster
+   if (COMPOSE     != None): return fonction_sdaster
+   if (ASSE        != None): return fonction_sdaster
+   if (FFT         != None):
+      vale=FFT[0]['FONCTION']
+      if (AsType(vale) == fonction_sdaster )  : return fonction_c
+      if (AsType(vale) == fonction_c) : return fonction_sdaster
+   if (CORR_ACCE   != None): return fonction_sdaster
+   if (LISS_ENVELOP!= None): return nappe_sdaster
+   if (PUISSANCE   != None): return AsType(PUISSANCE[0]['FONCTION'])
+   if (ABS         != None): return fonction_sdaster
+   raise AsException("type de concept resultat non prevu")
+
+CALC_FONCTION=MACRO(nom="CALC_FONCTION",op=calc_fonction_ops,sd_prod=calc_fonction_prod
+                    ,fr="Effectue des opérations mathématiques sur des concepts de type fonction",
+                     reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
+         regles=(UN_PARMI('DERIVE','INTEGRE','SPEC_OSCI','COMB','COMB_C','ENVELOPPE',
+                          'COMPOSE','EXTRACTION','ASSE','FFT','CORR_ACCE', 'PUISSANCE',
+                          'LISS_ENVELOP','INVERSE','ABS','FRACTILE'),),
+         FFT             =FACT(statut='f',fr="Transformée de Fourier ou de son inverse",
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,fonction_c) ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="PROL_ZERO",into=("PROL_ZERO","TRONCATURE","COMPLET") ),
+           b_syme          =BLOC ( condition = " AsType(FONCTION)==fonction_c ",
+             SYME           =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI' ),  
+           ),
+         ),
+         DERIVE          =FACT(statut='f',fr="Dérivée d une fonction",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="DIFF_CENTREE",into=("DIFF_CENTREE",) ),
+           FONCTION        =SIMP(statut='o',typ=fonction_sdaster ),
+         ),
+         INTEGRE         =FACT(statut='f',fr="Intégrale d'une fonction",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
+           FONCTION        =SIMP(statut='o',typ=fonction_sdaster),
+           COEF            =SIMP(statut='f',typ='R',defaut= 0.E+0,fr="Valeur de la constante d intégration" ),
+         ),
+         LISS_ENVELOP    = FACT(statut='f',fr="Lissage d une enveloppe",
+           NAPPE           =SIMP(statut='o',typ=nappe_sdaster ),
+           FREQ_MIN        =SIMP(statut='f',typ='R',defaut =0.2),
+           FREQ_MAX        =SIMP(statut='f',typ='R',defaut =35.5),
+           ELARG           =SIMP(statut='f',typ='R',defaut =0.1 ),
+           TOLE_LISS       =SIMP(statut='f',typ='R',defaut =0.25 ),
+         ),
+         SPEC_OSCI       =FACT(statut='f',fr="Spectre d'oscillateur",
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="NIGAM",into=("NIGAM",) ),
+           FONCTION        =SIMP(statut='o',typ=fonction_sdaster ),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster ),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           NORME           =SIMP(statut='o',typ='R',fr="Valeur de la norme du spectre d oscillateur" ),
+           NATURE          =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("DEPL","VITE","ACCE") ),
+           NATURE_FONC     =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("DEPL","VITE","ACCE") ),
+         ),
+         ABS             =FACT(statut='f',fr="Valeur absolue d'une fonction",
+           FONCTION        =SIMP(statut='o',typ=fonction_sdaster,),
+         ),
+         COMB            =FACT(statut='f',max='**',fr="Combinaison linéaire réelle de fonctions",
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster) ),
+           COEF            =SIMP(statut='o',typ='R',fr="Coefficient réel de la combinaison linéaire associée à la fonction" ),
+         ),
+         COMB_C          =FACT(statut='f',max='**',fr="Combinaison linéaire complexe de fonctions",
+           regles=(UN_PARMI('COEF_R','COEF_C'),),
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,fonction_c,nappe_sdaster) ),
+           COEF_R          =SIMP(statut='f',typ='R',fr="Coefficient réel de la combinaison linéaire associée à la fonction" ),
+           COEF_C          =SIMP(statut='f',typ='C',fr="Coefficient complexe de la combinaison linéaire associée à la fonction" ),
+         ),
+         b_comb          =BLOC ( condition = " (COMB != None) or (COMB_C != None)",
+             LIST_PARA      =SIMP(statut='f',typ=listr8_sdaster ),  
+         ),
+         COMPOSE         =FACT(statut='f',fr="Composition de deux fonctions FONC_RESU(FONC_PARA)",
+           FONC_RESU       =SIMP(statut='o',typ=fonction_sdaster),
+           FONC_PARA       =SIMP(statut='o',typ=fonction_sdaster),
+         ),
+         EXTRACTION      =FACT(statut='f',fr="Extraction sur une fonction complexe",
+           FONCTION        =SIMP(statut='o',typ=fonction_c),
+           PARTIE          =SIMP(statut='o',typ='TXM',into=("REEL","IMAG","MODULE","PHASE"),fr="Partie à extraire"),
+         ),
+         ENVELOPPE       =FACT(statut='f',fr="Enveloppe d une famille de fonctions",
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster),max='**' ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="SUP",into=("SUP","INF"),fr="Type de l enveloppe" ),
+         ),
+         FRACTILE        =FACT(statut='f',fr="Fractile d une famille de fonctions ou de nappes",
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster),max='**' ),
+           FRACT           =SIMP(statut='o',typ='R',defaut=1.,val_min=0.,val_max=1.,fr="Valeur du fractile" ),
+         ),
+         ASSE            =FACT(statut='f',fr="Concatenation de fonctions",
+           FONCTION        =SIMP(statut='o',typ=fonction_sdaster,min=2,max=2 ),
+           SURCHARGE       =SIMP(statut='f',typ='TXM',defaut="DROITE",into=("DROITE","GAUCHE")),
+         ),
+         CORR_ACCE       =FACT(statut='f',fr="Correction d un accelerogramme reel",
+            CORR_DEPL       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+            FONCTION        =SIMP(statut='o',typ=fonction_sdaster ),
+         ),
+         PUISSANCE       =FACT(statut='f',fr="Fonction élevée à une puissance",
+            FONCTION      =SIMP(statut='o', typ=(fonction_sdaster,nappe_sdaster) ),
+            EXPOSANT      =SIMP(statut='f', typ='I', defaut=1 ),
+         ),
+         INVERSE         =FACT(statut='f',fr="Inverse d'une fonction",
+            FONCTION      =SIMP(statut='o', typ=fonction_sdaster),
+         ),     
+         NOM_PARA        =SIMP(statut='f',typ='TXM',into=C_PARA_FONCTION() ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM' ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         NOM_PARA_FONC   =SIMP(statut='f',typ='TXM',into=C_PARA_FONCTION() ),
+         INTERPOL_FONC   =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         PROL_DROITE_FONC=SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE_FONC=SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+CALC_FORC_AJOU=OPER(nom="CALC_FORC_AJOU",op=199,sd_prod=vect_asse_gene,
+                   fr="Calculer l'effet de surpression hydrodynamique due au mouvement d'entrainement de la structure"
+                       +" en analyse sismique",
+                   reentrant ='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+
+        regles=(EXCLUS('MODE_MECA','MODELE_GENE'),
+                PRESENT_PRESENT( 'MODELE_GENE','NUME_DDL_GENE'),
+                UN_PARMI('MONO_APPUI', 'NOEUD','GROUP_NO'),
+                UN_PARMI('MONO_APPUI','MODE_STAT')),
+
+         MODELE_FLUIDE   =SIMP(statut='o',typ=modele_sdaster ),
+         MODELE_INTERFACE=SIMP(statut='o',typ=modele_sdaster ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CHARGE          =SIMP(statut='o',typ=char_ther ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
+         NUME_DDL_GENE   =SIMP(statut='f',typ=nume_ddl_gene ),
+         DIST_REFE       =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+         AVEC_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         NUME_MODE_MECA  =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         POTENTIEL       =SIMP(statut='f',typ=evol_ther ),
+         NOEUD_DOUBLE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+
+         DIRECTION       =SIMP(statut='o',typ='R',max=3),
+         MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",),),
+         NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+         GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+         MODE_STAT       =SIMP(statut='f',typ=mode_meca,),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+
+         SOLVEUR         =FACT(statut='d',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+           b_mult_front    = BLOC ( condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC( condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+             b_ldltinc       =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+               NIVE_REMPLISSAGE    =SIMP(statut='f',typ='I',defaut= 0 ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+               ),
+             b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),             
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.0E-6,),
+             OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             ),
+
+           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+             ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+               NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+               REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+             ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
+           ),
+                           ),
+
+           ) ;
+#& MODIF COMMANDE  DATE 08/12/2009   AUTEUR PROIX J-M.PROIX 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+CALC_G=OPER(nom="CALC_G",op=100,sd_prod=table_sdaster,
+            fr="Calcul du taux de restitution d'énergie par la méthode theta en thermo-élasticité"
+                        +" et les facteurs d'intensité de contraintes.",
+                    reentrant='f',
+            UIinfo={"groupes":("Post traitements",)},
+         regles=(EXCLUS('COMP_ELAS','COMP_INCR'),
+                 CONCEPT_SENSIBLE("ENSEMBLE"),
+                 REUSE_SENSIBLE(),
+                 DERIVABLE('RESULTAT'),),
+
+         THETA          =FACT(statut='o',
+           THETA           =SIMP(statut='f',typ=(theta_geom,cham_no_sdaster),),
+           FOND_FISS       =SIMP(statut='f',typ=fond_fiss,max=1),
+           FISSURE         =SIMP(statut='f',typ=fiss_xfem,max=1),
+           DTAN_ORIG       =SIMP(statut='f',typ='R',max='**'),
+           DTAN_EXTR       =SIMP(statut='f',typ='R',max='**'),
+           NB_POINT_FOND   =SIMP(statut='f',typ='I',val_min=2),
+           regles=(EXCLUS('FOND_FISS','FISSURE'),
+                 EXCLUS('FOND_FISS','NB_POINT_FOND'),
+                 EXCLUS('FOND_FISS','DTAN_ORIG'),
+                 EXCLUS('FOND_FISS','DTAN_EXTR'),),
+          b_theta        =BLOC(condition="THETA == None",fr="calcul de theta",
+            regles=(UN_PARMI('R_INF','R_INF_FO'),
+                 PRESENT_PRESENT('R_INF','R_SUP'),
+                PRESENT_PRESENT('R_INF_FO','R_SUP_FO'), ),
+             NUME_FOND        =SIMP(statut='f',typ='I',defaut=1),
+             R_INF           =SIMP(statut='f',typ='R'),
+             R_SUP           =SIMP(statut='f',typ='R'),
+             MODULE          =SIMP(statut='f',typ='R',defaut=1.),
+             DIRE_THETA      =SIMP(statut='f',typ=cham_no_sdaster ),
+             DIRECTION       =SIMP(statut='f',typ='R',max=3,min=3),
+             R_INF_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             R_SUP_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),             
+             MODULE_FO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ),
+            ),
+
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans,mode_meca,mult_elas),),
+
+         b_no_mult          =BLOC(condition="(AsType(RESULTAT) != mult_elas)",
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST',
+                  'TOUT_MODE','NUME_MODE','LIST_MODE','FREQ','LIST_FREQ'),),
+            
+            TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+            NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+            LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+            INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+            LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+            TOUT_MODE       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+            NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+            LIST_MODE       =SIMP(statut='f',typ=listis_sdaster),
+            LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+            FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+       
+           b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)or(FREQ != None)or(LIST_FREQ != None)",
+              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+                  b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                      PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                  b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                      PRECISION       =SIMP(statut='o',typ='R'),),
+            ),
+         ),
+
+         b_mult_elas     =BLOC(condition="(AsType(RESULTAT) == mult_elas)",
+            NOM_CAS         =SIMP(statut='f',typ='TXM',validators=NoRepeat() ),
+         ),
+
+        
+         EXCIT           =FACT(statut='f',max='**',
+               CHARGE          =SIMP(statut='f',typ=(char_meca,char_cine_meca)),
+               FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+               TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+         ),
+         SYME_CHAR       =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS") ),
+         COMP_ELAS       =FACT(statut='f',
+               RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
+                                     into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS") ),
+               CALCUL_CONTRAINTE =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+               DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+               TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+               GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+         ),  
+         COMP_INCR       =FACT(statut='f',
+               RELATION        =SIMP(statut='f',typ='TXM',defaut="ELAS",
+                                     into=("ELAS","VMIS_ISOT_TRAC","VMIS_ISOT_LINE","VMIS_CINE_LINE","ELAS_VMIS_PUIS") ),
+               DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT",into=("PETIT","PETIT_REAC") ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+               TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+               GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+               MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+         ),
+         ETAT_INIT       =FACT(statut='f',
+           SIGM            =SIMP(statut='f',typ=cham_elem),
+           DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
+         ),
+          
+         LISSAGE         =FACT(statut='d',
+           DEGRE           =SIMP(statut='f',typ='I',defaut=5,into=(0,1,2,3,4,5,6,7) ),
+           LISSAGE_THETA   =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE","LAGRANGE_REGU"),),
+           LISSAGE_G       =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",into=("LEGENDRE","LAGRANGE",
+                                 "LAGRANGE_NO_NO","LAGRANGE_REGU"),),
+         ),
+
+         OPTION          =SIMP(statut='o',typ='TXM',max=1,defaut='CALC_G',
+              into=("CALC_G","CALC_G_GLOB","CALC_K_G","K_G_MODA","G_MAX","G_MAX_GLOB","G_BILI",
+                    "G_BILI_GLOB","CALC_K_MAX"),),
+
+         b_g_max    =BLOC(condition="(OPTION=='G_MAX') or (OPTION=='G_MAX_GLOB')",
+           BORNES          =FACT(statut='o',max='**',
+                NUME_ORDRE     =SIMP(statut='o',typ='I'),
+                VALE_MIN       =SIMP(statut='o',typ='R'),
+                VALE_MAX       =SIMP(statut='o',typ='R'),
+                                ),
+         ),
+         b_k_max    =BLOC(condition="(OPTION=='CALC_K_MAX')",
+           SIGNES          =FACT(statut='o',max=1,
+                CHARGE_S       =SIMP(statut='o',typ='I',validators=NoRepeat(),max='**'),
+                CHARGE_NS      =SIMP(statut='o',typ='I',validators=NoRepeat(),max='**'),
+                                ),
+         ),
+
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                           fr="Liste des paramètres de sensibilité.",
+                           ang="List of sensitivity parameters"),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+);
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+CALC_INTE_SPEC=OPER(nom="CALC_INTE_SPEC",op= 120,sd_prod=table_fonction,
+                    fr="Calcul d'une matrice interspectrale à partir d'une fonction du temps",
+                    reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
+         INST_INIT       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         INST_FIN        =SIMP(statut='o',typ='R' ),
+         DUREE_ANALYSE   =SIMP(statut='f',typ='R' ),
+         DUREE_DECALAGE  =SIMP(statut='f',typ='R' ),
+         NB_POIN         =SIMP(statut='o',typ='I' ),
+         FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule),max='**' ),
+         TITRE           =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r,
+                    fr="Calcul des matrices de masse, d'amortissement ou de rigidité ajoutés",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         regles=(EXCLUS('MODE_MECA','CHAM_NO','MODELE_GENE'),
+                 PRESENT_ABSENT('NUME_DDL_GENE','CHAM_NO'),
+                 PRESENT_PRESENT('MODELE_GENE','NUME_DDL_GENE'),),
+         MODELE_FLUIDE   =SIMP(statut='o',typ=modele_sdaster ),
+         MODELE_INTERFACE=SIMP(statut='o',typ=modele_sdaster ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CHARGE          =SIMP(statut='o',typ=char_ther ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         CHAM_NO         =SIMP(statut='f',typ=cham_no_sdaster ),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
+         NUME_DDL_GENE   =SIMP(statut='f',typ=nume_ddl_gene ),
+         DIST_REFE       =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+         AVEC_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         NUME_MODE_MECA  =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         OPTION          =SIMP(statut='o',typ='TXM',into=("MASS_AJOU","AMOR_AJOU","RIGI_AJOU") ),
+         POTENTIEL       =SIMP(statut='f',typ=evol_ther ),
+         NOEUD_DOUBLE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+
+         SOLVEUR         =FACT(statut='d',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+           b_mult_front    = BLOC ( condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC( condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+             b_ldltinc       =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+               NIVE_REMPLISSAGE    =SIMP(statut='f',typ='I',defaut= 0 ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+               ),
+             b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),             
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.0E-6,),
+             OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             ),
+
+           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+             ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+               NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+               REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+             ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
+           ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/09/2009   AUTEUR BOYERE E.BOYERE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+def calc_matr_elem_prod(OPTION,**args):
+  if OPTION == "RIGI_MECA"        : return matr_elem_depl_r
+  if OPTION == "RIGI_FLUI_STRU"   : return matr_elem_depl_r
+  if OPTION == "MASS_MECA"        : return matr_elem_depl_r
+  if OPTION == "MASS_FLUI_STRU"   : return matr_elem_depl_r
+  if OPTION == "RIGI_GEOM"        : return matr_elem_depl_r
+  if OPTION == "RIGI_ROTA"        : return matr_elem_depl_r
+  if OPTION == "MECA_GYRO"        : return matr_elem_depl_r
+  if OPTION == "AMOR_MECA"        : return matr_elem_depl_r
+  if OPTION == "IMPE_MECA"        : return matr_elem_depl_r
+  if OPTION == "ONDE_FLUI"        : return matr_elem_depl_r
+  if OPTION == "AMOR_MECA_ABSO"   : return matr_elem_depl_r
+  if OPTION == "RIGI_MECA_HYST"   : return matr_elem_depl_c
+  if OPTION == "RIGI_THER"        : return matr_elem_temp_r
+  if OPTION == "MASS_THER"        : return matr_elem_temp_r
+  if OPTION == "MASS_MECA_DIAG"   : return matr_elem_depl_r
+  if OPTION == "RIGI_ACOU"        : return matr_elem_pres_c
+  if OPTION == "MASS_ACOU"        : return matr_elem_pres_c
+  if OPTION == "AMOR_ACOU"        : return matr_elem_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
+                    ,fr="Calcul des matrices élémentaires",reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+
+         OPTION          =SIMP(statut='o',typ='TXM',
+                               into=("RIGI_MECA","MASS_MECA","RIGI_GEOM",
+                                     "AMOR_MECA","RIGI_THER","MASS_THER","IMPE_MECA",
+                                     "ONDE_FLUI","AMOR_MECA_ABSO","MASS_FLUI_STRU","RIGI_FLUI_STRU",
+                                     "RIGI_ROTA","MECA_GYRO","MASS_MECA_DIAG","RIGI_ACOU",
+                                     "MASS_ACOU","AMOR_ACOU","RIGI_MECA_HYST") ),
+         MODELE            =SIMP(statut='o',typ=modele_sdaster ),
+
+         # mots clés facultatifs que l'on a du mal à mettre dans les blocs
+         # sans gener MACRO_MATR_ASSE :
+         #------------------------------------------------------------------
+         INST=SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+
+
+         b_rigi_meca = BLOC( condition = "OPTION=='RIGI_MECA'",
+           CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+           MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0 ),
+           CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**' ),
+         ),
+
+         b_mass_meca   =BLOC(condition = "(OPTION=='MASS_MECA') or (OPTION=='MASS_MECA_DIAG')",
+           CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+           CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+         ),
+
+         b_rigi_geom       =BLOC(condition = "OPTION=='RIGI_GEOM'",
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           SIEF_ELGA         =SIMP(statut='o',typ=cham_elem ),
+           MODE_FOURIER      =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+
+         b_rigi_rota       =BLOC(condition = "OPTION=='RIGI_ROTA'",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='o',typ=char_meca,validators=NoRepeat(),max='**' ),
+         ),
+
+         b_meca_gyro = BLOC( condition = "OPTION=='MECA_GYRO'",
+           CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+           CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+           CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**' ),
+         ),
+
+         b_amor_meca       =BLOC(condition = "OPTION=='AMOR_MECA'",
+           regles=(AU_MOINS_UN('CARA_ELEM','RIGI_MECA'),
+                   ENSEMBLE('RIGI_MECA','MASS_MECA','CHAM_MATER'), ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           CHAM_MATER        =SIMP(statut='f',typ=cham_mater ),
+           RIGI_MECA         =SIMP(statut='f',typ=matr_elem_depl_r ),
+           MASS_MECA         =SIMP(statut='f',typ=matr_elem_depl_r ),
+           CHARGE            =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+         ),
+
+         b_amor_meca_abso  =BLOC(condition = "OPTION=='AMOR_MECA_ABSO'",
+           regles=(AU_MOINS_UN('CARA_ELEM','RIGI_MECA'),
+                   ENSEMBLE('RIGI_MECA','MASS_MECA','CHAM_MATER'), ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           RIGI_MECA         =SIMP(statut='f',typ=matr_elem_depl_r ),
+           MASS_MECA         =SIMP(statut='f',typ=matr_elem_depl_r ),
+           CHARGE            =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+         ),
+
+         b_rigi_meca_hyst  =BLOC( condition = "OPTION=='RIGI_MECA_HYST'",
+           CHARGE            =SIMP(statut='f',typ=char_meca ,validators=NoRepeat(),max='**' ),
+           CHAM_MATER        =SIMP(statut='f',typ=cham_mater ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           RIGI_MECA         =SIMP(statut='o',typ=matr_elem_depl_r ),
+         ),
+
+         b_rigi_ther       =BLOC(condition = "OPTION=='RIGI_THER'",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           MODE_FOURIER      =SIMP(statut='f',typ='I',defaut= 0 ),
+           CHARGE            =SIMP(statut='f',typ=char_ther,validators=NoRepeat(),max='**' ),
+         ),
+
+         b_mass_ther       =BLOC(condition = "OPTION=='MASS_THER'",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem ),
+           CHARGE            =SIMP(statut='f',typ=char_ther ,validators=NoRepeat(),max='**' ),
+         ),
+
+         b_rigi_acou       =BLOC(condition = "OPTION=='RIGI_ACOU'",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='f',typ=char_acou ,validators=NoRepeat(),max='**' ),
+         ),
+
+         b_mass_acou       =BLOC(condition = "(OPTION=='MASS_ACOU') or (OPTION=='AMOR_ACOU')",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='f',typ=char_acou ,validators=NoRepeat(),max='**' ),
+         ),
+
+         b_rigi_flui       =BLOC(condition = "OPTION=='RIGI_FLUI_STRU'",
+           CARA_ELEM         =SIMP(statut='o',typ=cara_elem ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='o',typ=char_meca ,validators=NoRepeat(),max='**' ),
+         ),
+
+         b_mass_flui       =BLOC(condition = "OPTION=='MASS_FLUI_STRU'",
+           CARA_ELEM         =SIMP(statut='o',typ=cara_elem ),
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='o',typ=char_meca ,validators=NoRepeat(),max='**'),
+         ),
+
+         b_impe_meca       =BLOC(condition = "(OPTION=='IMPE_MECA') or (OPTION=='ONDE_FLUI')",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater ),
+           CHARGE            =SIMP(statut='o',typ=char_meca,validators=NoRepeat(),max='**' ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 16/11/2009   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BARGELLINI R.BARGELLINI
+CALC_META=OPER(nom="CALC_META",op=194,sd_prod=evol_ther,reentrant='o',
+            UIinfo={"groupes":("Post traitements",)},
+               fr="Calcule l'évolution métallurgique à partir du résultat d'un calcul thermique",
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         RESULTAT        =SIMP(statut='o',typ=evol_ther ),
+         ETAT_INIT       =FACT(statut='o',
+            regles=(UN_PARMI('EVOL_THER', 'META_INIT_ELNO'),),
+            EVOL_THER       =SIMP(statut='f',typ=evol_ther ),
+            META_INIT_ELNO  =SIMP(statut='f',typ=carte_sdaster ),
+            b_etat     =BLOC(condition="EVOL_THER != None",
+               regles=(UN_PARMI('NUME_INIT', 'INST_INIT',),),
+               NUME_INIT       =SIMP(statut='f',typ='I'),
+               INST_INIT       =SIMP(statut='f',typ='R'),
+               b_inst     =BLOC(condition="INST_INIT != None",
+                  CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                  b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                      PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                  b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                      PRECISION       =SIMP(statut='o',typ='R',),),
+               ),
+            ),
+         ),
+         COMP_INCR       =FACT(statut='o',max=1,
+           RELATION        =SIMP(statut='o',typ='TXM',into=("ACIER","ZIRC",) ),
+           ACIER           =SIMP(statut='c',typ='I',defaut=7,into=(7,) ),
+           ZIRC            =SIMP(statut='c',typ='I',defaut=4,into=(4,) ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma, validators=NoRepeat(), max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma, validators=NoRepeat(), max='**'),
+         ),
+         OPTION          =SIMP(statut='f',typ='TXM'     
+                             ,into=("META_ELNO_TEMP",) ),
+)  ;
+#& MODIF COMMANDE  DATE 16/02/2010   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+from Macro.calc_miss_ops import calc_miss_ops
+
+CALC_MISS = MACRO(nom="CALC_MISS",op=calc_miss_ops,
+                  fr="Préparation des données puis exécution du logiciel MISS3D",
+                  UIinfo={"groupes":("Résolution",)},
+
+   OPTION      = FACT(statut='o',
+                      regles=(UN_PARMI('TOUT','MODULE'),),
+      TOUT        = SIMP(statut='f',typ='TXM',into=("OUI",)),
+      MODULE      = SIMP(statut='f',typ='TXM',into=("MISS_IMPE",)),     # "PRE_MISS","MISS_EVOL",
+   ),
+   TABLE_SOL   = SIMP(statut='f', typ=table_sdaster),
+
+   PROJET      = SIMP(statut='o', typ='TXM'),  
+   REPERTOIRE  = SIMP(statut='f', typ='TXM'),
+   VERSION     = SIMP(statut='f', typ='TXM', into=("V1_4",), defaut="V1_4"),
+
+   UNITE_IMPR_ASTER = SIMP(statut='f',typ='I',defaut=25),  
+#   UNITE_OPTI_MISS  = SIMP(statut='f',typ='I',defaut=26),  
+#   UNITE_MODELE_SOL = SIMP(statut='f',typ='I',defaut=27),  
+   UNITE_RESU_IMPE  = SIMP(statut='f',typ='I',defaut=30),
+   UNITE_RESU_FORC  = SIMP(statut='f',typ='I',defaut=0),
+   PARAMETRE   = FACT(statut='f',
+                      regles=(PRESENT_PRESENT('OFFSET_MAX','OFFSET_NB'),
+                              PRESENT_PRESENT('FREQ_MIN','FREQ_MAX','FREQ_PAS'),
+                              PRESENT_PRESENT('LFREQ_NB','LFREQ_LISTE'),
+                              UN_PARMI('FREQ_MIN', 'LFREQ_NB'),
+                              PRESENT_PRESENT('CONTR_NB','CONTR_LISTE'),
+                              PRESENT_PRESENT('SPEC_MAX','SPEC_NB'),),
+      FREQ_MIN       = SIMP(statut='f',typ='R'), 
+      FREQ_MAX       = SIMP(statut='f',typ='R'),
+      FREQ_PAS       = SIMP(statut='f',typ='R'),
+      LFREQ_NB       = SIMP(statut='f',typ='I'),
+      LFREQ_LISTE    = SIMP(statut='f',typ='R',max='**'),
+      Z0             = SIMP(statut='f',typ='R',defaut=0.), 
+      SURF           = SIMP(statut='f',typ='TXM',into=("OUI","NON",),defaut="NON"),
+      ISSF           = SIMP(statut='f',typ='TXM',into=("OUI","NON",),defaut="NON"),
+      TYPE           = SIMP(statut='f',typ='TXM',into=("BINAIRE","ASCII",),defaut="ASCII"),
+      RFIC           = SIMP(statut='f',typ='R',defaut=0.),
+      DIRE_ONDE      = SIMP(statut='f',typ='R',max='**'),
+
+      FICH_RESU_IMPE = SIMP(statut='f',typ='TXM'),
+      FICH_RESU_FORC = SIMP(statut='f',typ='TXM'),
+
+      ALGO           = SIMP(statut='f',typ='TXM',into=("DEPL","REGU")),
+      DREF           = SIMP(statut='f',typ='R'),
+      SPEC_MAX       = SIMP(statut='f',typ='R'),
+      SPEC_NB        = SIMP(statut='f',typ='I'),
+      OFFSET_MAX     = SIMP(statut='f',typ='R'),
+      OFFSET_NB      = SIMP(statut='f',typ='I'),
+
+      FICH_POST_TRAI = SIMP(statut='f',typ='TXM'),
+      CONTR_NB       = SIMP(statut='f',typ='I'),
+      CONTR_LISTE    = SIMP(statut='f',typ='R',max='**'),
+   ),
+   INFO        = SIMP(statut='f', typ='I', defaut=1, into=(1,2)),
+)
+
+#& MODIF COMMANDE  DATE 27/04/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# RESPONSABLE NISTOR I.NISTOR
+
+from Macro.calc_modal_ops import calc_modal_ops
+
+def calc_modal_prod(self,AMORTISSEMENT,**args):
+  if AMORTISSEMENT=="NON": return mode_meca
+  if AMORTISSEMENT=="OUI": return mode_meca_c
+  raise AsException("type de concept resultat non prevu")
+
+
+CALC_MODAL=MACRO(nom="CALC_MODAL",op=calc_modal_ops,
+            UIinfo={"groupes":("Résolution",)},
+                      sd_prod=calc_modal_prod,
+                    fr="Calcul des modes propres reels ou complexes dans une seule commande",
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         AMORTISSEMENT    =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         INST            =SIMP(statut='f',typ='R',defaut=0.),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),  
+         SOLVEUR         =FACT(statut='d',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT") ),
+         b_mult_front    =BLOC(condition="METHODE=='MULT_FRONT'",fr="Paramètres associés à la méthode multifrontale",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("MD","MDA","METIS"),defaut="METIS" ),
+         ),
+         b_ldlt          =BLOC(condition="METHODE=='LDLT'",fr="Paramètres associés à la méthode LDLT",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
+         ),),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="SORENSEN",
+                               into=("TRI_DIAG","JACOBI","SORENSEN","QZ") ),
+         b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
+           PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ),
+           NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+           PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-8,val_min=0.E+0 ),
+           NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ), 
+         ),
+         b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
+           PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.E-10,val_min=0.E+0 ),
+           NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40,val_min=0 ),
+           PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+           NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12,val_min=0 ),
+         ),
+         b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
+           PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E+0,val_min=0.E+0 ),  
+           NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ),  
+           PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ),
+         ),
+         b_qz =BLOC(condition = "METHODE == 'QZ'",
+           TYPE_QZ      =SIMP(statut='f',typ='TXM',defaut="QZ_SIMPLE",into=("QZ_QR","QZ_SIMPLE","QZ_EQUI") ),  
+         ), 
+         MODE_RIGIDE          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                               fr="Calcul des modes de corps rigide, uniquement pour la méthode TRI_DIAG" ),
+         CALC_FREQ       =FACT(statut='d',min=0,
+             OPTION      =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE","TOUT"),
+                                   fr="Choix de l option et par conséquent du shift du problème modal" ),
+             b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+             ),
+             b_centre       =BLOC(condition = "OPTION == 'CENTRE'",
+                                  fr="Recherche des valeurs propres les plus proches d une valeur donnée",
+               FREQ            =SIMP(statut='o',typ='R',
+                                     fr="Fréquence autour de laquelle on cherche les fréquences propres"),
+               AMOR_REDUIT     =SIMP(statut='f',typ='R',),
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+             ),
+             b_bande         =BLOC(condition = "(OPTION == 'BANDE')",
+                                   fr="Recherche des valeurs propres dans une bande donnée",
+               FREQ            =SIMP(statut='o',typ='R',min=2,validators=NoRepeat(),max=2,
+                                     fr="Valeur des deux fréquences délimitant la bande de recherche"),
+             ),           
+             APPROCHE        =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG","COMPLEXE"),
+                                   fr="Choix du pseudo-produit scalaire pour la résolution du problème quadratique" ),           
+             regles=(EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
+             DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
+             COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0 ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+             STOP_FREQ_VIDE  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+
+        VERI_MODE       =FACT(statut='d',min=0,
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-3,val_min=0.E+0 ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0,
+                                 fr="Valeur limite admise pour l ereur a posteriori des modes" ),
+           STURM           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 28/07/2009   AUTEUR TORKHANI M.TORKHANI 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE Mohamed TORKHANI
+
+from Macro.calc_mode_rotation_ops import calc_mode_rotation_ops
+
+CALC_MODE_ROTATION=MACRO(nom="CALC_MODE_ROTATION",op=calc_mode_rotation_ops,sd_prod=table_container,
+                  reentrant='n',fr="calculer les fréquences et modes d'un système en fonction des vitesses de rotation",
+                  UIinfo={"groupes":("Résolution",)},
+                         
+                  MATR_A          =SIMP(statut='o',typ=matr_asse_depl_r ),
+                  MATR_B          =SIMP(statut='o',typ=matr_asse_depl_r ),
+                  MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r ),
+                  MATR_GYRO       =SIMP(statut='f',typ=matr_asse_depl_r ),
+                  VITE_ROTA       =SIMP(statut='f',typ='R',max='**'),
+                        
+                  METHODE         =SIMP(statut='f',typ='TXM',defaut="QZ",
+                                        into=("QZ","SORENSEN",) ),
+                                               
+                  CALC_FREQ       =FACT(statut='d',min=0,
+                         OPTION      =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","CENTRE",),
+                                           fr="Choix de l option et par conséquent du shift du problème modal" ),
+                  b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
+                              NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+                              ),
+                  b_centre       =BLOC(condition = "OPTION == 'CENTRE'",
+                                fr="Recherche des valeurs propres les plus proches d une valeur donnée",
+                              FREQ            =SIMP(statut='o',typ='R',
+                                                     fr="Fréquence autour de laquelle on cherche les fréquences propres"),
+                              AMOR_REDUIT     =SIMP(statut='f',typ='R',),
+                              NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+                              ),
+                             ),
+                                  
+                  VERI_MODE       =FACT(statut='d',min=0,
+                  STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+                  SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+                  PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-3 ),
+                  STURM           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),),
+);      
+#& MODIF COMMANDE  DATE 27/04/2010   AUTEUR DESROCHES X.DESROCHES 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+def calc_no_prod(RESULTAT,**args):
+   if AsType(RESULTAT) != None : return AsType(RESULTAT)
+   raise AsException("type de concept resultat non prevu")
+
+CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,reentrant='f',
+            fr="Enrichir une SD Résultat par des champs aux noeuds calculés à partir de champs aux éléments évalués aux noeuds",
+            UIinfo={"groupes":("Post traitements",)},
+         RESULTAT        =SIMP(statut='o',typ=resultat_sdaster),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters"),
+
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                        'NOEUD_CMP','LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS'),
+                 CONCEPT_SENSIBLE("SEPARE"),
+                 DERIVABLE('RESULTAT'),),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+         b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+         b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+             PRECISION       =SIMP(statut='o',typ='R',),),
+         OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                               into=("FORC_NODA","REAC_NODA",
+                                     "FORC_NODA_NONL",
+                                     "DCHA_NOEU_SIGM",
+                                     "DEGE_NOEU_DEPL",
+                                     "DETE_NOEU_DLTE",
+                                     "DEDE_NOEU_DLDE",
+                                     "DESI_NOEU_DLSI",
+                                     "DURT_NOEU_META",
+                                     "EFGE_NOEU_CART","EFGE_NOEU_DEPL",
+                                     "ENDO_NOEU_SINO",
+                                     "ENEL_NOEU_ELGA",
+                                     "EPMG_NOEU_DEPL",
+                                     "EPSA_NOEU",
+                                     "EPSG_NOEU_DEPL",
+                                     "EPSI_NOEU_DEPL",
+                                     "EPSP_NOEU"     ,
+                                     "EPVC_NOEU","EPFD_NOEU","EPFP_NOEU","EPFP_NOEU",
+                                     "EQUI_NOEU_EPME","EQUI_NOEU_EPSI","EQUI_NOEU_SIGM",
+                                     "ERRE_NOEU_ELEM","QIRE_NOEU_ELEM",
+                                     "FLUX_NOEU_TEMP",
+                                     "HYDR_NOEU_ELGA",
+                                     "INTE_NOEU_ACTI","INTE_NOEU_REAC",
+                                     "META_NOEU_TEMP",
+                                     "PMPB_NOEU_SIEF",
+                                     "PRES_NOEU_DBEL","PRES_NOEU_IMAG","PRES_NOEU_REEL",
+                                     "RADI_NOEU_SIGM",
+                                     "SIEF_NOEU_ELGA",
+                                     "SIGM_NOEU_CART","SIGM_NOEU_COQU","SIGM_NOEU_DEPL",
+                                     "SIGM_NOEU_SIEF",
+                                     "SIPO_NOEU_DEPL","SIPO_NOEU_SIEF",
+                                     "SIRE_NOEU_DEPL",
+                                     "VARI_NOEU","EXTR_NOEU_VARI","VARI_NOEU_ELGA",) ),
+
+         b_forc_reac     =BLOC(condition = """(OPTION == 'FORC_NODA') or (type(OPTION) == type(()) and 'FORC_NODA' in OPTION) or\
+ (OPTION == 'REAC_NODA') or (type(OPTION) == type(()) and 'REAC_NODA' in OPTION)""",
+             MODELE          =SIMP(statut='f',typ=modele_sdaster),
+         ),
+         b_forc_nonl     =BLOC(condition = """(OPTION == 'FORC_NODA_NONL')""",
+             MODELE          =SIMP(statut='f',typ=modele_sdaster),
+             COMP_INCR       =C_COMP_INCR(),
+         ),
+         
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         EXCIT           =FACT(statut='f',max='**',
+           CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou,char_cine_meca) ),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                 into=("FIXE_CSTE","FIXE_PILO","SUIV") ),
+         ),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+         GROUP_MA_RESU   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         MAILLE_RESU     =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+         GROUP_NO_RESU   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         NOEUD_RESU      =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 03/05/2010   AUTEUR PROIX J-M.PROIX 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE PROIX J-M.PROIX
+CALC_POINT_MAT=OPER(nom="CALC_POINT_MAT",op=33,sd_prod=table_sdaster,reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
+            fr="intégrer une loi de comportement",
+     MATER           =SIMP(statut='o',typ=mater_sdaster,max=1),
+     COMP_INCR       =C_COMP_INCR(),
+     COMP_ELAS       =FACT(statut='f',max='**',
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+           RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
+                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS","ELAS_HYPER")),
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT",) ),
+         ),
+     INCREMENT       =C_INCREMENT(),
+     NEWTON          =C_NEWTON(),
+     CONVERGENCE     =C_CONVERGENCE(),
+
+    # --MASSIF : orientation du materiau (monocristal, orthotropie)
+     MASSIF          =FACT(statut='f',max='**',
+                    regles=(UN_PARMI('ANGL_REP','ANGL_EULER'),),
+         ANGL_REP        =SIMP(statut='f',typ='R',min=1,max=3),
+         ANGL_EULER      =SIMP(statut='f',typ='R',min=1,max=3),
+      ),
+    ## ANGLE : rotation de ANGLE autour de Z uniquement, et seulement pour les déformations imposées.
+     ANGLE      =SIMP(statut='f',typ='R',max=1, defaut=0.),
+     INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2)),
+     
+     regles=(UN_PARMI('SIXX','EPXX'),UN_PARMI('SIYY','EPYY'),UN_PARMI('SIZZ','EPZZ'),
+             UN_PARMI('SIXY','EPXY'),UN_PARMI('SIXZ','EPXZ'),UN_PARMI('SIYZ','EPYZ'),),     
+     SIXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     SIYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     SIZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     SIXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     SIXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     SIYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     EPXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     EPYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     EPZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     EPXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     EPXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+     EPYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+
+     SIGM_INIT=FACT(statut='f',
+            SIXX = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+            SIYY = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+            SIZZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+            SIXY = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+            SIXZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+            SIYZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+                       ),
+     EPSI_INIT=FACT(statut='f',
+            EPXX = SIMP(statut='o',typ='R',max=1),
+            EPYY = SIMP(statut='o',typ='R',max=1),
+            EPZZ = SIMP(statut='o',typ='R',max=1),
+            EPXY = SIMP(statut='o',typ='R',max=1),
+            EPXZ = SIMP(statut='o',typ='R',max=1),
+            EPYZ = SIMP(statut='o',typ='R',max=1),
+                       ),
+     VARI_INIT=FACT(statut='f',
+            VALE = SIMP(statut='o',typ='R',max='**'),
+                       ),
+      NB_VARI_TABLE  =SIMP(statut='f',typ='I',max=1,),
+     );
+
+#& MODIF COMMANDE  DATE 07/07/2009   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE MICHEL S.MICHEL
+
+from Macro.calc_precont_ops import calc_precont_ops
+
+
+# ===========================================================================
+#           CATALOGUE DE LA MACRO "CALC_PRECONT"
+#           -----------------------------------------
+# USAGE :
+#
+#
+# ===========================================================================
+
+CALC_PRECONT=MACRO(nom="CALC_PRECONT",op=calc_precont_ops,sd_prod=evol_noli,
+                   fr="Imposer la tension définie par le BPEL dans les cables",
+                   reentrant='f',UIinfo={"groupe":("Modélisation",)},
+         reuse =SIMP(statut='f',typ='evol_noli'),
+         MODELE           =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER       =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM        =SIMP(statut='o',typ=cara_elem),
+         CABLE_BP         =SIMP(statut='o',typ=cabl_precont,validators=NoRepeat(),max='**'),
+         CABLE_BP_INACTIF =SIMP(statut='f',typ=cabl_precont,validators=NoRepeat(),max='**'),
+         INCREMENT        =C_INCREMENT(),
+         NEWTON           =C_NEWTON(),
+         RECH_LINEAIRE    =C_RECH_LINEAIRE(),
+         CONVERGENCE      =C_CONVERGENCE(),
+          ETAT_INIT       =FACT(statut='f',
+            regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI',),
+                    EXCLUS('EVOL_NOLI','DEPL',),
+                    EXCLUS('EVOL_NOLI','SIGM',),
+                    EXCLUS('EVOL_NOLI','VARI',),
+                    EXCLUS('NUME_ORDRE','INST'), ),
+            DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
+            SIGM            =SIMP(statut='f',typ=(carte_sdaster,cham_elem)),
+            VARI            =SIMP(statut='f',typ=cham_elem),
+            EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+            NUME_ORDRE      =SIMP(statut='f',typ='I'),
+            INST            =SIMP(statut='f',typ='R'),
+            CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+            b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+            b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                PRECISION       =SIMP(statut='o',typ='R',),),
+            NUME_DIDI       =SIMP(statut='f',typ='I'),
+            INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+          ),
+          SOLVEUR         =C_SOLVEUR(),
+          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+          TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+
+          EXCIT           =FACT(statut='o',max='**',
+            CHARGE          =SIMP(statut='o',typ=char_meca),
+          ),
+
+         COMP_INCR       =C_COMP_INCR(),
+  )  ;
+#& MODIF COMMANDE  DATE 28/01/2010   AUTEUR BODEL C.BODEL 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# RESPONSABLE CORUS M.CORUS
+
+from Macro.calc_spec_ops import calc_spec_ops
+
+CALC_SPEC=MACRO(nom="CALC_SPEC",op= calc_spec_ops,sd_prod=table_fonction,
+                     reentrant='n',
+                     fr="Calcule une matrice interspectrale ou des fonctions de transferts",
+                     UIinfo={"groupes":("Fonction",)},
+         TAB_ECHANT      =FACT(statut='f',
+           NOM_TAB         =SIMP(statut='o',typ=table_sdaster),
+           LONGUEUR_ECH    =FACT(statut='f',
+             DUREE           =SIMP(statut='f',typ='R'),
+             POURCENT        =SIMP(statut='f',typ='R'),
+             NB_PTS          =SIMP(statut='f',typ='I'),
+                              ),
+           RECOUVREMENT  =FACT(statut='f',
+             DUREE           =SIMP(statut='f',typ='R'),
+             POURCENT        =SIMP(statut='f',typ='R'),
+             NB_PTS          =SIMP(statut='f',typ='I'),
+                                ),
+                              ),
+         ECHANT          =FACT(statut='f',max='**',
+           NUME_ORDRE_I    =SIMP(statut='o',typ='I' ),
+           NUME_MES        =SIMP(statut='o',typ='I' ),
+           FONCTION        =SIMP(statut='o',typ=fonction_sdaster),
+                              ),
+#-- Cas de la matrice interspectrale --#
+         INTERSPE        =FACT(statut='f',
+           FENETRE         =SIMP(statut='f',typ='TXM',defaut="RECT",into=("RECT","HAMM","HANN","EXPO","PART",)),
+           BLOC_DEFI_FENE  =BLOC(condition = "FENETRE == 'EXPO' or FENETRE == 'PART' ", 
+             DEFI_FENE       =SIMP(statut='f',typ='R',max='**'),
+                                 ),
+                              ),
+#-- Cas des transferts - estimateurs H1 / H2 / Hv + Coherence --#
+         TRANSFERT       =FACT(statut='f',
+           ESTIM           =SIMP(statut='f',typ='TXM',defaut="H1",into=("H1","H2","CO",)),
+           REFER           =SIMP(statut='o',typ='I',max='**'),
+           FENETRE         =SIMP(statut='f',typ='TXM',defaut="RECT",into=("RECT","HAMM","HANN","EXPO","PART",)),
+#           DEFI_FENE       =SIMP(statut='f',typ='R',max='**'),
+           BLOC_DEFI_FENE  =BLOC(condition = "FENETRE == 'EXPO' or FENETRE == 'PART' ", 
+             DEFI_FENE       =SIMP(statut='f',typ='R',max='**'),
+                                 ),
+                              ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+);
+#& MODIF COMMANDE  DATE 15/03/2010   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
+
+def calc_table_prod(self, TABLE, ACTION, **kargs):
+   """Typage du concept produit.
+   """
+   l_typ = [AsType(TABLE),]
+   for mcf in ACTION:
+      dmc = mcf.cree_dict_valeurs(mcf.mc_liste)
+      if dmc.get('TABLE') != None:
+         l_typ.append(AsType(dmc['TABLE']))
+   # une table_fonction étant une table
+   if table_fonction in l_typ:
+      return table_fonction
+   else:
+      return table_sdaster
+
+
+from Macro.calc_table_ops import calc_table_ops
+
+CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod,
+                 fr="Opérations sur une table",
+                 reentrant='f',
+   regles=(DERIVABLE('TABLE'),),
+   TABLE  = SIMP(statut='o',typ=table_sdaster),
+   ACTION = FACT(statut='o', max='**',
+                    fr = "Suite des opérations à effectuer sur la table",
+      OPERATION = SIMP(statut='o', typ='TXM',
+                  into=('FILTRE', 'EXTR', 'RENOMME', 'TRI', 'COMB', 'AJOUT', 'OPER', 'SUPPRIME')),
+      
+      b_filtre = BLOC(condition="OPERATION == 'FILTRE'",
+                      fr="Sélectionne les lignes de la table vérifiant un critère",
+         NOM_PARA  = SIMP(statut='o',typ='TXM'),
+         CRIT_COMP = SIMP(statut='f',typ='TXM',defaut="EQ",
+                          into=('EQ','NE','GT','LT','GE','LE','REGEXP',
+                                'VIDE','NON_VIDE','MAXI','ABS_MAXI','MINI','ABS_MINI'),),
+         b_vale = BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
+            regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
+            VALE   = SIMP(statut='f',typ='R',max='**'),
+            VALE_I = SIMP(statut='f',typ='I',max='**'),
+            VALE_C = SIMP(statut='f',typ='C',max='**'),
+            VALE_K = SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         b_regexp = BLOC(condition = "CRIT_COMP == 'REGEXP'",
+            VALE_K = SIMP(statut='o',typ='TXM',max='**'),
+         ),
+         b_crit = BLOC(condition = "CRIT_COMP in ('EQ','NE')",
+            CRITERE   = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+            PRECISION = SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         ),
+      ),
+      
+      b_extr = BLOC(condition="OPERATION ==  'EXTR'",
+                    fr="Extrait une ou plusieurs colonnes de la table",
+         NOM_PARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                         fr="Noms des colonnes à extraire"),
+      ),
+   
+      b_suppr = BLOC(condition="OPERATION ==  'SUPPRIME'",
+                    fr="Supprime une ou plusieurs colonnes de la table",
+         NOM_PARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                         fr="Noms des colonnes à supprimer"),
+      ),
+   
+      b_renomme = BLOC(condition="OPERATION == 'RENOMME'",
+                       fr="Renomme un ou plusieurs paramètres de la table",
+         NOM_PARA = SIMP(statut='o', typ='TXM', validators=NoRepeat(), min=2, max=2,
+                         fr="Couple (ancien nom du paramètre, nouveau nom du paramètre)",),
+      ),
+   
+      b_tri = BLOC(condition="OPERATION == 'TRI'",
+                   fr="Ordonne les lignes de la table selon les valeurs d'un ou plusieurs paramètres",
+         NOM_PARA = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+         ORDRE    = SIMP(statut='f',typ='TXM',defaut="CROISSANT",
+                         into=("CROISSANT","DECROISSANT") ),
+      ),
+      
+      b_comb = BLOC(condition="OPERATION == 'COMB'",
+                    fr="Combine deux tables ayant éventuellement des paramètres communs",
+         TABLE    = SIMP(statut='o',typ=table_sdaster,
+                         fr="Table dont les colonnes vont venir surcharger la table initiale"),
+         NOM_PARA = SIMP(statut='f',typ='TXM',max='**',
+                         fr="Noms des paramètres dont les valeurs doivent etre identiques dans les deux tables "\
+                            "pour que les colonnes soient combinées"),
+         RESTREINT = SIMP(statut='f', typ='TXM', into=('OUI', 'NON'), defaut='NON',
+                          fr="Restreint la fusion uniquement aux lignes où les NOM_PARA sont communs"),
+      ),
+      
+      b_append = BLOC(condition="OPERATION == 'AJOUT'",
+                    fr="Ajoute une ligne à la table initiale",
+         NOM_PARA = SIMP(statut='o',typ='TXM',max='**',
+                         fr="Noms des paramètres dont les valeurs sont fournies sous VALE"),
+         VALE     = SIMP(statut='o',typ=assd,max='**', fr='Valeurs des paramètres'),
+      ),
+      
+      b_oper = BLOC(condition="OPERATION == 'OPER'",
+                    fr="Applique une formule dans laquelle les variables sont les paramètres de la table",
+         FORMULE  = SIMP(statut='o',typ=formule,
+                         fr="Formule à appliquer aux colonnes de la table"),
+         NOM_PARA = SIMP(statut='o',typ='TXM',
+                         fr="Nom de la nouvelle colonne"),
+      ),
+   ),
+   
+   SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),max=1,
+                      fr="Paramètre de sensibilité",
+                      ang="Sensitivity parameter"),
+   TITRE = SIMP(statut='f',typ='TXM',max='**',
+                fr="Titre de la table produite"),
+   INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+CALC_THETA=OPER(nom="CALC_THETA",op=54,sd_prod=theta_geom,reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
+                fr="Définir un champ theta pour le calcul du taux de restitution d'énergie"
+                    +" ou des facteurs d'intensité de contraintes",
+         regles=(UN_PARMI('THETA_2D','THETA_3D','THETA_BANDE'),
+                 PRESENT_ABSENT('THETA_2D','DIRE_THETA'),
+                 EXCLUS('DIRECTION','DIRE_THETA'),),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="COURONNE",into=("COURONNE","BANDE") ),
+         MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
+         THETA_3D        =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','GROUP_NO','NOEUD'),
+                   UN_PARMI('MODULE','MODULE_FO'),
+                   ENSEMBLE('MODULE','R_INF','R_SUP'),
+                   ENSEMBLE('MODULE_FO','R_INF_FO','R_SUP_FO'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           MODULE          =SIMP(statut='f',typ='R'),
+           R_INF           =SIMP(statut='f',typ='R'),
+           R_SUP           =SIMP(statut='f',typ='R'),
+           MODULE_FO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           R_INF_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           R_SUP_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                         ),
+         b_theta_3d     =BLOC(condition="THETA_3D != None",
+           FOND_FISS       =SIMP(statut='o',typ=fond_fiss),),
+         DIRE_THETA      =SIMP(statut='f',typ=cham_no_sdaster ),
+         DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+         THETA_2D        =FACT(statut='f',max='**',
+           regles=(UN_PARMI('GROUP_NO','NOEUD'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           MODULE          =SIMP(statut='o',typ='R'),
+           R_INF           =SIMP(statut='o',typ='R'),
+           R_SUP           =SIMP(statut='o',typ='R'),
+         ),
+         THETA_BANDE     =FACT(statut='f',max='**',
+           MODULE          =SIMP(statut='o',typ='R'),
+           R_INF           =SIMP(statut='o',typ='R'),
+           R_SUP           =SIMP(statut='o',typ='R'),
+         ),
+         GRAD_NOEU_THETA =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         IMPRESSION      =FACT(statut='f',
+           UNITE           =SIMP(statut='f',typ='I',defaut=8),  
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="EXCEL",into=("EXCEL","AGRAF") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+def calc_vect_elem_prod(OPTION,**args):
+  if OPTION == "CHAR_MECA" :      return vect_elem_depl_r
+  if OPTION == "CHAR_THER" :      return vect_elem_temp_r
+  if OPTION == "CHAR_ACOU" :      return vect_elem_pres_c
+  if OPTION == "FORC_NODA" :      return vect_elem_depl_r
+  raise AsException("type de concept resultat non prevu")
+
+CALC_VECT_ELEM=OPER(nom="CALC_VECT_ELEM",op=8,sd_prod=calc_vect_elem_prod,reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+                    fr="Calcul des seconds membres élémentaires",
+         OPTION          =SIMP(statut='o',typ='TXM',into=("CHAR_MECA","CHAR_THER","CHAR_ACOU",
+                                                           "FORC_NODA") ),
+         b_char_meca     =BLOC(condition = "OPTION=='CHAR_MECA'",
+           regles=(AU_MOINS_UN('CHARGE','MODELE'),),
+           CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+           MODELE          =SIMP(statut='f',typ=modele_sdaster),
+           b_charge     =BLOC(condition = "CHARGE != None", fr="modèle ne contenant pas de sous-structure",
+              CHAM_MATER   =SIMP(statut='f',typ=cham_mater),
+              CARA_ELEM    =SIMP(statut='f',typ=cara_elem),
+              INST         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+              MODE_FOURIER =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),  
+           b_modele     =BLOC(condition = "(MODELE != None)",fr="modèle contenant une sous-structure",
+              SOUS_STRUC      =FACT(statut='o',min=01,
+                regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
+                CAS_CHARGE  =SIMP(statut='o',typ='TXM' ),
+                TOUT        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                SUPER_MAILLE=SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**',),
+              ),
+           ),
+         ),
+         b_char_ther     =BLOC(condition = "OPTION=='CHAR_THER'",
+           CARA_ELEM        =SIMP(statut='f',typ=cara_elem),
+           CHARGE           =SIMP(statut='o',typ=char_ther,validators=NoRepeat(),max='**'),
+           INST             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+              
+         b_char_acou     =BLOC(condition = "OPTION=='CHAR_ACOU'",
+           CHAM_MATER        =SIMP(statut='o',typ=cham_mater),
+           CHARGE            =SIMP(statut='o',typ=char_acou,validators=NoRepeat(),max='**'),
+         ),
+         
+         b_forc_noda     =BLOC(condition = "OPTION=='FORC_NODA'",
+           SIEF_ELGA         =SIMP(statut='o',typ=cham_elem),
+           CARA_ELEM         =SIMP(statut='f',typ=cara_elem),
+           MODELE            =SIMP(statut='f',typ=modele_sdaster),
+         ),       
+) ;
+#& MODIF COMMANDE  DATE 08/12/2009   AUTEUR PROIX J-M.PROIX 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+
+CALCUL=OPER(nom="CALCUL",op=26,sd_prod=table_container,reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
+            fr="Calculer des objets élémentaires comme une matrice tangente, intégrer une loi de comportement, etc...",
+     OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',defaut="COMPORTEMENT",
+                           into=( "COMPORTEMENT","MATR_TANG_ELEM","FORC_INT_ELEM"),),
+     MODELE          =SIMP(statut='o',typ=modele_sdaster),
+     CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+     CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+     TABLE           =SIMP(statut='f',typ=table_container),
+     EXCIT           =FACT(statut='o',max='**',
+       CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+       FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+       TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                 into=("FIXE_CSTE",)),
+
+     ),
+     DEPL            =SIMP(statut='o',typ=cham_no_sdaster ),
+     INCR_DEPL       =SIMP(statut='o',typ=cham_no_sdaster ),
+     SIGM            =SIMP(statut='o',typ=cham_elem),
+     VARI            =SIMP(statut='o',typ=cham_elem),
+     INCREMENT       =FACT(statut='o',
+          LIST_INST       =SIMP(statut='o',typ=listr8_sdaster),
+          NUME_ORDRE      =SIMP(statut='o',typ='I'),),
+     COMP_INCR       =C_COMP_INCR(),
+     COMP_ELAS       =FACT(statut='f',max='**',
+          RESI_INTE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+          ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+          ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
+          RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",into=("IMPLICITE",)),
+          RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
+                                into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC",
+                                     "ELAS_POUTRE_GR","CABLE","ELAS_HYPER")),
+          DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
+          ),
+     INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+) ;
+
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+COMB_FOURIER=OPER(nom="COMB_FOURIER",op= 161,sd_prod=comb_fourier,
+                  reentrant='n',fr="Recombiner les modes de Fourier d'une SD Résultat dans des directions particulières",
+            UIinfo={"groupes":("Post traitements",)},
+         RESULTAT        =SIMP(statut='o',typ=(fourier_elas,fourier_ther),),
+         ANGL            =SIMP(statut='o',typ='R',max='**'),
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=6,
+             into=("DEPL","REAC_NODA","SIEF_ELGA_DEPL","EPSI_ELNO_DEPL","SIGM_ELNO_DEPL","TEMP","FLUX_ELNO_TEMP"),),
+) ;
+#& MODIF COMMANDE  DATE 08/12/2008   AUTEUR SELLENET N.SELLENET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE SELLENET N.SELLENET
+def comb_matr_asse_prod(COMB_R,COMB_C,CALC_AMOR_GENE,**args):
+  if COMB_C != None:
+    type_mat = AsType(COMB_C[0]['MATR_ASSE'])
+    if type_mat in  (matr_asse_depl_c,matr_asse_depl_r) : return matr_asse_depl_c
+    if type_mat in  (matr_asse_gene_c,matr_asse_gene_r) : return matr_asse_gene_c
+    if type_mat in  (matr_asse_temp_c,matr_asse_temp_r) : return matr_asse_temp_c
+    if type_mat in  (matr_asse_pres_c,matr_asse_pres_r) : return matr_asse_pres_c
+  elif COMB_R != None:
+    type_mat = AsType(COMB_R[0]['MATR_ASSE'])
+    if type_mat in  (matr_asse_depl_c,matr_asse_depl_r) : return matr_asse_depl_r
+    if type_mat in  (matr_asse_temp_c,matr_asse_temp_r) : return matr_asse_temp_r
+    if type_mat in  (matr_asse_pres_c,matr_asse_pres_r) : return matr_asse_pres_r
+    if type_mat in  (matr_asse_gene_c,matr_asse_gene_r) : return matr_asse_gene_r
+  elif CALC_AMOR_GENE != None: return matr_asse_gene_r
+  raise AsException("type de concept resultat non prevu")
+
+COMB_MATR_ASSE=OPER(nom="COMB_MATR_ASSE",op=  31,sd_prod=comb_matr_asse_prod,
+                    fr="Effectuer la combinaison linéaire de matrices assemblées",
+                    reentrant='f',
+            UIinfo={"groupes":("Résultats et champs",)},
+         regles=(UN_PARMI('COMB_R','COMB_C','CALC_AMOR_GENE' ),),
+         COMB_R          =FACT(statut='f',max='**',
+           PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
+           MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,matr_asse_temp_c
+                                                ,matr_asse_pres_r,matr_asse_pres_c,matr_asse_gene_r,matr_asse_gene_c ) ),
+           COEF_R          =SIMP(statut='o',typ='R' ),
+         ),
+         COMB_C          =FACT(statut='f',max='**',
+           regles=(UN_PARMI('COEF_R','COEF_C' ),),
+           MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,matr_asse_temp_c
+                                                ,matr_asse_pres_r,matr_asse_pres_c,matr_asse_gene_r,matr_asse_gene_c ) ),
+           COEF_R          =SIMP(statut='f',typ='R' ),
+           COEF_C          =SIMP(statut='f',typ='C' ),
+         ),
+         CALC_AMOR_GENE   =FACT(statut='f',
+           RIGI_GENE    = SIMP(statut='o', typ=matr_asse_gene_r),
+           MASS_GENE    = SIMP(statut='o', typ=matr_asse_gene_r),
+           regles=(UN_PARMI('AMOR_REDUIT','LIST_AMOR' ),),
+           AMOR_REDUIT  = SIMP(statut='f',typ='R',max='**'),
+           LIST_AMOR    = SIMP(statut='f',typ=listr8_sdaster ),
+         ),
+         SANS_CMP        =SIMP(statut='f',typ='TXM',into=("LAGR",) ),
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2009   AUTEUR AUDEBERT S.AUDEBERT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE AUDEBERT S.AUDEBERT
+COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_meca,
+                     fr="Réponse sismique par recombinaison modale par une méthode spectrale",
+                     reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','FREQ','NUME_MODE','LIST_FREQ','LIST_ORDRE'),
+                 UN_PARMI('AMOR_REDUIT','LIST_AMOR','AMOR_GENE' ),
+                 UN_PARMI('MONO_APPUI','MULTI_APPUI' ),),
+         MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster ),
+         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster ),
+         b_freq          =BLOC(condition = "FREQ != None or LIST_FREQ != None",
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+         MODE_CORR       =SIMP(statut='f',typ=mode_meca ),
+         
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         LIST_AMOR       =SIMP(statut='f',typ=listr8_sdaster ),
+         AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r ),
+         
+         MASS_INER       =SIMP(statut='f',typ=table_sdaster ),
+         CORR_FREQ       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         
+         EXCIT           =FACT(statut='o',max='**',
+           regles=(UN_PARMI('AXE','TRI_AXE','TRI_SPEC' ),),
+           AXE             =SIMP(statut='f',typ='R',max=3,fr="Excitation suivant un seul axe",),
+           TRI_AXE         =SIMP(statut='f',typ='R',max=3,fr="Excitation suivant les trois axes mais avec le meme spectre",),
+           TRI_SPEC        =SIMP(statut='f',typ='TXM',into=("OUI",),
+                                 fr="Excitation suivant les trois axes  avec trois spectres"),
+           b_axe           =BLOC(condition = "AXE != None",fr="Excitation suivant un seul axe",
+             SPEC_OSCI       =SIMP(statut='o',typ=(nappe_sdaster,formule),),
+             ECHELLE         =SIMP(statut='f',typ='R',),
+           ),
+           b_tri_axe       =BLOC(condition = "TRI_AXE != None",fr="Excitation suivant les trois axes mais avec le meme spectre",
+             SPEC_OSCI       =SIMP(statut='o',typ=(nappe_sdaster,formule),),
+             ECHELLE         =SIMP(statut='f',typ='R',),
+           ),
+           b_tri_spec      =BLOC(condition = "TRI_SPEC != None",fr="Excitation suivant les trois axes  avec trois spectres",
+             SPEC_OSCI       =SIMP(statut='o',typ=(nappe_sdaster,formule),min=3,max=3 ),
+             ECHELLE         =SIMP(statut='f',typ='R',min=3,max=3),
+           ),       
+           NATURE          =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("ACCE","VITE","DEPL") ),
+           b_mult_appui    =BLOC(condition = "(MULTI_APPUI != None)",
+                                 regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),)                              
+         ),
+         MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",),
+                                 fr="excitation imposée unique" ),
+         MULTI_APPUI      =SIMP(statut='f',typ='TXM',position='global',into=("DECORRELE","CORRELE"),
+                                 fr="excitation imposée unique" ),
+         b_decorrele     =BLOC(condition = "MULTI_APPUI == 'DECORRELE' ",
+           GROUP_APPUI     =FACT(statut='f',max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO' ),),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),),
+           
+         ),
+         b_correle =BLOC(condition = "MULTI_APPUI == 'CORRELE' ",
+           COMB_MULT_APPUI =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           TYPE_COMBI      =SIMP(statut='f',typ='TXM',into=("QUAD","LINE",) ),),
+         ),
+
+         COMB_MODE       =FACT(statut='o',
+           TYPE            =SIMP(statut='o',typ='TXM',into=("SRSS","CQC","DSC","ABS","DPC") ),
+           DUREE           =SIMP(statut='f',typ='R' ),
+         ),
+         COMB_DIRECTION  =FACT(statut='f',
+           TYPE            =SIMP(statut='f',typ='TXM',into=("QUAD","NEWMARK") ),
+         ),
+         COMB_DEPL_APPUI=FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','LIST_CAS'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           LIST_CAS       =SIMP(statut='f',typ='I',max='**'),
+           TYPE_COMBI      =SIMP(statut='f',typ='TXM',into=("QUAD","LINE","ABS") ),
+         ),
+         DEPL_MULT_APPUI =FACT(statut='f',max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO'),
+                   AU_MOINS_UN('DX','DY','DZ' ),),
+           NOM_CAS         =SIMP(statut='o',typ='TXM',max='**'),
+           NUME_CAS        =SIMP(statut='o',typ='I',max='**'),
+           MODE_STAT       =SIMP(statut='f',typ=mode_meca, ),
+           NOEUD_REFE      =SIMP(statut='f',typ=no),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           DX              =SIMP(statut='f',typ='R' ),
+           DY              =SIMP(statut='f',typ='R' ),
+           DZ              =SIMP(statut='f',typ='R' ),
+         ),
+         OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=9,
+                               into=("DEPL","VITE","ACCE_ABSOLU","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
+                                     "EFGE_ELNO_DEPL","REAC_NODA","FORC_NODA","EFGE_ELNO_CART",
+                                     "SIPO_ELNO_DEPL") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+         IMPRESSION      =FACT(statut='f',max='**',
+           regles=(EXCLUS('TOUT','NIVEAU'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NIVEAU          =SIMP(statut='f',typ='TXM',into=("SPEC_OSCI","MASS_EFFE","MAXI_GENE"),validators=NoRepeat(),max=3 ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 12/05/2009   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+def crea_champ_prod(TYPE_CHAM,**args):
+  if TYPE_CHAM[0:5] == "CART_" :
+     return carte_sdaster
+  elif TYPE_CHAM[0:5] == "NOEU_" :
+     return cham_no_sdaster
+  elif TYPE_CHAM[0:2] == "EL"    :
+     return cham_elem
+  else :
+     raise AsException("type de concept resultat_sdaster non prevu")
+
+
+CREA_CHAMP=OPER(nom="CREA_CHAMP",op= 195,sd_prod=crea_champ_prod,
+                fr="Création d'un champ ",reentrant='f',
+            UIinfo={"groupes":("Résultats et champs",)},
+         TYPE_CHAM       =SIMP(statut='o',typ='TXM',into=C_TYPE_CHAM_INTO()),
+      # TYPE_CHAM doit etre de la forme : CART_xx, NOEU_xx, ELEM_xx, ELGA_xx ou ELNO_xx
+      # ou xx est le nom d'une grandeur définie dans le catalogue des grandeurs
+#        SI CREATION D'UN CHAM_NO, POUR IMPOSER LA NUMEROTATION DES DDLS :
+#        ------------------------------------------------------------------
+         regles=(EXCLUS('NUME_DDL','CHAM_NO',)),
+         NUME_DDL        =SIMP(statut='f',typ=(nume_ddl_sdaster) ),
+         CHAM_NO         =SIMP(statut='f',typ=(cham_no_sdaster) ),
+
+#        SI CREATION D'UN CHAM_ELEM, POUR aider a l'allocation du champ :
+#        (PAR DEFAUT : TOU_INI_ELNO/_ELGA/_ELEM)
+#        ------------------------------------------------------------------
+         OPTION         =SIMP(statut='f',typ='TXM'),
+
+         OPERATION       =SIMP(statut='o',typ='TXM',into=("AFFE","ASSE","EVAL","EXTR","DISC","NORMALE","R2C","C2R","COMB") ),
+
+#        ------------------------------------------------------------------
+         b_norm          =BLOC(condition = "OPERATION == 'NORMALE'",
+                               regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),),
+             MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                             ),
+#        ------------------------------------------------------------------
+         b_affe          =BLOC(condition = "OPERATION == 'AFFE'",
+             regles=(UN_PARMI('MAILLAGE','MODELE'),),
+             MAILLAGE        =SIMP(statut='f',typ=(maillage_sdaster) ),
+             MODELE          =SIMP(statut='f',typ=(modele_sdaster) ),
+             b_affe_modele   =BLOC(condition = "MODELE != None",
+                 PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), ),
+             AFFE            =FACT(statut='o',max='**',
+                regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD',),
+                        UN_PARMI('VALE','VALE_I','VALE_C','VALE_F', ),),
+                TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+                MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+                NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+                NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+                VALE            =SIMP(statut='f',typ='R',max='**' ),
+                VALE_I          =SIMP(statut='f',typ='I',max='**' ),
+                VALE_C          =SIMP(statut='f',typ='C',max='**' ),
+                VALE_F          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**'),
+                                   ),
+                             ),
+#        ------------------------------------------------------------------
+         b_asse          =BLOC(condition = "OPERATION == 'ASSE'",
+             regles=(UN_PARMI('MAILLAGE','MODELE'),),
+             MAILLAGE        =SIMP(statut='f',typ=(maillage_sdaster) ),
+             MODELE          =SIMP(statut='f',typ=(modele_sdaster) ),
+             b_asse_modele   =BLOC(condition = "MODELE != None",
+                 PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ), ),
+             ASSE            =FACT(statut='o',max='**',
+                regles=(AU_MOINS_UN('TOUT','GROUP_MA','GROUP_NO','MAILLE','NOEUD',),
+                PRESENT_PRESENT('NOM_CMP_RESU','NOM_CMP', ),),
+                TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                CHAM_GD         =SIMP(statut='o',typ=cham_gd_sdaster),
+                NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),
+                NOM_CMP_RESU    =SIMP(statut='f',typ='TXM',max='**' ),
+                CUMUL           =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                COEF_R          =SIMP(statut='f',typ='R',defaut= 1. ),
+                COEF_C          =SIMP(statut='f',typ='C',max=1),
+                                    ),
+                             ),
+#        ------------------------------------------------------------------
+         b_comb          =BLOC(condition = "OPERATION == 'COMB'",
+                               fr="Pour faire une combinaison linéaire de cham_no ayant meme profil",
+             COMB            =FACT(statut='o',max='**',
+                CHAM_GD         =SIMP(statut='o',typ=cham_no_sdaster),
+                COEF_R          =SIMP(statut='o',typ='R'),
+                                   ),
+                             ),
+#        ------------------------------------------------------------------
+         b_eval          =BLOC(condition = "OPERATION == 'EVAL'",
+             CHAM_F          =SIMP(statut='o',typ=cham_gd_sdaster),
+             CHAM_PARA       =SIMP(statut='o',typ=cham_gd_sdaster,max='**'),
+                             ),
+#        ------------------------------------------------------------------
+         b_r2c           =BLOC(condition = "OPERATION == 'R2C'",
+             CHAM_GD          =SIMP(statut='o',typ=cham_gd_sdaster),
+                             ),
+#        ------------------------------------------------------------------
+         b_c2r           =BLOC(condition = "OPERATION == 'C2R'",
+             CHAM_GD          =SIMP(statut='o',typ=cham_gd_sdaster),
+             PARTIE           =SIMP(statut='o',typ='TXM',into=('REEL','IMAG','MODULE','PHASE'),),
+                             ),
+#        ------------------------------------------------------------------
+         b_disc          =BLOC(condition = "OPERATION == 'DISC'",
+             MODELE          =SIMP(statut='f',typ=(modele_sdaster) ),
+             PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+             CHAM_GD         =SIMP(statut='o',typ=cham_gd_sdaster),
+                             ),
+#        ------------------------------------------------------------------
+         b_extr          =BLOC(condition = "OPERATION == 'EXTR'",
+             regles=(AU_MOINS_UN('MAILLAGE','FISSURE','RESULTAT','TABLE'),),
+             MAILLAGE        =SIMP(statut='f',typ=(maillage_sdaster) ),
+             FISSURE         =SIMP(statut='f',typ=(fiss_xfem) ),
+             RESULTAT        =SIMP(statut='f',typ=(resultat_sdaster) ),
+             TABLE           =SIMP(statut='f',typ=(table_sdaster),min=1,max=1),
+             b_extr_maillage =BLOC(condition = "MAILLAGE != None and TABLE == None",
+                 NOM_CHAM        =SIMP(statut='o',typ='TXM',into=("GEOMETRIE",)),
+             ),
+             b_extr_fissure  =BLOC(condition = "FISSURE != None",
+                 NOM_CHAM        =SIMP(statut='o',typ='TXM',into=("LTNO","LNNO","GRLTNO","GRLNNO","STNO","STNOR","BASLOC")),
+             ),
+             b_extr_table    =BLOC(condition = "TABLE != None",
+                      regles=( EXCLUS('MODELE','MAILLAGE'),
+                               EXCLUS('PROL_ZERO','MAILLAGE'),),
+                      MAILLAGE        =SIMP(statut='f',typ=(maillage_sdaster),),
+                      MODELE          =SIMP(statut='f',typ=(modele_sdaster),),
+                      OPTION          =SIMP(statut='f',typ='TXM'),
+                      PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                 ),
+             b_extr_resultat =BLOC(condition = "RESULTAT != None",
+                 regles=(DERIVABLE('RESULTAT'),),
+                 SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),
+                                   fr="Paramètre de sensibilité.",
+                                   ang="Sensitivity parameter"),
+                 NOM_CHAM        =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO()),
+                 TYPE_MAXI       =SIMP(statut='f',typ='TXM',into=("MAXI","MINI","MAXI_ABS","MINI_ABS","NORM_TRAN",) ),
+
+                 # si TYPE_MAXI, on spécifie en général plusieurs numéros d'ordre :
+                 b_type_maxi =BLOC(condition = "TYPE_MAXI != None",
+                      TYPE_RESU       =SIMP(statut='o',typ='TXM',defaut="VALE",into=("VALE","INST",) ),
+
+                      regles=(EXCLUS('TOUT_ORDRE','LIST_INST','LIST_FREQ','NUME_ORDRE','INST',
+                                      'FREQ','NUME_MODE','NOEUD_CMP','NOM_CAS','ANGL'),),
+                      TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                      LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
+                      LIST_FREQ       =SIMP(statut='f',typ=(listr8_sdaster) ),
+                      NUME_ORDRE      =SIMP(statut='f',typ='I',max='**'),
+                      INST            =SIMP(statut='f',typ='R',max='**'),
+                      FREQ            =SIMP(statut='f',typ='R',max='**'),
+                      NUME_MODE       =SIMP(statut='f',typ='I',max='**'),
+                      NOEUD_CMP       =SIMP(statut='f',typ='TXM',max='**'),
+                      NOM_CAS         =SIMP(statut='f',typ='TXM',max='**'),
+                      ANGL            =SIMP(statut='f',typ='R',max='**'),
+                 ),
+
+                 # si .not. TYPE_MAXI, on ne doit spécifier qu'un seul numéro d'ordre :
+                 b_non_type_maxi =BLOC(condition = "TYPE_MAXI == None",
+                      regles=(EXCLUS('NUME_ORDRE','INST','FREQ','NUME_MODE','NOEUD_CMP','NOM_CAS','ANGL'),),
+                      NUME_ORDRE      =SIMP(statut='f',typ='I'),
+                      INST            =SIMP(statut='f',typ='R'),
+                      FREQ            =SIMP(statut='f',typ='R'),
+                      NUME_MODE       =SIMP(statut='f',typ='I'),
+                      NOEUD_CMP       =SIMP(statut='f',typ='TXM',max=2),
+                      NOM_CAS         =SIMP(statut='f',typ='TXM'),
+                      ANGL            =SIMP(statut='f',typ='R'),
+
+                      INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN",) ),
+                 ),
+
+                 CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+                 b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                     PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                 b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                     PRECISION       =SIMP(statut='o',typ='R',),),
+
+         ),  # fin bloc b_extr
+
+
+               ),
+# FIN DU CATALOGUE : INFO,TITRE ET TYPAGE DU RESULTAT :
+#-----------------------------------------------------
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+)  ;
+#& MODIF COMMANDE  DATE 30/06/2008   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+CREA_MAILLAGE=OPER(nom="CREA_MAILLAGE",op= 167,sd_prod=maillage_sdaster,
+            reentrant='n',fr="Crée un maillage à partir d'un maillage existant",
+            UIinfo={"groupes":("Maillage",)},
+         regles=(EXCLUS('COQU_VOLU', 'CREA_FISS', 'CREA_GROUP_MA', 'CREA_MAILLE', 'CREA_POI1',
+                        'DETR_GROUP_MA', 'ECLA_PG', 'HEXA20_27', 'LINE_QUAD', 'MODI_MAILLE',
+                        'QUAD_LINE', 'REPERE','RESTREINT'),),
+
+
+
+         # le MAILLAGE est inutile si ECLA_PG
+         MAILLAGE        =SIMP(statut='f',typ=maillage_sdaster ),
+
+         CREA_POI1       =FACT(statut='f',max='**',fr="Création de mailles de type POI1 à partir de noeuds",
+           regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD' ),),
+           NOM_GROUP_MA    =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+         ),
+         CREA_MAILLE     =FACT(statut='f',max='**',fr="Duplication de mailles",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           PREF_MAILLE     =SIMP(statut='o',typ='TXM' ),
+           PREF_NUME       =SIMP(statut='f',typ='I' ),
+         ),
+         CREA_GROUP_MA   =FACT(statut='f',max='**',fr="Duplication de mailles et création de groupes de mailles",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+           NOM             =SIMP(statut='o',typ='TXM'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           PREF_MAILLE     =SIMP(statut='o',typ='TXM' ),
+           PREF_NUME       =SIMP(statut='f',typ='I' ),
+         ),
+         DETR_GROUP_MA   =FACT(statut='f',fr="Destruction de groupes de mailles",
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           NB_MAILLE       =SIMP(statut='f',typ='I',defaut= 0,
+                                 fr="Nombre minimal de mailles que doit contenir le groupe pour etre détruit",  ),
+         ),
+         RESTREINT   =FACT(statut='f',fr="Restreindre un maillage à des groupes de mailles",max=1,
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+           TOUT_GROUP_MA   =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           TOUT_GROUP_NO   =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
+         ),
+         COQU_VOLU   =FACT(statut='f',
+                           fr="Creation de mailles volumiques à partir de mailles surfaciques",
+           NOM             =SIMP(statut='o',typ='TXM'),
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max ='**'),
+           EPAIS           =SIMP(statut='o',typ='R' ),
+           PREF_MAILLE     =SIMP(statut='f',typ='TXM',defaut="MS" ),
+           PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS" ),
+           PREF_NUME       =SIMP(statut='f',typ='I'  ,defaut=1 ),
+           PLAN            =SIMP(statut='o',typ='TXM',into=("SUP","MOY","INF")),
+           b_MOY =BLOC(condition = "PLAN == 'MOY'",
+             TRANSLATION   =SIMP(statut='o',typ='TXM',into=("SUP","INF") ),
+           ),
+         ),
+         MODI_MAILLE     =FACT(statut='f',max='**',fr="Modification du type de mailles",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma  ,validators=NoRepeat(),max='**'),
+           OPTION          =SIMP(statut='o',typ='TXM',into=("TRIA6_7","QUAD8_9","SEG3_4","QUAD_TRIA3"),
+                                 fr="Choix de la transformation" ),
+           b_NOS =BLOC(condition = "OPTION == 'TRIA6_7'  or  OPTION == 'QUAD8_9'  or  OPTION == 'SEG3_4'",
+             PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
+             PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
+           ),
+           b_QTR =BLOC(condition = "OPTION == 'QUAD_TRIA3'",
+             PREF_MAILLE     =SIMP(statut='f',typ='TXM',defaut="MS" ),
+             PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
+           ),
+         ),
+         CREA_FISS = FACT(statut='f',max='**',fr="Creation d'une fissure potentielle avec elts de joint ou elts à disc",
+           NOM             =SIMP(statut='o',typ='TXM'),
+           GROUP_NO_1      =SIMP(statut='o',typ=grno),
+           GROUP_NO_2      =SIMP(statut='o',typ=grno),
+           PREF_MAILLE     =SIMP(statut='o',typ='TXM'),
+           PREF_NUME       =SIMP(statut='f',typ='I',defaut=1 ),
+         ),
+         LINE_QUAD     =FACT(statut='f',fr="Passage linéaire -> quadratique",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma  ,validators=NoRepeat(),max='**'),
+           PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
+           PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
+         ),
+         HEXA20_27     =FACT(statut='f',fr="Passage HEXA20 -> HEXA27",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma  ,validators=NoRepeat(),max='**'),
+           PREF_NOEUD      =SIMP(statut='f',typ='TXM',defaut="NS"),
+           PREF_NUME       =SIMP(statut='f',typ='I',defaut= 1 ),
+         ),
+         QUAD_LINE     =FACT(statut='f',fr="Passage quadratique -> linéaire",
+           regles=(AU_MOINS_UN('TOUT','MAILLE','GROUP_MA' ),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma  ,validators=NoRepeat(),max='**'),
+         ),
+         REPERE          =FACT(statut='f',max='**',
+                               fr="changement de repère servant à déterminer les caractéristiques d'une section de poutre",
+           TABLE           =SIMP(statut='o',typ=table_sdaster,
+                                 fr="Nom de la table contenant les caractéristiques de la section de poutre" ),
+           NOM_ORIG        =SIMP(statut='f',typ='TXM',into=("CDG","TORSION"),fr="Origine du nouveau repère" ),
+           NOM_ROTA        =SIMP(statut='f',typ='TXM',into=("INERTIE",),fr="Direction du repére"  ),
+           b_cdg =BLOC(condition = "NOM_ORIG == 'CDG'",
+             GROUP_MA        =SIMP(statut='f',typ=grma,
+                                   fr="Nom du groupe de mailles dont le centre de gravité sera l origine du nouveau repère"),
+           ),
+         ),
+         ECLA_PG         =FACT(statut='f',
+                               fr="Eclatement des mailles en petites mailles contenant chacune un seul point de gauss",
+           MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           SHRINK          =SIMP(statut='f',typ='R',defaut= 0.9, fr="Facteur de réduction" ),
+           TAILLE_MIN      =SIMP(statut='f',typ='R',defaut= 0.0, fr="Taille minimale d'un coté" ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+#
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 25/05/2010   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+def crea_resu_prod(TYPE_RESU,**args):
+  if TYPE_RESU == "EVOL_ELAS"    : return evol_elas
+  if TYPE_RESU == "EVOL_NOLI"    : return evol_noli
+  if TYPE_RESU == "EVOL_THER"    : return evol_ther
+  if TYPE_RESU == "MULT_ELAS"    : return mult_elas
+  if TYPE_RESU == "MODE_MECA"    : return mode_meca
+  if TYPE_RESU == "DYNA_TRANS"   : return dyna_trans
+  if TYPE_RESU == "DYNA_HARMO"   : return dyna_harmo
+  if TYPE_RESU == "FOURIER_ELAS" : return fourier_elas
+  if TYPE_RESU == "FOURIER_THER" : return fourier_ther
+  if TYPE_RESU == "EVOL_VARC"    : return evol_varc
+  if TYPE_RESU == "EVOL_CHAR"    : return evol_char
+  raise AsException("type de concept resultat non prevu")
+
+CREA_RESU=OPER(nom="CREA_RESU",op=124,sd_prod=crea_resu_prod,reentrant='f',
+            UIinfo={"groupes":("Modélisation",)},
+               fr="Créer ou enrichir une structure de donnees resultat à partir de champs aux noeuds",
+
+         OPERATION =SIMP(statut='o',typ='TXM',into=("AFFE","ASSE","ECLA_PG","PERM_CHAM","PROL_RTZ","PREP_VRC1","PREP_VRC2",),
+                         fr="choix de la fonction a activer",),
+
+
+         # Création par affectation de champs :
+         #-------------------------------------
+         b_affe       =BLOC(condition = "OPERATION == 'AFFE'",
+
+           TYPE_RESU    =SIMP(statut='o',position='global',typ='TXM',into=("MODE_MECA","MULT_ELAS","EVOL_ELAS","EVOL_NOLI",
+                              "DYNA_HARMO","DYNA_TRANS","FOURIER_ELAS","EVOL_THER","EVOL_VARC","EVOL_CHAR","FOURIER_THER") ),
+           b_type_resu    =BLOC(condition = "TYPE_RESU == 'EVOL_CHAR'",
+             NOM_CHAM     =SIMP(statut='o',typ='TXM',into=("PRES","FSUR_2D","FSUR_3D","FVOL_2D","FVOL_3D","VITE_VENT")),
+           ),
+
+           b_evol_char    =BLOC(condition = "TYPE_RESU != 'EVOL_CHAR'",
+             NOM_CHAM     =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO()),
+           ),
+
+           b_mode       =BLOC(condition = "TYPE_RESU == 'MODE_MECA'",
+             MATR_A         =SIMP(statut='f',typ=matr_asse_depl_r,),
+             MATR_B         =SIMP(statut='f',typ=matr_asse_depl_r,),
+           ),
+
+           AFFE         =FACT(statut='o',max='**',
+             CHAM_GD       =SIMP(statut='o',typ=(cham_gd_sdaster)),
+             MODELE        =SIMP(statut='f',typ=modele_sdaster),
+             CHAM_MATER    =SIMP(statut='f',typ=cham_mater),
+             CARA_ELEM     =SIMP(statut='f',typ=cara_elem),
+
+             b_mult_elas     =BLOC(condition = "TYPE_RESU == 'MULT_ELAS' ",
+                NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+                CHARGE          =SIMP(statut='f',typ=(char_meca),max='**'),
+             ),
+             b_evol          =BLOC(condition = "((TYPE_RESU=='EVOL_ELAS') or (TYPE_RESU=='EVOL_NOLI') or (TYPE_RESU=='EVOL_THER')\
+                                         or (TYPE_RESU=='EVOL_VARC') or (TYPE_RESU=='EVOL_CHAR') or (TYPE_RESU=='DYNA_TRANS'))",
+                regles=(UN_PARMI('INST','LIST_INST'),),
+                INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+                NUME_INIT       =SIMP(statut='f',typ='I', val_min=1),
+                NUME_FIN        =SIMP(statut='f',typ='I', val_min=1),
+                PRECISION       =SIMP(statut='f',typ='R',defaut= 0.0 ),
+                CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             ),
+             b_fourier_elas  =BLOC(condition = "(TYPE_RESU == 'FOURIER_ELAS') ",
+                NUME_MODE       =SIMP(statut='f',typ='I'),
+                TYPE_MODE       =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
+                CHARGE          =SIMP(statut='f',typ=(char_meca),max='**'),
+             ),
+             b_fourier_ther  =BLOC(condition = "(TYPE_RESU == 'FOURIER_THER') ",
+                NUME_MODE       =SIMP(statut='f',typ='I'),
+                TYPE_MODE       =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
+             ),
+             b_mode       =BLOC(condition = "TYPE_RESU == 'MODE_MECA'",
+                NUME_MODE       =SIMP(statut='f',typ='I'),
+                FREQ            =SIMP(statut='f',typ='R'),
+             ),
+             b_dyna_harmo       =BLOC(condition = "TYPE_RESU == 'DYNA_HARMO'",
+                regles=(UN_PARMI('FREQ','LIST_FREQ',),),
+                FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+                CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+                PRECISION       =SIMP(statut='f',typ='R',defaut=0.0),
+             ),
+           ),
+         ),
+
+
+         # Création par assemblage d'evol_ther :
+         #-----------------------------------------
+         b_asse       =BLOC(condition = "OPERATION == 'ASSE'",
+           TYPE_RESU    =SIMP(statut='o',position='global',typ='TXM',into=("EVOL_THER",) ),
+           ASSE         =FACT(statut='o',max='**',
+             RESULTAT       =SIMP(statut='o',typ=evol_ther),
+             TRANSLATION    =SIMP(statut='f',typ='R',defaut= 0. ),
+           ),
+         ),
+
+
+         b_ecla_pg    =BLOC(condition = "OPERATION == 'ECLA_PG'",
+
+           TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_ELAS","EVOL_NOLI","EVOL_THER"), ),
+
+           ECLA_PG         =FACT(statut='o',
+             regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+             MODELE_INIT     =SIMP(statut='o',typ=modele_sdaster),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             RESU_INIT       =SIMP(statut='o',typ=resultat_sdaster),
+             MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster),
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+             LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+           ),
+         ),
+
+
+         b_perm_cham =BLOC(condition = "OPERATION == 'PERM_CHAM'",
+
+           TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_NOLI",) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("DEPL","SIEF_ELGA","VARI_ELGA",),validators=NoRepeat(),max='**' ),
+           RESU_INIT       =SIMP(statut='o',typ=evol_noli),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+               PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+               PRECISION       =SIMP(statut='o',typ='R',),),
+           MAILLAGE_INIT   =SIMP(statut='o',typ=maillage_sdaster,),
+           RESU_FINAL      =SIMP(statut='o',typ=evol_noli,),
+           MAILLAGE_FINAL  =SIMP(statut='o',typ=maillage_sdaster,),
+           PERM_CHAM       =FACT(statut='o',max='**',
+              GROUP_MA_FINAL =SIMP(statut='o',typ=grma),
+              GROUP_MA_INIT  =SIMP(statut='o',typ=grma),
+              TRAN           =SIMP(statut='o',typ='R',min=3,max=3),
+              PRECISION      =SIMP(statut='f',typ='R',defaut=1.0E-3),
+           ),
+         ),
+
+         b_prol_rtz   =BLOC(condition = "OPERATION == 'PROL_RTZ'",
+
+           TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_THER",) ),
+
+           PROL_RTZ        =FACT(statut='o',
+              regles=(EXCLUS('INST','LIST_INST'),),
+              MAILLAGE_FINAL  =SIMP(statut='o',typ=maillage_sdaster,),
+              TABLE           =SIMP(statut='o',typ=table_sdaster,fr="Table issue de post_releve_t"),
+              INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+              LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+              b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
+                 CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                 b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                     PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                 b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                     PRECISION       =SIMP(statut='o',typ='R',),),
+              ),
+              PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU",),),
+              PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU",),),
+              REPERE          =SIMP(statut='o',typ='TXM',into=("CYLINDRIQUE",),),
+              ORIGINE         =SIMP(statut='o',typ='R',min=3,max=3),
+              AXE_Z           =SIMP(statut='o',typ='R',min=3,max=3),
+           ),
+         ),
+
+         b_prep_vrc1      =BLOC(condition = "OPERATION == 'PREP_VRC1'",
+           # calculer la température dans les couches des coques multicouche à partir d'un champ de fonctions
+           # de fonctions du temps et de l'espace (épaisseur)
+
+           TYPE_RESU    =SIMP(statut='o',position='global',typ='TXM',into=( "EVOL_THER",) ),
+
+           PREP_VRC1        =FACT(statut='o',max=1,
+             CHAM_GD       =SIMP(statut='o',typ=(cham_gd_sdaster)), # carte de fonctions du temps et de l'épaisseur
+             MODELE        =SIMP(statut='o',typ=modele_sdaster),    # modèle mécanique contenant les coques multicouche
+             CARA_ELEM     =SIMP(statut='o',typ=cara_elem),         # CARA_ELEM pour connaitre EPAIS et COQU_NCOU
+             INST          =SIMP(statut='o',typ='R',validators=NoRepeat(),max='**'),
+           ),
+         ),
+
+         b_prep_vrc2      =BLOC(condition = "OPERATION == 'PREP_VRC2'",
+           # calculer la température dans les couches des coques multicouche à partir d'un evol_ther "coque"
+           # contenant TEMP/TEMP_INF/TEMP_SUP
+
+           TYPE_RESU    =SIMP(statut='o',position='global',typ='TXM',into=( "EVOL_THER",) ),
+
+           PREP_VRC2        =FACT(statut='o',max=1,
+             EVOL_THER     =SIMP(statut='o',typ=(evol_ther)),       # evol_ther de type "coque" (TEMP/TEMP_INF/TEMP_SUP)
+             MODELE        =SIMP(statut='o',typ=modele_sdaster),    # modèle mécanique contenant les coques multicouche
+             CARA_ELEM     =SIMP(statut='o',typ=cara_elem),         # CARA_ELEM pour connaitre EPAIS et COQU_NCOU
+           ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 28/07/2009   AUTEUR TORKHANI M.TORKHANI 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+def crea_table_prod(TYPE_TABLE, **args):
+   """Typage du concept résultat
+   """
+   if TYPE_TABLE == 'TABLE_FONCTION':
+      return table_fonction
+   elif TYPE_TABLE == 'TABLE_CONTENEUR':
+      return table_container
+   else:
+      return table_sdaster
+
+CREA_TABLE=OPER(nom="CREA_TABLE",op=36,sd_prod=crea_table_prod,
+                fr="Création d'une table à partir d'une fonction ou de deux listes",
+                reentrant='f',UIinfo={"groupes":("Table",)},
+
+           regles=(EXCLUS('FONCTION','LISTE'),),
+
+           LISTE=FACT(statut='f',max='**',
+                 fr="Creation d'une table a partir de listes",
+                 regles=(UN_PARMI('LISTE_I','LISTE_R','LISTE_K')), 
+                        PARA     =SIMP(statut='o',typ='TXM'),
+                        TYPE_K   =SIMP(statut='f',typ='TXM',defaut='K8',
+                                    into=('K8','K16','K24')),
+                        NUME_LIGN=SIMP(statut='f',typ='I',max='**'),
+                        LISTE_I  =SIMP(statut='f',typ='I',max='**'),
+                        LISTE_R  =SIMP(statut='f',typ='R',max='**'),
+                        LISTE_K  =SIMP(statut='f',typ='TXM', max='**'),
+           ),
+           FONCTION=FACT(statut='f',
+                    fr="Creation d'une table a partir d'une fonction",
+                        FONCTION=SIMP(statut='o',typ=(fonction_c,fonction_sdaster)),
+                        PARA=SIMP(statut='f',typ='TXM',min=2,max=2),
+           ),
+           b_fonction = BLOC(condition='FONCTION != None',
+               regles=(CONCEPT_SENSIBLE('SEPARE'), REUSE_SENSIBLE(),
+                       DERIVABLE('FONCTION'),),
+               SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                                    fr="Liste des paramètres de sensibilité.",
+                                    ang="List of sensitivity parameters"),
+           ),
+           TYPE_TABLE = SIMP(statut='f', typ='TXM', defaut="TABLE",
+                             into=('TABLE', 'TABLE_FONCTION', 'TABLE_CONTENEUR'),),
+           
+           TITRE=SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+
+
+
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+
+DEBUG=PROC(nom="DEBUG",op=137,
+            UIinfo={"groupes":("Utilitaires",)},
+               fr="Permettre de changer entre 2 commandes quelques variables globales de debug",
+
+     SDVERI          =SIMP(fr="vérifie la conformité des SD produites par les commandes",
+                           statut='f',typ='TXM',into=('OUI','NON')),
+     JXVERI          =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+                           statut='f',typ='TXM',into=('OUI','NON')),
+     JEVEUX          =SIMP(fr="force les déchargement sur disque",
+                           statut='f',typ='TXM',into=('OUI','NON')),
+     IMPR_MACRO      =SIMP(fr="affichage des sous-commandes produites par les macros dans le fichier mess",
+                           statut='f',typ='TXM',into=("OUI","NON")),
+ );
+#& MODIF COMMANDE  DATE 07/09/2009   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+DEBUT=MACRO(nom="DEBUT",op=ops.build_debut ,repetable='n',
+            UIinfo={"groupes":("Gestion du travail",)},
+           fr="Ouverture d'une étude. Allocation des ressources mémoire et disque et fichiers",
+          sd_prod=ops.DEBUT,
+
+         PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
+                           into=("OUI","NON"),defaut="OUI"),
+         IMPR_MACRO      =SIMP(fr="affichage des sous-commandes produites par les macros dans le fichier mess",
+                           statut='f',typ='TXM',into=("OUI","NON"),defaut="NON"),
+#         FORMAT_HDF      =SIMP(fr="sauvegarde de la base GLOBALE au format HDF",statut='f',
+#                               typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         BASE            =FACT(fr="définition des paramètres associés aux bases JEVEUX",
+                               statut='f',min=1,max=2,
+           FICHIER         =SIMP(fr="nom de la base",statut='o',typ='TXM',
+                                 into=('GLOBALE','VOLATILE'),),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           CAS             =SIMP(statut='f',typ='TXM'),
+           NMAX_ENRE       =SIMP(fr="nombre maximum d enregistrements",statut='f',typ='I'),
+           LONG_ENRE       =SIMP(fr="longueur des enregistrements",statut='f',typ='I'),
+           LONG_REPE       =SIMP(fr="longueur du répertoire",statut='f',typ='I'),
+         ),
+
+         IMPRESSION      =FACT(statut='f',min=1,max=3,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='o',typ='I'),
+         ),
+
+         CATALOGUE       =FACT(statut='f',min=1,max=10,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I'),
+         ),
+
+         CODE            =FACT(fr="définition d'un nom pour l'ensemble d'une étude",
+                               statut='f',min=1,max=1,
+           NOM             =SIMP(statut='o',typ='TXM'),
+           NIV_PUB_WEB     =SIMP(statut='o',typ='TXM',into=('INTERNET','INTRANET')),
+           VISU_EFICAS     =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI'),
+         ),
+
+         ERREUR          =FACT(fr="comportement en cas d'erreur",statut='f',min=1,max=1,
+           ERREUR_F        =SIMP(statut='f',typ='TXM',into=('ABORT','EXCEPTION'),),
+         ),
+
+         DEBUG           =FACT(fr="option de déboggage reservée aux développeurs",
+                               statut='f',min=1,max=1,
+           JXVERI          =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           SDVERI          =SIMP(fr="vérifie la conformité des SD produites par les commandes",
+                                 statut='f',typ='TXM',into=('OUI','NON')),
+           JEVEUX          =SIMP(fr="force les déchargement sur disque",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           ENVIMA          =SIMP(fr="imprime les valeurs définies dans ENVIMA",
+                                 statut='f',typ='TXM',into=('TEST',)),
+         ),
+
+         MESURE_TEMPS     =FACT(fr="Pour choisir les mesures de temps consommé dans les commandes",
+                               statut='d',min=1,max=1,
+           NIVE_DETAIL      =SIMP(fr="niveau de détail des impressions",
+                                 statut='f',typ='I',into=(0,1,2,3),defaut=1),
+                                 # 0 : rien
+                                 # 1 : impression en fin de commande des mesures principales
+                                 # 2 : impression en fin de commande des mesures principales et secondaires
+                                 # 3 : impression des mesures principales et secondaires pour chaque pas de temps
+         ),
+
+         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='d',min=1,max=1,
+           GESTION         =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),
+           TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),
+           TAILLE          =SIMP(statut='f',typ='I'),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut=800.),
+           PARTITION       =SIMP(statut='f',typ='R'),
+           DYNAMIQUE       =SIMP(statut='f',typ='I',defaut=1),
+         ),
+
+         RESERVE_CPU     =FACT(fr="reserve de temps pour terminer une execution",statut='d',max=1,
+           regles=(EXCLUS('VALE','POURCENTAGE'),),
+#          par défaut VALE fixée à 10. dans le FORTRAN si CODE présent
+           VALE            =SIMP(statut='f',typ='I',val_min=0,),
+#          par défaut 10% dans le FORTRAN
+           POURCENTAGE     =SIMP(statut='f',typ='R',val_min=0.,val_max=1.0),
+#          valeur en secondes de la réserve maximum bornée à 900 secondes
+           BORNE           =SIMP(statut='f',typ='I',val_min=0,defaut=900),),
+
+         IGNORE_ALARM = SIMP(statut='f', typ='TXM', max='**', fr="Alarmes que l'utilisateur souhaite délibérément ignorer"),
+
+);
+#& MODIF COMMANDE  DATE 01/03/2010   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+DEFI_BASE_MODALE=OPER(nom="DEFI_BASE_MODALE",op=  99,sd_prod=mode_meca,
+                     reentrant='f',
+                     fr="Définit la base d'une sous-structuration dynamique ou d'une recombinaison modale",
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         regles=(UN_PARMI('CLASSIQUE','RITZ','DIAG_MASS','ORTHO_BASE'),),
+         CLASSIQUE       =FACT(statut='f',
+           INTERF_DYNA     =SIMP(statut='o',typ=interf_dyna_clas ),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca,max='**' ),
+           NMAX_MODE       =SIMP(statut='f',typ='I',defaut= 10 ),
+         ),
+         RITZ            =FACT(statut='f',max='**',
+           regles=(UN_PARMI('MODE_MECA','BASE_MODALE','MODE_INTF'),),
+           MODE_MECA       =SIMP(statut='f',typ=mode_meca,max='**'  ),
+           NMAX_MODE       =SIMP(statut='f',typ='I',max='**'),
+           BASE_MODALE     =SIMP(statut='f',typ=mode_meca ),
+           MODE_INTF       =SIMP(statut='f',typ=(mode_meca,mult_elas), ),
+         ),
+         b_ritz          =BLOC(condition = "RITZ != None",
+           INTERF_DYNA     =SIMP(statut='f',typ=interf_dyna_clas ),
+           NUME_REF        =SIMP(statut='f',typ=nume_ddl_sdaster ),
+           ORTHO           =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                               fr="Reorthonormalisation de la base de Ritz" ),
+           LIST_AMOR       =SIMP(statut='f',typ=listr8_sdaster ),
+           b_ortho          =BLOC(condition = "ORTHO == 'OUI' ",
+             MATRICE          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_gene_r,matr_asse_pres_r ) ),
+               ),
+         ),
+        DIAG_MASS        =FACT(statut='f',max='**',
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca,max='**'  ),
+           MODE_STAT       =SIMP(statut='o',typ=mode_meca ),
+         ),
+        ORTHO_BASE        =FACT(statut='f',max='**',
+           BASE       =SIMP(statut='o',typ=(mode_meca,mult_elas)),
+           MATRICE    =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_gene_r,matr_asse_pres_r ) ),
+         ),
+
+         SOLVEUR         =FACT(statut='d', fr="Méthode de résolution des systèmes linéaires",
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("LDLT","MULT_FRONT","MUMPS") ),
+
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           ),
+           b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),             
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             FILTRAGE_MATRICE =SIMP(statut='f',typ='R',defaut=-1.0,),
+             MIXER_PRECISION =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             ),
+         ),
+
+
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE MICHEL S.MICHEL
+
+from Macro.defi_cable_bp_ops import defi_cable_bp_ops
+
+# ===========================================================================
+#           CATALOGUE DE LA MACRO "DEFI_CABLE_BP"
+#           -----------------------------------------
+#
+# USAGE :
+# Entrée :
+#  - MODELE
+#  - CABLE
+#  - CHAM_MATER
+#  - CARA_ELEM
+#  - GROUP_MA_BETON
+#  - DEFI_CABLE
+#  - TENSION_INIT
+#  - RECUL_ANCRAGE
+#  - RELAXATION
+#  - CONE
+#      RAYON
+#      LONGUEUR
+#      PRESENT          OUI ou NON deux fois
+#  - TITRE
+#  - INFO               1 / 2
+#
+# ===========================================================================
+
+DEFI_CABLE_BP=MACRO(nom="DEFI_CABLE_BP",op=defi_cable_bp_ops,sd_prod=cabl_precont,
+                   fr="Calculer les profils initiaux de tension le long des cables de précontrainte d'une structure en béton",
+                   reentrant='n',UIinfo={"groupe":("Modélisation",)},
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+         GROUP_MA_BETON  =SIMP(statut='o',typ=grma,max='**'),
+         DEFI_CABLE      =FACT(statut='o',max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('NOEUD_ANCRAGE','GROUP_NO_ANCRAGE'),),
+           MAILLE          =SIMP(statut='f',typ=ma,min=2,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           NOEUD_ANCRAGE   =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=2),
+           GROUP_NO_ANCRAGE=SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
+         ),
+         TYPE_ANCRAGE    =SIMP(statut='o',typ='TXM',min=2,max=2,into=("ACTIF","PASSIF") ),
+         TENSION_INIT    =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+         RECUL_ANCRAGE   =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+         RELAXATION      =FACT(statut='f',min=0,
+           R_J             =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+         ),
+         CONE            =FACT(statut='f',
+           RAYON             =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+           LONGUEUR          =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+           PRESENT           =SIMP(statut='o',typ='TXM',min=2,max=2,into=("OUI","NON") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE MICHEL S.MICHEL
+
+DEFI_CABLE_OP=OPER(nom="DEFI_CABLE_OP",op= 180,sd_prod=cabl_precont,reentrant='n',
+            fr="Définit les profils initiaux de tension d'une structure en béton le long des cables de précontrainte"
+               +" (utilisée par la macro DEFI_CABLE_BP)",
+            UIinfo={"groupes":("Modélisation",)},
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+         GROUP_MA_BETON  =SIMP(statut='o',typ=grma,max='**'),
+         DEFI_CABLE      =FACT(statut='o',max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),
+                   UN_PARMI('NOEUD_ANCRAGE','GROUP_NO_ANCRAGE'),),
+           MAILLE          =SIMP(statut='f',typ=ma,min=2,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           NOEUD_ANCRAGE   =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=2),
+           GROUP_NO_ANCRAGE=SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
+           GROUP_NO_FUT    =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
+         ),
+         TYPE_ANCRAGE    =SIMP(statut='o',typ='TXM',min=2,max=2,into=("ACTIF","PASSIF") ),
+         TENSION_INIT    =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+         RECUL_ANCRAGE   =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+         RELAXATION      =FACT(statut='f',min=0,
+           R_J             =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         CONE            =FACT(statut='f',min=0,
+           RAYON             =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+           LONGUEUR          =SIMP(statut='o',typ='R',val_min=0.E+0, defaut=0.E+0 ),  
+           PRESENT           =SIMP(statut='o',typ='TXM',min=2,max=2,into=("OUI","NON") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 08/12/2009   AUTEUR PROIX J-M.PROIX 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PROIX J.M.PROIX
+DEFI_COMPOR=OPER(nom="DEFI_COMPOR",op=59,sd_prod=compor_sdaster,
+                   fr="Définir le comportement d'un monocristal, d'un polycristal ou de groupes de fibres",
+                   reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+# on exclut MULTIFBRE de MONOCRISTAL ou POLYCRISTAL car la structure de données n'est pas organisée pareil pour ces cas
+                  regles=(UN_PARMI('MONOCRISTAL','POLYCRISTAL','MULTIFIBRE'),
+                 PRESENT_PRESENT('MULTIFIBRE','GEOM_FIBRE','MATER_SECT'),
+                         ),
+          MONOCRISTAL    =FACT(statut='f', max='**',
+             MATER           =SIMP(statut='o', typ=mater_sdaster, max=1),
+             ECOULEMENT      =SIMP(statut='o', typ='TXM', max=1,
+                   fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le type d'écoulement viscoplastique"),
+             ECRO_ISOT       =SIMP(statut='o', typ='TXM', max=1,
+                   fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le type d'écrouissage isotrope"),
+             ECRO_CINE       =SIMP(statut='o', typ='TXM', max=1,
+                   fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le type d'écrouissage cinématique"),
+             ELAS            =SIMP(statut='f', typ='TXM', max=1,
+                   fr="Donner le nom du mot-clé facteur de DEFI_MATERIAU précisant le comportement élastique (un et un seul)"),
+             FAMI_SYST_GLIS  =SIMP(statut='o',typ='TXM', max=1,
+                                into=('BASAL', 'PRISMATIQUE', 'OCTAEDRIQUE', 'PYRAMIDAL1',
+                                'PYRAMIDAL2', 'CUBIQUE1', 'CUBIQUE2', 'MACLAGE', 'JOINT_GRAIN', 'RL', 'UNIAXIAL','BCC24'),),
+                                ),
+
+          ROTA_RESEAU =SIMP(statut='f', typ='TXM', max=1,into=('NON','POST','CALC'),defaut='NON',
+                   fr="rotation de reseau : NON, POST, CALC"),
+
+          POLYCRISTAL    =FACT(statut='f', max='**',
+           regles=(UN_PARMI('ANGL_REP','ANGL_EULER'),),
+             MONOCRISTAL     =SIMP(statut='o', typ=compor_sdaster, max=1),
+             FRAC_VOL  =SIMP(statut='o', typ='R', max=1,fr="fraction volumique de la phase correspondant au monocristal"),
+             ANGL_REP  =SIMP(statut='f',typ='R',max=3,fr="orientation du monocristal : 3 angles nautiques en degrés"),
+             ANGL_EULER=SIMP(statut='f',typ='R',max=3,fr="orientation du monocristal : 3 angles d'Euler   en degrés"),
+                                ),
+
+
+          b_poly      =BLOC( condition = "POLYCRISTAL!='None'",
+          LOCALISATION     =SIMP(statut='f', typ='TXM', max=1, into=('BZ', 'BETA', 'RL',),
+                fr="Donner le nom de la règle de localisation"),
+
+           b_beta      =BLOC( condition = "LOCALISATION=='BETA'",
+             DL            =SIMP(statut='o',typ='R',max=1),
+             DA            =SIMP(statut='o',typ='R',max=1),
+             ),
+             ),
+
+#####################################################################################
+          GEOM_FIBRE = SIMP(statut='f',max=1,typ=gfibre_sdaster,
+                   fr="Donner le nom du concept regroupant tous les groupes de fibres (issu de DEFI_GEOM_FIBRE)"),
+          MATER_SECT = SIMP(statut='f',max=1,typ=mater_sdaster,
+                   fr="Donner le nom du materiau pour les caracteristiques homogeneisees sur la section"),
+          MULTIFIBRE    = FACT(statut='f',max='**',
+          GROUP_FIBRE        =SIMP(statut='o', typ='TXM', max='**'),
+             MATER           =SIMP(statut='o', typ=mater_sdaster, max=1,
+                                   fr="Donner le nom du materiau pour le groupe de fibres"),
+             ALGO_1D         =SIMP(statut='f',typ='TXM',defaut="ANALYTIQUE",into=("DEBORST","ANALYTIQUE",)),
+             DEFORMATION      =SIMP(statut='f',typ='TXM',defaut="PETIT",
+                                     into=("PETIT","PETIT_REAC","GROT_GDEP")),
+             RELATION        =SIMP(statut='f', typ='TXM', max=1,defaut="ELAS",into=C_RELATION(),
+                                  fr="Donner le nom de la relation incrementale pour le groupe de fibres",
+                                  ),
+           RELATION_KIT    =SIMP(statut='f',typ='TXM',max='**',validators=NoRepeat(),
+                                 into=(
+# MECA KIT_DDI
+                                       "VMIS_ISOT_TRAC",
+                                       "VMIS_ISOT_LINE",
+                                       "VMIS_ISOT_CINE",
+                                       "VMIS_ISOT_PUIS",
+                                       "GRANGER_FP",
+                                       "GRANGER_FP_INDT",
+                                       "GRANGER_FP_V",
+                                       "BETON_UMLV_FP",
+                                       "ROUSS_PR",
+                                       "NADAI_B",
+                                       "BETON_DOUBLE_DP",
+                                       ),),
+# on pourrait ajouter TOUT_GROUP_FIBRE
+
+                                ) );
+
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+DEFI_CONSTANTE=OPER(nom="DEFI_CONSTANTE",op=   2,sd_prod=fonction_sdaster,
+                    fr="Définir la valeur d'une grandeur invariante",
+                    reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         VALE            =SIMP(statut='o',typ='R',),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 27/04/2010   AUTEUR DESOZA T.DESOZA 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+#
+DEFI_CONTACT=OPER(nom       = "DEFI_CONTACT",
+                  op        = 30,
+                  sd_prod   = char_contact,
+                  fr        = "Définit les zones soumises à des conditions de contact unilatéral avec ou sans frottement",
+                  reentrant = 'n',
+                  UIinfo    = {"groupes":("Modélisation",)},
+
+# MODELE
+
+         MODELE          =SIMP(statut='o',typ=modele_sdaster,),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2),),
+
+# FORMULATION (UNIQUE PAR OCCURRENCE DE DEFI_CONTACT)
+
+         FORMULATION     =SIMP(statut='o',
+                               typ='TXM',
+                               position='global',
+                               defaut="DISCRETE",
+                               into=("DISCRETE","CONTINUE","XFEM","LIAISON_UNIL",),),
+
+# PARAMETRE GENERAL: FROTTEMENT (A TERME DEVRA ETRE AU NIVEAU ZONE)
+
+           FROTTEMENT      =SIMP(statut='f',
+                                 typ='TXM',
+                                 position='global',
+                                 defaut="SANS",
+                                 into=("COULOMB","SANS",)),
+
+### PARAMETRES GENERAUX (UNIQUEMENT POUR LE CONTACT, NE DEPENDENT PAS DE LA ZONE DE CONTACT)
+
+         b_contact=BLOC(condition = "FORMULATION != 'LIAISON_UNIL' ",
+
+# PARAMETRE GENERAL: APPARIEMENT
+
+           LISSAGE         =SIMP(statut='f',
+                                 typ='TXM',
+                                 defaut="NON",
+                                 into=("OUI","NON"),),
+
+# PARAMETRE GENERAL: VERIFICATION DE L'ORIENTATION ET DE LA COHERENCE DES NORMALES
+
+           VERI_NORM       =SIMP(statut='f',
+                                 typ='TXM',
+                                 defaut="OUI",
+                                 into=("OUI","NON"),),
+
+# PARAMETRE GENERAL: BOUCLE SUR GEOMETRIE
+
+           b_bouc_geom_disc=BLOC(condition = "FORMULATION == 'DISCRETE' ",
+                                 REAC_GEOM =SIMP(statut='f',
+                                                 typ='TXM',
+                                                 into=("AUTOMATIQUE","CONTROLE","SANS",),
+                                                 defaut="AUTOMATIQUE",
+                                                 ),
+                                 b_automatique = BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ",
+                                   ITER_GEOM_MAXI = SIMP(statut='f',typ='I',defaut=5),
+                                   RESI_GEOM      = SIMP(statut='f',typ='R',defaut=0.05),
+                                   ),
+                                 b_controle    = BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
+                                   NB_ITER_GEOM   = SIMP(statut='f',typ='I',defaut = 2),
+                                   ),
+                                 ),
+
+           b_bouc_geom_cont=BLOC(condition = "FORMULATION == 'CONTINUE' ",
+                                 REAC_GEOM =SIMP(statut='f',
+                                                 typ='TXM',
+                                                 into=("AUTOMATIQUE","CONTROLE","SANS",),
+                                                 defaut="AUTOMATIQUE",
+                                                 ),
+                                 b_automatique = BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ",
+                                   ITER_GEOM_MAXI = SIMP(statut='f',typ='I',defaut=5),
+                                   RESI_GEOM      = SIMP(statut='f',typ='R',defaut=0.0001),
+                                   ),
+                                 b_controle    = BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
+                                   NB_ITER_GEOM   = SIMP(statut='f',typ='I',defaut = 2),
+                                   ),
+                                 ),
+
+           b_bouc_geom_xfem=BLOC(condition = "FORMULATION == 'XFEM' ",
+                                 REAC_GEOM =SIMP(statut='f',
+                                                 typ='TXM',
+                                                 into=("AUTOMATIQUE","CONTROLE","SANS",),
+                                                 defaut="SANS",
+                                                 ),
+                                 b_automatique = BLOC(condition = "REAC_GEOM == 'AUTOMATIQUE' ",
+                                   ITER_GEOM_MAXI = SIMP(statut='f',typ='I',defaut=5),
+                                   RESI_GEOM      = SIMP(statut='f',typ='R',defaut=0.0001),
+                                   ),
+                                 b_controle    = BLOC(condition = "REAC_GEOM == 'CONTROLE' ",
+                                   NB_ITER_GEOM   = SIMP(statut='f',typ='I',defaut = 2),
+                                   ),
+                                 ),
+
+
+# PARAMETRE GENERAL: BOUCLE SUR CONTACT
+
+           b_bouc_cont_disc=BLOC(condition = "FORMULATION == 'DISCRETE' ",
+                                 ITER_CONT_MULT = SIMP(statut='f',typ='I',defaut = 4),
+                                 ),
+
+           b_bouc_cont_cont=BLOC(condition = "FORMULATION == 'CONTINUE' ",
+                                 ITER_CONT_TYPE= SIMP(statut='f',typ='TXM',defaut="MAXI",
+                                                      into=("MULT","MAXI")),
+                                 b_bouc_cont_mult = BLOC(condition = "ITER_CONT_TYPE=='MULT'",
+                                   ITER_CONT_MULT = SIMP(statut='f',typ='I',defaut = 4),
+                                   ),
+                                 b_bouc_cont_maxi = BLOC(condition = "ITER_CONT_TYPE=='MAXI'",
+                                   ITER_CONT_MAXI = SIMP(statut='f',typ='I',defaut = 30),
+                                   ),
+                                 ),
+
+           b_bouc_cont_xfem=BLOC(condition = "FORMULATION == 'XFEM' ",
+                                 ITER_CONT_TYPE= SIMP(statut='f',typ='TXM',defaut="MAXI",
+                                                      into=("MULT","MAXI")),
+                                 b_bouc_cont_mult = BLOC(condition = "ITER_CONT_TYPE=='MULT'",
+                                   ITER_CONT_MULT = SIMP(statut='f',typ='I',defaut = 4),
+                                   ),
+                                 b_bouc_cont_maxi = BLOC(condition = "ITER_CONT_TYPE=='MAXI'",
+                                   ITER_CONT_MAXI = SIMP(statut='f',typ='I',defaut = 30),
+                                   ),
+                                 ),
+
+# PARAMETRE GENERAL: BOUCLE SUR FROTTEMENT
+
+           b_bouc_frot     = BLOC(condition = "FROTTEMENT=='COULOMB' and ((FORMULATION == 'CONTINUE') or (FORMULATION == 'XFEM')) ",
+                                  REAC_FROT =SIMP(statut='f',
+                                                  typ='TXM',
+                                                  into=("AUTOMATIQUE","CONTROLE",),
+                                                  defaut="AUTOMATIQUE",),
+                                  b_automatique = BLOC(condition = "REAC_FROT == 'AUTOMATIQUE' ",
+                                    ITER_FROT_MAXI = SIMP(statut='f',typ='I',defaut=2),
+                                    RESI_FROT      = SIMP(statut='f',typ='R',defaut=0.0001),
+                                    ),
+                                  b_controle    = BLOC(condition = "REAC_FROT == 'CONTROLE' ",
+                                    NB_ITER_FROT   = SIMP(statut='f',typ='I',defaut = 2),
+                                    ),
+                                 ),
+
+# PARAMETRE GENERAL: METHODES DISCRETES
+
+           b_para_discret  = BLOC(condition = "FORMULATION == 'DISCRETE' ",
+                                  STOP_SINGULIER= SIMP(statut='f',typ='TXM',defaut="OUI",
+                                                       into=("OUI","NON")),
+                                  NB_RESOL      = SIMP(statut='f',typ='I', defaut=10 ),
+                                  STOP_INTERP   = SIMP(statut='f',typ='TXM',defaut="NON",
+                                                       into=("OUI","NON")),
+                                  TOLE_INTERP   = SIMP(statut='f',typ='R',defaut = 0.),
+                                  RESI_ABSO     = SIMP(statut='f',typ='R',
+                                  fr="Critere de convergence (niveau d'interpenetration autorise)"),
+                                  REAC_ITER     = SIMP(statut='f',typ='I',defaut=3,
+                                   fr="Frequence de reinitialisation de la conjugaison"),
+                                  ITER_GCP_MAXI = SIMP(statut='f',typ='I',defaut=0,
+                                  fr="Nombre d'iterations maximal pour le GCP"),
+
+                                  PRE_COND      = SIMP(statut='f',typ='TXM',defaut="SANS",into=("DIRICHLET","SANS"),
+                                  fr="Choix d'un preconditionneur (accelere la convergence)"),
+                                  ITER_PRE_MAXI = SIMP(statut='f',typ='I',defaut=0,
+                                  fr="Nombre d'iterations maximal pour le preconditionneur"),
+                                  COEF_RESI     = SIMP(statut='f',typ='R',defaut = 1.,
+                                  fr="Critere_Convergence_Preconditionneur = COEF_RESI*Critere_Convergence_GCP",),
+                                  RECH_LINEAIRE = SIMP(statut='f',typ='TXM',defaut="ADMISSIBLE",
+                                                       into=("ADMISSIBLE","NON_ADMISSIBLE"),
+                                                 fr="Autorise-t-on de sortir du domaine admissible lors de la recherche lineaire",),
+                                  ),
+           ), #fin bloc b_contact
+
+## AFFECTATIONS (ZONES PAR ZONES)
+
+# AFFECTATION - CAS LIAISON_UNILATERALE
+
+           b_affe_unil     = BLOC(condition = "FORMULATION == 'LIAISON_UNIL'",
+                                  ZONE=FACT(statut='o',
+                                            max='**',
+
+# -- Liaison unilatérale
+                                            regles=(UN_PARMI('GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+                                            GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+                                            MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                                            GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+                                            NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+
+                                            NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+                                            COEF_IMPO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),),
+                                            COEF_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**'),
+
+# -- Incompatibilité avec CL
+                                            SANS_NOEUD      =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+                                            SANS_GROUP_NO   =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+
+                                            ),
+                                  ), #fin bloc b_affe_unil
+
+# AFFECTATION - CAS DISCRET
+
+           b_affe_discret  = BLOC(condition = "FORMULATION == 'DISCRETE'",
+                                  ZONE=FACT(statut='o',
+                                            max='**',
+
+# -- Appariement
+                                            APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+                                                                  into=("NODAL","MAIT_ESCL"),),
+
+                                            regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),
+                                                    UN_PARMI('GROUP_MA_MAIT','MAILLE_MAIT'),),
+                                            GROUP_MA_MAIT   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
+                                            MAILLE_MAIT     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                                            GROUP_MA_ESCL   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
+                                            MAILLE_ESCL     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+
+                                            NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",
+                                                                  into=("MAIT","MAIT_ESCL","ESCL"),),
+
+                                            VECT_MAIT       =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                                                                  into=("AUTO","FIXE","VECT_Y")),
+
+                                            b_nmait_fixe=BLOC(condition = "VECT_MAIT == 'FIXE'",
+                                              MAIT_FIXE     =SIMP(statut='o',typ='R',min=3,max=3),
+                                              ),
+
+                                            b_nmait_vecty=BLOC(condition = "VECT_MAIT == 'VECT_Y'",
+                                              MAIT_VECT_Y   =SIMP(statut='o',typ='R',min=3,max=3),
+                                              ),
+
+                                            VECT_ESCL       =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                                                                  into=("AUTO","FIXE","VECT_Y")),
+
+                                            b_nescl_fixe=BLOC(condition = "VECT_ESCL == 'FIXE'",
+                                              ESCL_FIXE     =SIMP(statut='o',typ='R',min=3,max=3),
+                                              ),
+
+                                            b_nescl_vecty=BLOC(condition = "VECT_ESCL == 'VECT_Y'",
+                                              ESCL_VECT_Y   =SIMP(statut='o',typ='R',min=3,max=3),
+                                              ),
+
+                                            TYPE_APPA       =SIMP(statut='f',typ='TXM',defaut="PROCHE",
+                                                             into  =("PROCHE","FIXE")),
+
+                                            b_appa_fixe     =BLOC(condition = "TYPE_APPA == 'FIXE'",
+                                              DIRE_APPA     =SIMP(statut='f',typ='R',min=3,max=3),
+                                              ),
+
+                                            DIST_POUTRE     =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+                                            DIST_COQUE      =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+                                            b_cara=BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'",
+                                              CARA_ELEM     =SIMP(statut='o',typ=(cara_elem) ),
+                                              ),
+
+                                            DIST_MAIT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                            DIST_ESCL       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+
+                                            TOLE_APPA       =SIMP(statut='f',typ='R'  ,defaut=-1.0),
+                                            TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
+
+# -- Incompatibilité avec CL
+                                            SANS_NOEUD      =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+                                            SANS_GROUP_NO   =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+
+# -- Résolution
+                                            ALGO_CONT       =SIMP(statut='o',typ='TXM',defaut="CONTRAINTE",
+                                                                  into=("CONTRAINTE","LAGRANGIEN","PENALISATION","VERIF","GCP"),),
+
+                                            b_active=BLOC(condition = "ALGO_CONT == 'CONTRAINTE' ",
+                                                         fr="Paramètres de la méthode des contraintes actives (contact uniquement)",
+                                              GLISSIERE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+                                              b_glissiere=BLOC(condition = "GLISSIERE == 'OUI' ",
+                                                ALARME_JEU  =SIMP(statut='f',typ='R',defaut=0.),
+                                                ),
+                                              ),
+
+                                            b_verif=BLOC(condition = "ALGO_CONT == 'VERIF' ",
+                                                         fr="Paramètres de la méthode sans calcul de contact",
+                                              GROUP_MA_FOND =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                                              ),
+
+                                            b_penal_contact=BLOC(condition = "ALGO_CONT == 'PENALISATION' ",
+                                                                 fr="Paramètres de la méthode pénalisée (contact)",
+                                              E_N           =SIMP(statut='o',typ='R'),
+                                              ),
+
+                                            b_frottement=BLOC(condition = "FROTTEMENT == 'COULOMB' ",
+                                                              fr="Paramètres du frottement",
+                                              COULOMB       =SIMP(statut='o',typ='R',),
+                                              COEF_MATR_FROT=SIMP(statut='f',typ='R',defaut=0.E+0),
+                                              ALGO_FROT     =SIMP(statut='o',typ='TXM',defaut="PENALISATION",
+                                                                  into=("PENALISATION","LAGRANGIEN"),),
+
+                                              b_penal_frot=BLOC(condition = "ALGO_FROT == 'PENALISATION' ",
+                                                                fr="Paramètres de la méthode pénalisée (frottement)",
+                                                E_T         =SIMP(statut='o',typ='R'),
+                                                ),
+                                              ),
+                                            ), #fin mot-clé facteur ZONE
+                                  ), #fin bloc b_affe_discret
+
+
+# AFFECTATION - CAS CONTINUE
+
+           b_affe_continue = BLOC(condition = "FORMULATION == 'CONTINUE'",
+                                  ZONE=FACT(statut='o',
+                                            max='**',
+
+# -- Appariement
+                                            APPARIEMENT     =SIMP(statut='f',typ='TXM',defaut="MAIT_ESCL",
+                                                                  into=("MAIT_ESCL",)),
+
+                                            regles=(UN_PARMI('GROUP_MA_ESCL','MAILLE_ESCL'),
+                                                    UN_PARMI('GROUP_MA_MAIT','MAILLE_MAIT'),),
+                                            GROUP_MA_MAIT   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
+                                            MAILLE_MAIT     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+                                            GROUP_MA_ESCL   =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max=1),
+                                            MAILLE_ESCL     =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+
+                                            NORMALE         =SIMP(statut='f',typ='TXM',defaut="MAIT",
+                                                                  into=("MAIT","MAIT_ESCL","ESCL"),),
+
+                                            VECT_MAIT       =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                                                                  into=("AUTO","FIXE","VECT_Y")),
+
+                                            b_nmait_fixe=BLOC(condition = "VECT_MAIT == 'FIXE'",
+                                              MAIT_FIXE     =SIMP(statut='o',typ='R',min=3,max=3),
+                                              ),
+
+                                            b_nmait_vecty=BLOC(condition = "VECT_MAIT == 'VECT_Y'",
+                                              MAIT_VECT_Y   =SIMP(statut='o',typ='R',min=3,max=3),
+                                              ),
+
+                                            VECT_ESCL       =SIMP(statut='f',typ='TXM',defaut="AUTO",
+                                                                  into=("AUTO","FIXE","VECT_Y")),
+
+                                            b_nescl_fixe=BLOC(condition = "VECT_ESCL == 'FIXE'",
+                                              ESCL_FIXE     =SIMP(statut='o',typ='R',min=3,max=3),
+                                              ),
+
+                                            b_nescl_vecty=BLOC(condition = "VECT_ESCL == 'VECT_Y'",
+                                              ESCL_VECT_Y   =SIMP(statut='o',typ='R',min=3,max=3),
+                                              ),
+
+                                            TYPE_APPA       =SIMP(statut='f',typ='TXM',defaut="PROCHE",
+                                                             into  =("PROCHE","FIXE")),
+
+                                            b_appa_fixe=BLOC(condition = "TYPE_APPA == 'FIXE'",
+                                              DIRE_APPA     =SIMP(statut='f',typ='R',min=3,max=3),
+                                              ),
+
+                                            DIST_POUTRE     =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+                                            DIST_COQUE      =SIMP(statut='f',typ='TXM',defaut="NON", into=("OUI","NON")),
+                                            b_cara=BLOC(condition = "DIST_POUTRE == 'OUI' or DIST_COQUE == 'OUI'",
+                                              CARA_ELEM     =SIMP(statut='o',typ=(cara_elem) ),
+                                              ),
+
+                                            DIST_MAIT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                            DIST_ESCL       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+
+                                            TOLE_APPA       =SIMP(statut='f',typ='R'  ,defaut=-1.0),
+                                            TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
+
+# -- Incompatibilité avec CL
+
+                                            SANS_NOEUD      =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+                                            SANS_GROUP_NO   =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+
+                                            FOND_FISSURE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+                                            b_fond_fissure =BLOC(condition = "FOND_FISSURE == 'OUI' ",
+                                                                 fr="Traitement en fond de fissure",
+                                              regles=(UN_PARMI('NOEUD_FOND','GROUP_NO_FOND','MAILLE_FOND','GROUP_MA_FOND'),),
+                                              NOEUD_FOND    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                                              GROUP_NO_FOND =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                                              MAILLE_FOND   =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                                              GROUP_MA_FOND =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                                              ),
+
+                                            RACCORD_LINE_QUAD=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+                                            b_raccord_surf =BLOC(condition = "RACCORD_LINE_QUAD == 'OUI' ",
+                                                                 fr="Traitement du raccord surfacique",
+                                              regles=(UN_PARMI('NOEUD_RACC','GROUP_NO_RACC'),),
+                                              NOEUD_RACC    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                                              GROUP_NO_RACC =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                                              ),
+
+                                            EXCLUSION_PIV_NUL=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),),
+
+# -- Fonctionnalités spécifiques 'CONTINUE'
+                                            INTEGRATION     =SIMP(statut='f',typ='TXM',defaut="NOEUD",
+                                                                   into=("GAUSS","NOEUD","SIMPSON","SIMPSON1","SIMPSON2",
+                                                                                         "NCOTES" ,"NCOTES1" ,"NCOTES2"),),
+
+                                            CONTACT_INIT    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+
+                                            GLISSIERE       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+
+                                            ALGO_CONT       =SIMP(statut='f',typ='TXM',defaut="STANDARD",
+                                                                  into=("STANDARD","AVANCE","PENALISATION"),),
+
+                                            b_cont_std=BLOC(condition = "ALGO_CONT == 'STANDARD' ",
+                                                            fr="Parametres de la formulation Lagrangienne",
+                                              COEF_CONT     =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                              ),
+                                            b_cont_avc=BLOC(condition = "ALGO_CONT == 'AVANCE' ",
+                                                            fr="Parametres du Lagrangien augmenté",
+                                              COEF_REGU_CONT=SIMP(statut='f',typ='R',defaut=100.E+0),
+                                              COEF_STAB_CONT=SIMP(statut='f',typ='R',defaut=100.E+0),
+                                              COEF_PENA_CONT=SIMP(statut='f',typ='R',defaut=100.E+0),
+                                              ),
+                                            b_cont_pena =BLOC(condition = "ALGO_CONT == 'PENALISATION' ",
+                                                            fr="Paramètres de la méthode pénalisée",
+                                              COEF_PENA_CONT  =SIMP(statut='o',typ='R'),),
+
+                                            COMPLIANCE      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+                                            b_compliance=BLOC(condition = "COMPLIANCE == 'OUI' ",fr="Parametres de la compliance",
+                                              ASPERITE      =SIMP(statut='o',typ='R',),
+                                              E_N           =SIMP(statut='o',typ='R',),
+                                              E_V           =SIMP(statut='f',typ='R',defaut=0.E+0),
+                                              ),
+
+                                            b_frottement=BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement",
+                                              COULOMB          =SIMP(statut='o',typ='R',),
+                                              SEUIL_INIT     =SIMP(statut='f',typ='R',defaut=0.E+0),
+
+                                              regles=(EXCLUS('SANS_NOEUD_FR','SANS_GROUP_NO_FR'),),
+                                              SANS_NOEUD_FR    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                                              SANS_GROUP_NO_FR =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                                              b_sans_group_no_frot=BLOC(condition="SANS_GROUP_NO_FR != None or SANS_NO_FR != None",
+                                                                        fr="Direction(s) de frottement à exclure",
+                                                                        EXCL_FROT_1 =SIMP(statut='f',typ='R',min=3,max=3),
+                                                                        EXCL_FROT_2 =SIMP(statut='f',typ='R',min=3,max=3),
+                                                ),
+
+                                              ALGO_FROT       =SIMP(statut='f',typ='TXM',defaut="STANDARD",
+                                                                    into=("STANDARD","AVANCE","PENALISATION"),),
+                                              b_frot_std      =BLOC(condition = "ALGO_FROT == 'STANDARD' ",
+                                                                    fr="Parametres de la formulation Lagrangienne",
+                                                                   COEF_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                ),
+                                              b_frot_avc      =BLOC(condition = "ALGO_FROT == 'AVANCE' ",
+                                                                    fr="Parametres du Lagrangien augmenté",
+                                                                   COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                                   COEF_STAB_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                                   COEF_PENA_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                                ),
+                                              b_frot_pena =BLOC(condition = "ALGO_FROT == 'PENALISATION' ",
+                                                                    fr="Paramètres de la méthode pénalisée",
+                                                                   COEF_PENA_FROT  =SIMP(statut='o',typ='R'),
+                                                ),
+
+                                              USURE          =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SANS","ARCHARD",),),
+                                              b_usure        =BLOC(condition = "USURE == 'ARCHARD' ",
+                                                                   fr="Parametres de la loi d'usure d'Archard",
+                                                                   K =SIMP(statut='o',typ='R',),
+                                                                   H =SIMP(statut='o',typ='R',val_min=1E-8),
+                                                ),
+
+                                              ), #fin bloc b_frottement
+                                            ), #fin mot-clé facteur ZONE
+                                  ), #fin bloc b_affe_continue
+
+
+# AFFECTATION - CAS XFEM
+
+           b_affe_xfem =BLOC(condition = "FORMULATION == 'XFEM'",
+                             ZONE=FACT(statut='o',
+                                       max='**',
+# -- Fissure
+                                       FISS_MAIT      = SIMP(statut='o',typ=fiss_xfem,max=1),
+                                       TOLE_PROJ_EXT   =SIMP(statut='f',typ='R'  ,defaut=0.50),
+
+# -- Fonctionnalités spécifiques 'XFEM'
+                                       INTEGRATION    = SIMP(statut='f',
+                                                             typ='TXM',
+                                                             defaut="FPG4",
+                                                             into=("GAUSS","FPG2","FPG3","FPG4","FPG6","FPG7",
+                                                                   "NOEUD","SIMPSON","SIMPSON1","NCOTES","NCOTES1","NCOTES2"),),
+
+                                       CONTACT_INIT   = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+
+                                       GLISSIERE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),
+                                       RELATION         = SIMP(statut='f',typ='TXM',defaut="NON",into=("CZM_XFEM","NON"),),
+
+                                       ALGO_LAGR      = SIMP(statut='f',typ='TXM',defaut="VERSION1",
+                                                             into=("NON","VERSION1","VERSION2"),),
+                                       COEF_ECHELLE   = SIMP(statut='f',typ='R',defaut=1.E+6),
+
+                                       ALGO_CONT      =SIMP(statut='f',typ='TXM',defaut="STANDARD",
+                                                                  into=("STANDARD","AVANCE","PENALISATION"),),
+
+                                       b_cont_std=BLOC(condition = "ALGO_CONT == 'STANDARD' ",
+                                                       fr="Parametres de la formulation Lagrangienne",
+                                         COEF_CONT    =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                         ),
+                                       b_cont_avc=BLOC(condition = "ALGO_CONT == 'AVANCE' ",fr="Parametres du Lagrangien augmenté",
+                                         COEF_REGU_CONT =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                         COEF_STAB_CONT =SIMP(statut='f',typ='R',defaut=0.E+0),
+                                         COEF_PENA_CONT =SIMP(statut='f',typ='R',defaut=0.E+0),
+                                         ),
+
+                                       b_cont_pen=BLOC(condition = "ALGO_CONT == 'PENALISATION' ",
+                                         fr="Paramètre de la méthode pénalisée",
+                                         COEF_PENA_CONT =SIMP(statut='o',typ='R'),
+                                         ),
+
+                                       b_frottement=BLOC(condition = "FROTTEMENT == 'COULOMB' ",fr="Paramètres du frottement",
+                                         COULOMB      =SIMP(statut='o',typ='R',),
+                                         SEUIL_INIT   =SIMP(statut='f',typ='R',defaut=0.E+0),
+
+                                         ALGO_FROT    =SIMP(statut='f',typ='TXM',defaut="STANDARD",
+                                                                  into=("STANDARD","AVANCE","PENALISATION"),),
+
+                                         b_frot_std=BLOC(condition = "ALGO_FROT == 'STANDARD' ",
+                                                         fr="Parametres de la formulation Lagrangienne",
+                                           COEF_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                           ),
+                                         b_frot_avc=BLOC(condition = "ALGO_FROT == 'AVANCE' ",
+                                                         fr="Parametres du Lagrangien augmenté",
+                                           COEF_REGU_FROT  =SIMP(statut='f',typ='R',defaut=100.E+0),
+                                           COEF_STAB_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
+                                           COEF_PENA_FROT  =SIMP(statut='f',typ='R',defaut=0.E+0),
+                                           ),
+                                         b_frot_pen=BLOC(condition = "ALGO_FROT == 'PENALISATION' ",
+                                                         fr="Paramètre de la méthode pénalisée",
+                                           COEF_PENA_FROT  =SIMP(statut='o',typ='R'),
+                                           ),
+                                         ), #fin bloc b_frottement
+                                       ), #fin mot-clé facteur ZONE
+                             ), #fin bloc b_affe_xfem
+
+                  ) #fin OPER
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+DEFI_COQU_MULT=OPER(nom="DEFI_COQU_MULT",op=56,sd_prod=mater_sdaster,reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+                    fr="Déterminer les caractéristiques matériaux homogénéisées d'une coque multicouche à partir"
+                        +" des caractéristiques de chaque couche",
+         COUCHE          =FACT(statut='o',max='**',
+           EPAIS           =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+           ORIENTATION     =SIMP(statut='f',typ='R',defaut= 0.E+0,
+                                 val_min=-90.E+0,val_max=90.E+0   ),
+         ),
+         IMPRESSION      =FACT(statut='f',
+           UNITE           =SIMP(statut='f',typ='I',defaut=8),  
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+def DEFIC_prod(self,ACTION,UNITE,**args):
+  if ACTION == "ASSOCIER" or ACTION == "RESERVER":
+    if UNITE != None :
+      return
+    else :
+      return entier
+  elif ACTION == "LIBERER"  :
+    return
+  else :
+    raise AsException("ACTION non prevue : %s" % ACTION)
+
+DEFI_FICHIER=MACRO(nom="DEFI_FICHIER",op=ops.build_DEFI_FICHIER,sd_prod=DEFIC_prod,reentrant='n',
+                  UIinfo={"groupes":("Gestion du travail",)},
+                  fr="Ouvre ou ferme un fichier associé à un numéro d'unité logique",
+
+            ACTION        =SIMP(statut='f',typ='TXM',into=("ASSOCIER","LIBERER","RESERVER"),defaut="ASSOCIER"),
+
+            b_associer    =BLOC(condition = "ACTION == 'ASSOCIER'",
+                                fr="Paramètres pour l'ouverture du fichier",
+                                regles=(AU_MOINS_UN('FICHIER','UNITE'),),
+               UNITE      =SIMP(statut='f',typ='I' ,val_min=1),
+               FICHIER    =SIMP(statut='f',typ='TXM',validators=LongStr(1,255)),
+               TYPE       =SIMP(statut='f',typ='TXM',into=("ASCII","BINARY","LIBRE"),defaut="ASCII"),
+
+               b_type_ascii  =BLOC(condition = "TYPE == 'ASCII'",fr="Paramètres pour le type ASCII",
+                  ACCES      =SIMP(statut='f',typ='TXM',into=("NEW","APPEND","OLD"),defaut="NEW"),
+               ),
+               b_type_autre  =BLOC(condition = "TYPE != 'ASCII'",fr="Paramètres pour les types BINARY et LIBRE",
+                  ACCES      =SIMP(statut='f',typ='TXM',into=("NEW","OLD"),defaut="NEW"),
+               ),
+            ),
+
+            b_reserver    =BLOC(condition = "ACTION == 'RESERVER'",
+                                fr="Paramètres pour la réservation de l'unité du fichier",
+                                regles=(AU_MOINS_UN('FICHIER','UNITE'),),
+               UNITE      =SIMP(statut='f',typ='I' ,val_min=1),
+               FICHIER    =SIMP(statut='f',typ='TXM',validators=LongStr(1,255)),
+               TYPE       =SIMP(statut='f',typ='TXM',into=("ASCII",),defaut="ASCII"),
+               ACCES      =SIMP(statut='f',typ='TXM',into=("APPEND",),defaut="APPEND"),
+            ),
+
+            b_liberer    =BLOC(condition = "ACTION == 'LIBERER'",
+                               fr="Paramètres pour la fermeture du fichier",
+                               regles=(UN_PARMI('FICHIER','UNITE'),),
+                  UNITE         =SIMP(statut='f',typ='I' ,val_min=1),
+                  FICHIER   =SIMP(statut='f',typ='TXM',validators=LongStr(1,255)),
+           ),
+
+           INFO          =SIMP(statut='f',typ='I',into=(1,2) ),           
+           )
+#& MODIF COMMANDE  DATE 24/08/2009   AUTEUR GENIAUT S.GENIAUT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+
+DEFI_FISS_XFEM=OPER(nom="DEFI_FISS_XFEM",op=  41,sd_prod=fiss_xfem,reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+               fr="Définition des caratéristiques d'une fissure ou d'une interface avec X-FEM",
+
+# ------------------------------------------------------------------------------------------------------------------------
+#                       modele sous-jacent
+# ------------------------------------------------------------------------------------------------------------------------
+
+    MODELE                =SIMP(statut='o',typ=modele_sdaster),
+
+# ------------------------------------------------------------------------------------------------------------------------
+#                       fissure/interface
+# ------------------------------------------------------------------------------------------------------------------------
+
+      TYPE_DISCONTINUITE  =SIMP(statut='f',typ='TXM',into=("FISSURE","INTERFACE",) ,defaut="FISSURE",position='global'),
+
+# ------------------------------------------------------------------------------------------------------------------------
+#                       caracteristiques de la fissure/interface
+# ------------------------------------------------------------------------------------------------------------------------
+
+    DEFI_FISS             =FACT(statut='o',max=1,
+
+      regles              =UN_PARMI('GROUP_MA_FISS','FONC_LN','FORM_FISS','CHAM_NO_LSN'),
+
+# impossible de faire des regles dans des blocs condition, dommage
+#       b_fissure           =BLOC(condition = "TYPE_DISCONTINUITE == 'FISSURE' ",fr="Regles pour les fissures",           
+#                 regles    =(ENSEMBLE('FONC_LN','FONC_LT'),
+#                             ENSEMBLE('CHAM_NO_LSN','CHAM_NO_LST'),
+#                             ENSEMBLE('GROUP_MA_FISS','GROUP_MA_FOND')),
+#                                ),
+# 
+#       b_interface           =BLOC(condition = "TYPE_DISCONTINUITE == 'INTERFACE' ",fr="Regles pour les interfaces",           
+#                 regles    =(PRESENT_ABSENT('FONC_LN','FONC_LT'),
+#                             PRESENT_ABSENT('CHAM_NO_LSN','CHAM_NO_LST'),
+#                             PRESENT_ABSENT('GROUP_MA_FISS','GROUP_MA_FOND')),
+#                                ),
+
+      FONC_LT             =SIMP(statut='f',typ=(fonction_sdaster,formule) ),
+      FONC_LN             =SIMP(statut='f',typ=(fonction_sdaster,formule) ),
+      CHAM_NO_LSN         =SIMP(statut='f',typ=cham_no_sdaster,min=1,max=1),
+      CHAM_NO_LST         =SIMP(statut='f',typ=cham_no_sdaster,min=1,max=1),
+      GROUP_MA_FISS       =SIMP(statut='f',typ=grma,min=1,max=1),
+      GROUP_MA_FOND       =SIMP(statut='f',typ=grma,min=1,max=1),
+      FORM_FISS   =SIMP(statut='f',typ='TXM',into=("ELLIPSE","CYLINDRE","DEMI_PLAN","SEGMENT","DEMI_DROITE","INCLUSION","DROITE") ),
+      b_ellipse           =BLOC(condition = "FORM_FISS == 'ELLIPSE' ",fr="Paramètres de la fissure elliptique",           
+           DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+           DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+           CENTRE         =SIMP(statut='o',typ='R',min=3,max=3),
+           VECT_X         =SIMP(statut='o',typ='R',min=3,max=3),
+           VECT_Y         =SIMP(statut='o',typ='R',min=3,max=3),
+           COTE_FISS      =SIMP(statut='f',typ='TXM',defaut="IN",into=("IN","OUT",) ),    ),
+      b_cylindre          =BLOC(condition = "FORM_FISS == 'CYLINDRE' ",fr="Paramètres de la fissure cylindrique",
+           DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+           DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+           CENTRE         =SIMP(statut='o',typ='R',min=3,max=3),
+           VECT_X         =SIMP(statut='o',typ='R',min=3,max=3),
+           VECT_Y         =SIMP(statut='o',typ='R',min=3,max=3),),
+      b_demiplan          =BLOC(condition = "FORM_FISS == 'DEMI_PLAN' ",fr="Paramètres de la fissure plane à front droit", 
+           PFON           =SIMP(statut='o',typ='R',min=3,max=3),
+           NORMALE        =SIMP(statut='o',typ='R',min=3,max=3),
+           DTAN           =SIMP(statut='o',typ='R',min=3,max=3),),
+      b_segment           =BLOC(condition = "FORM_FISS == 'SEGMENT' ",fr="Paramètres de la fissure 2D segment",
+           PFON_ORIG      =SIMP(statut='o',typ='R',min=3,max=3),
+           PFON_EXTR      =SIMP(statut='o',typ='R',min=3,max=3),),
+      b_demidroite         =BLOC(condition = "FORM_FISS == 'DEMI_DROITE' ",fr="Paramètres de la fissure 2D demi-droite",
+           PFON           =SIMP(statut='o',typ='R',min=3,max=3),
+           DTAN           =SIMP(statut='o',typ='R',min=3,max=3),),
+      b_droite            =BLOC(condition = "FORM_FISS == 'DROITE' ",fr="Paramètres de l'interface 2D (fissure traversante)",
+           POINT          =SIMP(statut='o',typ='R',min=3,max=3),
+           DTAN           =SIMP(statut='o',typ='R',min=3,max=3),),
+      b_inclusion         =BLOC(condition = "FORM_FISS == 'INCLUSION' ",fr="Paramètres de l'interface 2D (inclusion)",
+           DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+           DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+           CENTRE         =SIMP(statut='o',typ='R',min=3,max=3),
+           VECT_X         =SIMP(statut='o',typ='R',min=3,max=3),
+           VECT_Y         =SIMP(statut='o',typ='R',min=3,max=3),),
+                            ),
+
+# ------------------------------------------------------------------------------------------------------------------------
+#                       partie du maillage potentiellement enrichie
+# ------------------------------------------------------------------------------------------------------------------------
+
+    GROUP_MA_ENRI         =SIMP(statut='o',typ=grma,max=01),
+
+# ------------------------------------------------------------------------------------------------------------------------
+#                       types d'enrichissement 
+# ------------------------------------------------------------------------------------------------------------------------
+
+    b_enri_inte           =BLOC(condition = "TYPE_DISCONTINUITE == 'INTERFACE' ",     
+
+      CHAM_DISCONTINUITE  =SIMP(statut='f',typ='TXM',into=("DEPL","SIGM"),defaut="DEPL" ),
+
+                          ),
+
+
+    b_enri_fiss           =BLOC(condition = "TYPE_DISCONTINUITE == 'FISSURE' ",           
+
+      CHAM_DISCONTINUITE  =SIMP(statut='f',typ='TXM',into=("DEPL",),defaut="DEPL" ),
+      TYPE_ENRI_FOND      =SIMP(statut='f',typ='TXM',into=("TOPOLOGIQUE","GEOMETRIQUE"),defaut="TOPOLOGIQUE" ),
+
+        b_enri_geom       =BLOC(condition = "TYPE_ENRI_FOND == 'GEOMETRIQUE' ",fr="Paramètres de l enrichissement geometrique",
+           RAYON_ENRI     =SIMP(statut='f',typ='R',val_min=0.E+0),
+
+          b_enri_couches  =BLOC(condition = "(RAYON_ENRI == None) ",fr="Paramètres de l enrichissement à n couches",
+           NB_COUCHES     =SIMP(statut='f',typ='I',defaut=4,val_min=1),
+
+                               ),
+                             ),                        
+                          ),
+
+# ------------------------------------------------------------------------------------------------------------------------
+#                       orientation du fond de fissure
+# ------------------------------------------------------------------------------------------------------------------------
+
+    b_orie_fond           =BLOC(condition = "TYPE_DISCONTINUITE == 'FISSURE' ",           
+
+    ORIE_FOND             =FACT(statut='f',max=1,
+      PFON_INI            =SIMP(statut='o',typ='R',max=3),
+      VECT_ORIE           =SIMP(statut='o',typ='R',max=3),
+      POINT_ORIG          =SIMP(statut='o',typ='R',max=3),
+                               ),
+
+                             ),
+
+# ------------------------------------------------------------------------------------------------------------------------
+#                       info
+# ------------------------------------------------------------------------------------------------------------------------
+
+    INFO                  =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,3,) ),
+
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
+                    reentrant='n',fr="Définit les caractéristiques nécessaires à l'étude dynamique d'une structure sous écoulement",
+            UIinfo={"groupes":("Maillage",)},
+         regles=(  UN_PARMI('FAISCEAU_TRANS','GRAPPE','FAISCEAU_AXIAL','COQUE_COAX',),),
+         FAISCEAU_TRANS  =FACT(statut='f',max='**',
+           regles=(  ENSEMBLE('CSTE_CONNORS','NB_CONNORS','RHO_TUBE'),),
+           COUPLAGE        =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PROF_RHO_F_INT  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PROF_RHO_F_EXT  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',into=("DX","DY","DZ") ),
+           COEF_MASS_AJOU  =SIMP(statut='f',typ='R' ),
+           TYPE_PAS        =SIMP(statut='f',typ='TXM',into=("CARRE_LIGN","TRIA_LIGN") ),
+           TYPE_RESEAU     =SIMP(statut='f',typ='I' ),
+           UNITE_CD        =SIMP(statut='f',typ='I',defaut=70),
+           UNITE_CK        =SIMP(statut='f',typ='I',defaut=71),            
+           PAS             =SIMP(statut='f',typ='R' ),
+           CSTE_CONNORS    =SIMP(statut='f',typ='R',min=2,max=2,val_min=0.E+00),
+           NB_CONNORS      =SIMP(statut='f',typ='I',val_min=2,),
+           RHO_TUBE        =SIMP(statut='f',typ='R' ),
+         ),
+         GRAPPE          =FACT(statut='f',
+           regles=(ENSEMBLE('GRAPPE_2','NOEUD','CARA_ELEM','MODELE','RHO_FLUI',),
+                   PRESENT_PRESENT('COEF_MASS_AJOU','GRAPPE_2', ),),
+#  peut on créer un bloc a partir de la valeur de couplage  
+           COUPLAGE        =SIMP(statut='o',typ='TXM',into=("OUI","NON") ),
+           GRAPPE_2        =SIMP(statut='f',typ='TXM',
+                                 into=("ASC_CEN","ASC_EXC","DES_CEN","DES_EXC") ),
+           NOEUD           =SIMP(statut='f',typ=no),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+           MODELE          =SIMP(statut='f',typ=modele_sdaster ),
+           COEF_MASS_AJOU  =SIMP(statut='f',typ='R' ),
+           RHO_FLUI        =SIMP(statut='f',typ='R' ),
+           UNITE_CA        =SIMP(statut='f',typ='I',defaut=70),
+           UNITE_KA        =SIMP(statut='f',typ='I',defaut=71),            
+         ),
+         FAISCEAU_AXIAL  =FACT(statut='f',max='**',
+           regles=(UN_PARMI('GROUP_MA','TRI_GROUP_MA'),
+                   UN_PARMI('CARA_ELEM','RAYON_TUBE'),
+                   ENSEMBLE('RAYON_TUBE','COOR_TUBE'),
+                   PRESENT_ABSENT('RAYON_TUBE','TRI_GROUP_MA'),
+                   ENSEMBLE('CARA_PAROI','VALE_PAROI'),
+                   ENSEMBLE('LONG_TYPG','LARG_TYPG','EPAI_TYPG','RUGO_TYPG','COEF_TRAI_TYPG','COEF_DPOR_TYPG',
+                            'COOR_GRILLE','TYPE_GRILLE', ),),
+#  on doit pouvoir mettre des blocs conditionnels mais pas assez d infos pour le faire                            
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           TRI_GROUP_MA    =SIMP(statut='f',typ='TXM' ),
+           VECT_X          =SIMP(statut='f',typ='R',max=3),
+           PROF_RHO_FLUI   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PROF_VISC_CINE  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+           RAYON_TUBE      =SIMP(statut='f',typ='R' ),
+           COOR_TUBE       =SIMP(statut='f',typ='R',max='**'),
+           PESANTEUR       =SIMP(statut='f',typ='R',min=4,max=4),
+           RUGO_TUBE       =SIMP(statut='f',typ='R' ),
+           CARA_PAROI      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=5,
+                                 into=("YC","ZC","R","HY","HZ") ),
+           VALE_PAROI      =SIMP(statut='f',typ='R',max=5),
+           ANGL_VRIL       =SIMP(statut='f',typ='R' ),
+           LONG_TYPG       =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+           LARG_TYPG       =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+           EPAI_TYPG       =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+           RUGO_TYPG       =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+           COEF_TRAI_TYPG  =SIMP(statut='f',typ='R',max='**',val_min=0.E+0),
+           COEF_DPOR_TYPG  =SIMP(statut='f',typ='R',max='**'),
+           COOR_GRILLE     =SIMP(statut='f',typ='R',max='**'),
+           TYPE_GRILLE     =SIMP(statut='f',typ='I',max='**'),
+         ),
+         COQUE_COAX      =FACT(statut='f',
+           MASS_AJOU       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           GROUP_MA_INT    =SIMP(statut='o',typ=grma),
+           GROUP_MA_EXT    =SIMP(statut='o',typ=grma),
+           VECT_X          =SIMP(statut='o',typ='R',max='**'),
+           CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+           MATER_INT       =SIMP(statut='o',typ=mater_sdaster ),
+           MATER_EXT       =SIMP(statut='o',typ=mater_sdaster ),
+           RHO_FLUI        =SIMP(statut='o',typ='R' ),
+           VISC_CINE       =SIMP(statut='o',typ='R' ),
+           RUGOSITE        =SIMP(statut='o',typ='R' ),
+           PDC_MOY_1       =SIMP(statut='o',typ='R' ),
+           PDC_DYN_1       =SIMP(statut='o',typ='R' ),
+           PDC_MOY_2       =SIMP(statut='o',typ='R' ),
+           PDC_DYN_2       =SIMP(statut='o',typ='R' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 11/01/2010   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE PEYRARD C.PEYRARD
+
+from Macro.defi_fonc_elec_ops import defi_fonc_elec_ops
+
+DEFI_FONC_ELEC=MACRO(nom="DEFI_FONC_ELEC",op=defi_fonc_elec_ops,sd_prod=fonction_sdaster,reentrant='n',
+            UIinfo={"groupes":("Outils métier",)},
+                    fr="Définir une fonction du temps intervenant dans le calcul des forces de LAPLACE",
+      regles=(UN_PARMI('COUR_PRIN','COUR'),
+              EXCLUS('COUR','COUR_SECO'), ),
+         FREQ            =SIMP(statut='f',typ='R',defaut= 50.),
+         SIGNAL          =SIMP(statut='f',typ='TXM',defaut="COMPLET",into=("COMPLET","CONTINU") ),
+         COUR            =FACT(statut='f',max='**',
+         fr="Définition du courant de court-circuit",
+           regles=(UN_PARMI('PHI_CC_1','INTC_CC_1'),
+                   UN_PARMI('PHI_CC_2','INTC_CC_2'),),
+           INTE_CC_1       =SIMP(statut='o',typ='R'),
+           TAU_CC_1        =SIMP(statut='o',typ='R'),
+           PHI_CC_1        =SIMP(statut='f',typ='R'),
+           INTC_CC_1       =SIMP(statut='f',typ='R'),
+           INTE_CC_2       =SIMP(statut='o',typ='R'),
+           TAU_CC_2        =SIMP(statut='o',typ='R'),
+           PHI_CC_2        =SIMP(statut='f',typ='R'),
+           INTC_CC_2       =SIMP(statut='f',typ='R'),
+           INST_CC_INIT    =SIMP(statut='o',typ='R'),
+           INST_CC_FIN     =SIMP(statut='o',typ='R'),
+         ),
+         COUR_PRIN       =FACT(statut='f',
+         fr="Définition du courant de court-circuit avec réenclenchement",
+           regles=(UN_PARMI('PHI_CC_1','INTC_CC_1'),),
+           INTE_CC_1       =SIMP(statut='o',typ='R'),
+           TAU_CC_1        =SIMP(statut='o',typ='R'),
+           PHI_CC_1        =SIMP(statut='f',typ='R'),
+           INTC_CC_1       =SIMP(statut='f',typ='R'),
+           INTE_RENC_1     =SIMP(statut='f',typ='R'),
+           TAU_RENC_1      =SIMP(statut='f',typ='R'),
+           PHI_RENC_1      =SIMP(statut='f',typ='R'),
+           INST_CC_INIT    =SIMP(statut='o',typ='R'),
+           INST_CC_FIN     =SIMP(statut='o',typ='R'),
+           INST_RENC_INIT  =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+           INST_RENC_FIN   =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+         ),
+         COUR_SECO       =FACT(statut='f',max='**',
+         fr="Définition du courant de court-circuit avec un intervalle de temps différent de celui de COUR_PRIN",
+           regles=(UN_PARMI('PHI_CC_2','INTC_CC_2'),),
+           INTE_CC_2       =SIMP(statut='o',typ='R'),
+           TAU_CC_2        =SIMP(statut='o',typ='R'),
+           PHI_CC_2        =SIMP(statut='f',typ='R'),
+           INTC_CC_2       =SIMP(statut='f',typ='R'),
+           INTE_RENC_2     =SIMP(statut='f',typ='R'),
+           TAU_RENC_2      =SIMP(statut='f',typ='R'),
+           PHI_RENC_2      =SIMP(statut='f',typ='R'),
+           DIST            =SIMP(statut='f',typ='R',defaut=1.0E+0),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+DEFI_FONC_FLUI=OPER(nom="DEFI_FONC_FLUI",op= 142,sd_prod=fonction_sdaster,
+                    reentrant='n',
+            fr="Définit un profil de vitesse d'écoulement fluide le long d'une poutre",
+            UIinfo={"groupes":("Fonction",)},
+         MAILLAGE        =SIMP(statut='o',typ=(maillage_sdaster) ),
+         NOEUD_INIT      =SIMP(statut='o',typ=no),
+         NOEUD_FIN       =SIMP(statut='o',typ=no),
+         VITE            =FACT(statut='o',
+           VALE            =SIMP(statut='f',typ='R',defaut= 1. ),
+           PROFIL          =SIMP(statut='o',typ='TXM',into=("UNIFORME","LEONARD") ),
+           NB_BAV          =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 2 , 3 ) ),
+         ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",
+                               into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",
+                               into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM' ,defaut="EXCLU",
+                               into=("CONSTANT","LINEAIRE","EXCLU") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+def defi_fonction_prod(VALE,VALE_PARA,VALE_C,NOEUD_PARA,ABSCISSE,**args):
+  if VALE       != None  : return fonction_sdaster
+  if VALE_C     != None  : return fonction_c
+  if VALE_PARA  != None  : return fonction_sdaster
+  if ABSCISSE   != None  : return fonction_sdaster
+  if NOEUD_PARA != None  : return fonction_sdaster
+  raise AsException("type de concept resultat non prevu")
+
+DEFI_FONCTION=OPER(nom="DEFI_FONCTION",op=3,sd_prod=defi_fonction_prod
+                    ,fr="Définit une fonction réelle ou complexe d'une variable réelle",
+                     reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
+         regles=(UN_PARMI('VALE','VALE_C','VALE_PARA','NOEUD_PARA','ABSCISSE'),),
+         NOM_PARA        =SIMP(statut='o',typ='TXM',into=C_PARA_FONCTION() ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         VALE            =SIMP(statut='f',typ='R',min=2,max='**',
+                               fr ="Fonction réelle définie par une liste de couples (abscisse,ordonnée)"),
+         ABSCISSE        =SIMP(statut='f',typ='R',min=2,max='**',
+                               fr ="Liste d abscisses d une fonction réelle"),
+         VALE_C          =SIMP(statut='f',typ='R',min=2,max='**',
+                               fr ="Fonction complexe définie par une liste de couples"),
+         VALE_PARA       =SIMP(statut='f',typ=listr8_sdaster,
+                               fr ="Fonction réelle définie par deux concepts de type listr8" ),
+         b_vale_para     =BLOC(condition = "VALE_PARA != None",
+           VALE_FONC       =SIMP(statut='o',typ=listr8_sdaster ),
+         ),
+         b_abscisse      =BLOC(condition = "ABSCISSE != None",
+           ORDONNEE        =SIMP(statut='o',typ='R',min=2,max='**',
+                               fr ="Liste d ordonnées d une fonction réelle"),
+         ),
+         NOEUD_PARA      =SIMP(statut='f',typ=no,max='**',
+                               fr ="Fonction réelle définie par une liste de noeuds et un maillage"),
+         b_noeud_para    =BLOC(condition = "NOEUD_PARA != None",
+           MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster ),
+           VALE_Y          =SIMP(statut='o',typ='R',max='**'),
+         ),
+
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         VERIF           =SIMP(statut='f',typ='TXM',defaut="CROISSANT",into=("CROISSANT","NON") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+DEFI_FOND_FISS=OPER(nom="DEFI_FOND_FISS",op=55,sd_prod=fond_fiss,reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
+                    fr="Définition de lèvres et d'un fond de fissure en 3D",
+         regles=(UN_PARMI('FOND_FISS','FOND_FERME','FOND_INF'),
+                 EXCLUS('FOND_FERME','DTAN_ORIG'),
+                 EXCLUS('FOND_FERME','DTAN_EXTR'),
+                      EXCLUS('FOND_FERME','VECT_GRNO_ORIG'),
+                      EXCLUS('FOND_FERME','VECT_GRNO_EXTR'),
+                 UN_PARMI('LEVRE_SUP','NORMALE'),
+                      EXCLUS('LEVRE_INF','NORMALE'),
+                 ENSEMBLE('DTAN_ORIG','DTAN_EXTR'),
+                 ENSEMBLE('FOND_SUP','FOND_INF'),
+                 EXCLUS('FOND_INF','FOND_FISS'),
+                 EXCLUS('FOND_INF','FOND_FERME'),
+                      ENSEMBLE('VECT_GRNO_ORIG','VECT_GRNO_EXTR'),
+                      EXCLUS('DTAN_ORIG','VECT_GRNO_ORIG'),
+                      EXCLUS('DTAN_EXTR','VECT_GRNO_EXTR') ,),
+           MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster ),
+           FOND_FISS       =FACT(statut='f',
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+                     EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
+                          EXCLUS('NOEUD_EXTR','GROUP_NO_EXTR'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+#  à mettre à jour le max vaut-il 1  
+             NOEUD_ORIG      =SIMP(statut='f',typ=no,),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
+             NOEUD_EXTR      =SIMP(statut='f',typ=no,),
+             GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,),
+           ),
+           FOND_FERME      =FACT(statut='f',
+             regles=(UN_PARMI('GROUP_NO','NOEUD','GROUP_MA','MAILLE'),
+                          EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             NOEUD_ORIG      =SIMP(statut='f',typ=no,),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
+             MAILLE_ORIG     =SIMP(statut='f',typ=ma,),
+             GROUP_MA_ORIG   =SIMP(statut='f',typ=ma,),
+           ),
+           FOND_INF       =FACT(statut='f',
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             NOEUD_ORIG      =SIMP(statut='f',typ=no,),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
+             NOEUD_EXTR      =SIMP(statut='f',typ=no,),
+             GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,),
+           ),
+           FOND_SUP       =FACT(statut='f',
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'), 
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             NOEUD_ORIG      =SIMP(statut='f',typ=no,),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
+             NOEUD_EXTR      =SIMP(statut='f',typ=no,),
+             GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,),
+           ),
+           LEVRE_SUP       =FACT(statut='f',
+             regles=(UN_PARMI('GROUP_MA','MAILLE'),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           ),
+           LEVRE_INF       =FACT(statut='f',
+             regles=(UN_PARMI('GROUP_MA','MAILLE', ),),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           ),
+           NORMALE         =SIMP(statut='f',typ='R',max='**'),
+           PREC_NORM       =SIMP(statut='f',typ='R',defaut=0.1),
+           DTAN_ORIG       =SIMP(statut='f',typ='R',max='**'),
+           DTAN_EXTR       =SIMP(statut='f',typ='R',max='**'),
+           VECT_GRNO_ORIG  =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
+           VECT_GRNO_EXTR  =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=2),
+           INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE FLEJOU J.L.FLEJOU
+# 
+DEFI_GEOM_FIBRE=OPER(nom="DEFI_GEOM_FIBRE",op=  119, sd_prod=gfibre_sdaster,
+                    fr="Definition des groupes de fibres pour les elements multifibres",
+                    reentrant='n',
+            UIinfo={"groupes":("Modelisation",)},
+         regles=(AU_MOINS_UN('SECTION','FIBRE'),),
+
+         INFO       =SIMP(statut='f',typ='I', defaut= 1 ,into=(1,2) ),
+#============================================================================
+         SECTION     =FACT(statut='f',max='**',
+              regles=(AU_MOINS_UN('TOUT_SECT','GROUP_MA_SECT','MAILLE_SECT'),
+                      PRESENT_ABSENT('TOUT_SECT','GROUP_MA_SECT','MAILLE_SECT'),),
+
+              GROUP_FIBRE       =SIMP(statut='o',typ='TXM',min=1,max=1),
+              TOUT_SECT         =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+              GROUP_MA_SECT     =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              MAILLE_SECT       =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+
+              MAILLAGE_SECT     =SIMP(statut='o',typ=maillage_sdaster),
+              COOR_AXE_POUTRE   =SIMP(statut='o',typ='R',min=2,max=2),
+         ),
+
+
+#============================================================================
+         FIBRE     =FACT(statut='f',max='**',
+              GROUP_FIBRE       =SIMP(statut='o',typ='TXM',min=1,max=1),
+              CARA              =SIMP(statut='f',typ='TXM',defaut='SURFACE',into=('SURFACE','DIAMETRE',)),
+              VALE              =SIMP(statut='o',typ='R',max='**'),
+              COOR_AXE_POUTRE   =SIMP(statut='o',typ='R',min=2,max=2),
+          ),
+
+
+) ;
+#& MODIF COMMANDE  DATE 20/04/2009   AUTEUR SFAYOLLE S.FAYOLLE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE SFAYOLLE S.FAYOLLE
+DEFI_GLRC=OPER(nom="DEFI_GLRC",op=57,sd_prod=mater_sdaster,reentrant='f',
+            UIinfo={"groupes":("Modelisation",)},
+                    fr="Determiner les caracteristiques du beton arme homogeneisees a partir des proprietes du beton et de  "
+                        +" plusieurs types d'armature",
+         reuse = SIMP(statut='f',typ=mater_sdaster), 
+         BETON          =FACT(statut='o',max=1,
+           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+           EPAIS           =SIMP(statut='o',typ='R',val_min=0.E+0 ),
+           GAMMA           =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
+           QP1             =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
+           QP2             =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
+
+           C1N1            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C1N2            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C1N3            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C2N1            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C2N2            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C2N3            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C1M1            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C1M2            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C1M3            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C2M1            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C2M2            =SIMP(statut='o',typ='R',val_min=0.E+0),
+           C2M3            =SIMP(statut='o',typ='R',val_min=0.E+0),
+
+           OMT             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
+           EAT             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
+           BT1             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
+           BT2             =SIMP(statut='f',typ='R',val_min=0.E+0,defaut=0.0E+0),
+
+           MP1X            =SIMP(statut='f',typ=('R',listr8_sdaster)),
+           MP2X            =SIMP(statut='f',typ=('R',listr8_sdaster)),
+           MP1Y            =SIMP(statut='f',typ=('R',listr8_sdaster)),
+           MP2Y            =SIMP(statut='f',typ=('R',listr8_sdaster)),
+         ),
+         NAPPE     =FACT(statut='o',max=10,
+           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+           OMX             =SIMP(statut='o',typ='R',val_min=0.E+0),
+           OMY             =SIMP(statut='o',typ='R',val_min=0.E+0),
+           RX              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+           RY              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+         ),
+         CABLE_PREC   =FACT(statut='f',max=1,
+           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+           OMX             =SIMP(statut='o',typ='R',val_min=0.E+0),
+           OMY             =SIMP(statut='o',typ='R',val_min=0.E+0),
+           RX              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+           RY              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+           PREX            =SIMP(statut='o',typ='R'),
+           PREY            =SIMP(statut='o',typ='R'),
+         ),
+         LINER           =FACT(statut='f',max=10,
+           MATER           =SIMP(statut='o',typ=(mater_sdaster) ),
+           OML             =SIMP(statut='o',typ='R',val_min=0.E+0),
+           RLR             =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+         ),
+         IMPRESSION      =FACT(statut='f',
+           UNITE           =SIMP(statut='f',typ='I',defaut=8),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 02/02/2010   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+def defi_group_prod(MAILLAGE,**args):
+  if AsType(MAILLAGE) == maillage_sdaster : return maillage_sdaster
+  if AsType(MAILLAGE) == squelette : return squelette
+  raise AsException("type de concept resultat non prevu")
+
+DEFI_GROUP=OPER(nom="DEFI_GROUP",op= 104,sd_prod=defi_group_prod,
+                fr="Définition de nouveaux groupes de noeuds et/ou de mailles dans un concept maillage",
+                reentrant='o',
+            UIinfo={"groupes":("Maillage",)},
+         regles=(AU_MOINS_UN('CREA_GROUP_MA','CREA_GROUP_NO','DETR_GROUP_NO','DETR_GROUP_MA'),),
+         MAILLAGE        =SIMP(statut='o',typ=(maillage_sdaster,squelette) ),
+         DETR_GROUP_MA   =FACT(statut='f',max='**',
+           NOM             =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),),
+         DETR_GROUP_NO   =FACT(statut='f',max='**',
+           NOM             =SIMP(statut='o',typ=grno,validators=NoRepeat(),max='**'),),
+
+
+         CREA_GROUP_MA   =FACT(statut='f',max='**',
+              regles=(UN_PARMI('TOUT','GROUP_MA','MAILLE','INTERSEC','UNION','DIFFE','OPTION'),),
+            NOM             =SIMP(statut='o',typ=grma),
+            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+            GROUP_MA        =SIMP(statut='f',typ=grma),
+            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            INTERSEC        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            UNION           =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            DIFFE           =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            TYPE_MAILLE     =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","1D","2D","3D"),max=1 ),
+
+            OPTION         =SIMP(statut='f',typ='TXM',into=("FACE_NORMALE","SPHERE","CYLINDRE",
+                                                              "BANDE","APPUI_LACHE","APPUI") ),
+                b_group_ma      =BLOC(condition = "GROUP_MA != None",
+                  regles=(EXCLUS('POSITION','NUME_INIT'),),
+                  NUME_INIT       =SIMP(statut='f',typ='I'),
+                  POSITION        =SIMP(statut='f',typ='TXM',into=("INIT","FIN","MILIEU") ),
+                  b_nume_init   =BLOC(condition = "NUME_INIT != None",
+                    NUME_FIN        =SIMP(statut='f',typ='I' ),
+                  ),
+                ),
+                b_face_normale  =BLOC(condition = "OPTION == 'FACE_NORMALE'",
+                  regles=(UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+                  ANGL_NAUT       =SIMP(statut='f',typ='R',max=2),
+                  VECT_NORMALE    =SIMP(statut='f',typ='R',max=3),
+                  ANGL_PREC       =SIMP(statut='f',typ='R',defaut= 0.5 ),
+                  VERI_SIGNE      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+                ),
+                b_sphere        =BLOC(condition = "OPTION == 'SPHERE'",
+                  regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),),
+                  POINT           =SIMP(statut='f',typ='R',max=3),
+                  NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+                  GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
+                  RAYON           =SIMP(statut='o',typ='R' ),
+                ),
+                b_cylindre      =BLOC(condition = "OPTION == 'CYLINDRE'",
+                  regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+                          UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+                  POINT           =SIMP(statut='f',typ='R',max=3),
+                  NOEUD_CENTRE    =SIMP(statut='f',typ=no),
+                  GROUP_NO_CENTRE =SIMP(statut='f',typ=grno),
+                  RAYON           =SIMP(statut='o',typ='R' ),
+                  ANGL_NAUT       =SIMP(statut='f',typ='R',max=2),
+                  VECT_NORMALE    =SIMP(statut='f',typ='R',max=3),
+                ),
+                b_bande         =BLOC(condition = "OPTION == 'BANDE'",
+                  regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+                          UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+                  POINT           =SIMP(statut='f',typ='R' ,max=3),
+                  NOEUD_CENTRE    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=1),
+                  GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+                  DIST            =SIMP(statut='o',typ='R' ),
+                  ANGL_NAUT       =SIMP(statut='f',typ='R',max=2),
+                  VECT_NORMALE    =SIMP(statut='f',typ='R',max=3),
+                ),
+                b_app_lache         =BLOC(condition = "OPTION == 'APPUI_LACHE'",
+                  regles=(UN_PARMI('NOEUD','GROUP_NO'),),
+                  NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                  GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                ),
+                b_appui            =BLOC(condition = "OPTION == 'APPUI'",
+                  regles=(UN_PARMI('NOEUD','GROUP_NO'),),
+                  NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                  GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                  TYPE_APPUI      =SIMP(statut='o',typ='TXM',max=1, into=('AU_MOINS_UN','TOUT','SOMMET','MAJORITE')),
+                ),
+         ),
+
+
+         CREA_GROUP_NO   =FACT(statut='f',max='**',
+           OPTION          =SIMP(statut='f',typ='TXM',into=("ENV_SPHERE","ENV_CYLINDRE","PLAN",
+                                               "SEGM_DROI_ORDO","NOEUD_ORDO","TUNNEL","INCLUSION") ),
+
+           b_option =BLOC(condition = "OPTION == None" ,
+                          regles=(UN_PARMI('TOUT_GROUP_MA','GROUP_MA','GROUP_NO','NOEUD',
+                                                           'INTERSEC','UNION','DIFFE'),),
+              TOUT_GROUP_MA   =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+              GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+              NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+              INTERSEC        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+              UNION           =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+              DIFFE           =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+
+              b_nom_group_ma  =BLOC(condition = "GROUP_MA != None",
+                NOM           = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                CRIT_NOEUD    = SIMP(statut='f',typ='TXM',defaut="TOUS",
+                                  into=("TOUS","SOMMET","MILIEU","CENTRE"),),
+              ),
+              b_group_no      =BLOC(condition = "GROUP_NO != None",
+                                    regles=(EXCLUS('POSITION','NUME_INIT'),),
+                NUME_INIT       =SIMP(statut='f',typ='I'),
+                POSITION        =SIMP(statut='f',typ='TXM',into=("INIT","FIN","MILIEU") ),
+                b_nume_init     =BLOC(condition = "NUME_INIT != None",
+                  NUME_FIN        =SIMP(statut='f',typ='I' ),
+                ),
+              ),
+              b_nom =BLOC(condition = "GROUP_MA == None and TOUT_GROUP_MA == None" ,
+                NOM             =SIMP(statut='o',typ=geom),
+              ),
+           ),
+
+           b_env_sphere    =BLOC(condition = "OPTION == 'ENV_SPHERE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),),
+             NOM             =SIMP(statut='o',typ=geom),
+             POINT           =SIMP(statut='f',typ='R' ,max=3),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=1),
+             GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+             RAYON           =SIMP(statut='o',typ='R' ),
+             PRECISION       =SIMP(statut='o',typ='R' ),
+           ),
+           b_env_cylindre  =BLOC(condition = "OPTION == 'ENV_CYLINDRE'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+                     UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             NOM             =SIMP(statut='o',typ=geom),
+             POINT           =SIMP(statut='f',typ='R' ,max=3),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=1),
+             GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+             RAYON           =SIMP(statut='o',typ='R' ),
+             ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+             VECT_NORMALE    =SIMP(statut='f',typ='R',max=3),
+             PRECISION       =SIMP(statut='o',typ='R' ),
+           ),
+           b_env_plan      =BLOC(condition = "OPTION == 'PLAN'",
+             regles=(UN_PARMI('POINT','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+                     UN_PARMI('ANGL_NAUT','VECT_NORMALE'),),
+             NOM             =SIMP(statut='o',typ=geom),
+             POINT           =SIMP(statut='f',typ='R' ,max=3),
+             NOEUD_CENTRE    =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=1),
+             GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+             ANGL_NAUT       =SIMP(statut='f',typ='R' ,max=3),
+             VECT_NORMALE    =SIMP(statut='f',typ='R' ,max=3),
+             PRECISION       =SIMP(statut='o',typ='R' ),
+           ),
+           b_segm_droi_ordo=BLOC(condition = "OPTION == 'SEGM_DROI_ORDO'",
+             regles=(AU_MOINS_UN('NOEUD','GROUP_NO'),
+                     UN_PARMI('NOEUD_ORIG','GROUP_NO_ORIG'),
+                     UN_PARMI('NOEUD_EXTR','GROUP_NO_EXTR'),),
+             NOM             =SIMP(statut='o',typ=geom),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD_ORIG      =SIMP(statut='f',typ=no),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno),
+             NOEUD_EXTR      =SIMP(statut='f',typ=no),
+             GROUP_NO_EXTR   =SIMP(statut='f',typ=grno),
+             PRECISION       =SIMP(statut='o',typ='R' ),
+             CRITERE         =SIMP(statut='o',typ='TXM',into=("ABSOLU","RELATIF") ),
+           ),
+           b_noeud_ordo    =BLOC(condition = "OPTION == 'NOEUD_ORDO'",
+             regles=(EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
+                     EXCLUS('NOEUD_EXTR','GROUP_NO_EXTR'),),
+             NOM             =SIMP(statut='o',typ=geom),
+             GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+             NOEUD_ORIG      =SIMP(statut='f',typ=no),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno),
+             NOEUD_EXTR      =SIMP(statut='f',typ=no),
+             GROUP_NO_EXTR   =SIMP(statut='f',typ=grno),
+           ),
+           b_tunnel    =BLOC(condition = "OPTION == 'TUNNEL'",
+             regles=(AU_MOINS_UN ('TOUT','GROUP_MA','MAILLE'),
+                     EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
+                     AU_MOINS_UN ('GROUP_MA_AXE','MAILLE_AXE'),),
+             NOM             =SIMP(statut='o',typ=geom),
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA_AXE    =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE_AXE      =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             NOEUD_ORIG      =SIMP(statut='f',typ=no),
+             GROUP_NO_ORIG   =SIMP(statut='f',typ=grno),
+             RAYON           =SIMP(statut='o',typ='R'),
+             LONGUEUR        =SIMP(statut='f',typ='R'),
+           ),
+           b_inclusion         =BLOC(condition = "OPTION == 'INCLUSION'",
+             fr="""crée le groupe des noeuds des mailles de GROUP_MA inclus géométriquement
+                   dans les mailles de GROUP_MA_INCL""",
+             NOM             =SIMP(statut='o',typ=geom),
+             CAS_FIGURE      =SIMP(statut='o',typ='TXM',into=("2D","3D","2.5D",)),
+             DISTANCE_MAX    =SIMP(statut='f',typ='R',),
+             GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+             GROUP_MA_INCL   =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLAGE_INCL   =SIMP(statut='f',typ=maillage_sdaster),
+           ),
+         ),
+         ALARME          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         INFO            =SIMP(statut='f',typ='I',into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+from Macro.defi_inte_spec_ops import defi_inte_spec_ops
+
+DEFI_INTE_SPEC=MACRO(nom="DEFI_INTE_SPEC",op= defi_inte_spec_ops,sd_prod=table_fonction,
+                     reentrant='n',
+                     fr="Définit une matrice interspectrale",
+                     UIinfo={"groupes":("Fonction",)},
+
+         DIMENSION       =SIMP(statut='f',typ='I',defaut= 1 ),
+
+         PAR_FONCTION    =FACT(statut='f',max='**',
+           NUME_ORDRE_I    =SIMP(statut='o',typ='I' ),
+           NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
+           FONCTION        =SIMP(statut='o',typ=fonction_c ),
+         ),
+         KANAI_TAJIMI    =FACT(statut='f',max='**',
+           regles=(EXCLUS('VALE_R','VALE_C'),),
+           NUME_ORDRE_I    =SIMP(statut='o',typ='I' ),
+           NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
+           FREQ_MIN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           FREQ_MAX        =SIMP(statut='f',typ='R',defaut= 100. ),
+           PAS             =SIMP(statut='f',typ='R',defaut= 1. ),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',defaut= 0.6 ),
+           FREQ_MOY        =SIMP(statut='f',typ='R',defaut= 5. ),
+           VALE_R          =SIMP(statut='f',typ='R' ),
+           VALE_C          =SIMP(statut='f',typ='C' ),
+           INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+           PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+           PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         ),
+         CONSTANT        =FACT(statut='f',max='**',
+           regles=(EXCLUS('VALE_R','VALE_C'),),
+           NUME_ORDRE_I    =SIMP(statut='o',typ='I' ),
+           NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
+           FREQ_MIN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           FREQ_MAX        =SIMP(statut='f',typ='R',defaut= 100. ),
+           PAS             =SIMP(statut='f',typ='R',defaut= 1. ),
+           VALE_R          =SIMP(statut='f',typ='R' ),
+           VALE_C          =SIMP(statut='f',typ='C' ),
+           INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+           PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+           PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),               
+)  ;
+#& MODIF COMMANDE  DATE 06/05/2008   AUTEUR CORUS M.CORUS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE CORUS M.CORUS
+
+DEFI_INTERF_DYNA=OPER(nom="DEFI_INTERF_DYNA",op=  98,sd_prod=interf_dyna_clas,
+                      reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+            fr="Définir les interfaces d'une structure et leur affecter un type",
+         NUME_DDL        =SIMP(statut='o',typ=nume_ddl_sdaster ),
+         INTERFACE       =FACT(statut='o',max='**',
+           regles=(ENSEMBLE('NOM','TYPE'),
+#  erreur doc U sur la condition qui suit
+                   UN_PARMI('NOEUD','GROUP_NO'),),
+           NOM             =SIMP(statut='f',typ='TXM' ),
+           TYPE            =SIMP(statut='f',typ='TXM',into=("MNEAL","CRAIGB","CB_HARMO","AUCUN") ),
+           NOEUD           =SIMP(statut='f',typ=no,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,max='**'),
+#           DDL_ACTIF       =SIMP(statut='f',typ='TXM',max='**'),
+           MASQUE          =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         FREQ            =SIMP(statut='f',typ='R',defaut= 1.),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+DEFI_LIST_ENTI=OPER(nom="DEFI_LIST_ENTI",op=22,sd_prod=listis_sdaster,
+                    fr="Définir une liste d'entiers strictement croissante",
+                    reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
+
+         OPERATION    =SIMP(statut='o',typ='TXM',defaut='DEFI',into=('DEFI','NUME_ORDRE',)),
+
+
+         # définition d'une liste d'entiers
+         #----------------------------------
+         b_defi       =BLOC(condition = "OPERATION == 'DEFI'",
+             regles=(UN_PARMI('VALE','DEBUT'),
+                     EXCLUS('VALE','INTERVALLE'),),
+             VALE            =SIMP(statut='f',typ='I',max='**'),
+             DEBUT           =SIMP(statut='f',typ='I'),
+             INTERVALLE      =FACT(statut='f',max='**',
+                 regles=(UN_PARMI('NOMBRE','PAS'),),
+                 JUSQU_A         =SIMP(statut='o',typ='I'),
+                 NOMBRE          =SIMP(statut='f',typ='I',val_min=1,),
+                 PAS             =SIMP(statut='f',typ='I',val_min=1,),
+             ),
+         ),
+
+
+         # extraction d'une liste de nume_ordre dans une sd_resultat :
+         #------------------------------------------------------------
+         b_extr       =BLOC(condition = "OPERATION == 'NUME_ORDRE'",
+             RESULTAT        =SIMP(statut='o',typ=resultat_sdaster),
+             PARAMETRE       =SIMP(statut='o',typ='TXM',),
+             INTERV_R        =SIMP(statut='o',typ='R',min=2,max=2),
+         ),
+
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 22/09/2009   AUTEUR SELLENET N.SELLENET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+
+DEFI_LIST_INST=OPER(nom="DEFI_LIST_INST",op=  28,sd_prod=list_inst,reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+               fr="Définition de la gestion de la liste d'instants",
+
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+# mot-cle pour la definition a priori de la liste d'instant
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+    DEFI_LIST             =FACT(statut='o',max=1,
+
+      METHODE  =SIMP(statut='o',typ='TXM',into=("MANUEL","AUTO",),defaut="MANUEL",max=1,position='global' ),
+
+         b_manuel            =BLOC(condition = "METHODE == 'MANUEL' ",fr="Liste d'instants donnée par l'utilisateur",
+           LIST_INST       =SIMP(statut='o',typ=listr8_sdaster),
+                                  ),
+                      
+         b_auto              =BLOC(condition = "METHODE == 'AUTO' ",fr="a compléter",
+           LIST_INST       =SIMP(statut='o',typ=listr8_sdaster),
+           PAS_MINI    =SIMP(statut='o',typ='R',val_min=0.0,max=1),
+           PAS_MAXI    =SIMP(statut='f',typ='R',max=1),
+           NB_PAS_MAXI =SIMP(statut='f',typ='I',max=1),
+                                  ),
+           
+#          b_cfl               =BLOC(condition = "METHODE  == 'CFL' ",fr="Liste d'instants construite sur condition CFL",
+#            COEF            =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut=0.5),
+#            MODELE          =SIMP(statut='o',typ=modele_sdaster),
+#                                   ),
+
+                               ),
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+# mot-cle pour le comportement en cas d'echec (on doit recommencer le meme instant)
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+    ECHEC  =FACT(statut='d',max='**',
+
+      EVENEMENT     =SIMP(statut='f',typ='TXM',into=("DIVERGENCE",),defaut="DIVERGENCE",max=1 ),
+
+      SUBD_METHODE    =SIMP(statut='f',typ='TXM',into =("AUCUNE","UNIFORME","EXTRAPOLE"),defaut="UNIFORME",max=1,
+                            fr="Méthode de subdivision des pas de temps en cas de diconvergence"),
+
+           b_subd_unif=BLOC(condition = "SUBD_METHODE == 'UNIFORME'",
+             regles=(AU_MOINS_UN('SUBD_NIVEAU','SUBD_PAS_MINI'),),
+             SUBD_COEF_PAS_1=SIMP(statut='f',typ='R',defaut=1.0,val_min=0.0,max=1,
+                fr="Coefficient multiplicateur de la 1ère subdivision"),
+             SUBD_PAS       =SIMP(statut='f',typ='I',defaut=4,val_min=2,max=1,
+                fr="Nombre de subdivision d'un pas de temps"),
+             SUBD_NIVEAU=SIMP(statut='f',typ='I',val_min=2,defaut=3,max=1,
+                fr="Nombre maximum de niveau de subdivision d'un pas de temps"),
+             SUBD_PAS_MINI=SIMP(statut='f',typ='R',defaut=0.,val_min=0.0,max=1,
+                fr="Pas de temps en dessous duquel on ne subdivise plus"),
+                           ),
+
+           b_subd_extr=BLOC(condition = "SUBD_METHODE == 'EXTRAPOLE'",
+             regles=(AU_MOINS_UN('SUBD_NIVEAU','SUBD_PAS_MINI'),),
+             SUBD_OPTION    =SIMP(statut='f',typ='TXM',
+                into =("IGNORE_PREMIERES","GARDE_DERNIERES",),
+                defaut="IGNORE_PREMIERES",
+                fr="Technique d'extrapolation : les 1ere itérations sont ignorées ou les dernières sont gardées"),
+             SUBD_ITER_IGNO =SIMP(statut='f',typ='I',defaut=3,val_min=3,max=1,
+                fr="Les n premières itérations sont ignorées pour l'extrapolation"),
+             SUBD_ITER_FIN  =SIMP(statut='f',typ='I',defaut=8,val_min=3,max=1,
+                fr="Seules les n dernières itérations sont prises pour l'extrapolation"),
+             SUBD_PAS       =SIMP(statut='f',typ='I',defaut=4,val_min=2,max=1,
+                fr="Nombre de subdivision d'un pas de temps en cas divergence"),
+             SUBD_NIVEAU=SIMP(statut='f',typ='I',val_min=2,max=1,
+                fr="Nombre maximum de niveau de subdivision d'un pas de temps"),
+             SUBD_PAS_MINI=SIMP(statut='f',typ='R',defaut=0.,val_min=0.0,max=1,
+                fr="Pas de temps en dessous duquel on ne subdivise plus"),
+             SUBD_ITER_PLUS =SIMP(statut='f',typ='I',defaut=50,val_min=20,max=1,
+                fr="% itération autorisée en plus"),
+                            ),
+
+               ),
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+# mot-cle pour le comportement en cas de succes (on a bien converge)
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+  b_adap  =   BLOC(condition="METHODE == 'AUTO'",
+
+    ADAPTATION  =FACT(statut='d',max='**',
+
+#     1) parametres de l'evenement declencheur
+#     ----------------------------------------
+
+      EVENEMENT       =SIMP(statut='f',typ='TXM',into=("SEUIL","TOUT_INST","AUCUN"),defaut="SEUIL",max=1 ),
+
+         b_adap_seuil       =BLOC(condition = "EVENEMENT == 'SEUIL' ",fr="seuil de re-decoupe",           
+
+#          FORMULE_SEUIL          =SIMP(statut='f',typ=formule),
+
+#          b_adap_seuil_nf   =   BLOC(condition="FORMULE_SEUIL == None",
+#              critere : si on fait NB_INCR_SEUIL fois de suite des increments verifiant le critere
+               regles=(PRESENT_PRESENT('NB_INCR_SEUIL','NOM_PARA',),
+                       PRESENT_PRESENT('NB_INCR_SEUIL','CRIT_COMP',),
+                       PRESENT_PRESENT('NB_INCR_SEUIL','CRIT_COMP',),),
+               NB_INCR_SEUIL     =SIMP(statut='f',typ='I',defaut=2),
+               NOM_PARA          =SIMP(statut='f',typ='TXM',into=("NB_ITER_NEWTON",),defaut="NB_ITER_NEWTON"),
+               CRIT_COMP         =SIMP(statut='f',typ='TXM',into=("LT","GT","LE","GE"),defaut="LE"),
+#                   b_vale_R           =BLOC(condition = "NOM_PARA == 'DP' ",fr="valeur reelle",           
+#                VALE              =SIMP(statut='o',typ='R'),
+#                                           ),
+                  b_vale_I           =BLOC(condition = "NOM_PARA == 'NB_ITER_NEWTON' ",fr="valeur entiere",           
+               VALE_I            =SIMP(statut='f',typ='I'),
+                                          ),
+#                                    ),
+                                ),
+                           
+#     2) parametre du mode de calcul de dt+
+#     ----------------------------------------
+
+      MODE_CALCUL_TPLUS =SIMP(statut='f',typ='TXM',into=("FIXE","DELTA_GRANDEUR","ITER_NEWTON","FORMULE"),defaut='FIXE',max=1 ),
+         b_mfixe           =BLOC(condition = "MODE_CALCUL_TPLUS == 'FIXE' ",fr="fixe",           
+#      dans le cas FIXE :(deltaT+) = (deltaT-)x(1+PCENT_AUGM/100)
+      PCENT_AUGM                 =SIMP(statut='f',typ='R',defaut=100.,val_min=-100.,max=1),
+                               ),
+         b_mdelta           =BLOC(condition = "MODE_CALCUL_TPLUS == 'DELTA_GRANDEUR' ",fr=" ",           
+#      dans le cas DELTA_GRANDEUR : (deltaT+) = (deltaT-)x(VALREF/deltaVAL) : l'acceleration est inversement proportionnelle
+#                                                                             a la variation de la grandeur
+      VALE_REF          =SIMP(statut='o',typ='R',max=1),
+      NOM_CHAM          =SIMP(statut='o',typ='TXM',into=("DEPL","VARI_ELGA","SIEF_ELGA",),max=1),
+      NOM_CMP           =SIMP(statut='o',typ='TXM',max=1),
+                                  ),
+         b_mitnew           =BLOC(condition = "MODE_CALCUL_TPLUS == 'ITER_NEWTON' ",fr=" ",           
+#      dans le cas ITER_NEWTON : (deltaT+) = (deltaT-) x sqrt(VALREF/N) : l'acceleration est inversement proportionnelle
+#                                                                        au nombre d'iter de Newton precedent
+      NB_ITER_NEWTON_REF          =SIMP(statut='o',typ='I',max=1),
+                                  ),
+         b_mformule           =BLOC(condition = "MODE_CALCUL_TPLUS == 'FORMULE' ",fr=" ",           
+#      dans le cas FORMULE
+           regles=UN_PARMI('FORMULE_TPLUS','NOM_SCHEMA'),
+      FORMULE_TPLUS     =SIMP(statut='f',typ=formule),
+      NOM_SCHEMA        =SIMP(statut='f',typ='TXM',into=("OLIVER",)),
+                                   ),
+
+# les schemas pre-definis :
+#  abaqus : 
+#      EVENEMENT       ='SEUIL'
+#      NB_INCR_SEUIL     = 2
+#      NOM_PARA          ='NB_ITER_NEWTON'
+#      CRIT_COMP         ='LE'
+#      VALE_I            = 5
+#      MODE_CALCUL_TPLUS ='FIXE'
+#      PCENT_AUGM        = 50.
+#  Zebulon 1 : 
+#      EVENEMENT       ='TOUT_INST'
+#      MODE_CALCUL_TPLUS ='DELTA_GRANDEUR'
+#      VALE_REF          = valref
+#      NOM_CHAM          ='VARI_ELGA'
+#      NOM_CMP           ='V1'
+#  Zebulon 2 : 
+#      EVENEMENT       ='TOUT_INST'
+#      MODE_CALCUL_TPLUS ='ITER_NEWTON'
+#      NB_ITER_NEWTON_REF= nc
+#  Tough2 : 
+#      EVENEMENT       ='SEUIL'
+#      NB_INCR_SEUIL     = 1
+#      NOM_PARA          ='NB_ITER_NEWTON'
+#      CRIT_COMP         ='LE'
+#      VALE_I            = n
+#      MODE_CALCUL_TPLUS ='FIXE'
+#      PCENT_AUGM        = 100.
+#  Oliver : 
+#      EVENEMENT       ='TOUT_INST'
+#      MODE_CALCUL_TPLUS ='FORMULE'
+#      NOM_SCHEMA        ='OLIVER'
+
+             ),
+      ),
+
+# ----------------------------------------------------------------------------------------------------------------------------------
+
+    INFO                  =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+
+)  ;
+      
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+DEFI_LIST_REEL=OPER(nom="DEFI_LIST_REEL",op=24,sd_prod=listr8_sdaster,
+                    fr="Définir une liste de réels strictement croissante",
+                    reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
+         regles=(UN_PARMI('VALE','DEBUT',),
+                 EXCLUS('VALE','INTERVALLE'),
+                 ENSEMBLE('DEBUT','INTERVALLE')),
+         VALE            =SIMP(statut='f',typ='R',max='**'),
+         DEBUT           =SIMP(statut='f',typ='R'),
+         INTERVALLE      =FACT(statut='f',max='**',
+           regles=(UN_PARMI('NOMBRE','PAS'),),
+           JUSQU_A         =SIMP(statut='o',typ='R'),
+           NOMBRE          =SIMP(statut='f',typ='I'),
+           PAS             =SIMP(statut='f',typ='R'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+DEFI_MAILLAGE=OPER(nom="DEFI_MAILLAGE",op=  88,sd_prod=maillage_sdaster,
+                   fr="Définition d'un nouveau maillage à partir de macro-éléments",
+                   reentrant='n',
+            UIinfo={"groupes":("Maillage",)},
+         DEFI_SUPER_MAILLE =FACT(statut='o',max='**',
+           MACR_ELEM       =SIMP(statut='o',typ=(macr_elem_stat,macr_elem_dyna),max='**' ),
+           SUPER_MAILLE    =SIMP(statut='f',typ=ma,max='**'),
+           TRAN            =SIMP(statut='f',typ='R',max=3),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+           b_angl_naut     =BLOC(condition = "ANGL_NAUT != None",
+             CENTRE          =SIMP(statut='f',typ='R',max=3),
+           ),
+         ),
+         RECO_GLOBAL     =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           SUPER_MAILLE    =SIMP(statut='f',typ=ma,max='**'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+         ),
+         RECO_SUPER_MAILLE =FACT(statut='f',max='**',
+           SUPER_MAILLE    =SIMP(statut='o',typ=ma,max='**'),
+           GROUP_NO        =SIMP(statut='o',typ=grno,max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="GEOMETRIQUE",into=("GEOMETRIQUE","NOEUD_A_NOEUD","INVERSE") ),
+           geometrique     =BLOC(condition = "OPTION == 'GEOMETRIQUE'",
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ),
+         ),
+         DEFI_NOEUD      =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','NOEUD_INIT'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",),
+                                 fr="Renommage de tous les noeuds" ),
+           NOEUD_INIT      =SIMP(statut='f',typ=no,
+                                 fr="Renommage d un seul noeud"),                     
+           b_tout          =BLOC(condition = "TOUT != None",
+             PREFIXE         =SIMP(statut='f',typ='TXM' ),
+             INDEX           =SIMP(statut='o',typ='I',max='**'),
+           ),
+           b_noeud_init    =BLOC(condition = "NOEUD_INIT != None",
+             SUPER_MAILLE    =SIMP(statut='o',typ=ma),
+             NOEUD_FIN       =SIMP(statut='o',typ=no),
+           ),        
+         ),
+         DEFI_GROUP_NO   =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','SUPER_MAILLE'),
+                AU_MOINS_UN('INDEX','GROUP_NO_FIN'),
+                   ENSEMBLE('GROUP_NO_INIT','GROUP_NO_FIN'),),
+#  la regle ancien catalogue AU_MOINS_UN__: ( INDEX , GROUP_NO_FIN ) incoherente avec doc U           
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",),
+                                 fr="Création de plusieurs groupes de noeuds" ),
+           SUPER_MAILLE    =SIMP(statut='f',typ=ma,
+                                 fr="Création de plusieurs groupes de noeuds"),
+           GROUP_NO_INIT   =SIMP(statut='f',typ=grno,
+                                 fr="Création d un seul groupe de noeuds"),
+           PREFIXE         =SIMP(statut='f',typ='TXM' ),
+           INDEX           =SIMP(statut='f',typ='I',max='**'),
+           GROUP_NO_FIN    =SIMP(statut='f',typ=grno),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 20/04/2010   AUTEUR JAUBERT A.JAUBERT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+DEFI_MATERIAU=OPER(nom="DEFI_MATERIAU",op=5,sd_prod=mater_sdaster,
+                   fr="Définition des paramètres décrivant le comportement d un matériau",
+                   reentrant='f',
+            UIinfo={"groupes":("Modélisation",)},
+       regles=(EXCLUS('ELAS','ELAS_FO','ELAS_FLUI','ELAS_ISTR','ELAS_ISTR_FO','ELAS_ORTH',
+                      'ELAS_ORTH_FO','ELAS_COQUE','ELAS_COQUE_FO',
+                      'ELAS_HYPER','ELAS_2NDG',),
+               EXCLUS('THER','THER_FO','THER_ORTH','THER_NL'),
+               EXCLUS('ECRO_LINE','ECRO_LINE_FO','ECRO_PUIS'),
+               EXCLUS('TAHERI','TAHERI_FO'),
+               EXCLUS('ROUSSELIER','ROUSSELIER_FO'),
+               EXCLUS('VISC_SINH','VISC_SINH_FO'),
+               PRESENT_PRESENT('ROUSSELIER','TRACTION'),
+               PRESENT_PRESENT('ROUSSELIER_FO','TRACTION'),
+               EXCLUS('CIN1_CHAB','CIN1_CHAB_FO'),
+               EXCLUS('CIN2_CHAB','CIN2_CHAB_FO'),
+               EXCLUS('VISCOCHAB','VISCOCHAB_FO'),
+               EXCLUS('LEMAITRE','LEMAITRE_FO','VISC_IRRA_LOG',
+               'LEMA_SEUIL','LEMA_SEUIL_FO','LEMAITRE_IRRA','LMARC_IRRA',),
+               EXCLUS('LMARC','LMARC_FO'),
+               EXCLUS('META_LEMA_ANI','META_LEMA_ANI_FO'),
+               EXCLUS('VMIS_POUTRE','VMIS_POUTRE_FO'),
+               EXCLUS('VENDOCHAB','VENDOCHAB_FO'),
+               PRESENT_PRESENT('BPEL_ACIER','ELAS'),
+               EXCLUS('RCCM','RCCM_FO'),
+               EXCLUS('WEIBULL','WEIBULL_FO'),
+               PRESENT_PRESENT('LAIGLE','ELAS'),
+               PRESENT_PRESENT('LETK','ELAS'),
+               PRESENT_PRESENT('DRUCK_PRAGER','ELAS'),
+               PRESENT_PRESENT('VISC_DRUC_PRAG','ELAS'),
+               PRESENT_PRESENT('ELAS_GONF','ELAS'),
+               PRESENT_PRESENT('HOEK_BROWN','ELAS'),
+               EXCLUS('MAZARS','MAZARS_FO'),
+               PRESENT_PRESENT('JOINT_BA','ELAS'),
+               PRESENT_PRESENT('CABLE','ELAS'),
+               ),
+           MATER      =SIMP(statut='f',typ=mater_sdaster),
+#
+# comportement élastique
+#
+           ELAS            =FACT(statut='f',
+             E               =SIMP(statut='o',typ='R',val_min=0.E+0),
+             NU              =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=0.5E+0),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+             AMOR_ALPHA      =SIMP(statut='f',typ='R'),
+             AMOR_BETA       =SIMP(statut='f',typ='R'),
+             AMOR_HYST       =SIMP(statut='f',typ='R'),
+           ),
+           ELAS_FO         =FACT(statut='f',
+             regles=(PRESENT_PRESENT('ALPHA','TEMP_DEF_ALPHA'),),
+             E               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             NU              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             RHO             =SIMP(statut='f',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.),
+             ALPHA           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             AMOR_ALPHA      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             AMOR_BETA       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             AMOR_HYST       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             K_DESSIC        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             B_ENDOGE        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             FONC_DESORP     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ELAS_FLUI       =FACT(statut='f',
+             E               =SIMP(statut='o',typ='R'),
+             NU              =SIMP(statut='o',typ='R'),
+             RHO             =SIMP(statut='o',typ='R'),
+             PROF_RHO_F_INT  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PROF_RHO_F_EXT  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COEF_MASS_AJOU  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ELAS_ISTR       =FACT(statut='f',
+             E_L             =SIMP(statut='o',typ='R'),
+             E_N             =SIMP(statut='o',typ='R'),
+             NU_LT           =SIMP(statut='o',typ='R'),
+             NU_LN           =SIMP(statut='o',typ='R'),
+             G_LN            =SIMP(statut='o',typ='R'),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA_L         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             ALPHA_N         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           ELAS_ISTR_FO    =FACT(statut='f',
+             regles=(
+                      PRESENT_PRESENT('ALPHA_L','TEMP_DEF_ALPHA'),
+                      PRESENT_PRESENT('ALPHA_N','TEMP_DEF_ALPHA'),
+                    ),
+             E_L             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             E_N             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             NU_LT           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             NU_LN           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G_LN            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             RHO             =SIMP(statut='f',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.),
+             ALPHA_L         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ALPHA_N         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ELAS_ORTH       =FACT(statut='f',
+             E_L             =SIMP(statut='o',typ='R'),
+             E_T             =SIMP(statut='o',typ='R'),
+             E_N             =SIMP(statut='f',typ='R'),
+             NU_LT           =SIMP(statut='o',typ='R'),
+             NU_LN           =SIMP(statut='f',typ='R'),
+             NU_TN           =SIMP(statut='f',typ='R'),
+             G_LT            =SIMP(statut='o',typ='R'),
+             G_LN            =SIMP(statut='f',typ='R'),
+             G_TN            =SIMP(statut='f',typ='R'),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA_L         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             ALPHA_T         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             ALPHA_N         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             XT              =SIMP(statut='f',typ='R',defaut= 1. ),
+             XC              =SIMP(statut='f',typ='R',defaut= 1. ),
+             YT              =SIMP(statut='f',typ='R',defaut= 1. ),
+             YC              =SIMP(statut='f',typ='R',defaut= 1. ),
+             S_LT            =SIMP(statut='f',typ='R',defaut= 1. ),
+             AMOR_ALPHA      =SIMP(statut='f',typ='R'),
+             AMOR_BETA       =SIMP(statut='f',typ='R'),
+             AMOR_HYST       =SIMP(statut='f',typ='R'),
+           ),
+           ELAS_ORTH_FO    =FACT(statut='f',
+             regles=(
+                      PRESENT_PRESENT('ALPHA_L','TEMP_DEF_ALPHA'),
+                      PRESENT_PRESENT('ALPHA_N','TEMP_DEF_ALPHA'),
+                      PRESENT_PRESENT('ALPHA_T','TEMP_DEF_ALPHA'),
+                    ),
+             E_L             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             E_T             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             E_N             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             NU_LT           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             NU_LN           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             NU_TN           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G_LT            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G_LN            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G_TN            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             RHO             =SIMP(statut='f',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1. ),
+             ALPHA_L         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ALPHA_T         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ALPHA_N         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             AMOR_ALPHA      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             AMOR_BETA       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             AMOR_HYST       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ELAS_HYPER      =FACT(statut='f',
+                                 regles=(UN_PARMI('K','NU'),),
+             C10             =SIMP(statut='f',typ='R',defaut=0.0),
+             C01             =SIMP(statut='o',typ='R'),
+             C20             =SIMP(statut='f',typ='R',defaut=0.0),
+             K               =SIMP(statut='f',typ='R'),
+             RHO             =SIMP(statut='f',typ='R',defaut=0.0),
+             NU              =SIMP(statut='f',typ='R',val_min=-1.E+0,val_max=0.5E+0),
+           ),
+           ELAS_COQUE      =FACT(statut='f',
+             regles=(EXCLUS('MEMB_L','M_LLLL',),
+                     PRESENT_PRESENT('MEMB_L','MEMB_LT', 'MEMB_T','MEMB_G_LT','FLEX_L','FLEX_LT',
+                                     'FLEX_T','FLEX_G_LT','CISA_L','CISA_T',),
+                     PRESENT_PRESENT('M_LLLL','M_LLTT','M_LLLT','M_TTTT','M_TTLT','M_LTLT','F_LLLL',
+                                     'F_LLTT','F_LLLT','F_TTTT','F_TTLT','F_LTLT','MF_LLLL',
+                                     'MF_LLTT','MF_LLLT','MF_TTTT','MF_TTLT','MF_LTLT','MC_LLLZ',
+                                     'MC_LLTZ','MC_TTLZ','MC_TTTZ','MC_LTLZ','MC_LTTZ','FC_LLLZ',
+                                     'FC_LLTZ','FC_TTLZ','FC_TTTZ','FC_LTLZ','FC_LTTZ','C_LZLZ',
+                                     'C_LZTZ','C_TZTZ'),),
+             MEMB_L          =SIMP(statut='f',typ='R'),
+             MEMB_LT         =SIMP(statut='f',typ='R'),
+             MEMB_T          =SIMP(statut='f',typ='R'),
+             MEMB_G_LT       =SIMP(statut='f',typ='R'),
+             FLEX_L          =SIMP(statut='f',typ='R'),
+             FLEX_LT         =SIMP(statut='f',typ='R'),
+             FLEX_T          =SIMP(statut='f',typ='R'),
+             FLEX_G_LT       =SIMP(statut='f',typ='R'),
+             CISA_L          =SIMP(statut='f',typ='R'),
+             CISA_T          =SIMP(statut='f',typ='R'),
+             M_LLLL          =SIMP(statut='f',typ='R'),
+             M_LLTT          =SIMP(statut='f',typ='R'),
+             M_LLLT          =SIMP(statut='f',typ='R'),
+             M_TTTT          =SIMP(statut='f',typ='R'),
+             M_TTLT          =SIMP(statut='f',typ='R'),
+             M_LTLT          =SIMP(statut='f',typ='R'),
+             F_LLLL          =SIMP(statut='f',typ='R'),
+             F_LLTT          =SIMP(statut='f',typ='R'),
+             F_LLLT          =SIMP(statut='f',typ='R'),
+             F_TTTT          =SIMP(statut='f',typ='R'),
+             F_TTLT          =SIMP(statut='f',typ='R'),
+             F_LTLT          =SIMP(statut='f',typ='R'),
+             MF_LLLL         =SIMP(statut='f',typ='R'),
+             MF_LLTT         =SIMP(statut='f',typ='R'),
+             MF_LLLT         =SIMP(statut='f',typ='R'),
+             MF_TTTT         =SIMP(statut='f',typ='R'),
+             MF_TTLT         =SIMP(statut='f',typ='R'),
+             MF_LTLT         =SIMP(statut='f',typ='R'),
+             MC_LLLZ         =SIMP(statut='f',typ='R'),
+             MC_LLTZ         =SIMP(statut='f',typ='R'),
+             MC_TTLZ         =SIMP(statut='f',typ='R'),
+             MC_TTTZ         =SIMP(statut='f',typ='R'),
+             MC_LTLZ         =SIMP(statut='f',typ='R'),
+             MC_LTTZ         =SIMP(statut='f',typ='R'),
+             FC_LLLZ         =SIMP(statut='f',typ='R'),
+             FC_LLTZ         =SIMP(statut='f',typ='R'),
+             FC_TTLZ         =SIMP(statut='f',typ='R'),
+             FC_TTTZ         =SIMP(statut='f',typ='R'),
+             FC_LTLZ         =SIMP(statut='f',typ='R'),
+             FC_LTTZ         =SIMP(statut='f',typ='R'),
+             C_LZLZ          =SIMP(statut='f',typ='R'),
+             C_LZTZ          =SIMP(statut='f',typ='R'),
+             C_TZTZ          =SIMP(statut='f',typ='R'),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+           ),
+           ELAS_COQUE_FO   =FACT(statut='f',
+             regles=(EXCLUS('MEMB_L','M_LLLL',),
+                     PRESENT_PRESENT('MEMB_L','MEMB_LT','MEMB_T','MEMB_G_LT','FLEX_L','FLEX_LT',
+                                     'FLEX_T','FLEX_G_LT','CISA_L','CISA_T',),
+                     PRESENT_PRESENT('M_LLLL','M_LLTT','M_LLLT','M_TTTT','M_TTLT','M_LTLT','F_LLLL',
+                                     'F_LLTT','F_LLLT','F_TTTT','F_TTLT','F_LTLT','MF_LLLL','MF_LLTT',
+                                     'MF_LLLT','MF_TTTT','MF_TTLT','MF_LTLT','MC_LLLZ','MC_LLTZ',
+                                     'MC_TTLZ','MC_TTTZ','MC_LTLZ','MC_LTTZ','FC_LLLZ','FC_LLTZ',
+                                     'FC_TTLZ','FC_TTTZ','FC_LTLZ','FC_LTTZ','C_LZLZ','C_LZTZ','C_TZTZ'),),
+             MEMB_L          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MEMB_LT         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MEMB_T          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MEMB_G_LT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FLEX_L          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FLEX_LT         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FLEX_T          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FLEX_G_LT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CISA_L          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CISA_T          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_LLLL          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_LLTT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_LLLT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_TTTT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_TTLT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_LTLT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_LLLL          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_LLTT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_LLLT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_TTTT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_TTLT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_LTLT          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MF_LLLL         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MF_LLTT         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MF_LLLT         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MF_TTTT         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MF_TTLT         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MF_LTLT         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MC_LLLZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MC_LLTZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MC_TTLZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MC_TTTZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MC_LTLZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MC_LTTZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FC_LLLZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FC_LLTZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FC_TTLZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FC_TTTZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FC_LTLZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FC_LTTZ         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_LZLZ          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_LZTZ          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_TZTZ          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             RHO             =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ELAS_2NDG        =FACT(statut='f',
+             A1              =SIMP(statut='o',typ='R'),
+             A2              =SIMP(statut='f',typ='R'),
+             A3              =SIMP(statut='f',typ='R'),
+             A4              =SIMP(statut='f',typ='R'),
+             A5              =SIMP(statut='f',typ='R'),
+           ),
+           CABLE           =FACT(statut='f',
+             EC_SUR_E        =SIMP(statut='f',typ='R',defaut= 1.E-4 ),
+           ),
+#
+# comportement mécanique non linéaire
+#
+           TRACTION        =FACT(statut='f',
+             SIGM            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ECRO_LINE       =FACT(statut='f',
+             D_SIGM_EPSI     =SIMP(statut='o',typ='R',),
+             SY              =SIMP(statut='o',typ='R',),
+           ),
+           ECRO_LINE_FO    =FACT(statut='f',
+             D_SIGM_EPSI     =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SY              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ECRO_PUIS       =FACT(statut='f',
+             SY              =SIMP(statut='o',typ='R',),
+             A_PUIS          =SIMP(statut='o',typ='R',val_min=0.0),
+             N_PUIS          =SIMP(statut='o',typ='R',val_min=1.E-6),
+           ),
+           ECRO_PUIS_FO    =FACT(statut='f',
+             SY              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_PUIS          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             N_PUIS          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           BETON_ECRO_LINE =FACT(statut='f',
+             D_SIGM_EPSI     =SIMP(statut='o',typ='R'),
+             SYT             =SIMP(statut='o',typ='R'),
+             SYC             =SIMP(statut='f',typ='R'),
+           ),
+           BETON_REGLE_PR =FACT(statut='f',
+             D_SIGM_EPSI     =SIMP(statut='o',typ='R'),
+             SYT             =SIMP(statut='o',typ='R'),
+             SYC             =SIMP(statut='f',typ='R'),
+             EPSC            =SIMP(statut='f',typ='R'),
+             N               =SIMP(statut='f',typ='R'),
+           ),
+           ENDO_ORTH_BETON  =FACT(statut='f',
+             ALPHA            =SIMP(statut='f',typ='R',defaut=0.9),
+             K0               =SIMP(statut='o',typ='R'),
+             K1               =SIMP(statut='o',typ='R'),
+             K2               =SIMP(statut='f',typ='R',defaut=7.E-4),
+             ECROB            =SIMP(statut='o',typ='R'),
+             ECROD            =SIMP(statut='o',typ='R'),
+           ),
+           PRAGER          =FACT(statut='f',
+             C               =SIMP(statut='o',typ='R'),
+           ),
+           PRAGER_FO       =FACT(statut='f',
+             C               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ECRO_FLEJOU     =FACT(statut='f',
+             EP              =SIMP(statut='o',typ='R'),
+             SY              =SIMP(statut='o',typ='R'),
+             SU              =SIMP(statut='o',typ='R'),
+             PUISS           =SIMP(statut='o',typ='R'),
+           ),
+           TAHERI          =FACT(statut='f',
+             R_0             =SIMP(statut='o',typ='R'),
+             ALPHA           =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+             A               =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             C1              =SIMP(statut='o',typ='R'),
+             C_INF           =SIMP(statut='o',typ='R'),
+             S               =SIMP(statut='o',typ='R'),
+           ),
+           TAHERI_FO       =FACT(statut='f',
+             R_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ALPHA           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             B               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C1              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_INF           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             S               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ROUSSELIER      =FACT(statut='f',
+             D               =SIMP(statut='o',typ='R'),
+             SIGM_1          =SIMP(statut='o',typ='R'),
+             PORO_INIT       =SIMP(statut='o',typ='R'),
+             PORO_CRIT       =SIMP(statut='f',typ='R',defaut= 1. ),
+             PORO_ACCE       =SIMP(statut='f',typ='R',defaut= 1. ),
+             PORO_LIMI       =SIMP(statut='f',typ='R',defaut= 0.999 ),
+             D_SIGM_EPSI_NORM=SIMP(statut='f',typ='R',defaut= 1. ),
+             AN              =SIMP(statut='f',typ='R',defaut= 0. ),
+             DP_MAXI         =SIMP(statut='f',typ='R',defaut= 0.1),
+             BETA            =SIMP(statut='f',typ='R',defaut=0.85),
+           ),
+           ROUSSELIER_FO   =FACT(statut='f',
+             D               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SIGM_1          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PORO_INIT       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PORO_CRIT       =SIMP(statut='f',typ='R',defaut= 1. ),
+             PORO_ACCE       =SIMP(statut='f',typ='R',defaut= 1. ),
+             PORO_LIMI       =SIMP(statut='f',typ='R',defaut= 0.999 ),
+             D_SIGM_EPSI_NORM=SIMP(statut='f',typ='R',defaut= 1. ),
+             AN              =SIMP(statut='f',typ='R',defaut= 0. ),
+             DP_MAXI         =SIMP(statut='f',typ='R',defaut= 0.1),
+             BETA            =SIMP(statut='f',typ='R',defaut=0.85),
+           ),
+           VISC_SINH      =FACT(statut='f',
+             SIGM_0          =SIMP(statut='o',typ='R'),
+             EPSI_0          =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+           ),
+           VISC_SINH_FO      =FACT(statut='f',
+             SIGM_0          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             EPSI_0          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           CIN1_CHAB  =FACT(statut='f',
+             R_0             =SIMP(statut='o',typ='R'),
+             R_I             =SIMP(statut='f',typ='R'),
+             B               =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+             C_I             =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+             W               =SIMP(statut='f',typ='R',defaut= 0.0E+0),
+             G_0             =SIMP(statut='o',typ='R'),
+             A_I             =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           ),
+           CIN1_CHAB_FO  =FACT(statut='f',
+             R_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             R_I             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             B               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_I             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             K               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             W               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_I             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           CIN2_CHAB  =FACT(statut='f',
+             R_0             =SIMP(statut='o',typ='R'),
+             R_I             =SIMP(statut='f',typ='R'),
+             B               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             C1_I            =SIMP(statut='o',typ='R'),
+             C2_I            =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='f',typ='R',defaut= 1.),
+             W               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             G1_0            =SIMP(statut='o',typ='R'),
+             G2_0            =SIMP(statut='o',typ='R'),
+             A_I             =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+           ),
+           CIN2_CHAB_FO  =FACT(statut='f',
+             R_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             R_I             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             B               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C1_I            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C2_I            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             K               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             W               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G1_0            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G2_0            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_I             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           MEMO_ECRO       =FACT(statut='f',
+             MU              =SIMP(statut='o',typ='R'),
+             Q_M             =SIMP(statut='o',typ='R'),
+             Q_0             =SIMP(statut='o',typ='R'),
+             ETA             =SIMP(statut='f',typ='R',defaut= 0.5E+0 ),
+           ),
+           MEMO_ECRO_FO        =FACT(statut='f',
+             MU              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             Q_M             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             Q_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ETA             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           VISCOCHAB       =FACT(statut='f',
+             K_0             =SIMP(statut='o',typ='R'),
+             A_K             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             A_R             =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+             K               =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             ALP             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             B               =SIMP(statut='f',typ='R'),
+             M_R             =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+             G_R             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             MU              =SIMP(statut='o',typ='R',defaut= 0.E+0 ),
+             Q_M             =SIMP(statut='o',typ='R'),
+             Q_0             =SIMP(statut='o',typ='R'),
+             QR_0            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             ETA             =SIMP(statut='f',typ='R',defaut= 0.5E+0 ),
+             C1              =SIMP(statut='o',typ='R'),
+             M_1             =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+             D1              =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+             G_X1            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             G1_0            =SIMP(statut='o',typ='R'),
+             C2              =SIMP(statut='o',typ='R'),
+             M_2             =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+             D2              =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+             G_X2            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             G2_0            =SIMP(statut='o',typ='R'),
+             A_I             =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+           ),
+           VISCOCHAB_FO    =FACT(statut='f',
+             K_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_K             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_R             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             K               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             N               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ALP             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             B               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_R             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G_R             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MU              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             Q_M             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             Q_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             QR_0            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ETA             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C1              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_1             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D1              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G_X1            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G1_0            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C2              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_2             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D2              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G_X2            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             G2_0            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_I             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           LEMAITRE        =FACT(statut='f',
+             N               =SIMP(statut='o',typ='R'),
+             UN_SUR_K        =SIMP(statut='o',typ='R'),
+             UN_SUR_M        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           LEMAITRE_IRRA    =FACT(statut='f',
+             N               =SIMP(statut='o',typ='R'),
+             UN_SUR_K        =SIMP(statut='o',typ='R'),
+             UN_SUR_M        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             QSR_K           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             BETA            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             PHI_ZERO        =SIMP(statut='f',typ='R',defaut= 1.E+20),
+             L               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             GRAN_A          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             GRAN_B          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             GRAN_S          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           LMARC_IRRA       =FACT(statut='f',
+             DE_0            =SIMP(statut='o',typ='R'),
+             R_0             =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             Y_I             =SIMP(statut='o',typ='R'),
+             Y_0             =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             A_0             =SIMP(statut='o',typ='R'),
+             RM              =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+             P               =SIMP(statut='o',typ='R'),
+             P1              =SIMP(statut='o',typ='R'),
+             P2              =SIMP(statut='o',typ='R'),
+             M11             =SIMP(statut='o',typ='R'),
+             M22             =SIMP(statut='o',typ='R'),
+             M33             =SIMP(statut='o',typ='R'),
+             M66             =SIMP(statut='o',typ='R'),
+             N11             =SIMP(statut='o',typ='R'),
+             N22             =SIMP(statut='o',typ='R'),
+             N33             =SIMP(statut='o',typ='R'),
+             N66             =SIMP(statut='o',typ='R'),
+             Q11             =SIMP(statut='o',typ='R'),
+             Q22             =SIMP(statut='o',typ='R'),
+             Q33             =SIMP(statut='o',typ='R'),
+             Q66             =SIMP(statut='o',typ='R'),
+             R11             =SIMP(statut='o',typ='R'),
+             R22             =SIMP(statut='o',typ='R'),
+             R33             =SIMP(statut='o',typ='R'),
+             R66             =SIMP(statut='o',typ='R'),
+             GRAN_A          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             GRAN_B          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             GRAN_S          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+          VISC_IRRA_LOG    =FACT(statut='f',
+             A               =SIMP(statut='f',typ='R',defaut= 1.28E-1),
+             B               =SIMP(statut='f',typ='R',defaut= 0.01159),
+             CSTE_TPS        =SIMP(statut='f',typ='R',defaut= 0.3540),
+             ENER_ACT        =SIMP(statut='f',typ='R',defaut= 5000.),
+             FLUX_PHI        =SIMP(statut='o',typ='R',),
+           ),
+          GRAN_IRRA_LOG    =FACT(statut='f',
+             A               =SIMP(statut='f',typ='R',defaut= 1.28E-1),
+             B               =SIMP(statut='f',typ='R',defaut= 0.01159),
+             CSTE_TPS        =SIMP(statut='f',typ='R',defaut= 0.3540),
+             ENER_ACT        =SIMP(statut='f',typ='R',defaut= 5000.),
+             FLUX_PHI        =SIMP(statut='o',typ='R',),
+             GRAN_A          =SIMP(statut='f',typ='R',defaut= 0.E+0),
+             GRAN_B          =SIMP(statut='f',typ='R',defaut= 0.E+0),
+             GRAN_S          =SIMP(statut='f',typ='R',defaut= 0.E+0),
+           ),
+          LEMA_SEUIL   =FACT(statut='f',
+             A               =SIMP(statut='o',typ='R',),
+             S               =SIMP(statut='o',typ='R',),
+           ),
+          LEMA_SEUIL_FO=FACT(statut='f',
+             A               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             S               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+         IRRAD3M=FACT(statut='f',
+               R02      =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+               EPSI_U   =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+               RM       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+               AI0      =SIMP(statut='o',typ='R',val_min=0.0),
+               ZETA_F   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+               ETAI_S   =SIMP(statut='o',typ='R',val_min=0.0),
+               RG0      =SIMP(statut='o',typ='R',val_min=0.0),
+               ALPHA    =SIMP(statut='o',typ='R',val_min=0.0),
+               PHI0     =SIMP(statut='o',typ='R',val_min=0.0),
+               KAPPA    =SIMP(statut='f',typ='R',val_min=0.0,defaut=0.8,val_max=1.0),
+               ZETA_G   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+               TOLER_ET =SIMP(statut='f',typ='R',val_min=0.0,defaut=0.15 ),
+         ),
+           LEMAITRE_FO     =FACT(statut='f',
+             N               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             UN_SUR_K        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             UN_SUR_M        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           LMARC           =FACT(statut='f',
+             DE_0            =SIMP(statut='o',typ='R'),
+             R_0             =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             Y_I             =SIMP(statut='o',typ='R'),
+             Y_0             =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             A_0             =SIMP(statut='o',typ='R'),
+             RM              =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+             P               =SIMP(statut='o',typ='R'),
+             P1              =SIMP(statut='o',typ='R'),
+             P2              =SIMP(statut='o',typ='R'),
+             M11             =SIMP(statut='o',typ='R'),
+             M22             =SIMP(statut='o',typ='R'),
+             M33             =SIMP(statut='o',typ='R'),
+             M66             =SIMP(statut='o',typ='R'),
+             N11             =SIMP(statut='o',typ='R'),
+             N22             =SIMP(statut='o',typ='R'),
+             N33             =SIMP(statut='o',typ='R'),
+             N66             =SIMP(statut='o',typ='R'),
+             Q11             =SIMP(statut='o',typ='R'),
+             Q22             =SIMP(statut='o',typ='R'),
+             Q33             =SIMP(statut='o',typ='R'),
+             Q66             =SIMP(statut='o',typ='R'),
+             R11             =SIMP(statut='o',typ='R'),
+             R22             =SIMP(statut='o',typ='R'),
+             R33             =SIMP(statut='o',typ='R'),
+             R66             =SIMP(statut='o',typ='R'),
+           ),
+           LMARC_FO        =FACT(statut='f',
+             DE_0            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             R_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             N               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             K               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             Y_I             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             Y_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             B               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_0             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             RM              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             P               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             P1              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             P2              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M11             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M22             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M33             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M66             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             N11             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             N22             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             N33             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             N66             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             Q11             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             Q22             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             Q33             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             Q66             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             R11             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             R22             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             R33             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             R66             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+             META_LEMA_ANI     =FACT(statut='f',
+             F1_A            =SIMP(statut='o',typ='R'),
+             F2_A            =SIMP(statut='o',typ='R'),
+             C_A             =SIMP(statut='o',typ='R'),
+             F1_M            =SIMP(statut='o',typ='R'),
+             F2_M            =SIMP(statut='o',typ='R'),
+             C_M             =SIMP(statut='o',typ='R'),
+             F1_N            =SIMP(statut='o',typ='R'),
+             F2_N            =SIMP(statut='o',typ='R'),
+             C_N             =SIMP(statut='o',typ='R'),
+             F1_Q            =SIMP(statut='o',typ='R'),
+             F2_Q            =SIMP(statut='o',typ='R'),
+             C_Q             =SIMP(statut='o',typ='R'),
+             F_MRR_RR        =SIMP(statut='o',typ='R'),
+             C_MRR_RR        =SIMP(statut='o',typ='R'),
+             F_MTT_TT        =SIMP(statut='o',typ='R'),
+             C_MTT_TT        =SIMP(statut='o',typ='R'),
+             F_MZZ_ZZ        =SIMP(statut='o',typ='R'),
+             C_MZZ_ZZ        =SIMP(statut='o',typ='R'),
+             F_MRT_RT        =SIMP(statut='o',typ='R'),
+             C_MRT_RT        =SIMP(statut='o',typ='R'),
+             F_MRZ_RZ        =SIMP(statut='o',typ='R'),
+             C_MRZ_RZ        =SIMP(statut='o',typ='R'),
+             F_MTZ_TZ        =SIMP(statut='o',typ='R'),
+             C_MTZ_TZ        =SIMP(statut='o',typ='R'),
+           ),
+             META_LEMA_ANI_FO  =FACT(statut='f',
+             F1_A            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_A            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_A             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_M            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_M            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_M             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_N            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_N            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_N             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_Q            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_Q            =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_Q             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MRR_RR        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MRR_RR        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MTT_TT        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MTT_TT        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MZZ_ZZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MZZ_ZZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MRT_RT        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MRT_RT        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MRZ_RZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MRZ_RZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_MTZ_TZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_MTZ_TZ        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           VMIS_POUTRE     =FACT(statut='f',
+             NP              =SIMP(statut='o',typ='R'),
+             MEY             =SIMP(statut='o',typ='R'),
+             MPY             =SIMP(statut='o',typ='R'),
+             CAY             =SIMP(statut='o',typ='R'),
+             CBY             =SIMP(statut='o',typ='R'),
+             MEZ             =SIMP(statut='o',typ='R'),
+             MPZ             =SIMP(statut='o',typ='R'),
+             CAZ             =SIMP(statut='o',typ='R'),
+             CBZ             =SIMP(statut='o',typ='R'),
+             MPX             =SIMP(statut='o',typ='R'),
+           ),
+           VMIS_POUTRE_FO  =FACT(statut='f',
+             NP              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MEY             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MPY             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CAY             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CBY             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MEZ             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MPZ             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CAZ             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CBZ             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             MPX             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ARME            =FACT(statut='f',
+             KYE             =SIMP(statut='o',typ='R'),
+             DLE             =SIMP(statut='o',typ='R'),
+             KYP             =SIMP(statut='o',typ='R'),
+             DLP             =SIMP(statut='o',typ='R'),
+             KYG             =SIMP(statut='o',typ='R'),
+           ),
+           ASSE_CORN       =FACT(statut='f',
+             NU_1            =SIMP(statut='o',typ='R'),
+             MU_1            =SIMP(statut='o',typ='R'),
+             DXU_1           =SIMP(statut='o',typ='R'),
+             DRYU_1          =SIMP(statut='o',typ='R'),
+             C_1             =SIMP(statut='o',typ='R'),
+             NU_2            =SIMP(statut='o',typ='R'),
+             MU_2            =SIMP(statut='o',typ='R'),
+             DXU_2           =SIMP(statut='o',typ='R'),
+             DRYU_2          =SIMP(statut='o',typ='R'),
+             C_2             =SIMP(statut='o',typ='R'),
+             KY              =SIMP(statut='o',typ='R'),
+             KZ              =SIMP(statut='o',typ='R'),
+             KRX             =SIMP(statut='o',typ='R'),
+             KRZ             =SIMP(statut='o',typ='R'),
+             R_P0            =SIMP(statut='f',typ='R',defaut= 1.E+4 ),
+           ),
+           DIS_CONTACT     =FACT(statut='f',
+             RIGI_NOR        =SIMP(statut='f',typ='R' ),
+             RIGI_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             AMOR_NOR        =SIMP(statut='f',typ='R' ),
+             AMOR_TAN        =SIMP(statut='f',typ='R' ),
+             COULOMB         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             DIST_1          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             DIST_2          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             JEU             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           ENDO_SCALAIRE   =FACT(statut='f',
+             GAMMA           =SIMP(statut='o',typ='R',),
+             SY              =SIMP(statut='o',typ='R',),
+             COEF_RIGI_MINI  =SIMP(statut='f',typ='R',defaut=1.E-5),
+             DD_MAXI         =SIMP(statut='f',typ='R',defaut= 1.),
+           ),
+           DIS_GRICRA    =FACT(statut='f',
+             KN_AX       =SIMP(statut='o',typ='R' ),
+             KT_AX       =SIMP(statut='o',typ='R' ),
+             COUL_AX     =SIMP(statut='o',typ='R' ),
+             F_SER       =SIMP(statut='f',typ='R' ),
+             F_SER_FO    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ET_AX       =SIMP(statut='f',typ='R',defaut=1.e-7 ),
+             ET_ROT      =SIMP(statut='f',typ='R',defaut=1.e-7 ),
+             ANG1        =SIMP(statut='f',typ='R' ),
+             ANG2        =SIMP(statut='f',typ='R' ),
+             PEN1        =SIMP(statut='f',typ='R' ),
+             PEN2        =SIMP(statut='f',typ='R' ),
+             PEN3        =SIMP(statut='f',typ='R' ),
+             ANG1_FO     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ANG2_FO     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PEN1_FO     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PEN2_FO     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PEN3_FO     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             regles=(EXCLUS('ANG1','ANG1_FO',),
+                     UN_PARMI('ANG1','ANG1_FO',),
+                     EXCLUS('F_SER','F_SER_FO',),
+                     UN_PARMI('F_SER','F_SER_FO',),
+                     PRESENT_PRESENT('ANG1','ANG2','PEN1','PEN2','PEN3',),
+                     PRESENT_PRESENT('ANG1_FO','ANG2_FO','PEN1_FO','PEN2_FO','PEN3_FO',),
+                                     ),
+           ),
+           NADAI_B         =FACT(statut='f',
+             F_C             =SIMP(statut='o',typ='R',val_min=0.E+0),
+             F_T             =SIMP(statut='o',typ='R',val_min=0.E+0),
+             CRIT_E_C        =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
+             EPSP_P_C        =SIMP(statut='o',typ='R',val_min=0.E+0),
+             EPSP_R_C        =SIMP(statut='o',typ='R',val_min=0.E+0),
+             EPSI_R_T        =SIMP(statut='o',typ='R',val_min=0.E+0),
+             FAC_T_C         =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=1.E+0),
+           ),
+           BETON_DOUBLE_DP =FACT(statut='f',
+             F_C             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_T             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COEF_BIAX       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ENER_COMP_RUPT  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ENER_TRAC_RUPT  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COEF_ELAS_COMP  =SIMP(statut='o',typ='R',val_min=0.E+0,val_max=100.E+0),
+             LONG_CARA       =SIMP(statut='f',typ='R',val_min=0.E+0),
+             ECRO_COMP_P_PIC =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","PARABOLE") ),
+             ECRO_TRAC_P_PIC =SIMP(statut='f',typ='TXM',defaut="LINEAIRE",into=("LINEAIRE","EXPONENT") ),
+           ),
+           LABORD_1D=FACT(statut='f',min=0 ,
+             Y01             =SIMP(statut='o',typ='R'),
+             Y02             =SIMP(statut='o',typ='R'),
+             A1              =SIMP(statut='o',typ='R'),
+             A2              =SIMP(statut='o',typ='R'),
+             B1              =SIMP(statut='o',typ='R'),
+             B2              =SIMP(statut='o',typ='R'),
+             BETA1           =SIMP(statut='o',typ='R'),
+             BETA2           =SIMP(statut='o',typ='R'),
+             SIGF            =SIMP(statut='o',typ='R'),
+           ),
+         MAZARS=FACT(statut='f',min=0 ,
+             EPSD0           =SIMP(statut='o',typ='R'),
+             BETA            =SIMP(statut='o',typ='R'),
+             AC              =SIMP(statut='o',typ='R'),
+             BC              =SIMP(statut='o',typ='R'),
+             AT              =SIMP(statut='o',typ='R'),
+             BT              =SIMP(statut='o',typ='R'),
+             CHI             =SIMP(statut='f',typ='R',val_min=0.0E+0,val_max=1.0E+0),
+           ),
+         MAZARS_FO=FACT(statut='f',min=0 ,
+             EPSD0           =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             BETA            =SIMP(statut='o',typ='R'),
+             AC              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             BC              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             AT              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             BT              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CHI             =SIMP(statut='f',typ='R'),
+           ),
+         JOINT_BA=FACT(statut='f',min=0 ,max=1,
+             HPEN            =SIMP(statut='o',typ='R',defaut= 1.E+0,val_min=0.E+0),
+             GTT             =SIMP(statut='o',typ='R',val_min=0.E+0),
+             GAMD0           =SIMP(statut='o',typ='R',val_min=1.E-4,val_max=1.E-1),
+             AD1             =SIMP(statut='o',typ='R',val_min=0.E+0),
+             BD1             =SIMP(statut='o',typ='R',defaut= 5.E-1,val_min=1.E-1),
+             GAMD2           =SIMP(statut='o',typ='R',val_min=1.E-4,val_max=1.E+0),
+             AD2             =SIMP(statut='o',typ='R',val_min=0.E+0),
+             BD2             =SIMP(statut='o',typ='R',defaut= 1.E+0,val_min=1.E-1),
+             VIFROT          =SIMP(statut='o',typ='R',val_min=0.E+0),
+             FA              =SIMP(statut='o',typ='R',val_min=0.E+0),
+             FC              =SIMP(statut='o',typ='R',val_min=0.E+0),
+             EPSTR0          =SIMP(statut='o',typ='R',val_min=1.E-4,val_max=1.E+0),
+             ADN             =SIMP(statut='o',typ='R',val_min=0.E+0),
+             BDN             =SIMP(statut='o',typ='R',defaut= 1.E+0,val_min=1.E-1),
+           ),
+          VENDOCHAB       =FACT(statut='f',
+             S               =SIMP(statut='o',typ='R',defaut= 0.E+0),
+             ALPHA_D         =SIMP(statut='o',typ='R',defaut= 0.E+0),
+             BETA_D          =SIMP(statut='o',typ='R',defaut= 0.E+0),
+             N               =SIMP(statut='o',typ='R'),
+             UN_SUR_M        =SIMP(statut='o',typ='R',defaut= 0.E+0),
+             UN_SUR_K        =SIMP(statut='o',typ='R'),
+             R_D             =SIMP(statut='o',typ='R'),
+             A_D             =SIMP(statut='o',typ='R'),
+             K_D             =SIMP(statut='o',typ='R'),
+           ),
+           VENDOCHAB_FO    =FACT(statut='f',
+             S               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             ALPHA_D         =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             BETA_D          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             N               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             UN_SUR_M        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             UN_SUR_K        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             R_D             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_D             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             K_D             =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           PINTO_MENEGOTTO =FACT(statut='f',
+             SY              =SIMP(statut='o',typ='R'),
+             EPSI_ULTM       =SIMP(statut='o',typ='R'),
+             SIGM_ULTM       =SIMP(statut='o',typ='R'),
+             ELAN            =SIMP(statut='f',typ='R',defaut= 4. ),
+             EPSP_HARD       =SIMP(statut='o',typ='R'),
+             R_PM            =SIMP(statut='f',typ='R',defaut= 20. ),
+             EP_SUR_E        =SIMP(statut='f',typ='R'),
+             A1_PM           =SIMP(statut='f',typ='R',defaut= 18.5 ),
+             A2_PM           =SIMP(statut='f',typ='R',defaut= 0.15 ),
+             A6_PM           =SIMP(statut='f',typ='R',defaut= 620. ),
+             C_PM            =SIMP(statut='f',typ='R',defaut= 0.5 ),
+             A_PM            =SIMP(statut='f',typ='R',defaut= 6.0E-3 ),
+           ),
+           BPEL_BETON      =FACT(statut='f',
+             PERT_FLUA       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             PERT_RETR       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           BPEL_ACIER      =FACT(statut='f',
+            regles=(PRESENT_PRESENT('RELAX_1000','F_PRG',),
+                     PRESENT_PRESENT('MU0_RELAX','F_PRG',),),
+             RELAX_1000      =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             MU0_RELAX       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             F_PRG           =SIMP(statut='f',typ='R'),
+             FROT_COURB      =SIMP(statut='f',typ='R',defaut=0.E+0),
+             FROT_LINE       =SIMP(statut='f',typ='R',defaut=0.E+0),
+           ),
+           CAM_CLAY      =FACT(statut='f',
+             MU              =SIMP(statut='o',typ='R'),
+             PORO            =SIMP(statut='o',typ='R'),
+             LAMBDA          =SIMP(statut='o',typ='R'),
+             KAPA            =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+             PRES_CRIT       =SIMP(statut='o',typ='R'),
+             KCAM            =SIMP(statut='f',typ='R',val_min=0.E+0),
+             PTRAC           =SIMP(statut='f',typ='R',val_max=0.E+0),
+               regles=(PRESENT_PRESENT('PTRAC','KCAM',),),
+           ),
+           BARCELONE      =FACT(statut='f',
+             MU              =SIMP(statut='o',typ='R'),
+             PORO            =SIMP(statut='o',typ='R'),
+             LAMBDA          =SIMP(statut='o',typ='R'),
+             KAPA            =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+             PRES_CRIT       =SIMP(statut='o',typ='R'),
+             PA            =SIMP(statut='o',typ='R'),
+             R             =SIMP(statut='o',typ='R'),
+             BETA          =SIMP(statut='o',typ='R'),
+             KC            =SIMP(statut='o',typ='R'),
+             PC0_INIT      =SIMP(statut='o',typ='R'),
+             KAPAS         =SIMP(statut='o',typ='R'),
+             LAMBDAS       =SIMP(statut='o',typ='R'),
+             ALPHAB        =SIMP(statut='f',typ='R'),
+           ),
+           CJS             =FACT(statut='f',
+             BETA_CJS        =SIMP(statut='o',typ='R'),
+             RM              =SIMP(statut='o',typ='R'),
+             N_CJS           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             KP              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             RC              =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             A_CJS           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             B_CJS           =SIMP(statut='f',typ='R',defaut= 1.0E+25 ),
+             C_CJS           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             GAMMA_CJS       =SIMP(statut='o',typ='R'),
+             MU_CJS          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             PCO             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             PA              =SIMP(statut='o',typ='R'),
+             Q_INIT          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+             R_INIT          =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           HUJEUX   =FACT(statut='f',
+             N      =SIMP(statut='o',typ='R' ),
+             BETA   =SIMP(statut='o',typ='R' ),
+             B      =SIMP(statut='o',typ='R' ),
+             D      =SIMP(statut='o',typ='R' ),
+             PHI    =SIMP(statut='o',typ='R' ),
+             ANGDIL =SIMP(statut='o',typ='R' ),
+             PCO    =SIMP(statut='o',typ='R' ),
+             PREF   =SIMP(statut='o',typ='R' ),
+             ACYC   =SIMP(statut='o',typ='R' ),
+             AMON   =SIMP(statut='o',typ='R' ),
+             CCYC   =SIMP(statut='o',typ='R' ),
+             CMON   =SIMP(statut='o',typ='R' ),
+             RD_ELA =SIMP(statut='o',typ='R' ),
+             RI_ELA =SIMP(statut='o',typ='R' ),
+             RHYS   =SIMP(statut='o',typ='R' ),
+             RMOB   =SIMP(statut='o',typ='R' ),
+             XM     =SIMP(statut='o',typ='R' ),
+             RD_CYC =SIMP(statut='o',typ='R' ),
+             RI_CYC =SIMP(statut='o',typ='R' ),
+             DILA   =SIMP(statut='o',typ='R' ),
+             PTRAC  =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+           ECRO_ASYM_LINE  =FACT(statut='f',
+             DC_SIGM_EPSI    =SIMP(statut='o',typ='R'),
+             SY_C            =SIMP(statut='o',typ='R'),
+             DT_SIGM_EPSI    =SIMP(statut='o',typ='R'),
+             SY_T            =SIMP(statut='o',typ='R'),
+           ),
+           GRANGER_FP      =FACT(statut='f',
+             J1              =SIMP(statut='f',typ='R'),
+             J2              =SIMP(statut='f',typ='R'),
+             J3              =SIMP(statut='f',typ='R'),
+             J4              =SIMP(statut='f',typ='R'),
+             J5              =SIMP(statut='f',typ='R'),
+             J6              =SIMP(statut='f',typ='R'),
+             J7              =SIMP(statut='f',typ='R'),
+             J8              =SIMP(statut='f',typ='R'),
+             TAUX_1          =SIMP(statut='f',typ='R'),
+             TAUX_2          =SIMP(statut='f',typ='R'),
+             TAUX_3          =SIMP(statut='f',typ='R'),
+             TAUX_4          =SIMP(statut='f',typ='R'),
+             TAUX_5          =SIMP(statut='f',typ='R'),
+             TAUX_6          =SIMP(statut='f',typ='R'),
+             TAUX_7          =SIMP(statut='f',typ='R'),
+             TAUX_8          =SIMP(statut='f',typ='R'),
+             QSR_K           =SIMP(statut='f',typ='R'),
+           ),
+           GRANGER_FP_INDT =FACT(statut='f',
+             J1              =SIMP(statut='f',typ='R'),
+             J2              =SIMP(statut='f',typ='R'),
+             J3              =SIMP(statut='f',typ='R'),
+             J4              =SIMP(statut='f',typ='R'),
+             J5              =SIMP(statut='f',typ='R'),
+             J6              =SIMP(statut='f',typ='R'),
+             J7              =SIMP(statut='f',typ='R'),
+             J8              =SIMP(statut='f',typ='R'),
+             TAUX_1          =SIMP(statut='f',typ='R'),
+             TAUX_2          =SIMP(statut='f',typ='R'),
+             TAUX_3          =SIMP(statut='f',typ='R'),
+             TAUX_4          =SIMP(statut='f',typ='R'),
+             TAUX_5          =SIMP(statut='f',typ='R'),
+             TAUX_6          =SIMP(statut='f',typ='R'),
+             TAUX_7          =SIMP(statut='f',typ='R'),
+             TAUX_8          =SIMP(statut='f',typ='R'),
+           ),
+           V_GRANGER_FP    =FACT(statut='f',
+             QSR_VEIL        =SIMP(statut='f',typ='R'),
+             FONC_V          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           BETON_UMLV_FP   =FACT(statut='f',min=0 ,
+             K_RS            =SIMP(statut='o',typ='R'),
+             ETA_RS          =SIMP(statut='o',typ='R'),
+             K_IS            =SIMP(statut='o',typ='R'),
+             ETA_IS          =SIMP(statut='o',typ='R'),
+             K_RD            =SIMP(statut='o',typ='R'),
+             ETA_RD          =SIMP(statut='o',typ='R'),
+             ETA_ID          =SIMP(statut='o',typ='R'),
+             ETA_FD          =SIMP(statut='f',typ='R'),
+           ),
+           BETON_RAG    =FACT(statut='f',
+             ACTIV_FL        =SIMP(statut='f',typ='R',defaut=1.0 ),
+             K_RS            =SIMP(statut='o',typ='R'),
+             K_IS            =SIMP(statut='o',typ='R'),
+             ETA_RS          =SIMP(statut='o',typ='R'),
+             ETA_IS          =SIMP(statut='o',typ='R'),
+             K_RD            =SIMP(statut='o',typ='R'),
+             K_ID            =SIMP(statut='o',typ='R'),
+             ETA_RD          =SIMP(statut='o',typ='R'),
+             ETA_ID          =SIMP(statut='o',typ='R'),
+             EPS_0           =SIMP(statut='o',typ='R'),
+             TAU_0           =SIMP(statut='o',typ='R'),
+             EPS_FL_L        =SIMP(statut='f',typ='R',defaut=3.0e-2 ),
+             ACTIV_LO        =SIMP(statut='f',typ='R',defaut=1.0 ),
+             F_C             =SIMP(statut='o',typ='R'),
+             F_T             =SIMP(statut='o',typ='R'),
+             ANG_CRIT        =SIMP(statut='f',typ='R',defaut=8.594367 ),
+             EPS_COMP        =SIMP(statut='o',typ='R'),
+             EPS_TRAC        =SIMP(statut='o',typ='R'),
+             LC_COMP         =SIMP(statut='o',typ='R',defaut=1.0  ),
+             LC_TRAC         =SIMP(statut='o',typ='R',defaut=1.0  ),
+             HYD_PRES        =SIMP(statut='f',typ='R',defaut=0.   ),
+             A_VAN_GE        =SIMP(statut='f',typ='R',defaut=0.0  ),
+             B_VAN_GE        =SIMP(statut='f',typ='R',defaut=1.9  ),
+             BIOT_EAU        =SIMP(statut='o',typ='R',defaut=0.3  ),
+             MODU_EAU        =SIMP(statut='o',typ='R',defaut=0.0  ),
+             W_EAU_0         =SIMP(statut='o',typ='R'),
+             BIOT_GEL        =SIMP(statut='o',typ='R'),
+             MODU_GEL        =SIMP(statut='o',typ='R'),
+             VOL_GEL         =SIMP(statut='o',typ='R'),
+             AVANC_LI        =SIMP(statut='o',typ='R'),
+             SEUIL_SR        =SIMP(statut='o',typ='R'),
+             PARA_CIN        =SIMP(statut='o',typ='R'),
+             ENR_AC_G        =SIMP(statut='o',typ='R'),
+           ),
+           GLRC_DM         =FACT(statut='f',min=0,max=1,
+             regles=(EXCLUS('GAMMA_C','SYC'),),
+             GAMMA_T         =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+             GAMMA_C         =SIMP(statut='f',typ='R',val_min=-1.E+0,val_max=1.E+0),
+             GAMMA_F         =SIMP(statut='o',typ='R',val_min=-1.E+0,val_max=1.E+0),
+             SYT             =SIMP(statut='o',typ='R',val_min=0.E+0),
+             SYC             =SIMP(statut='f',typ='R'),
+             SYF             =SIMP(statut='o',typ='R',val_min=0.E+0),
+             EF              =SIMP(statut='f',typ='R',val_min=0.E+0),
+             NUF             =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=0.5+0),
+           ),
+           GATT_MONERIE    =FACT(statut='f',min=0,max=1,
+             D_GRAIN         =SIMP(statut='o',typ='R',val_min=0.E+0),
+             PORO_INIT       =SIMP(statut='o',typ='R',val_min=0.E+0),
+             EPSI_01         =SIMP(statut='o',typ='R',defaut= 2.7252E-10,val_min=0.E+0),
+             EPSI_02         =SIMP(statut='o',typ='R',defaut= 9.1440E-41,val_min=0.E+0),
+           ),
+           CORR_ACIER   =FACT(statut='f',min=0 ,max=1,
+             D_CORR           =SIMP(statut='o',typ='R'),
+             ECRO_K           =SIMP(statut='o',typ='R'),
+             ECRO_M           =SIMP(statut='o',typ='R'),
+             SY              =SIMP(statut='o',typ='R'),
+             ),
+# Discrets non-linéaires : début
+         DIS_ECRO_CINE  =FACT(statut='f',
+            fr="Loi pour les discrets avec écrouissage cinématique.",
+            regles=(PRESENT_PRESENT('LIMY_DX','KCIN_DX',),PRESENT_PRESENT('PUIS_DX','LIMU_DX',),
+                    PRESENT_PRESENT('LIMY_DY','KCIN_DY',),PRESENT_PRESENT('PUIS_DY','LIMU_DY',),
+                    PRESENT_PRESENT('LIMY_DZ','KCIN_DZ',),PRESENT_PRESENT('PUIS_DZ','LIMU_DZ',),
+                    PRESENT_PRESENT('LIMY_RX','KCIN_RX',),PRESENT_PRESENT('PUIS_RX','LIMU_RX',),
+                    PRESENT_PRESENT('LIMY_RY','KCIN_RY',),PRESENT_PRESENT('PUIS_RY','LIMU_RY',),
+                    PRESENT_PRESENT('LIMY_RZ','KCIN_RZ',),PRESENT_PRESENT('PUIS_RZ','LIMU_RZ',),),
+            LIMY_DX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Effort limite élastique suivant l'axe local x de l'élément."),
+            LIMY_DY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Effort limite élastique suivant l'axe local y de l'élément."),
+            LIMY_DZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Effort limite élastique suivant l'axe local z de l'élément."),
+            LIMY_RX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Moment limite élastique suivant l'axe local x de l'élément."),
+            LIMY_RY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Moment limite élastique suivant l'axe local y de l'élément."),
+            LIMY_RZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Moment limite élastique suivant l'axe local z de l'élément."),
+            KCIN_DX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Raideur suivant l'axe local x de l'élément."),
+            KCIN_DY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Raideur suivant l'axe local y de l'élément."),
+            KCIN_DZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Raideur suivant l'axe local z de l'élément."),
+            KCIN_RX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Raideur suivant l'axe local Rx de l'élément."),
+            KCIN_RY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Raideur suivant l'axe local Ry de l'élément."),
+            KCIN_RZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Raideur suivant l'axe local Rz de l'élément."),
+            LIMU_DX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Effort limite suivant l'axe local x de l'élément."),
+            LIMU_DY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Effort limite suivant l'axe local y de l'élément."),
+            LIMU_DZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Effort limite suivant l'axe local z de l'élément."),
+            LIMU_RX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Moment limite suivant l'axe local x de l'élément."),
+            LIMU_RY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Moment limite suivant l'axe local y de l'élément."),
+            LIMU_RZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Moment limite suivant l'axe local z de l'élément."),
+            PUIS_DX =SIMP(statut='f',typ='R',val_min = 1.0,
+               fr="Coefficient de non-linéarité suivant l'axe local x de l'élément."),
+            PUIS_DY =SIMP(statut='f',typ='R',val_min = 1.0,
+               fr="Coefficient de non-linéarité suivant l'axe local y de l'élément."),
+            PUIS_DZ =SIMP(statut='f',typ='R',val_min = 1.0,
+               fr="Coefficient de non-linéarité suivant l'axe local z de l'élément."),
+            PUIS_RX =SIMP(statut='f',typ='R',val_min = 1.0,
+               fr="Coefficient de non-linéarité suivant l'axe local Rx de l'élément."),
+            PUIS_RY =SIMP(statut='f',typ='R',val_min = 1.0,
+               fr="Coefficient de non-linéarité suivant l'axe local Ry de l'élément."),
+            PUIS_RZ =SIMP(statut='f',typ='R',val_min = 1.0,
+               fr="Coefficient de non-linéarité suivant l'axe local Rz de l'élément."),
+         ),
+         DIS_VISC  =FACT(statut='f',
+            fr="Loi pour un discret de type amortisseur visqueux.",
+            regles=(PRESENT_PRESENT('PUIS_DX','COEF_DX',),
+                    PRESENT_PRESENT('PUIS_DY','COEF_DY',),
+                    PRESENT_PRESENT('PUIS_DZ','COEF_DZ',),
+                    PRESENT_PRESENT('PUIS_RX','COEF_RX',),
+                    PRESENT_PRESENT('PUIS_RY','COEF_RY',),
+                    PRESENT_PRESENT('PUIS_RZ','COEF_RZ',),
+                    ),
+            PUIS_DX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Puissance dans la direction locale Dx de l'élément."),
+            PUIS_DY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Puissance dans la direction locale Dy de l'élément."),
+            PUIS_DZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Puissance dans la direction locale Dz de l'élément."),
+            PUIS_RX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Puissance autour de la direction locale Rx de l'élément."),
+            PUIS_RY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Puissance autour de la direction locale Ry de l'élément."),
+            PUIS_RZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Puissance autour de la direction locale Rz de l'élément."),
+            COEF_DX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Coefficient C dans la direction locale Dx de l'élément."),
+            COEF_DY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Coefficient C dans la direction locale Dy de l'élément."),
+            COEF_DZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Coefficient C dans la direction locale Dz de l'élément."),
+            COEF_RX =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Coefficient C autour de la direction locale Rx de l'élément."),
+            COEF_RY =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Coefficient C autour de la direction locale Ry de l'élément."),
+            COEF_RZ =SIMP(statut='f',typ='R',val_min = 0.0,
+               fr="Coefficient C autour de la direction locale Rz de l'élément."),
+         ),
+         DIS_BILI_ELAS  =FACT(statut='f',
+            fr="Loi bi-linéaire pour les discrets.",
+            regles=(PRESENT_PRESENT('KDEB_DX','KFIN_DX','FPRE_DX',),
+                    PRESENT_PRESENT('KDEB_DY','KFIN_DY','FPRE_DY',),
+                    PRESENT_PRESENT('KDEB_DZ','KFIN_DZ','FPRE_DZ',),),
+            KDEB_DX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur début suivant l'axe local x de l'élément."),
+            KDEB_DY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur début suivant l'axe local y de l'élément."),
+            KDEB_DZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur début  suivant l'axe local z de l'élément."),
+            KFIN_DX =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur fin l'axe local x de l'élément."),
+            KFIN_DY =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur fin l'axe local y de l'élément."),
+            KFIN_DZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+               fr="Raideur fin l'axe local z de l'élément."),
+            FPRE_DX =SIMP(statut='f',typ='R',
+               fr="Effort de préserrage suivant l'axe local x de l'élément."),
+            FPRE_DY =SIMP(statut='f',typ='R',
+               fr="Effort de préserrage suivant l'axe local y de l'élément."),
+            FPRE_DZ =SIMP(statut='f',typ='R',
+               fr="Effort de préserrage suivant l'axe local z de l'élément."),
+         ),
+# Discrets non-linéaires : fin
+#
+# comportement thermique
+#
+           THER_NL         =FACT(statut='f',
+             regles=(UN_PARMI('BETA','RHO_CP', ),),
+             LAMBDA          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             BETA            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             RHO_CP          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           THER_HYDR       =FACT(statut='f',
+             LAMBDA          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             BETA            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             AFFINITE        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CHALHYDR        =SIMP(statut='o',typ='R'),
+           ),
+           THER            =FACT(statut='f',
+             LAMBDA          =SIMP(statut='o',typ='R'),
+             RHO_CP          =SIMP(statut='f',typ='R'),
+           ),
+           THER_FO         =FACT(statut='f',
+             LAMBDA          =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             RHO_CP          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           THER_ORTH       =FACT(statut='f',
+             LAMBDA_L        =SIMP(statut='o',typ='R'),
+             LAMBDA_T        =SIMP(statut='o',typ='R'),
+             LAMBDA_N        =SIMP(statut='f',typ='R'),
+             RHO_CP          =SIMP(statut='f',typ='R'),
+           ),
+           THER_COQUE      =FACT(statut='f',
+             COND_LMM        =SIMP(statut='o',typ='R'),
+             COND_TMM        =SIMP(statut='o',typ='R'),
+             COND_LMP        =SIMP(statut='o',typ='R'),
+             COND_TMP        =SIMP(statut='o',typ='R'),
+             COND_LPP        =SIMP(statut='o',typ='R'),
+             COND_TPP        =SIMP(statut='o',typ='R'),
+             COND_LSI        =SIMP(statut='o',typ='R'),
+             COND_TSI        =SIMP(statut='o',typ='R'),
+             COND_NMM        =SIMP(statut='o',typ='R'),
+             COND_NMP        =SIMP(statut='o',typ='R'),
+             COND_NPP        =SIMP(statut='o',typ='R'),
+             COND_NSI        =SIMP(statut='o',typ='R'),
+             CMAS_MM         =SIMP(statut='f',typ='R'),
+             CMAS_MP         =SIMP(statut='f',typ='R'),
+             CMAS_PP         =SIMP(statut='f',typ='R'),
+             CMAS_SI         =SIMP(statut='f',typ='R'),
+           ),
+           THER_COQUE_FO   =FACT(statut='f',
+             COND_LMM        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_TMM        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_LMP        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_TMP        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_LPP        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_TPP        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_LSI        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_TSI        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_NMM        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_NMP        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_NPP        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COND_NSI        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CMAS_MM         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CMAS_MP         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CMAS_PP         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CMAS_SI         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           SECH_GRANGER    =FACT(statut='f',
+             A               =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             QSR_K           =SIMP(statut='o',typ='R'),
+             TEMP_0_C        =SIMP(statut='o',typ='R'),
+           ),
+           SECH_MENSI      =FACT(statut='f',
+             A               =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+           ),
+           SECH_BAZANT     =FACT(statut='f',
+             D1              =SIMP(statut='o',typ='R'),
+             ALPHA_BAZANT    =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             FONC_DESORP     =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           SECH_NAPPE      =FACT(statut='f',
+             FONCTION        =SIMP(statut='o',typ=(nappe_sdaster,formule)),
+           ),
+#
+# comportement métallurgique
+#
+           META_ACIER      =FACT(statut='f',
+             TRC             =SIMP(statut='o',typ=(table_sdaster) ),
+             AR3             =SIMP(statut='o',typ='R'),
+             ALPHA           =SIMP(statut='o',typ='R'),
+             MS0             =SIMP(statut='o',typ='R'),
+             AC1             =SIMP(statut='o',typ='R'),
+             AC3             =SIMP(statut='o',typ='R'),
+             TAUX_1          =SIMP(statut='o',typ='R'),
+             TAUX_3          =SIMP(statut='o',typ='R'),
+             LAMBDA0         =SIMP(statut='f',typ='R'),
+             QSR_K           =SIMP(statut='f',typ='R'),
+             D10             =SIMP(statut='f',typ='R'),
+             WSR_K           =SIMP(statut='f',typ='R'),
+           ),
+           META_ZIRC       =FACT(statut='f',
+             TDEQ            =SIMP(statut='o',typ='R'),
+             N               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             T1C             =SIMP(statut='o',typ='R'),
+             T2C             =SIMP(statut='o',typ='R'),
+             AC              =SIMP(statut='o',typ='R'),
+             M               =SIMP(statut='o',typ='R'),
+             QSR_K           =SIMP(statut='o',typ='R'),
+             T1R             =SIMP(statut='o',typ='R'),
+             T2R             =SIMP(statut='o',typ='R'),
+             AR              =SIMP(statut='o',typ='R'),
+             BR              =SIMP(statut='o',typ='R'),
+           ),
+           DURT_META       =FACT(statut='f',
+             F1_DURT         =SIMP(statut='o',typ='R'),
+             F2_DURT         =SIMP(statut='o',typ='R'),
+             F3_DURT         =SIMP(statut='o',typ='R'),
+             F4_DURT         =SIMP(statut='o',typ='R'),
+             C_DURT          =SIMP(statut='o',typ='R'),
+           ),
+           ELAS_META       =FACT(statut='f',
+             E               =SIMP(statut='o',typ='R'),
+             NU              =SIMP(statut='o',typ='R'),
+             F_ALPHA         =SIMP(statut='o',typ='R'),
+             C_ALPHA         =SIMP(statut='o',typ='R'),
+             PHASE_REFE      =SIMP(statut='o',typ='TXM',into=("CHAUD","FROID")),
+             EPSF_EPSC_TREF  =SIMP(statut='o',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+             F1_SY           =SIMP(statut='f',typ='R'),
+             F2_SY           =SIMP(statut='f',typ='R'),
+             F3_SY           =SIMP(statut='f',typ='R'),
+             F4_SY           =SIMP(statut='f',typ='R'),
+             C_SY            =SIMP(statut='f',typ='R'),
+             SY_MELANGE      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_S_VP         =SIMP(statut='f',typ='R'),
+             F2_S_VP         =SIMP(statut='f',typ='R'),
+             F3_S_VP         =SIMP(statut='f',typ='R'),
+             F4_S_VP         =SIMP(statut='f',typ='R'),
+             C_S_VP          =SIMP(statut='f',typ='R' ),
+             S_VP_MELANGE    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           ELAS_META_FO    =FACT(statut='f',
+             regles=(
+                      PRESENT_PRESENT('F_ALPHA','TEMP_DEF_ALPHA'),
+                      PRESENT_PRESENT('C_ALPHA','TEMP_DEF_ALPHA'),
+                    ),
+             E               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             NU              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F_ALPHA         =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_ALPHA         =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PHASE_REFE      =SIMP(statut='o',typ='TXM',into=("CHAUD","FROID")),
+             EPSF_EPSC_TREF  =SIMP(statut='o',typ='R'),
+             TEMP_DEF_ALPHA  =SIMP(statut='f',typ='R'),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+             F1_SY           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_SY           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F3_SY           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F4_SY           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_SY            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SY_MELANGE      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_S_VP         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_S_VP         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F3_S_VP         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F4_S_VP         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_S_VP          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             S_VP_MELANGE    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           META_ECRO_LINE  =FACT(statut='f',
+             F1_D_SIGM_EPSI  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_D_SIGM_EPSI  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F3_D_SIGM_EPSI  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F4_D_SIGM_EPSI  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_D_SIGM_EPSI   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           META_TRACTION   =FACT(statut='f',
+             SIGM_F1         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SIGM_F2         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SIGM_F3         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SIGM_F4         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SIGM_C          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           META_VISC_FO    =FACT(statut='f',
+             F1_ETA          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_N            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_C            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F1_M            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_ETA          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_N            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_C            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_M            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F3_ETA          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F3_N            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F3_C            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F3_M            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F4_ETA          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F4_N            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F4_C            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F4_M            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_ETA           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_N             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_C             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             C_M             =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           META_PT         =FACT(statut='f',
+             F1_K            =SIMP(statut='f',typ='R'),
+             F2_K            =SIMP(statut='f',typ='R'),
+             F3_K            =SIMP(statut='f',typ='R'),
+             F4_K            =SIMP(statut='f',typ='R'),
+             F1_D_F_META     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F2_D_F_META     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F3_D_F_META     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             F4_D_F_META     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           META_RE         =FACT(statut='f',
+             C_F1_THETA      =SIMP(statut='f',typ='R'),
+             C_F2_THETA      =SIMP(statut='f',typ='R'),
+             C_F3_THETA      =SIMP(statut='f',typ='R'),
+             C_F4_THETA      =SIMP(statut='f',typ='R'),
+             F1_C_THETA      =SIMP(statut='f',typ='R'),
+             F2_C_THETA      =SIMP(statut='f',typ='R'),
+             F3_C_THETA      =SIMP(statut='f',typ='R'),
+             F4_C_THETA      =SIMP(statut='f',typ='R'),
+           ),
+#
+# comportement fluide
+#
+           FLUIDE          =FACT(statut='f',
+             regles=(EXCLUS('CELE_C','CELE_R'),),
+             RHO             =SIMP(statut='o',typ='R'),
+             CELE_C          =SIMP(statut='f',typ='C'),
+             CELE_R          =SIMP(statut='f',typ='R'),
+           ),
+# =================================================================================
+# COMPORTEMENT THERMO_HYDRO_MECANIQUE
+# LES DONNEES NECESSAIRES A LA DEFINITION DU MATERIAU SONT DEPENDANTES
+# DE LA LOI DE COUPLAGE THM DE LA RELATION
+# LE COMPORTEMENT DE COUPLAGE COMP_THM N EST VALABLE QUE POUR LES LOIS
+# DE COUPLAGE : LIQU_SATU,LIQU_GAZ,GAZ,LIQU_GAZ_ATM,LIQU_VAPE_GAZ,LIQU_VAPE
+# ET LIQU_AD_GAZ_VAPE
+# LA CORRESPONDANCE AVEC LES VARIABLES CACHEES EST LA SUIVANTE :
+# 1 -->  LIQU_SATU
+# 2 -->  GAZ
+# 3 -->  LIQU_VAPE
+# 4 -->  LIQU_VAPE_GAZ
+# 5 -->  LIQU_GAZ
+# 6 -->  LIQU_GAZ_ATM
+# 9 -->  LIQU_AD_GAZ_VAPE
+# 10 -->  LIQU_AD_GAZ
+# =================================================================================
+           COMP_THM        = SIMP(statut='f', typ='TXM',
+                                  into = ( "LIQU_SATU"     ,
+                                           "LIQU_GAZ"      ,
+                                           "GAZ"           ,
+                                           "LIQU_GAZ_ATM"  ,
+                                           "LIQU_VAPE_GAZ" ,
+                                           "LIQU_VAPE"     ,
+                                           "LIQU_AD_GAZ_VAPE" ,
+                                           "LIQU_AD_GAZ" ,
+                                          ) ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_SATU -------------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU -----------------------------------------------
+# =================================================================================
+           b_liqusatu      = BLOC(condition = "COMP_THM == 'LIQU_SATU' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_SATU",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE1          = SIMP(statut='o',typ='R'),
+                                           PORO          = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP          = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE2          = SIMP(statut='f',typ='R'),
+                                           PRES_VAPE     = SIMP(statut='f',typ='R'),
+                                           DEGR_SATU     = SIMP(statut='f',typ='R'),
+                                           PRES_ATMO     = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 1.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO           = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF     = SIMP(statut='o',typ='R'),
+                                           PESA_X        = SIMP(statut='o',typ='R'),
+                                           PESA_Y        = SIMP(statut='o',typ='R'),
+                                           PESA_Z        = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PESA_MULT     = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP            = SIMP(statut='f',typ='R'),
+                                           PERM_IN       = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_END      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                                           regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), ),
+                                           PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINXY      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINYZ      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINZX      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT   = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ         = SIMP(statut='f',typ='R'),
+                                           EMMAG           = SIMP(statut='f',typ='R'),
+                                           SATU_PRES       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           SIGMA_T         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SIGMA_T       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_G_INTR     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           CHAL_VAPO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_PG          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PA         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PL         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FA_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO           = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K      = SIMP(statut='o',typ='R'),
+                                           VISC          = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP   = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA         = SIMP(statut='f',typ='R'),
+                                           CP            = SIMP(statut='f',typ='R'),
+                                         ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_GAZ         =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_VAPE_GAZ    =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+                                 ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_GAZ --------------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ --------------------------------------
+# =================================================================================
+           b_liqugaz      = BLOC(condition = "COMP_THM == 'LIQU_GAZ' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_GAZ",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE1             = SIMP(statut='o',typ='R'),
+                                           PRE2             = SIMP(statut='o',typ='R'),
+                                           PORO             = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRES_VAPE        = SIMP(statut='f',typ='R'),
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 5.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ            = SIMP(statut='o',typ='R'),
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+                                           SATU_PRES        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+
+                                           VG_N    = SIMP(statut='f',typ='R'),
+                                           VG_SR    = SIMP(statut='f',typ='R'),
+                                           VG_PR   = SIMP(statut='f',typ='R'),
+                                           VG_SMAX = SIMP(statut='f',typ='R'),
+                                           VG_SATUR = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PESA_MULT     = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+#
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINXY      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINYZ      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINZX      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT   = SIMP(statut='f',typ='R'),
+#
+                                  regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+                                            ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+                                                            'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+                                            ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+                                            UN_PARMI('VG_N','SATU_PRES'),
+                                           ),
+
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           EMMAG           = SIMP(statut='f',typ='R'),
+                                           SIGMA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SIGMA_T        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_G_INTR      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           CHAL_VAPO        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_PG          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PA         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PL         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FA_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA            = SIMP(statut='f',typ='R'),
+                                           CP               = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_GAZ    = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL        = SIMP(statut='o',typ='R'),
+                                           VISC            = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP     = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP              = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_VAPE_GAZ    =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+                                 ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE GAZ -------------------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_GAZ ------------------------------------------------
+# =================================================================================
+           b_gaz          = BLOC(condition = "COMP_THM == 'GAZ' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type GAZ",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='o',typ='R'),
+                                           PRE1             = SIMP(statut='o',typ='R'),
+                                           PORO             = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE2             = SIMP(statut='f',typ='R'),
+                                           PRES_VAPE        = SIMP(statut='f',typ='R'),
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 2.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ            = SIMP(statut='o',typ='R'),
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PESA_MULT     = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                                           regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), ),
+                                           PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT   = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           EMMAG           = SIMP(statut='f',typ='R'),
+                                           SATU_PRES       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU=SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           SIGMA_T         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SIGMA_T       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_G_INTR     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           CHAL_VAPO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_PG          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PA         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PL         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FA_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_GAZ    = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_LIQU        =FACT(statut='f',
+             RHO             =SIMP(statut='f',typ='R'),
+             UN_SUR_K        =SIMP(statut='f',typ='R'),
+             ALPHA           =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             COEF_HENRY      =SIMP(statut='f',typ='R'),
+           ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_VAPE_GAZ    =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+                                 ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_GAZ_ATM ----------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ --------------------------------------
+# =================================================================================
+           b_liqugazatm   = BLOC(condition = "COMP_THM == 'LIQU_GAZ_ATM' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_GAZ_ATM",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE1             = SIMP(statut='o',typ='R'),
+                                           PORO             = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE2             = SIMP(statut='f',typ='R'),
+                                           PRES_VAPE        = SIMP(statut='f',typ='R'),
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 6.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+                                           SATU_PRES        = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU        = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PESA_MULT     = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                                           regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',), ),
+                                           PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT   = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+             EMMAG           = SIMP(statut='f',typ='R'),
+             R_GAZ           =SIMP(statut='f',typ='R'),
+             PERM_GAZ        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_PERM_SATU_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_PERM_PRES_GAZ =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SIGMA_T         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_SIGMA_T       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PERM_G_INTR     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CHAL_VAPO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FICKV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_FV_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_FV_PG          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FICKA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FICKA_PA         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FICKA_PL         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             FICKA_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_FA_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA            = SIMP(statut='f',typ='R'),
+                                           CP               = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+                             THM_GAZ    = FACT(statut='f',
+                                           MASS_MOL         = SIMP(statut='f',typ='R'),
+                                           VISC             = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           CP               = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_VAPE_GAZ    =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+                                 ),
+
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_AD_GAZ -------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ,  THM_AIR_DISSOUS---------
+# =================================================================================
+           b_liquadgaz  = BLOC(condition = "COMP_THM == 'LIQU_AD_GAZ' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_AD_GAZ",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE1             = SIMP(statut='o',typ='R'),
+                                           PRE2             = SIMP(statut='o',typ='R'),
+                                           PORO             = SIMP(statut='o',typ='R'),
+                                           PRES_VAPE        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 10.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ            = SIMP(statut='o',typ='R'),
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+                                           SATU_PRES        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+                                           VG_N     = SIMP(statut='f',typ='R'),
+                                           VG_SR    = SIMP(statut='f',typ='R'),
+                                           VG_PR    = SIMP(statut='f',typ='R'),
+                                           VG_SMAX  = SIMP(statut='f',typ='R'),
+                                           VG_SATUR = SIMP(statut='f',typ='R'),
+#
+                                           FICKV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_T          = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PESA_MULT     = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINXY      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINYZ      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINZX      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT   = SIMP(statut='f',typ='R'),
+#
+                                  regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+                                            ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+                                                            'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+                                            ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+                                            UN_PARMI('VG_N','SATU_PRES'),
+                                           ),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           EMMAG            = SIMP(statut='f',typ='R'),
+                                           SIGMA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SIGMA_T        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_G_INTR      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           CHAL_VAPO        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_PG          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+#
+                                           FICKA_PA         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PL         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA            = SIMP(statut='f',typ='R'),
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           LAMB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_GAZ    = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                             ),
+# =================================================================================
+# --- MOT-CLE FACULTATIF ---------------------------------------------------------
+# =================================================================================
+                             THM_VAPE_GAZ = FACT(statut='f',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           CP               = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES CACHEES -------------------------------------------
+# ---------------------------------------------------------------------------------
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_AIR_DISS = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='o',typ='R'),
+                                           COEF_HENRY       = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ),
+                                 ),
+
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_VAPE_GAZ ---------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ, THM_VAPE_GAZ ------------------------
+# =================================================================================
+           b_liquvapegaz  = BLOC(condition = "COMP_THM == 'LIQU_VAPE_GAZ' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_VAPE_GAZ",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE1             = SIMP(statut='o',typ='R'),
+                                           PRE2             = SIMP(statut='o',typ='R'),
+                                           PORO             = SIMP(statut='o',typ='R'),
+                                           PRES_VAPE        = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 4.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ            = SIMP(statut='o',typ='R'),
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+                                           SATU_PRES        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+
+                                           VG_N     = SIMP(statut='f',typ='R'),
+                                           VG_SR    = SIMP(statut='f',typ='R'),
+                                           VG_PR    = SIMP(statut='f',typ='R'),
+                                           VG_SMAX  = SIMP(statut='f',typ='R'),
+                                           VG_SATUR = SIMP(statut='f',typ='R'),
+#
+                                           FICKV_T          = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PESA_MULT     = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINXY      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINYZ      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINZX      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT   = SIMP(statut='f',typ='R'),
+#
+                                  regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+                                            ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+                                                            'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+                                            ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+                                            UN_PARMI('VG_N','SATU_PRES'),
+                                           ),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVE   ----------------------------------
+# ---------------------------------------------------------------------------------
+                                           EMMAG            = SIMP(statut='f',typ='R'),
+                                           SIGMA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SIGMA_T        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_G_INTR      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           CHAL_VAPO        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_PG          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           FICKA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PA         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PL         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FA_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA            = SIMP(statut='f',typ='R'),
+                                           CP               = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_GAZ    = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_VAPE_GAZ = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           CP               = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ),
+                                 ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_AD_GAZ_VAPE -------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_GAZ, THM_VAPE_GAZ THM_AIR_DISSOUS---------
+# =================================================================================
+           b_liquadvape  = BLOC(condition = "COMP_THM == 'LIQU_AD_GAZ_VAPE' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_AD_GAZ_VAPE",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE1             = SIMP(statut='o',typ='R'),
+                                           PRE2             = SIMP(statut='o',typ='R'),
+                                           PORO             = SIMP(statut='o',typ='R'),
+                                           PRES_VAPE        = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 9.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ            = SIMP(statut='o',typ='R'),
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+                                           SATU_PRES        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+                                           VG_N     = SIMP(statut='f',typ='R'),
+                                           VG_SR    = SIMP(statut='f',typ='R'),
+                                           VG_PR    = SIMP(statut='f',typ='R'),
+                                           VG_SMAX  = SIMP(statut='f',typ='R'),
+                                           VG_SATUR = SIMP(statut='f',typ='R'),
+#
+                                           FICKV_T          = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_T          = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PESA_MULT     = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINXY      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINYZ      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINZX      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT   = SIMP(statut='f',typ='R'),
+#
+                                  regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+                                            ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+                                                            'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+                                            ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+                                            UN_PARMI('VG_N','SATU_PRES'),
+                                           ),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           EMMAG            = SIMP(statut='f',typ='R'),
+                                           SIGMA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SIGMA_T        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_G_INTR      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           CHAL_VAPO        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_PG          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+#
+                                           FICKA_PA         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PL         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA            = SIMP(statut='f',typ='R'),
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           LAMB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT        = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_GAZ    = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_VAPE_GAZ = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           CP               = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_AIR_DISS = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='o',typ='R'),
+                                           COEF_HENRY       = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ),
+                                 ),
+# =================================================================================
+# --- LOI DE COUPLAGE DE TYPE LIQU_VAPE -------------------------------------------
+# =================================================================================
+# --- PRESENCE OBLIGATOIRE DES MOT-CLES SUIVANT : ---------------------------------
+# --- THM_INIT, THM_DIFFU, THM_LIQU, THM_VAPE_GAZ ---------------------------------
+# =================================================================================
+           b_liquvape  = BLOC(condition = "COMP_THM == 'LIQU_VAPE' ",
+                                 fr="Paramètres nécessaires pour une loi de couplage de type LIQU_VAPE",
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_INIT   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE1             = SIMP(statut='o',typ='R'),
+                                           PORO             = SIMP(statut='o',typ='R'),
+                                           PRES_VAPE        = SIMP(statut='o',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           TEMP             = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PRE2             = SIMP(statut='f',typ='R'),
+                                           DEGR_SATU        = SIMP(statut='f',typ='R'),
+                                           PRES_ATMO        = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEE CACHEE ---------------------------------------------
+# ---------------------------------------------------------------------------------
+                                           COMP_THM         = SIMP(statut='c',typ='R',defaut= 3.0,),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_DIFFU  = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           R_GAZ            = SIMP(statut='o',typ='R'),
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           BIOT_COEF        = SIMP(statut='o',typ='R'),
+                                           PESA_X           = SIMP(statut='o',typ='R'),
+                                           PESA_Y           = SIMP(statut='o',typ='R'),
+                                           PESA_Z           = SIMP(statut='o',typ='R'),
+                                           SATU_PRES        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SATU_PRES      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_LIQU        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_LIQU_SATU = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_GAZ         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_SATU_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_PERM_PRES_GAZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---Van Genhuchten et Muallen-----------------------------------------------------------------------------
+
+                                           VG_N    = SIMP(statut='f',typ='R'),
+                                           VG_SR    = SIMP(statut='f',typ='R'),
+                                           VG_PR   = SIMP(statut='f',typ='R'),
+                                           VG_SMAX = SIMP(statut='f',typ='R'),
+                                           VG_SATUR = SIMP(statut='f',typ='R'),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES FACULTATIVES   ------------------------------------
+# ---------------------------------------------------------------------------------
+                                           PESA_MULT     = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           CP               = SIMP(statut='f',typ='R'),
+                                           PERM_IN          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_END         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_X      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Y      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMIN_Z      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINXY      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINYZ      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERMINZX      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_PHI    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_T      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_LB_S      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           LAMB_CT   = SIMP(statut='f',typ='R'),
+#
+                                  regles = (EXCLUS('PERM_IN','PERM_END','PERMIN_X',),
+                                            PRESENT_PRESENT('PERMIN_X','PERMIN_Y','PERMIN_Z',),
+                                            ENSEMBLE('SATU_PRES','D_SATU_PRES','PERM_LIQU','D_PERM_LIQU_SATU',
+                                                            'PERM_GAZ','D_PERM_SATU_GAZ','D_PERM_PRES_GAZ',),
+                                            ENSEMBLE('VG_N','VG_SR','VG_PR','VG_SMAX','VG_SATUR',),
+                                            UN_PARMI('VG_N','SATU_PRES'),
+                                           ),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES INUTILES   ----------------------------------------
+# ---------------------------------------------------------------------------------
+                                           EMMAG            = SIMP(statut='f',typ='R'),
+                                           SIGMA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_SIGMA_T        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           PERM_G_INTR      = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           CHAL_VAPO        = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PV         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_PG         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKV_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FV_PG          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_T          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PA         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_PL         = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           FICKA_S          = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_FA_T           = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ) ,
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_LIQU   = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           RHO              = SIMP(statut='o',typ='R'),
+                                           UN_SUR_K         = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES NECESSAIRE SI THERMIQUE   -------------------------
+# ---------------------------------------------------------------------------------
+                                           ALPHA            = SIMP(statut='f',typ='R'),
+                                           CP               = SIMP(statut='f',typ='R'),
+                                             ),
+# =================================================================================
+# --- MOT-CLE OBLIGATOIRE ---------------------------------------------------------
+# =================================================================================
+                             THM_VAPE_GAZ = FACT(statut='o',
+# ---------------------------------------------------------------------------------
+# -------------------   DONNEES OBLIGATOIRE   -------------------------------------
+# ---------------------------------------------------------------------------------
+                                           MASS_MOL         = SIMP(statut='o',typ='R'),
+                                           CP               = SIMP(statut='o',typ='R'),
+                                           VISC             = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                           D_VISC_TEMP      = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                             ),
+# =================================================================================
+# --- MOT-CLE INUTILE -------------------------------------------------------------
+# =================================================================================
+           THM_GAZ         =FACT(statut='f',
+             MASS_MOL        =SIMP(statut='f',typ='R'),
+             CP              =SIMP(statut='f',typ='R'),
+             VISC            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_VISC_TEMP     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+                                 ),
+# courbes et coefficients associés à la fatigue et au dommage
+#
+           FATIGUE         =FACT(statut='f',
+             regles=(PRESENT_ABSENT('WOHLER','A_BASQUIN','BETA_BASQUIN'),
+                     PRESENT_ABSENT('WOHLER','A0','A1','A2','A3','SL'),
+                     PRESENT_ABSENT('A_BASQUIN','A0','A1','A2','A3','SL'),
+                     ENSEMBLE('A_BASQUIN','BETA_BASQUIN'),
+                     ENSEMBLE('A0','A1','A2','A3','SL'),
+                     PRESENT_PRESENT('A0','E_REFE'),
+                     ENSEMBLE('D0','TAU0'),),
+             WOHLER          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_BASQUIN       =SIMP(statut='f',typ='R'),
+             BETA_BASQUIN    =SIMP(statut='f',typ='R'),
+             A0              =SIMP(statut='f',typ='R'),
+             A1              =SIMP(statut='f',typ='R'),
+             A2              =SIMP(statut='f',typ='R'),
+             A3              =SIMP(statut='f',typ='R'),
+             SL              =SIMP(statut='f',typ='R'),
+             MANSON_COFFIN   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             E_REFE          =SIMP(statut='f',typ='R'),
+             D0              =SIMP(statut='f',typ='R'),
+             TAU0            =SIMP(statut='f',typ='R'),
+           ),
+           DOMMA_LEMAITRE  =FACT(statut='f',
+             S               =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             EPSP_SEUIL      =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             EXP_S           =SIMP(statut='f',typ='R',val_min=0.0E0,defaut=1.0),
+           ),
+           CISA_PLAN_CRIT  =FACT(statut='f',
+             CRITERE       =SIMP(statut='o',typ='TXM',into=("MATAKE_MODI_AC",
+                                                            "DANG_VAN_MODI_AC",
+                                                            "DANG_VAN_MODI_AV",
+                                                            "MATAKE_MODI_AV",
+                                                            "FATESOCI_MODI_AV",
+                                                            ) ),
+
+             b_critere_matake =BLOC(condition="CRITERE=='MATAKE_MODI_AC' or CRITERE=='MATAKE_MODI_AV'",
+                         fr="Cisaillement plan critique critère de matake pour les cas amplitude constante et amplitude variable",
+               MATAKE_A         =SIMP(statut='o',typ='R'),
+               MATAKE_B         =SIMP(statut='o',typ='R'),
+               COEF_FLEX_TORS   =SIMP(statut='o',typ='R',val_min=1.0E0,val_max=1.7321E0),
+             ),
+
+             b_critere_dang_van =BLOC(condition="(CRITERE=='DANG_VAN_MODI_AC' or CRITERE=='DANG_VAN_MODI_AV')",
+                                 fr="Critère de Dang Van modifié pour les cas amplitude constante et amplitude variable",
+               D_VAN_A            =SIMP(statut='o',typ='R'),
+               D_VAN_B            =SIMP(statut='o',typ='R'),
+               COEF_CISA_TRAC     =SIMP(statut='o',typ='R',val_min=1.0E0,val_max=1.7321E0),
+             ),
+
+             b_critere_fate_soci =BLOC(condition="CRITERE=='FATESOCI_MODI_AV'",
+                               fr="Critère de Fatemi et Socie, en élasticité ou élastoplasticité, pour le cas amplitude variable",
+               FATSOC_A           =SIMP(statut='o',typ='R'),
+               COEF_CISA_TRAC     =SIMP(statut='o',typ='R',val_min=1.0E0,val_max=1.7321E0),
+             ),
+           ),
+#
+# autres comportements ...
+#
+           WEIBULL         =FACT(statut='f',
+             M               =SIMP(statut='o',typ='R'),
+             VOLU_REFE       =SIMP(statut='o',typ='R'),
+             SIGM_REFE       =SIMP(statut='o',typ='R'),
+             SEUIL_EPSP_CUMU =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           ),
+           WEIBULL_FO      =FACT(statut='f',
+             M               =SIMP(statut='o',typ='R'),
+             VOLU_REFE       =SIMP(statut='o',typ='R'),
+             SIGM_CNV        =SIMP(statut='o',typ='R'),
+             SIGM_REFE       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SEUIL_EPSP_CUMU =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           ),
+           NON_LOCAL       =FACT(statut='f',
+             regles=(AU_MOINS_UN('LONG_CARA','C_GONF','C_GRAD_VARI','PENA_LAGR',),),
+             LONG_CARA       =SIMP(statut='f',typ='R'),
+             C_GRAD_VARI     =SIMP(statut='f',typ='R'),             
+             PENA_LAGR       =SIMP(statut='f',typ='R',defaut= 1.0E3),
+             C_GONF          =SIMP(statut='f',typ='R'),
+             COEF_RIGI_MINI  =SIMP(statut='f',typ='R'),
+           ),
+           RUPT_FRAG       =FACT(statut='f',
+             GC              =SIMP(statut='o',typ='R'),
+             SIGM_C          =SIMP(statut='f',typ='R'),
+             PENA_ADHERENCE  =SIMP(statut='f',typ='R',val_min=1.E-12,val_max=1.E+0),
+             PENA_CONTACT    =SIMP(statut='f',typ='R',defaut=1.),
+             PENA_LAGR       =SIMP(statut='f',typ='R',defaut=1.0E2,val_min=1.01E+0),
+             RIGI_GLIS       =SIMP(statut='f',typ='R',defaut=1.0E1),
+           ),
+           RUPT_FRAG_FO   =FACT(statut='f',
+             GC              =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SIGM_C          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PENA_ADHERENCE  =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PENA_CONTACT    =SIMP(statut='f',typ='R',defaut=1.),
+           ),
+           JOINT_MECA_RUPT  =FACT(statut='f',
+             regles=(EXCLUS('PRES_FLUIDE','PRES_CLAVAGE'),),
+             K_N             =SIMP(statut='o',typ='R',val_min=1.E-12),
+             K_T             =SIMP(statut='f',typ='R',val_min=1.E-12),
+             SIGM_MAX        =SIMP(statut='o',typ='R',val_min=0.),
+             ALPHA           =SIMP(statut='f',typ='R',defaut=1., val_min=0., val_max=2.),
+             PENA_RUPTURE    =SIMP(statut='f',typ='R',val_min=1.E-12,val_max=10.E+0),
+             PENA_CONTACT    =SIMP(statut='f',typ='R',defaut=1.,val_min=1.E-12),
+             PRES_FLUIDE     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             PRES_CLAVAGE    =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           RCCM            =FACT(statut='f',
+             regles=(ENSEMBLE('A_AMORC','B_AMORC','D_AMORC','R_AMORC'),),
+             SY_02           =SIMP(statut='f',typ='R'),
+             SM              =SIMP(statut='f',typ='R'),
+             SU              =SIMP(statut='f',typ='R'),
+             SC              =SIMP(statut='f',typ='R'),
+             SH              =SIMP(statut='f',typ='R'),
+             N_KE            =SIMP(statut='f',typ='R'),
+             M_KE            =SIMP(statut='f',typ='R'),
+             A_AMORC         =SIMP(statut='f',typ='R'),
+             B_AMORC         =SIMP(statut='f',typ='R'),
+             D_AMORC         =SIMP(statut='f',typ='R'),
+             R_AMORC         =SIMP(statut='f',typ='R'),
+           ),
+           RCCM_FO         =FACT(statut='f',
+             regles=(ENSEMBLE('A_AMORC','B_AMORC','D_AMORC','R_AMORC'),),
+             SY_02           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SM              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             SU              =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             S               =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             N_KE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             M_KE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             A_AMORC         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             B_AMORC         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             D_AMORC         =SIMP(statut='f',typ='R'),
+             R_AMORC         =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ),
+           LAIGLE          =FACT(statut='f',
+             GAMMA_ULT       =SIMP(statut='o',typ='R'),
+             GAMMA_E         =SIMP(statut='o',typ='R'),
+             M_ULT           =SIMP(statut='o',typ='R'),
+             M_E             =SIMP(statut='o',typ='R'),
+             A_E             =SIMP(statut='o',typ='R'),
+             M_PIC           =SIMP(statut='o',typ='R'),
+             A_PIC           =SIMP(statut='o',typ='R'),
+             ETA             =SIMP(statut='o',typ='R'),
+             SIGMA_C         =SIMP(statut='o',typ='R'),
+             GAMMA           =SIMP(statut='o',typ='R'),
+             KSI             =SIMP(statut='o',typ='R'),
+             GAMMA_CJS       =SIMP(statut='o',typ='R'),
+             SIGMA_P1        =SIMP(statut='o',typ='R'),
+             PA              =SIMP(statut='o',typ='R'),
+           ),
+           LETK          =FACT(statut='f',
+             PA         =SIMP(statut='o',typ='R',fr="pression atmospherique"),
+             NELAS      =SIMP(statut='o',typ='R',fr="exposant de la loi de variation des modules K et G"),
+             SIGMA_C    =SIMP(statut='o',typ='R',fr="résistance en compression simple "),
+             H0_EXT     =SIMP(statut='o',typ='R',fr="parametre pilotant la résistance en extension"),
+             GAMMA_CJS  =SIMP(statut='o',typ='R',fr="parametre de forme du critere ds le plan déviatoire entre 0 et 1."),
+             XAMS       =SIMP(statut='o',typ='R',fr="parametre non nul intervenant dans les lois d'écrouissage pre pic"),
+             ETA        =SIMP(statut='o',typ='R',fr="parametre non nul intervenant dans les lois d'écrouissage post pic"),
+             A_0        =SIMP(statut='o',typ='R',fr="a de la limite d'élasticité initiale"),
+             A_E        =SIMP(statut='o',typ='R',fr="a de la limite de clivage ou seuil intermédiaire"),
+             A_PIC      =SIMP(statut='o',typ='R',fr="a du seuil de pic"),
+             S_0        =SIMP(statut='o',typ='R',fr="s de la limite d'élasticité initiale"),
+             M_0        =SIMP(statut='o',typ='R',fr="m de la limite d'élasticité initiale"),
+             M_E        =SIMP(statut='o',typ='R',fr="m de la limite de clivage ou seuil intermédiaire"),
+             M_PIC      =SIMP(statut='o',typ='R',fr="m du seuil de pic"),
+             M_ULT      =SIMP(statut='o',typ='R',fr="m du seuil residuel"),
+             XI_ULT     =SIMP(statut='o',typ='R',fr="niveau d écrouissage pour atteindre le seuil résiduel"),
+             XI_E       =SIMP(statut='o',typ='R',fr="niveau d écrouissage pour atteindre le seuil de clivage"),
+             XI_PIC     =SIMP(statut='o',typ='R',fr="niveau d écrouissage pour atteindre le seuil de pic"),
+             MV_MAX     =SIMP(statut='o',typ='R',fr="m du seuil viscoplastique maximal"),
+             XIV_MAX    =SIMP(statut='o',typ='R',fr="niveau d écrouissage pour atteindre le seuil viscoplastique maximal"),
+             A          =SIMP(statut='o',typ='R',fr="parametre carcaterisant l amplitude de la vitesse de fluage"),
+             N          =SIMP(statut='o',typ='R',fr="parametre intervenant dans la formule pilotant la cinetique de fluage"),
+             SIGMA_P1   =SIMP(statut='o',typ='R',fr="SIG min de l intersection du seuil de pic et intermediaire "),
+             MU0_V      =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance des mecanismes pre pic et viscoplastique"),
+             XI0_V      =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance des mecanismes pre pic et viscoplastique"),
+             MU1        =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance du mecanisme post pic "),
+             XI1        =SIMP(statut='o',typ='R',fr="relatif à l angle de dilatance du mecanisme post pic "),
+           ),
+           DRUCK_PRAGER  =FACT(statut='f',
+             ALPHA           =SIMP(statut='o',typ='R'),
+             SY              =SIMP(statut='o',typ='R'),
+             P_ULTM          =SIMP(statut='o',typ='R'),
+             ECROUISSAGE = SIMP(statut='o',typ='TXM',into=("LINEAIRE","PARABOLIQUE")),
+             b_lineaire =BLOC(condition="ECROUISSAGE=='LINEAIRE'",
+                                    fr="Loi de comportement de type Drucker Prager avec un ecrouissage lineaire",
+                    H               =SIMP(statut='o',typ='R'),
+                    TYPE_DP         =SIMP(statut='c',typ='R',defaut= 1.0,),
+             ),
+             b_parabolique =BLOC(condition="ECROUISSAGE=='PARABOLIQUE'",
+                                    fr="Loi de comportement de type Drucker Prager avec un ecrouissage parabolique",
+                    SY_ULTM         =SIMP(statut='o',typ='R'),
+                    TYPE_DP         =SIMP(statut='c',typ='R',defaut= 2.0,),
+             ),
+             DILAT           =SIMP(statut='f',typ='R',defaut=0.0),
+           ),
+           VISC_DRUC_PRAG          =FACT(statut='f',
+             PREF       =SIMP(statut='o',typ='R',fr="pression de reference"),
+             A          =SIMP(statut='o',typ='R',fr="parametre carcaterisant l amplitude de la vitesse de fluage"),
+             N          =SIMP(statut='o',typ='R',fr="parametre intervenant dans la formule pilotant la cinetique de fluage"),
+             P_PIC      =SIMP(statut='o',typ='R',fr="niveau d ecrouissage pour atteindre le seuil de pic"),
+             P_ULT      =SIMP(statut='o',typ='R',fr="niveau d ecrouissage pour atteindre le seuil utime"),
+             ALPHA_0    =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la cohesion au seuil d elasticite"),
+             ALPHA_PIC  =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la cohesion au seuil de pic"),
+             ALPHA_ULT  =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la cohesion au seuil ultime"),
+             R_0        =SIMP(statut='o',typ='R',fr="parametre d ecrouissage correspondant au seuil d'elasticite"),
+             R_PIC      =SIMP(statut='o',typ='R',fr="parametre d ecrouissage correspondant au seuil de pic"),
+             R_ULT      =SIMP(statut='o',typ='R',fr="parametre d ecrouissage correspondant au seuil ultime"),
+             BETA_0     =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la dilatance au seuil d elasticite"),
+             BETA_PIC   =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la dilatance au seuil de pic"),
+             BETA_ULT   =SIMP(statut='o',typ='R',fr="parametre d ecrouissage relatif à la dilatance au seuil ultime"),          
+           ),
+             HOEK_BROWN          =FACT(statut='f',
+             GAMMA_RUP       =SIMP(statut='o',typ='R'),
+             GAMMA_RES       =SIMP(statut='o',typ='R'),
+             S_END           =SIMP(statut='o',typ='R'),
+             S_RUP           =SIMP(statut='o',typ='R'),
+             M_END           =SIMP(statut='o',typ='R'),
+             M_RUP           =SIMP(statut='o',typ='R'),
+             BETA            =SIMP(statut='o',typ='R'),
+             ALPHAHB         =SIMP(statut='o',typ='R'),
+             PHI_RUP         =SIMP(statut='o',typ='R'),
+             PHI_RES         =SIMP(statut='o',typ='R'),
+             PHI_END         =SIMP(statut='f',typ='R'),
+           ),
+             ELAS_GONF             =FACT(statut='f',
+             BETAM           =SIMP(statut='o',typ='R'),
+             PREF            =SIMP(statut='o',typ='R'),
+           ),
+             JOINT_BANDIS         =FACT(statut='f',
+             K                =SIMP(statut='o',typ='R'),
+             DMAX             =SIMP(statut='o',typ='R'),
+             GAMMA            =SIMP(statut='o',typ='R'),
+             KT               =SIMP(statut='f',typ='R',defaut = 1.E12),
+           ),
+####  MONOCRISTAL
+
+           ECOU_VISC1      =FACT(statut='f',
+             TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
+             N               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             C               =SIMP(statut='o',typ='R'),
+           ),
+           ECOU_VISC2      =FACT(statut='f',
+             TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
+             N               =SIMP(statut='o',typ='R'),
+             K               =SIMP(statut='o',typ='R'),
+             C               =SIMP(statut='o',typ='R'),
+             D               =SIMP(statut='o',typ='R'),
+             A               =SIMP(statut='o',typ='R'),
+           ),
+           ECOU_VISC3      =FACT(statut='f',
+             TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
+             K               =SIMP(statut='o',typ='R',fr="Constante de Boltzmann, en eV/K"),
+             TAUMU           =SIMP(statut='o',typ='R',fr="Seuil d ecoulement, en unite de contraintes"),
+             GAMMA0          =SIMP(statut='o',typ='R',fr="Vitesse d ecoulement initiale"),
+             DELTAV          =SIMP(statut='o',typ='R',fr="Volume d activation"),
+             DELTAG0         =SIMP(statut='o',typ='R',fr="Gain d energie lie au franchissement d obstacle"),
+           ),
+           KOCKS_RAUCH      =FACT(statut='f',
+              regles=(UN_PARMI('H','H1'),
+                      PRESENT_PRESENT('H1','H2','H3','H4'),
+                      PRESENT_ABSENT('H','H1','H2','H3','H4','H5','H6'),
+                      ),
+             TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECOU_VISC",),),
+             K               =SIMP(statut='o',typ='R',fr="Constante de Boltzmann, en eV/K"),
+             TAUR            =SIMP(statut='o',typ='R',fr="Contraintes de cisaillement à T=0K, en unite de contraintes"),
+             TAU0            =SIMP(statut='o',typ='R',fr="Contraintes critique initiale de cisaillement, en unite de contraintes"),
+             GAMMA0          =SIMP(statut='o',typ='R',fr="Vitesse d ecoulement initiale"),
+             DELTAG0         =SIMP(statut='o',typ='R',fr="Gain d energie lie au franchissement d obstacle"),
+             BSD             =SIMP(statut='o',typ='R',fr="fonction de la taille du grain B/D"),
+             GCB             =SIMP(statut='o',typ='R',fr="distance critique d'annihilation GC/B"),
+             KDCS            =SIMP(statut='o',typ='R',fr="Parametre relatif à la direction principale de la dislocation"),
+             P               =SIMP(statut='o',typ='R',fr="Parametre materiau dépendant de la forme de l'obstacle"),
+             Q               =SIMP(statut='o',typ='R',fr="Parametre materiau dépendant de la forme de l'obstacle"),
+             H               =SIMP(statut='f',typ='R'),
+             H1              =SIMP(statut='f',typ='R'),
+             H2              =SIMP(statut='f',typ='R'),
+             H3              =SIMP(statut='f',typ='R'),
+             H4              =SIMP(statut='f',typ='R'),
+             H5              =SIMP(statut='f',typ='R'),
+             H6              =SIMP(statut='f',typ='R'),
+           ),
+           ECRO_ISOT1      =FACT(statut='f',
+              regles=(UN_PARMI('H','H1'),
+                      PRESENT_PRESENT('H1','H2','H3','H4'),
+                      PRESENT_ABSENT('H','H1','H2','H3','H4','H5','H6'),
+                      ),
+             TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECRO_ISOT",),),
+             R_0             =SIMP(statut='o',typ='R'),
+             Q               =SIMP(statut='o',typ='R'),
+             B               =SIMP(statut='o',typ='R'),
+             H               =SIMP(statut='f',typ='R'),
+             H1              =SIMP(statut='f',typ='R'),
+             H2              =SIMP(statut='f',typ='R'),
+             H3              =SIMP(statut='f',typ='R'),
+             H4              =SIMP(statut='f',typ='R'),
+             H5              =SIMP(statut='f',typ='R'),
+             H6              =SIMP(statut='f',typ='R'),
+           ),
+           ECRO_ISOT2      =FACT(statut='f',
+              regles=(UN_PARMI('H','H1'),
+                      PRESENT_PRESENT('H1','H2','H3','H4'),
+                      PRESENT_ABSENT('H','H1','H2','H3','H4','H5','H6'),
+                      ),
+             TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECRO_ISOT",),),
+             R_0             =SIMP(statut='o',typ='R'),
+             Q1              =SIMP(statut='o',typ='R'),
+             B1              =SIMP(statut='o',typ='R'),
+             H               =SIMP(statut='f',typ='R'),
+             H1              =SIMP(statut='f',typ='R'),
+             H2              =SIMP(statut='f',typ='R'),
+             H3              =SIMP(statut='f',typ='R'),
+             H4              =SIMP(statut='f',typ='R'),
+             H5              =SIMP(statut='f',typ='R'),
+             H6              =SIMP(statut='f',typ='R'),
+             Q2              =SIMP(statut='o',typ='R'),
+             B2              =SIMP(statut='o',typ='R'),
+           ),
+           ECRO_CINE1      =FACT(statut='f',
+             TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECRO_CINE",),),
+             D               =SIMP(statut='o',typ='R'),
+           ),
+           ECRO_CINE2      =FACT(statut='f',
+             TYPE_PARA       =SIMP(statut='f',typ='TXM',into=("ECRO_CINE",),),
+             D               =SIMP(statut='o',typ='R'),
+             GM              =SIMP(statut='o',typ='R'),
+             PM              =SIMP(statut='o',typ='R'),
+             C               =SIMP(statut='o',typ='R'),
+           ),
+
+####  MONOCRISTAL
+
+           DRUCK_PRAGER_FO  =FACT(statut='f',
+             ALPHA           =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+             SY              =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+             P_ULTM          =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+             ECROUISSAGE = SIMP(statut='o',typ='TXM',into=("LINEAIRE","PARABOLIQUE")),
+             b_lineaire =BLOC(condition="ECROUISSAGE=='LINEAIRE'",
+                                    fr="Loi de comportement de type Drucker Prager avec un ecrouissage lineaire",
+                    H               =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+                    TYPE_DP         =SIMP(statut='c',typ='R',defaut= 1.0,),
+             ),
+             b_parabolique =BLOC(condition="ECROUISSAGE=='PARABOLIQUE'",
+                                    fr="Loi de comportement de type Drucker Prager avec un ecrouissage parabolique",
+                    SY_ULTM         =SIMP(statut='o',typ=(fonction_sdaster,formule)),
+                    TYPE_DP         =SIMP(statut='c',typ='R',defaut= 2.0,),
+             ),
+            DILAT           =SIMP(statut='f',typ='R',defaut=0.0),
+           ),
+
+
+           INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BODEL C.BODEL
+DEFI_MODELE_GENE=OPER(nom="DEFI_MODELE_GENE",op= 126,sd_prod=modele_gene,
+                      reentrant='n',
+            fr="Créer la structure globale à partir des sous-structures en sous-structuration dynamique", 
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         SOUS_STRUC      =FACT(statut='o',max='**',
+           NOM             =SIMP(statut='o',typ='TXM' ),
+           MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+           TRANS           =SIMP(statut='f',typ='R',max=3),
+         ),
+         LIAISON         =FACT(statut='o',max='**',
+           SOUS_STRUC_1    =SIMP(statut='o',typ='TXM' ),
+           INTERFACE_1     =SIMP(statut='o',typ='TXM' ),
+           SOUS_STRUC_2    =SIMP(statut='o',typ='TXM' ),
+           INTERFACE_2     =SIMP(statut='o',typ='TXM' ),
+           regles=(EXCLUS('GROUP_MA_MAIT_1','GROUP_MA_MAIT_2','MAILLE_MAIT_2'),
+                   EXCLUS('MAILLE_MAIT_1','GROUP_MA_MAIT_2','MAILLE_MAIT_2'),),
+           GROUP_MA_MAIT_1   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_MAIT_1     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA_MAIT_2   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_MAIT_2     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           OPTION            =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("REDUIT","CLASSIQUE") ),
+         ),
+         VERIF           =FACT(statut='f',max='**',
+#  dans la doc U stop_erreur est obligatoire         
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+DEFI_NAPPE=OPER(nom="DEFI_NAPPE",op=4,sd_prod=nappe_sdaster,
+                fr="Définir une fonction réelle de deux variables réelles",
+                reentrant='n',UIinfo={"groupes":("Fonction",)},
+         regles=(UN_PARMI('FONCTION','DEFI_FONCTION'),
+                 EXCLUS('FONCTION','NOM_PARA_FONC',),
+                 ENSEMBLE('NOM_PARA_FONC','DEFI_FONCTION'),),
+         NOM_PARA        =SIMP(statut='o',typ='TXM',into=C_PARA_FONCTION() ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),       
+         PARA            =SIMP(statut='o',typ='R',max='**'),
+         FONCTION        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**' ),
+         NOM_PARA_FONC   =SIMP(statut='f',typ='TXM',into=C_PARA_FONCTION() ),
+         DEFI_FONCTION   =FACT(statut='f',max='**',
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+           INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+           PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+           PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         VERIF           =SIMP(statut='f',typ='TXM',into=("CROISSANT",) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE KHAM M.KHAM
+DEFI_OBSTACLE=OPER(nom="DEFI_OBSTACLE",op=  73,sd_prod=table_fonction,
+                   fr="Définition d'un obstacle plan perpendiculaire à une structure filaire",
+                   reentrant='n',
+         UIinfo={"groupes":("Modélisation",)},
+         TYPE            =SIMP(statut='o',typ='TXM',defaut="CERCLE",
+                             into=("CERCLE","PLAN_Y","PLAN_Z","DISCRET",
+                             "BI_CERCLE","BI_PLAN_Y","BI_PLAN_Z","BI_CERC_INT",
+                             "CRAYON_900","CRAYON_1300","GUID_A_CARTE_900",
+                             "GUID_B_CARTE_900","GUID_C_CARTE_900",
+                             "GUID_D_CARTE_900","GUID_E_CARTE_900",
+                             "GUID_F_CARTE_900","GUID_A_CARTE_1300",
+                             "GUID_B_CARTE_1300","GUID_C_CARTE_1300",
+                             "GUID_D_CARTE_1300","GUID_E_CARTE_1300",
+                             "GUID_F_CARTE_1300","GUID_A_CARSP_900",
+                             "GUID_B_CARSP_900","GUID_C_CARSP_900",
+                             "GUID_D_CARSP_900","GUID_E_CARSP_900",
+                             "GUID_F_CARSP_900","GUID_A_CARSP_1300",
+                             "GUID_B_CARSP_1300","GUID_C_CARSP_1300",
+                             "GUID_D_CARSP_1300","GUID_E_CARSP_1300",
+                             "GUID_F_CARSP_1300","GUID_A_GCONT_900",
+                             "GUID_B_GCONT_900","GUID_C_GCONT_900",
+                             "GUID_D_GCONT_900","GUID_E_GCONT_900",
+                             "GUID_F_GCONT_900","GUID_A_GCONT_1300",
+                             "GUID_B_GCONT_1300","GUID_C_GCONT_1300",
+                             "GUID_D_GCONT_1300","GUID_E_GCONT_1300",
+                             "GUID_F_GCONT_1300","GUID_A_GCOMB_900",
+                             "GUID_B_GCOMB_900","GUID_C_GCOMB_900",
+                             "GUID_D_GCOMB_900","GUID_E_GCOMB_900",
+                             "GUID_F_GCOMB_900","GUID_A_GCOMB_1300",
+                             "GUID_B_GCOMB_1300","GUID_C_GCOMB_1300",
+                             "GUID_D_GCOMB_1300","GUID_E_GCOMB_1300",
+                             "GUID_F_GCOMB_1300",) ),
+         VALE            =SIMP(statut='f',typ='R',max='**'),
+         VERIF           =SIMP(statut='f',typ='TXM',defaut="FERME"),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+DEFI_PARA_SENSI=OPER(nom="DEFI_PARA_SENSI",op=   2,sd_prod=para_sensi,
+                    fr="Définition d'un paramètre de sensibilité",
+                    ang="Definition of a sensitive parameter",
+                    reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
+         NOM_RESU        =SIMP(statut='c',typ='TXM',into=("TOUTRESU",),defaut="TOUTRESU",
+                               fr="Nom du concept créé",
+                               ang="Name of the concept"),
+         VALE            =SIMP(statut='o',typ='R',
+                               fr="Valeur du parametre",
+                               ang="Value of the parameter"),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 16/11/2009   AUTEUR ASSIRE A.ASSIRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+from Macro.defi_part_feti_ops import defi_part_feti_ops
+
+DEFI_PART_FETI=MACRO(nom="DEFI_PART_FETI",op=defi_part_feti_ops,sd_prod=sd_feti_sdaster,
+                     reentrant='n',UIinfo={"groupe":("Maillage",)},
+                     fr="Creation partitionnement en sous-domaines pour FETI",
+         regles=(UN_PARMI('MAILLAGE','MODELE'),PRESENT_PRESENT('MODELE','EXCIT'),),
+
+         NB_PART         =SIMP(statut='o',typ='I',val_min=2),
+         MAILLAGE        =SIMP(statut='f',typ=maillage_sdaster),
+         MODELE          =SIMP(statut='f',typ=modele_sdaster),
+         EXCIT           =FACT(statut='f',max='**',
+           CHARGE          =SIMP(statut='f',typ=(char_meca,char_cine_meca)),),
+
+         # Methode de partitionnement
+         METHODE         =SIMP(statut='f',typ='TXM',into=("PMETIS","SCOTCH","KMETIS",), defaut="SCOTCH" ),
+         
+         LOGICIEL      =SIMP(statut='f',typ='TXM'),
+
+         # Corrige les problemes possibles de non-connexite des sous-domaines
+         CORRECTION_CONNEX    =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON')),
+
+         # Permet de grouper des mailles dans un meme sous-doamine
+         GROUPAGE        =FACT(statut='f',max='**',
+           GROUP_MA       =SIMP(statut='o',typ=grma,),
+                          ),
+         # Permet d'appliquer des poids sur certaines mailles
+         POIDS_MAILLES   =FACT(statut='f',max='**',
+           GROUP_MA       =SIMP(statut='o',typ=grma,),
+           POIDS          =SIMP(statut='f',typ='I',val_min=2),
+                          ),
+         # Prefixe pour le nom des group_ma definissant les sous-domaines 
+         NOM_GROUP_MA    =SIMP(statut='f',typ='TXM',defaut='SD' ),
+
+         # Traiter les mailles de bords (elles sont enlevees du graphe puis reinjectees)
+         TRAITER_BORDS   =SIMP(statut='f',typ='TXM',defaut='OUI',into=('OUI','NON') ),
+         
+         # Si le mot-clé suivant est renseigné, crée de nouveau group_ma a partir des bords
+         # Note : le calcul FETI sera impossible
+         b_traiter_bords =BLOC(condition="TRAITER_BORDS == 'OUI'", fr="Crée t on des nouveaux group_ma",
+           NOM_GROUP_MA_BORD  =SIMP(statut='f',typ='TXM'),
+             ),
+
+         INFO            =SIMP(statut='f',typ='I',into=(1, 2), defaut=1),
+);
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+DEFI_PART_OPS=OPER(nom="DEFI_PART_OPS",op=21,sd_prod=sd_feti_sdaster,
+                    fr="Creation partitionnement en sous-domaines pour FETI",
+                    docu="U4.23.05",reentrant='n',
+                    UIinfo={"groupes":("Résolution",)},
+         MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
+         MAILLAGE        =SIMP(statut='f',typ=(maillage_sdaster) ),
+         NOM             =SIMP(statut='f',typ='TXM',defaut='SD'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2,3,4) ),
+         DEFI          =FACT(statut='f',max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma),
+           GROUP_MA_BORD   =SIMP(statut='f',typ=grma),
+         ),
+         EXCIT           =FACT(statut='f',max='**',
+           CHARGE          =SIMP(statut='f',typ=(char_meca,char_cine_meca)),
+         ),
+);
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+DEFI_PART_PA_OPS=PROC(nom="DEFI_PART_PA_OPS",op=29,
+                    fr="Creation partitionnement en sous-domaines pour FETI",
+                    docu="U4.00.00",
+                    UIinfo={"groupes":("Résolution",)},
+         MAILLAGE        =SIMP(statut='o',typ=(maillage_sdaster,squelette) ),
+         MODELE          =SIMP(statut='f',typ=(modele_sdaster)),
+         NB_PART         =SIMP(statut='o',typ='I',),
+
+         # Methode de partitionnement
+         METHODE         =SIMP(statut='f',typ='TXM',into=("PMETIS","SCOTCH","KMETIS",), defaut="SCOTCH" ),
+         
+         LOGICIEL      =SIMP(statut='f',typ='TXM'),
+
+         # Corrige les problemes possibles de non-connexite des sous-domaines
+         CORRECTION_CONNEX    =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON')),
+
+         # Permet de grouper des mailles dans un meme sous-doamine
+         GROUPAGE        =FACT(statut='f',max='**',
+           GROUP_MA       =SIMP(statut='o',typ=grma,),
+                          ),
+         # Permet d'appliquer des poids sur certaines mailles
+         POIDS_MAILLES   =FACT(statut='f',max='**',
+           GROUP_MA       =SIMP(statut='o',typ=grma,),
+           POIDS          =SIMP(statut='f',typ='I'),
+                          ),
+         # Prefixe pour le nom des group_ma definissant les sous-domaines 
+         NOM_GROUP_MA    =SIMP(statut='f',typ='TXM',defaut='SD' ),
+
+         # Traiter les mailles de bords (elles sont enlevees du graphe puis reinjectees)
+         TRAITER_BORDS   =SIMP(statut='f',typ='TXM',defaut='OUI',into=('OUI','NON') ),
+
+         # Si le mot-clé suivant est renseigné, crée de nouveau group_ma a partir des bords
+         # Note : le calcul FETI sera impossible
+         b_traiter_bords =BLOC(condition="TRAITER_BORDS == 'OUI'", fr="Crée t on des nouveaux group_ma",
+           NOM_GROUP_MA_BORD  =SIMP(statut='f',typ='TXM'),
+             ),
+
+         INFO            =SIMP(statut='f',typ='I',into=(1, 2), defaut=1),
+
+);
+#& MODIF COMMANDE  DATE 28/12/2009   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+from Macro.defi_sol_miss_ops import defi_sol_miss_ops
+
+DEFI_SOL_MISS = MACRO(nom="DEFI_SOL_MISS",op=defi_sol_miss_ops, sd_prod=table_sdaster,
+                      fr="Définition des données de sol pour Miss", reentrant='n',
+                      UIinfo={"groupes":("Modélisation",)},
+   MATERIAU = FACT(statut='o', max='**',
+            fr="Définition des matériaux",
+      E         = SIMP(statut='o', typ='R', fr="Module d'Young"),
+      NU        = SIMP(statut='o', typ='R', fr="Coefficient de Poisson"),
+      RHO       = SIMP(statut='o', typ='R', fr="Masse volumique"),
+      AMOR_HYST = SIMP(statut='o', typ='R', fr="Coefficient d'amortissement"),
+   ),
+   COUCHE = FACT(statut='o', max='**',
+                 fr="Définition des couches",
+      regles=(AU_MOINS_UN('EPAIS','SUBSTRATUM'),),
+      SUBSTRATUM= SIMP(statut='f', typ='TXM', into=("OUI","NON"),),
+      EPAIS     = SIMP(statut='f', typ='R', fr="Epaisseur de la couche"),
+      RECEPTEUR = SIMP(statut='f', typ='TXM', defaut="NON", into=("OUI", "NON"),),
+      SOURCE    = SIMP(statut='f', typ='TXM', defaut="NON", into=("OUI", "NON"),),
+      NUME_MATE = SIMP(statut='o', typ='I', fr="Numéro du matériau"),
+   ),
+   TITRE = SIMP(statut='f', typ='TXM', max='**',
+                fr="Titre de la table produite"),
+   INFO  = SIMP(statut='f', typ='I', defaut=1, into=(1,2)),
+)
+
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+DEFI_SPEC_TURB=OPER(nom="DEFI_SPEC_TURB",op= 145,sd_prod=spectre_sdaster,
+                    fr="Définition d'un spectre d'excitation turbulente",
+                    reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+         regles=(UN_PARMI('SPEC_LONG_COR_1','SPEC_LONG_COR_2','SPEC_LONG_COR_3',
+                          'SPEC_LONG_COR_4','SPEC_CORR_CONV_1','SPEC_CORR_CONV_2',
+                          'SPEC_FONC_FORME','SPEC_EXCI_POINT'),),
+         SPEC_LONG_COR_1 =FACT(statut='f',
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VISC_CINE       =SIMP(statut='o',typ='R' ),
+         ),
+         SPEC_LONG_COR_2 =FACT(statut='f',
+           regles=(ENSEMBLE('FREQ_COUP','PHI0','BETA' ),),
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FREQ_COUP       =SIMP(statut='f',typ='R',defaut= 0.1 ),
+           PHI0            =SIMP(statut='f',typ='R',defaut= 1.5E-3 ),
+           BETA            =SIMP(statut='f',typ='R',defaut= 2.7 ),
+         ),
+         SPEC_LONG_COR_3 =FACT(statut='f',
+           regles=(ENSEMBLE('PHI0_1','BETA_1','PHI0_2','BETA_2','FREQ_COUP'),),
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           FREQ_COUP       =SIMP(statut='f',typ='R',defaut= 0.2 ),
+           PHI0_1          =SIMP(statut='f',typ='R',defaut= 5.E-3 ),
+           BETA_1          =SIMP(statut='f',typ='R',defaut= 0.5 ),
+           PHI0_2          =SIMP(statut='f',typ='R',defaut= 4.E-5 ),
+           BETA_2          =SIMP(statut='f',typ='R',defaut= 3.5 ),
+         ),
+         SPEC_LONG_COR_4 =FACT(statut='f',
+           regles=(ENSEMBLE('BETA','GAMMA'),),
+           LONG_COR        =SIMP(statut='o',typ='R' ),
+           PROF_VITE_FLUI  =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TAUX_VIDE       =SIMP(statut='o',typ='R' ),
+           BETA            =SIMP(statut='f',typ='R',defaut= 2. ),
+           GAMMA           =SIMP(statut='f',typ='R',defaut= 4. ),
+         ),
+         SPEC_CORR_CONV_1=FACT(statut='f',
+           LONG_COR_1      =SIMP(statut='o',typ='R' ),
+           LONG_COR_2      =SIMP(statut='f',typ='R' ),
+           VITE_FLUI       =SIMP(statut='o',typ='R' ),
+           RHO_FLUI        =SIMP(statut='o',typ='R' ),
+           FREQ_COUP       =SIMP(statut='f',typ='R' ),
+           K               =SIMP(statut='f',typ='R',defaut= 5.8E-3 ),
+           D_FLUI          =SIMP(statut='o',typ='R' ),
+           COEF_VITE_FLUI_A=SIMP(statut='f',typ='R' ),
+           COEF_VITE_FLUI_O=SIMP(statut='f',typ='R' ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="GENERALE",
+                                 into=("AU_YANG","GENERALE","CORCOS") ),
+         ),
+         SPEC_CORR_CONV_2=FACT(statut='f',
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VITE_FLUI       =SIMP(statut='o',typ='R' ),
+           FREQ_COUP       =SIMP(statut='f',typ='R' ),
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="GENERALE",
+                                 into=("AU_YANG","GENERALE","CORCOS",) ),
+           COEF_VITE_FLUI_A=SIMP(statut='f',typ='R' ),
+           COEF_VITE_FLUI_O=SIMP(statut='f',typ='R' ),
+         ),
+         SPEC_FONC_FORME =FACT(statut='f',
+           regles=(UN_PARMI('INTE_SPEC','GRAPPE_1'),
+                   ENSEMBLE('INTE_SPEC','FONCTION'),),
+           INTE_SPEC       =SIMP(statut='f',typ=table_fonction),
+           FONCTION        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**'),
+           GRAPPE_1        =SIMP(statut='f',typ='TXM',into=("DEBIT_180","DEBIT_300",) ),
+           NOEUD           =SIMP(statut='o',typ=no),
+           CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+           MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         ),
+         SPEC_EXCI_POINT =FACT(statut='f',
+           regles=(UN_PARMI('INTE_SPEC','GRAPPE_2'),),
+           INTE_SPEC       =SIMP(statut='f',typ=table_fonction),
+           GRAPPE_2        =SIMP(statut='f',typ='TXM',
+                                 into=("ASC_CEN","ASC_EXC","DES_CEN","DES_EXC",) ),
+#  Quels sont les statuts des mots cles à l interieur des deux blocs qui suivent
+           b_inte_spec =BLOC(condition = "INTE_SPEC != None",
+             NATURE          =SIMP(statut='o',typ='TXM',max='**',into=("FORCE","MOMENT",) ),
+             ANGL            =SIMP(statut='o',typ='R',max='**'),
+             NOEUD           =SIMP(statut='o',typ=no,max='**'),
+           ),
+           b_grappe_2      =BLOC(condition = "GRAPPE_2 != None",
+             RHO_FLUI        =SIMP(statut='o',typ='R' ),
+             NOEUD           =SIMP(statut='o',typ=no),
+           ),
+           CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
+           MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BODEL C.BODEL
+DEFI_SQUELETTE=OPER(nom="DEFI_SQUELETTE",op= 110,sd_prod=squelette,
+                    fr="Définit un maillage pour visualiser les résultats d'une sous-structuration dynamique",
+                    reentrant='n',
+            UIinfo={"groupes":("Maillage",)},
+         regles=(UN_PARMI('CYCLIQUE','MODELE_GENE','MAILLAGE'),
+                 PRESENT_PRESENT('CYCLIQUE','SECTEUR'),
+                 EXCLUS('SOUS_STRUC','SECTEUR'),
+                 PRESENT_PRESENT('NOM_GROUP_MA','MODELE_GENE'),
+                 PRESENT_PRESENT('NOM_GROUP_MA','SOUS_STRUC'),),
+         CYCLIQUE    =FACT(statut='f',max='**',
+           regles=(UN_PARMI('MODE_CYCL','MAILLAGE'),
+                   PRESENT_PRESENT('NB_SECTEUR','MAILLAGE'),),
+           MODE_CYCL       =SIMP(statut='f',typ=mode_cycl ),
+           NB_SECTEUR      =SIMP(statut='f',typ='I',validators=NoRepeat(),max=1 ),
+           MAILLAGE        =SIMP(statut='f',typ=maillage_sdaster ),
+         ),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
+         SQUELETTE       =SIMP(statut='f',typ=squelette ),
+         RECO_GLOBAL     =FACT(statut='f',max='**',
+           regles=(EXCLUS('TOUT','GROUP_NO_1'),
+                   PRESENT_PRESENT('GROUP_NO_1','GROUP_NO_2'),
+                   PRESENT_PRESENT('GROUP_NO_1','SOUS_STRUC_1'),
+                   PRESENT_PRESENT('GROUP_NO_2','SOUS_STRUC_2'),
+                   PRESENT_PRESENT('SOUS_STRUC_1','SOUS_STRUC_2'),),
+           TOUT            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI",) ),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           SOUS_STRUC_1    =SIMP(statut='f',typ='TXM' ),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           SOUS_STRUC_2    =SIMP(statut='f',typ='TXM' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           DIST_REFE       =SIMP(statut='f',typ='R' ),
+         ),
+         NOM_GROUP_MA    =FACT(statut='f',max='**',
+           NOM             =SIMP(statut='o',typ='TXM' ),
+           SOUS_STRUC      =SIMP(statut='o',typ='TXM' ),
+           GROUP_MA        =SIMP(statut='o',typ=grma),
+         ),
+         EXCLUSIF        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         MAILLAGE        =SIMP(statut='f',typ=maillage_sdaster ),
+         MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+         GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         TRANS           =SIMP(statut='f',typ='R',min=3,max=3),
+         ANGL_NAUT       =SIMP(statut='f',typ='R',min=3,max=3),
+         SOUS_STRUC      =FACT(statut='f',max='**',
+           NOM             =SIMP(statut='f',typ='TXM' ),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         ),
+         SECTEUR         =FACT(statut='f',max='**',
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE CANO V.CANO
+DEFI_TRC=OPER(nom="DEFI_TRC",op=94,sd_prod=table_sdaster,reentrant='n',
+            UIinfo={"groupes":("Modélisation",)},
+              fr="Définir d'un diagramme de transformations en refroidissement continu (TRC) de référence d'un acier"
+                +" pour les calculs métallurgiques.",
+         HIST_EXP        =FACT(statut='o',max='**',
+           VALE            =SIMP(statut='o',typ='R',max='**'),
+         ),
+         TEMP_MS         =FACT(statut='o',max='**',
+           SEUIL           =SIMP(statut='o',typ='R'),
+           AKM             =SIMP(statut='o',typ='R'),
+           BKM             =SIMP(statut='o',typ='R'),
+           TPLM            =SIMP(statut='o',typ='R'),
+         ),
+         GRAIN_AUST      =FACT(statut='f',max='**',
+           DREF           =SIMP(statut='f',typ='R'),
+           A              =SIMP(statut='f',typ='R'),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+def depl_interne_prod(DEPL_GLOBAL,**args ):
+    if AsType(DEPL_GLOBAL)     == cham_no_sdaster: return cham_no_sdaster
+    if AsType(DEPL_GLOBAL)     == evol_elas      : return evol_elas
+    if AsType(DEPL_GLOBAL)     == dyna_trans     : return dyna_trans
+    if AsType(DEPL_GLOBAL)     == dyna_harmo     : return dyna_harmo
+    if AsType(DEPL_GLOBAL)     == mode_meca      : return mode_meca
+    if AsType(DEPL_GLOBAL)     == mode_meca_c    : return mode_meca_c
+    raise AsException("type de concept resultat non prevu")
+
+DEPL_INTERNE=OPER(nom="DEPL_INTERNE",op=89,sd_prod=depl_interne_prod,reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+                  fr="Calculer le champ de déplacement à l'intérieur d'une sous-structure statique",
+         DEPL_GLOBAL     =SIMP(statut='o',typ=(cham_no_sdaster,mode_meca,mode_meca_c,evol_elas,dyna_trans,dyna_harmo),),
+         SUPER_MAILLE    =SIMP(statut='o',typ=ma,),
+         NOM_CAS         =SIMP(statut='f',typ='TXM',defaut=" "),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+DETRUIRE=MACRO(nom="DETRUIRE",op=-7,
+            UIinfo={"groupes":("Gestion du travail",)},
+              fr="Détruit des concepts utilisateurs dans la base GLOBALE ou des objets JEVEUX",
+             op_init=ops.detruire,
+             regles=(UN_PARMI('CONCEPT','OBJET',),),
+            CONCEPT     =FACT(statut='f',max='**',
+                regles=(DERIVABLE('NOM'),),
+                NOM         =SIMP(statut='o',typ=assd,validators=NoRepeat(),max='**'),
+                SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),
+                                 fr="Paramètre de sensibilité.",
+                                 ang="Sensitivity parameter",max='**'),
+            ),
+            OBJET  =FACT(statut='f',max='**',
+               CLASSE      =SIMP(statut='f',typ='TXM',into=('G','V','L'),defaut='G'),  
+               CHAINE      =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+               POSITION    =SIMP(statut='f',typ='I'  ,max='**'),
+            ),
+            ALARME        =SIMP(statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI',),
+            INFO          =SIMP(statut='f',typ='I',into=(1,2),defaut=2, ),           
+);
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+DYNA_ALEA_MODAL=OPER(nom="DYNA_ALEA_MODAL",op= 131,sd_prod=table_fonction,
+                     fr="Calcul de la réponse spectrale d'une structure linéaire sous une excitation connue par sa DSP",
+                     reentrant='n',
+            UIinfo={"groupes":("Résolution",)},
+         BASE_MODALE     =FACT(statut='o',
+           regles=(UN_PARMI('NUME_ORDRE','BANDE'),),
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca ),
+           BANDE           =SIMP(statut='f',typ='R',validators=NoRepeat(),max=2),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           b_bande =BLOC(condition = "BANDE != None",
+             AMOR_UNIF       =SIMP(statut='o',typ='R' ),
+           ),
+           b_nume_ordre =BLOC(condition = "NUME_ORDRE != None",
+             AMOR_REDUIT     =SIMP(statut='o',typ='R',max='**'),
+           ),
+         ),
+         MODE_STAT       =SIMP(statut='f',typ=mode_meca),
+# MODE_STAT devrait etre dans EXCIT car est utile et obligatoire que si NOM_CMP=depl_r, on pourrait
+# ainsi rajouter un bloc du genre  b_mod_stat= BLOC(condition = "(GRANDEUR == None) or (GRANDEUR == 'DEPL_R')",        
+         EXCIT           =FACT(statut='o',
+           INTE_SPEC       =SIMP(statut='o',typ=table_fonction),
+           NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG",) ),
+           MODAL           =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           b_modal_non = BLOC(condition = "(MODAL == None) or (MODAL == 'NON')",           
+             regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I'),),
+             NUME_ORDRE_I    =SIMP(statut='f',typ='I',max='**'),
+             NOEUD_I         =SIMP(statut='f',typ=no,max='**'),
+             b_nume_ordre_i  =BLOC(condition = "NUME_ORDRE_I != None",
+               regles=(EXCLUS('CHAM_NO','NOEUD'),),
+# on devrait rajouter EXCLUS('GRANDEUR','CHAM_NO') pour eviter ambiguite car CHAM_NO => GRANDEUR='EFFO'
+# cela impliquerait d'enlever la valeur par defaut a GRANDEUR            
+               NUME_ORDRE_J    =SIMP(statut='o',typ='I',max='**'),
+               CHAM_NO         =SIMP(statut='f',typ=cham_no_sdaster),
+               NOEUD           =SIMP(statut='f',typ=no,max='**'),
+               b_noeud         =BLOC(condition = "NOEUD != None",
+                  NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+                ),  
+               GRANDEUR        =SIMP(statut='f',typ='TXM',defaut="DEPL_R",
+                           into=("DEPL_R","EFFO","SOUR_DEBI_VOLU","SOUR_DEBI_MASS","SOUR_PRESS","SOUR_FORCE")),
+# que se passe-t-il en cas d'incompatibilite entre GRANDEUR et NOM_CMP  
+               DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ) ),
+             ),           
+             b_noeud_i       =BLOC(condition = "NOEUD_I != None",
+               NOEUD_J         =SIMP(statut='o',typ=no,max='**'),
+               NOM_CMP_I       =SIMP(statut='o',typ='TXM',max='**'),
+               NOM_CMP_J       =SIMP(statut='o',typ='TXM',max='**'),
+               NOEUD           =SIMP(statut='o',typ=no,max='**'),
+               NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+# ne serait-il pas bien que NOEUD et NOM_CMP soient facultatifs, car l'information peut etre contenue dans
+# NOEUD_I, NOM_CMP_I ...  => modif. du Fortran
+               GRANDEUR        =SIMP(statut='f',typ='TXM',defaut="DEPL_R",
+                           into=("DEPL_R","EFFO","SOUR_DEBI_VOLU","SOUR_DEBI_MASS","SOUR_PRESS","SOUR_FORCE")),
+# que se passe-t-il en cas d'incompatibilite entre GRANDEUR et NOM_CMP_I  
+               DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ) ),
+             ),
+           ),  
+           b_modal_oui = BLOC(condition = "(MODAL == 'OUI')",
+# dans ce cas, y-a-t-il vraiment la possibilite d'une matrice interspectrale avec plusieurs termes
+             NUME_ORDRE_I    =SIMP(statut='o',typ='I',max='**'),
+             NUME_ORDRE_J    =SIMP(statut='o',typ='I',max='**'),
+             GRANDEUR        =SIMP(statut='f',typ='TXM',defaut="DEPL_R",
+                           into=("DEPL_R","EFFO","SOUR_DEBI_VOLU","SOUR_DEBI_MASS","SOUR_PRESS","SOUR_FORCE")),
+             DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ) ),
+# dans le cas MODAL=OUI, GRANDEUR peut-il etre different de EFFO et doit il etre impose a EFFO   On devrait
+# pouvoir supprimer GRANDEUR et DERIVATION ici   
+           ),  
+                    
+         ),
+         REPONSE         =FACT(statut='f',
+           regles=( ENSEMBLE('FREQ_MIN','FREQ_MAX'),),
+           DERIVATION      =SIMP(statut='f',typ='I',defaut= 0,into=( 0 , 1 , 2 ,) ),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
+           FREQ_MIN        =SIMP(statut='f',typ='R' ),
+           FREQ_MAX        =SIMP(statut='f',typ='R' ),
+           PAS             =SIMP(statut='f',typ='R' ),
+           b_defaut_freq   =BLOC(condition = "FREQ_MIN == NONE",
+              FREQ_EXCIT      =SIMP(statut='f',typ='TXM',defaut="AVEC",into=("AVEC","SANS") ),
+              NB_POIN_MODE    =SIMP(statut='f',typ='I',defaut= 50 ),
+           ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 24/06/2009   AUTEUR ZENTNER I.ZENTNER 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+from Macro.dyna_iss_vari_ops import dyna_iss_vari_ops
+#
+DYNA_ISS_VARI=MACRO(nom="DYNA_ISS_VARI",op=dyna_iss_vari_ops ,sd_prod=table_fonction,
+                    fr="Calcul du spectre de réponse ou de la reponse temporelle sismique incoherente par decomposition spectrale",
+                    reentrant='n',
+                    UIinfo={"groupes":("Outils métier",)},        
+         NOM_CMP         =SIMP(statut='o',typ='TXM',into=("DX","DY","DZ") ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=0.999 ),
+         INTERF           =FACT(statut='o',
+            GROUP_NO_INTERF =SIMP(statut='o',typ=grma ,max='**'), 
+            MODE_INTERF  =SIMP(statut='o',typ='TXM',into=("CORP_RIGI","TOUT")),
+         ),      
+         MATR_COHE       =FACT(statut='o',
+            VITE_ONDE       =SIMP(statut='o',typ='R'),
+            PARA_ALPHA     =SIMP(statut='f',typ='R',defaut=0.5),           
+         ),
+#        FONC_MULT     =SIMP(statut='f',typ='R' ),
+         FREQ_INIT       =SIMP(statut='o',typ='R' ),
+         NB_FREQ       =SIMP(statut='o',typ='I' ),
+         PAS             =SIMP(statut='o',typ='R' ),     
+#        LIST_FREQ        =SIMP(statut='o',typ='liste' ),  
+         UNITE_RESU_FORC = SIMP(statut='f',typ='I',defaut=33),
+         UNITE_RESU_IMPE  = SIMP(statut='f',typ='I',defaut=32), 
+         TYPE             = SIMP(statut='f',typ='TXM',into=("BINAIRE","ASCII"), defaut="ASCII"),
+#
+         MATR_GENE         = FACT(statut='o',
+            MATR_MASS     = SIMP(statut='o',typ=(matr_asse_gene_r ) ),
+            MATR_RIGI     = SIMP(statut='o',typ=(matr_asse_gene_r,matr_asse_gene_c ) ),
+            MATR_AMOR     = SIMP(statut='f',typ=(matr_asse_gene_r,matr_asse_gene_c ) ), 
+         ),         
+#         
+         OPTION        = SIMP(statut='f',typ='TXM',into=("TOUT","DIAG"),defaut="TOUT"),
+#             
+         INFO           =SIMP(statut='f',typ='I' ,defaut=1,into=( 1 , 2)),
+         )  ;
+#& MODIF COMMANDE  DATE 13/10/2009   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ANDRIAM H.ANDRIAMBOLOLONA
+def dyna_line_harm_prod(MATR_RIGI,**args):
+   if (AsType(MATR_RIGI) == matr_asse_depl_r) : return dyna_harmo
+   elif (AsType(MATR_RIGI) == matr_asse_depl_c) : return dyna_harmo
+   elif (AsType(MATR_RIGI) == matr_asse_pres_c) : return acou_harmo
+   elif (AsType(MATR_RIGI) == matr_asse_gene_r) : return harm_gene
+   elif (AsType(MATR_RIGI) == matr_asse_gene_c) : return harm_gene
+   raise AsException("type de concept resultat non prevu")
+
+DYNA_LINE_HARM=OPER(nom="DYNA_LINE_HARM",op=  60,sd_prod=dyna_line_harm_prod,
+                    fr="Calcul de la réponse dynamique complexe d'un système à une excitation harmonique",
+                    reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
+         regles=(PRESENT_ABSENT('AMOR_REDUIT','MATR_AMOR'),
+                 PRESENT_ABSENT('AMOR_REDUIT','LIST_AMOR'),
+                 PRESENT_ABSENT('MATR_AMOR','LIST_AMOR'),
+                 UN_PARMI('FREQ','LIST_FREQ'),
+                 CONCEPT_SENSIBLE('ENSEMBLE'),),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+         MATR_MASS       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_pres_c,matr_asse_gene_r ) ),
+         MATR_RIGI       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_pres_c
+                                              ,matr_asse_gene_r,matr_asse_gene_c ) ),
+         MATR_AMOR       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_pres_c,matr_asse_gene_r ) ),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         LIST_AMOR       =SIMP(statut='f',typ=listr8_sdaster ),
+         MATR_IMPE_PHI   =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r) ),
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster ),
+         TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=3,into=("DEPL","VITE","ACCE") ),
+         b_reuse =BLOC(condition = "reuse",fr="en mode concept reentrant : RESULTAT obligatoire",
+             RESULTAT      =SIMP(statut='o',typ=(dyna_harmo,harm_gene)),
+         ),
+         EXCIT           =FACT(statut='o',max='**',
+           regles=(UN_PARMI('VECT_ASSE','CHARGE'),
+                   UN_PARMI('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),
+                  ),
+           VECT_ASSE       =SIMP(statut='f',position='global',typ=(cham_no_sdaster,vect_asse_gene) ),
+           CHARGE          =SIMP(statut='f',position='global', typ=char_meca ),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+           FONC_MULT_C     =SIMP(statut='f',typ=(fonction_c,formule_c) ),
+           COEF_MULT_C     =SIMP(statut='f',typ='C' ),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+           PHAS_DEG        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           PUIS_PULS       =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+         b_modele_char =BLOC(condition = " CHARGE != None ",
+                       MODELE    =SIMP(statut='o',typ=modele_sdaster ),
+                       ),
+         b_modele_vect =BLOC(condition = " VECT_ASSE != None ",
+                       MODELE    =SIMP(statut='f',typ=modele_sdaster ),
+                       ),
+         EXCIT_RESU      =FACT(statut='f',max='**',
+           RESULTAT        =SIMP(statut='o',typ=(dyna_harmo,harm_gene)),
+           COEF_MULT_C     =SIMP(statut='o',typ='C' ),
+         ),
+         b_matr_gene =BLOC(condition = "AsType(MATR_MASS) in (matr_asse_gene_r,)",
+                           fr="Methode de resolution matrice generalisee",
+          SOLVEUR         =FACT(statut='d',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="LDLT",into=("LDLT","MUMPS",) ),
+
+           b_ldlt_gene      =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mumps_gene =BLOC( condition = "METHODE=='LDLT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_mumps_gene     =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),             
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           ),
+          ),
+         ),
+
+         b_matr_phys =BLOC(condition = "AsType(MATR_MASS) in (matr_asse_depl_r,matr_asse_pres_c,)",
+                           fr="Methode de resolution matrice sur ddl physique",
+          SOLVEUR         =FACT(statut='d',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","MUMPS",) ),
+
+           b_mult_front_phys=BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+
+           b_ldlt_phys      =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult_mumps_phys =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_mumps_phys     =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),         
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             OUT_OF_CORE      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             ),
+          ),
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters"),
+)  ;
+# Rajouter test icompatibilite vect_asse et sensibilite
+# Peut-on aussi rajouter ici le test d incompatibilite charge complexe - derivation
+#  presents dans le Fortran
+#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
+DYNA_LINE_TRAN=OPER(nom="DYNA_LINE_TRAN",op=  48,sd_prod=dyna_trans,
+                    fr="Calcul de la réponse dynamique transitoire à une excitation temporelle quelconque",
+                    reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
+#         regles=(UN_PARMI('WILSON','DIFF_CENTRE','ADAPT'),),
+         regles=(UN_PARMI('NEWMARK','WILSON','DIFF_CENTRE','ADAPT'),
+                 CONCEPT_SENSIBLE('ENSEMBLE'),),
+         MODELE          =SIMP(statut='f',typ=modele_sdaster ),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+         MATR_MASS       =SIMP(statut='o',typ=matr_asse_depl_r ),
+         MATR_RIGI       =SIMP(statut='o',typ=matr_asse_depl_r ),
+         MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         MODE_STAT       =SIMP(statut='f',typ=mode_meca),
+         NEWMARK         =FACT(statut='f',
+           ALPHA           =SIMP(statut='f',typ='R',defaut= 0.25 ),
+           DELTA           =SIMP(statut='f',typ='R',defaut= 0.5 ),
+         ),
+         WILSON          =FACT(statut='f',
+           THETA           =SIMP(statut='f',typ='R',defaut= 1.4 ),
+         ),
+         DIFF_CENTRE     =FACT(statut='f',
+         ),
+         ADAPT           =FACT(statut='f',
+         ),
+         ETAT_INIT       =FACT(statut='f',
+           regles=(AU_MOINS_UN('DYNA_TRANS', 'DEPL_INIT', 'VITE_INIT', 'ACCE_INIT'),
+                   PRESENT_ABSENT('DYNA_TRANS', 'DEPL_INIT', 'VITE_INIT', 'ACCE_INIT'),),
+           DYNA_TRANS      =SIMP(statut='f',typ=dyna_trans ),
+           b_dyna_trans    =BLOC(condition = "DYNA_TRANS != None",
+             regles=(EXCLUS('NUME_INIT','INST_INIT' ),),
+             NUME_INIT       =SIMP(statut='f',typ='I' ),
+             INST_INIT       =SIMP(statut='f',typ='R' ),
+             b_inst_init     =BLOC(condition = "INST_INIT != None",
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+               b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                   PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+               b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                   PRECISION       =SIMP(statut='o',typ='R',),),
+             ),
+           ),
+           DEPL_INIT       =SIMP(statut='f',typ=cham_no_sdaster),
+           VITE_INIT       =SIMP(statut='f',typ=cham_no_sdaster),
+           ACCE_INIT       =SIMP(statut='f',typ=cham_no_sdaster),
+         ),
+         EXCIT           =FACT(statut='f',max='**',
+           regles=(UN_PARMI('CHARGE','VECT_ASSE'),
+                   EXCLUS('CHARGE','COEF_MULT'),
+                   EXCLUS('FONC_MULT','COEF_MULT'),
+                   EXCLUS('ACCE','COEF_MULT'),
+                   PRESENT_ABSENT('ACCE','FONC_MULT'),
+                   PRESENT_PRESENT('ACCE','VITE','DEPL'),
+                   # PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),
+                   ),
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_sdaster),
+           CHARGE          =SIMP(statut='f',typ=char_meca ),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+           ACCE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VITE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DEPL            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+         ),
+         EXCIT_RESU      =FACT(statut='f',max='**',
+           RESULTAT        =SIMP(statut='o',typ=dyna_trans ),
+           COEF_MULT       =SIMP(statut='o',typ='R' ),
+         ),
+         AMOR_MODAL      =FACT(statut='f',
+           MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+           NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
+         ),
+
+         SOLVEUR         =FACT(statut='d',
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+
+           b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+             b_ldltinc       =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+               NIVE_REMPLISSAGE    =SIMP(statut='f',typ='I',defaut= 0 ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+               ),
+             b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),             
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="CENTRALISE",into=("CENTRALISE","CENTRALISE")),
+             OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             ),
+
+           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+             ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+               NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+               REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+             ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
+           ),
+         ),
+
+         INCREMENT       =FACT(statut='o',max='**',
+           regles=(UN_PARMI('LIST_INST','FONC_INST','PAS'),),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+           FONC_INST       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           PAS             =SIMP(statut='f',typ='R' ),
+           b_pas           =BLOC(condition = "PAS != None",
+               INST_INIT       =SIMP(statut='f',typ='R' ),
+               INST_FIN        =SIMP(statut='f',typ='R' ),
+           ),
+           b_list_fonc     =BLOC(condition = "LIST_INST != None or FONC_INST != None",
+               regles=(EXCLUS('INST_FIN','NUME_FIN'),),
+               NUME_FIN        =SIMP(statut='f',typ='I' ),
+               INST_FIN        =SIMP(statut='f',typ='R' ),
+           ),
+           VITE_MIN        =SIMP(statut='f',typ='TXM',defaut="NORM",into=("MAXI","NORM") ),
+           COEF_MULT_PAS   =SIMP(statut='f',typ='R',defaut= 1.1 ),
+           COEF_DIVI_PAS   =SIMP(statut='f',typ='R',defaut= 1.33334 ),
+           PAS_LIMI_RELA   =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+           NB_POIN_PERIODE =SIMP(statut='f',typ='I',defaut= 50 ),
+           NMAX_ITER_PAS   =SIMP(statut='f',typ='I',defaut= 16 ),
+           PAS_CALCUL      =SIMP(statut='f',typ='I',defaut= 1 ),
+         ),
+         ARCHIVAGE       =FACT(statut='f',
+           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH', ),),
+           LIST_ARCH       =SIMP(statut='f',typ=listis_sdaster ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","VITE","ACCE") ),
+         ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramétres de sensibilité.",
+                               ang="List of sensitivity parameters",
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 12/04/2010   AUTEUR MICHEL S.MICHEL 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+#
+DYNA_NON_LINE=OPER(nom="DYNA_NON_LINE",op= 70,sd_prod=evol_noli,reentrant='f',
+            fr="Calcul de l'évolution dynamique d'une structure dont le matériau ou la géométrie ont un comportement non linéaire",
+            UIinfo={"groupes":("Résolution",)},
+         regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS',),
+                 CONCEPT_SENSIBLE('ENSEMBLE'),),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         MODE_STAT       =SIMP(statut='f',typ=mode_meca),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         MASS_DIAG       =SIMP(statut='f',typ='TXM',into=("OUI","NON",) ),
+         EXCIT           =FACT(statut='o',max='**',
+           regles=(PRESENT_ABSENT('FONC_MULT','ACCE'),
+                   PRESENT_PRESENT('ACCE','VITE','DEPL'),
+                   # PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),
+                   ),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                 into=("FIXE_CSTE","SUIV","DIDI")),
+           CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           DEPL            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ACCE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           VITE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+         ),
+         EXCIT_GENE      =FACT(statut='f',max='**',
+           FONC_MULT       =SIMP(statut='f',typ=fonction_sdaster,max='**' ),
+           VECT_GENE       =SIMP(statut='f',typ=vect_asse_gene,max='**' ),
+         ),
+         CONTACT         =SIMP(statut='f',typ=char_contact),
+         SOUS_STRUC      =FACT(statut='f',min=01,max='**',
+                regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
+                CAS_CHARGE  =SIMP(statut='o',typ='TXM' ),
+                TOUT        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                SUPER_MAILLE=SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**',),
+                FONC_MULT   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+              ),
+         AMOR_RAYL_RIGI = SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE"),),
+         AMOR_MODAL      =FACT(statut='f',
+           regles=(EXCLUS('AMOR_REDUIT','LIST_AMOR'),),
+           MODE_MECA       =SIMP(statut='f',typ=mode_meca),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**' ),
+           LIST_AMOR       =SIMP(statut='f',typ=listr8_sdaster ),
+           NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
+           REAC_VITE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         PROJ_MODAL      =FACT(statut='f',max='**',
+           MODE_MECA       =SIMP(statut='o',typ=mode_meca),
+           NB_MODE         =SIMP(statut='f',typ='I',defaut= 9999 ),
+           regles=(PRESENT_PRESENT('MASS_GENE','RIGI_GENE'),),
+           MASS_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
+           RIGI_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
+           AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r),
+         ),
+         COMP_INCR       =C_COMP_INCR(),
+         COMP_ELAS       =FACT(statut='f',max='**',
+           RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
+                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS",
+                                      "ELAS_POUTRE_GR","CABLE","ELAS_HYPER")),
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+                                 into=("IMPLICITE",)),
+         ),
+#-------------------------------------------------------------------
+         b_reuse =BLOC(condition = "reuse",fr="en mode concept reentrant : ETAT_INIT obligatoire",
+         ETAT_INIT       =FACT(statut='o',
+           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI',),
+                   EXCLUS('EVOL_NOLI','DEPL',),
+                   EXCLUS('EVOL_NOLI','VITE'),
+                   EXCLUS('EVOL_NOLI','ACCE'),
+                   EXCLUS('EVOL_NOLI','SIGM',),
+                   EXCLUS('EVOL_NOLI','VARI',),
+                   EXCLUS('NUME_ORDRE','INST'), ),
+           DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
+           VITE            =SIMP(statut='f',typ=cham_no_sdaster),
+           ACCE            =SIMP(statut='f',typ=cham_no_sdaster),
+           SIGM            =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
+           VARI            =SIMP(statut='f',typ=cham_elem),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+               PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+               PRECISION       =SIMP(statut='o',typ='R',),),
+           NUME_DIDI       =SIMP(statut='f',typ='I'),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),),
+         b_not_reuse =BLOC(condition = "not reuse",fr="en mode concept non reentrant : ETAT_INIT facultatif",
+         ETAT_INIT       =FACT(statut='f',
+           regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','VITE','ACCE','SIGM','VARI',),
+                   EXCLUS('EVOL_NOLI','DEPL',),
+                   EXCLUS('EVOL_NOLI','VITE'),
+                   EXCLUS('EVOL_NOLI','ACCE'),
+                   EXCLUS('EVOL_NOLI','SIGM',),
+                   EXCLUS('EVOL_NOLI','VARI',),
+                   EXCLUS('NUME_ORDRE','INST'), ),
+           DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
+           VITE            =SIMP(statut='f',typ=cham_no_sdaster),
+           ACCE            =SIMP(statut='f',typ=cham_no_sdaster),
+           SIGM            =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
+           VARI            =SIMP(statut='f',typ=cham_elem),
+           EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+               PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+               PRECISION       =SIMP(statut='o',typ='R',),),
+           NUME_DIDI       =SIMP(statut='f',typ='I'),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),),
+#-------------------------------------------------------------------
+         INCREMENT       =FACT(statut='o',
+           regles=(EXCLUS('NUME_INST_FIN','INST_FIN'),),
+           LIST_INST       =SIMP(statut='o',typ=(listr8_sdaster,list_inst)),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           NUME_INST_INIT  =SIMP(statut='f',typ='I'),
+           NUME_INST_FIN   =SIMP(statut='f',typ='I'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           ERRE_TEMPS      =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
+                                 fr="Adaptation temporelle pour les modélisations HM instationnaires",
+                                 ang="Time adaptation for unstationary HM models"),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6 ),
+         ),
+#-------------------------------------------------------------------
+         SCHEMA_TEMPS     =FACT(statut='o',
+            SCHEMA          =SIMP(statut='o',min=1,max=1,typ='TXM',
+            into=("DIFF_CENT","TCHAMWA","NEWMARK","HHT","THETA_METHODE","KRENK"),),
+            COEF_MASS_SHIFT =SIMP(statut='f',typ='R',defaut= 0.0E+0 ),
+            b_tchamwa = BLOC(condition="SCHEMA=='TCHAMWA'",
+               PHI          =SIMP(statut='f',typ='R',defaut= 1.05),),
+               
+            b_newmark = BLOC(condition="SCHEMA=='NEWMARK'",
+               BETA         =SIMP(statut='f',typ='R',defaut= 0.25),
+               GAMMA        =SIMP(statut='f',typ='R',defaut= 0.5),),
+               
+            b_hht     = BLOC(condition="SCHEMA=='HHT'",
+               ALPHA        =SIMP(statut='f',typ='R',defaut= -0.3 ),
+               MODI_EQUI    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),),),
+               
+            b_theta   = BLOC(condition="SCHEMA=='THETA_METHODE'",
+               THETA         =SIMP(statut='f',typ='R',defaut= 1.,val_min=0.5,val_max=100. ),),
+
+            b_krenk   = BLOC(condition="SCHEMA=='KRENK'",
+               KAPPA         =SIMP(statut='f',typ='R',defaut= 1.0,val_min=1.0,val_max=100. ),), 
+               
+            b_explicit= BLOC(condition="SCHEMA=='TCHAMWA'or SCHEMA=='DIFF_CENT'",
+               STOP_CFL     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),),
+               FORMULATION  =SIMP(statut='o',typ='TXM',into=("ACCELERATION",),),),
+               
+            b_implicit= BLOC(condition="SCHEMA!='TCHAMWA'and SCHEMA!='DIFF_CENT'",
+               FORMULATION  =SIMP(statut='o',max=1,typ='TXM',into=("DEPLACEMENT","VITESSE","ACCELERATION"),),),
+         ),
+         NEWTON          =FACT(statut='d',
+           REAC_INCR       =SIMP(statut='f',typ='I',defaut= 1,val_min=0 ),
+           PREDICTION      =SIMP(statut='f',typ='TXM',into=("TANGENTE","ELASTIQUE") ),
+           MATRICE         =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut= 0,val_min=0),
+           REAC_ITER_ELAS  =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+           PAS_MINI_ELAS   =SIMP(statut='f',typ='R',defaut=0.0E+0),
+         ),
+         SOLVEUR         =FACT(statut='d',
+           METHODE=SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","FETI","PETSC") ),
+           b_mult_front    =BLOC(condition= "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition= "METHODE == 'LDLT'",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON","DECOUPE") ),
+           ),
+           b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             FILTRAGE_MATRICE=SIMP(statut='f',typ='R',defaut=-1.0,),
+             MIXER_PRECISION =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+             b_ldltinc       =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+               NIVE_REMPLISSAGE    =SIMP(statut='f',typ='I',defaut= 0 ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+               ),
+             b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+             ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+              NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+              REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+             ),            
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
+           ),           
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+#-------------------------------------------------------------------
+         CONVERGENCE     =FACT(statut='d',
+           regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA','RESI_COMP_RELA'),),
+           b_refe_rela    =BLOC(condition = "RESI_REFE_RELA != None",
+             regles=(AU_MOINS_UN('SIGM_REFE','EPSI_REFE','FLUX_THER_REFE',
+                                  'FLUX_HYD1_REFE','FLUX_HYD2_REFE','VARI_REFE'),),
+             SIGM_REFE       =SIMP(statut='f',typ='R'),
+             EPSI_REFE       =SIMP(statut='f',typ='R'),
+             FLUX_THER_REFE  =SIMP(statut='f',typ='R'),
+             FLUX_HYD1_REFE  =SIMP(statut='f',typ='R'),
+             FLUX_HYD2_REFE  =SIMP(statut='f',typ='R'),
+             VARI_REFE       =SIMP(statut='f',typ='R'),
+           ),
+           RESI_REFE_RELA  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
+           RESI_COMP_RELA  =SIMP(statut='f',typ='R'),
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut=10),
+           ITER_GLOB_ELAS  =SIMP(statut='f',typ='I',defaut=25),
+           TYPE            =SIMP(statut='f',typ='TXM',defaut="PIC",into=("PIC","PLATEAU")),
+           b_plateau    =BLOC(condition = "TYPE == 'PLATEAU' ",
+             
+             PLATEAU_ITER    =SIMP(statut='f',typ='I',defaut=3, val_min =2),
+             PLATEAU_RELA    =SIMP(statut='f',typ='R',defaut=1E-3),                   
+           ),
+           ARRET           =SIMP(statut='f',typ='TXM',defaut="OUI"),
+           
+         ),
+#-------------------------------------------------------------------
+         OBSERVATION     =FACT(statut='f',max='**',
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+           SUIVI_DDL       =SIMP(statut='f',typ='TXM',defaut="NON",max=1,into=("OUI","NON")),
+         b_suivi          =BLOC(condition = "SUIVI_DDL == 'OUI' ",
+                                regles=(UN_PARMI('NOEUD','MAILLE','GROUP_NO','GROUP_MA','VALE_MIN','VALE_MAX'),
+                                                  PRESENT_PRESENT('MAILLE','POINT'),),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             POINT           =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                                   into=("DEPL","VITE","ACCE","SIEF_ELGA",
+                                         "VARI_ELGA","FORC_NODA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU",)),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             NUME_SUIVI      =SIMP(statut='o',typ='I' ,min=1,max=4),
+             VALE_MAX        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,into=("OUI",) ),
+             VALE_MIN        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,into=("OUI",) ),),
+         b_non_suivi      =BLOC(condition = "SUIVI_DDL == 'NON' ",
+                                regles=(UN_PARMI('NOEUD','GROUP_NO','MAILLE'),PRESENT_PRESENT('MAILLE','POINT'),),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             POINT           =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","VITE","ACCE","SIEF_ELGA",
+                                              "VARI_ELGA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU")),
+             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+             LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+             PAS_OBSE        =SIMP(statut='f',typ='I'),
+             LIST_ARCH       =SIMP(statut='f',typ=listis_sdaster),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                PRECISION       =SIMP(statut='o',typ='R',),),),
+         ),
+
+         AFFICHAGE      = FACT(statut='f',max=16,
+
+            UNITE       = SIMP(statut='f',typ='I',val_min=1),
+
+            LONG_R      = SIMP(statut='f',typ='I',defaut=12,val_min=1,val_max=12),
+            PREC_R      = SIMP(statut='f',typ='I',defaut=5, val_min=1,val_max=8),
+            LONG_I      = SIMP(statut='f',typ='I',defaut=6, val_min=1,val_max=12),
+
+            NOM_COLONNE = SIMP(statut='o',typ='TXM',defaut="STANDARD",
+                                into=("STANDARD","MINIMUM",
+                                      "ITER_NEWT",
+                                      "INCR_TPS",
+                                      "RESI_RELA","RELA_NOEU",
+                                      "RESI_MAXI","MAXI_NOEU",
+                                      "RESI_REFE","REFE_NOEU",
+                                      "RELI_ITER","RELI_COEF",
+                                      "PILO_PARA",
+                                      "MATR_ASSE",
+                                      "ITER_DEBO",
+                                      "CTCD_ITER","CTCD_GEOM","CTCD_NOEU",
+                                      "CTCC_GEOM","CTCC_FROT","CTCC_CONT",
+                                      "SUIV_1","SUIV_2","SUIV_3","SUIV_4",
+                                     ),
+                               ),
+            b_residu    = BLOC(condition = " NOM_COLONNE == 'RESI_RELA' or \
+                    NOM_COLONNE == 'RESI_MAXI' or\
+                    NOM_COLONNE == 'RESI_REFE' or\
+                    NOM_COLONNE == 'CTCD_GEOM' or\
+                    NOM_COLONNE == 'STANDARD' ",
+                            INFO_RESIDU = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+                          ),
+         ),
+#-------------------------------------------------------------------
+         ARCHIVAGE       =FACT(statut='f',
+           regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
+                   EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
+           LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           ARCH_ETAT_INIT  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+           DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+           into=("DEPL","SIEF_ELGA","VARI_ELGA","ACCE","VITE",)),
+         ),
+
+#-------------------------------------------------------------------
+         CRIT_FLAMB     =FACT(statut='f',min=1,max=1,
+           NB_FREQ         =SIMP(statut='f',typ='I',max=1,defaut=3),
+           CHAR_CRIT       =SIMP(statut='f',typ='R',min=2,max=2,defaut=(-10.0,10.),
+                            fr="Valeur des deux charges critiques délimitant la bande de recherche en HPP"),
+           RIGI_GEOM     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           bloc_ddl_exclus=BLOC(condition="(RIGI_GEOM=='NON')",
+              DDL_EXCLUS      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=40,
+                                    into=('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+                                          'TEMP','PRE1','PRE2','UI2','UI3','VI2','VI3','WI2','WI3','UO2',
+                                          'UO3','VO2','VO3','WO2','WO3','UI4','UI5','VI4','VI5','WI4',
+                                          'WI5','UO4','UO5','VO4','VO5','WO4','WO5','UI6','UO6','VI6',
+                                          'VO6','WI6','WO6','WO','WI1','WO1','GONF','LIAISON','DCX',
+                                          'DCY','DCZ','H1X','H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+                                          'E3X','E3Y','E3Z','E4X','E4Y','E4Z','LAGS_C','V11','V12','V13','V21','V22',
+                                          'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21','PRES22','PRES23',
+                                          'PRES31','PRES32','PRES33','VARI','LAG_GV')),),
+           INST_CALCUL       =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ),
+         ),
+         MODE_VIBR     =FACT(statut='f',min=1,max=1,
+           MATR_RIGI        =SIMP(statut='f',typ='TXM',defaut="ELASTIQUE",into=("ELASTIQUE","TANGENTE","SECANTE",) ),
+           NB_FREQ          =SIMP(statut='f',typ='I',max=1,defaut=3,
+                            fr="Nombre de fréquences propres à calculer"),
+           BANDE            =SIMP(statut='f',typ='R',min=2,max=2,
+                            fr="Valeur des deux fréquences délimitant la bande de recherche",),
+           INST_CALCUL       =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ),
+         ),
+#-------------------------------------------------------------------
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramètres de sensibilité",
+                               ang="List of sensitivity parameters"),
+#-------------------------------------------------------------------
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=table_fonction,
+                     fr="Calcul de la réponse par recombinaison modale d'une structure linéaire pour une excitation aléatoire",
+                     reentrant='n',
+            UIinfo={"groupes":("Résolution",)},
+         BASE_ELAS_FLUI  =SIMP(statut='o',typ=melasflu_sdaster ),
+         EXCIT           =FACT(statut='o',
+           INTE_SPEC_GENE  =SIMP(statut='o',typ=table_fonction),
+         ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 19/04/2010   AUTEUR GREFFET N.GREFFET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
+DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
+                     fr="Calcul de la réponse dynamique transitoire d'un système amorti ou non en coordonées généralisées"
+                        +" par superposition modale ou par sous structuration",
+                     reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
+      regles=(EXCLUS('AMOR_REDUIT','AMOR_GENE','LIST_AMOR'),
+              PRESENT_ABSENT('MODE_STAT','MODE_CORR'),),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="EULER",
+                               into=("EULER","NEWMARK","DEVOGE","ADAPT","ITMI") ),
+         MASS_GENE       =SIMP(statut='o',typ=matr_asse_gene_r ),
+         RIGI_GENE       =SIMP(statut='o',typ=matr_asse_gene_r ),
+         AMOR_GENE       =SIMP(statut='f',typ=matr_asse_gene_r ),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         LIST_AMOR       =SIMP(statut='f',typ=listr8_sdaster ),
+         MODE_STAT       =SIMP(statut='f',typ=mode_meca ),
+         MODE_CORR       =SIMP(statut='f',typ=(mult_elas,mode_meca),),
+
+         COUPLAGE_EDYOS     =FACT(statut='f',max=1,         
+                             VITE_ROTA          = SIMP(statut='o',typ='R' ),
+                             PAS_TPS_EDYOS      = SIMP(statut='o',typ='R' ),
+                             UNITE              = SIMP(statut='f',typ='I',defaut=45),
+         ),
+
+         ETAT_INIT       =FACT(statut='f',
+           regles=(EXCLUS('RESU_GENE','DEPL_INIT_GENE'),
+                   EXCLUS('RESU_GENE','VITE_INIT_GENE'),),
+           RESU_GENE       =SIMP(statut='f',typ=tran_gene ),
+           b_resu_gene     =BLOC(condition = "RESU_GENE != None",
+             INST_INIT       =SIMP(statut='f',typ='R' ),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                PRECISION       =SIMP(statut='o',typ='R',),),
+           ),
+           DEPL_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
+           VITE_INIT_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
+         ),
+         INCREMENT       =FACT(statut='o',max='**',
+           INST_INIT       =SIMP(statut='f',typ='R' ),
+           INST_FIN        =SIMP(statut='o',typ='R' ),
+           PAS             =SIMP(statut='f',typ='R' ),
+           VERI_PAS        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           VITE_MIN        =SIMP(statut='f',typ='TXM',defaut="NORM",into=("MAXI","NORM") ),
+           COEF_MULT_PAS   =SIMP(statut='f',typ='R',defaut= 1.1 ),
+           COEF_DIVI_PAS   =SIMP(statut='f',typ='R',defaut= 1.3333334 ),
+           PAS_LIMI_RELA   =SIMP(statut='f',typ='R',defaut= 1.0E-6 ),
+           NB_POIN_PERIODE =SIMP(statut='f',typ='I',defaut= 50 ),
+           NMAX_ITER_PAS   =SIMP(statut='f',typ='I',defaut= 16 ),
+           PAS_MAXI         =SIMP(statut='f',typ='R' ),
+         ),
+         ARCHIVAGE       =FACT(statut='f',
+           regles=(UN_PARMI('LIST_ARCH','PAS_ARCH'),),
+           LIST_ARCH       =SIMP(statut='f',typ=listis_sdaster ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+         ),
+
+         NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 20 ),
+         RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         LAMBDA          =SIMP(statut='f',typ='R',defaut= 10. ),
+
+         EXCIT           =FACT(statut='f',max='**',
+           regles=(UN_PARMI('FONC_MULT','COEF_MULT','ACCE'),
+                   UN_PARMI('VECT_GENE','NUME_ORDRE',),
+                   PRESENT_PRESENT('ACCE','VITE','DEPL'),
+                   PRESENT_PRESENT('D_FONC_DT','D_FONC_DT2'),
+                   PRESENT_ABSENT('NUME_ORDRE','VECT_GENE','COEF_MULT'),
+                   EXCLUS('MULT_APPUI','CORR_STAT'),
+                   PRESENT_ABSENT('MULT_APPUI','COEF_MULT'),
+                   PRESENT_ABSENT('MULT_APPUI','FONC_MULT'),),
+           VECT_GENE       =SIMP(statut='f',typ=vect_asse_gene ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I' ),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+           ACCE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           VITE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           DEPL            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+           b_loca          =BLOC(condition= "DIRECTION != None",
+             regles=(EXCLUS('NOEUD','GROUP_NO'),),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           ),
+           CORR_STAT       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           D_FONC_DT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           D_FONC_DT2      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         CHOC            =FACT(statut='f',max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA','NOEUD_1','GROUP_NO_1' ),
+                   EXCLUS('NOEUD_2','GROUP_NO_2'),
+                   PRESENT_ABSENT('GROUP_MA','NOEUD_2','GROUP_NO_2'),
+                   PRESENT_ABSENT('MAILLE','NOEUD_2','GROUP_NO_2'),),
+           INTITULE        =SIMP(statut='f',typ='TXM' ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no),
+           NOEUD_2         =SIMP(statut='f',typ=no),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           OBSTACLE        =SIMP(statut='o',typ=table_fonction),
+           ORIG_OBST       =SIMP(statut='f',typ='R',min=3,max=3),
+           NORM_OBST       =SIMP(statut='o',typ='R',min=3,max=3),
+           ANGL_VRIL       =SIMP(statut='f',typ='R' ),
+           JEU             =SIMP(statut='f',typ='R',defaut= 1. ),
+           DIST_1          =SIMP(statut='f',typ='R',val_min=0.E+0 ),
+           DIST_2          =SIMP(statut='f',typ='R',val_min=0.E+0 ),
+           SOUS_STRUC_1    =SIMP(statut='f',typ='TXM' ),
+           SOUS_STRUC_2    =SIMP(statut='f',typ='TXM' ),
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL"),
+           RIGI_NOR        =SIMP(statut='f',typ='R' ),
+           AMOR_NOR        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           RIGI_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           AMOR_TAN        =SIMP(statut='f',typ='R' ),
+           FROTTEMENT      =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","COULOMB","COULOMB_STAT_DYNA") ),
+           b_coulomb       =BLOC(condition="FROTTEMENT=='COULOMB'",
+               COULOMB         =SIMP(statut='o',typ='R' ),),
+           b_coulomb_stat_dyna  =BLOC(condition="FROTTEMENT=='COULOMB_STAT_DYNA'",
+               COULOMB_STAT    =SIMP(statut='o',typ='R' ),
+               COULOMB_DYNA    =SIMP(statut='o',typ='R' ),),
+           LAME_FLUIDE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           b_lame          =BLOC(condition="LAME_FLUIDE=='OUI'",
+               ALPHA           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+               BETA            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+               CHI             =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+               DELTA           =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           ),
+         ),
+         VERI_CHOC       =FACT(statut='f',max='**',
+           STOP_CRITERE    =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 0.5 ),
+         ),
+         FLAMBAGE        =FACT(statut='f',max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
+                   EXCLUS('NOEUD_2','GROUP_NO_2'),),
+           NOEUD_1         =SIMP(statut='f',typ=no),
+           NOEUD_2         =SIMP(statut='f',typ=no),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           OBSTACLE        =SIMP(statut='o',typ=table_fonction),
+           ORIG_OBST       =SIMP(statut='f',typ='R',max='**'),
+           NORM_OBST       =SIMP(statut='o',typ='R',max='**'),
+           ANGL_VRIL       =SIMP(statut='f',typ='R' ),
+           JEU             =SIMP(statut='f',typ='R',defaut= 1. ),
+           DIST_1          =SIMP(statut='f',typ='R' ),
+           DIST_2          =SIMP(statut='f',typ='R' ),
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL"),
+           RIGI_NOR        =SIMP(statut='f',typ='R' ),
+           FNOR_CRIT       =SIMP(statut='f',typ='R' ),
+           FNOR_POST_FL    =SIMP(statut='f',typ='R' ),
+           RIGI_NOR_POST_FL=SIMP(statut='f',typ='R' ),
+         ),
+         ANTI_SISM       =FACT(statut='f',max='**',
+           regles=(UN_PARMI('NOEUD_1','GROUP_NO_1'),
+                   UN_PARMI('NOEUD_2','GROUP_NO_2'),),
+           NOEUD_1         =SIMP(statut='f',typ=no),
+           NOEUD_2         =SIMP(statut='f',typ=no),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno),
+           RIGI_K1         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           RIGI_K2         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           SEUIL_FX        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           C               =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           PUIS_ALPHA      =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           DX_MAX          =SIMP(statut='f',typ='R',defaut= 1. ),
+         ),
+         RELA_EFFO_DEPL  =FACT(statut='f',max='**',
+           NOEUD           =SIMP(statut='o',typ=no),
+           SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+           RELATION        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         RELA_TRANSIS    =FACT(statut='f',max='**',
+           NOEUD           =SIMP(statut='o',typ=no),
+           SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+           RELATION        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         RELA_EFFO_VITE  =FACT(statut='f',max='**',
+           NOEUD           =SIMP(statut='o',typ=no),
+           SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+           RELATION        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         b_itmi          =BLOC(condition = "METHODE=='ITMI'",
+                regles=(ENSEMBLE('BASE_ELAS_FLUI','NUME_VITE_FLUI'),),
+                BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu_sdaster ),
+                NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+                ETAT_STAT       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+                PREC_DUREE      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+                CHOC_FLUI       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+                NB_MODE         =SIMP(statut='f',typ='I' ),
+                NB_MODE_FLUI    =SIMP(statut='f',typ='I' ),
+                TS_REG_ETAB     =SIMP(statut='f',typ='R' ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         IMPRESSION      =FACT(statut='f',max='**',
+           regles=(EXCLUS('TOUT','NIVEAU'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NIVEAU          =SIMP(statut='f',typ='TXM',into=("DEPL_LOC","VITE_LOC","FORC_LOC","TAUX_CHOC") ),
+           INST_INIT       =SIMP(statut='f',typ='R' ),
+           INST_FIN        =SIMP(statut='f',typ='R' ),
+         ),
+
+
+         SOLVEUR         =FACT(statut='d', fr="Méthode de résolution des systèmes linéaires",
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="LDLT",into=("LDLT","MUMPS","MULT_FRONT",) ),
+
+
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+
+           b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             ),
+         ),
+
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+ )  ;
+#& MODIF COMMANDE  DATE 12/05/2009   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+ENGENDRE_TEST=PROC(nom="ENGENDRE_TEST",op=178,
+                   UIinfo={"groupes":("Impression",)},
+                   fr="Engendre des tests pour la non régression du code (pour développeurs)",
+         UNITE           =SIMP(statut='f',typ='I',defaut=8),
+         FORMAT          =SIMP(statut='f',typ='TXM',into=("OBJET",) ),
+         FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE20.13"),
+         PREC_R          =SIMP(statut='f',typ='TXM',defaut="1.E-10"),
+#============================================================================
+         b_aster     =BLOC( condition = "FORMAT==None",
+            CO              =SIMP(statut='o',typ=(cham_gd_sdaster,resultat_sdaster,table_sdaster),
+                                  validators=NoRepeat(),max='**'),
+            TYPE_TEST       =SIMP(statut='f',typ='TXM',defaut="SOMM_ABS",into=("SOMME","SOMM_ABS","MAX","MIN") ),
+         ),
+#============================================================================
+         b_objet     =BLOC( condition = "FORMAT=='OBJET'",
+                            regles=(UN_PARMI('TOUT','CO'),),
+            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+            CO              =SIMP(statut='f',typ=assd,validators=NoRepeat(),max='**'),
+            TYPE_TEST       =SIMP(statut='f',typ='TXM',defaut="SOMME",into=("SOMME",) ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+
+from Macro.exec_logiciel_ops import exec_logiciel_ops
+def exec_logiciel_prod(self, MAILLAGE, **args):
+   if MAILLAGE != None:
+      mcf = MAILLAGE[0]
+      self.type_sdprod(mcf['MAILLAGE'], maillage_sdaster)
+   return None
+
+EXEC_LOGICIEL = MACRO(nom="EXEC_LOGICIEL",op=exec_logiciel_ops, sd_prod=exec_logiciel_prod,
+                      fr="Exécute un logiciel ou une commande système depuis Aster",
+                      UIinfo={"groupes":("Outils métier",)},
+      
+      regles = (AU_MOINS_UN('LOGICIEL', 'MAILLAGE'),),
+      
+      LOGICIEL = SIMP(statut='f', typ='TXM'),
+      ARGUMENT = SIMP(statut='f', max='**', typ='TXM'),
+
+      MAILLAGE = FACT(statut='f',
+         FORMAT     = SIMP(statut='o', typ='TXM', into=("GMSH", "GIBI", "SALOME")),
+         UNITE_GEOM = SIMP(statut='f', typ='I', val_min=10, val_max=90, defaut=16,
+                           fr="Unité logique définissant le fichier (fort.N) contenant les données géométriques (datg)"),
+         UNITE      = SIMP(statut='f', typ='I', val_min=10, val_max=90, defaut=19,
+                           fr="Unité logique définissant le fichier (fort.N) produit par le mailleur"),
+         MAILLAGE   = SIMP(statut='o', typ=CO),
+      ),
+
+      CODE_RETOUR_MAXI = SIMP(statut='f', typ='I', defaut=0, val_min=-1,
+                              fr="Valeur maximale du code retour toléré (-1 pour l'ignorer)"),
+      
+      INFO     = SIMP(statut='f', typ='I', defaut=2, into=(1,2),),
+)
+#& MODIF COMMANDE  DATE 05/05/2008   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+
+def extr_mode_prod(FILTRE_MODE,**args):
+  vale=FILTRE_MODE[0]['MODE']
+  if AsType(vale) == mode_meca   : return mode_meca
+  if AsType(vale) == mode_meca_c : return mode_meca_c
+  if AsType(vale) == mode_gene   : return mode_gene
+  raise AsException("type de concept resultat non prevu")
+
+EXTR_MODE=OPER(nom="EXTR_MODE",op= 168,sd_prod=extr_mode_prod,
+               reentrant='n',fr="Extraire séléctivement des modes des structures de données modales",
+            UIinfo={"groupes":("Résolution",)},
+         FILTRE_MODE     =FACT(statut='o',max='**',
+           regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','NUME_MODE','NUME_MODE_EXCLU','FREQ_MIN','CRIT_EXTR',),),
+           MODE            =SIMP(statut='o',typ=(mode_meca,mode_meca_c,mode_gene ) ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           NUME_MODE_EXCLU =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           FREQ_MIN        =SIMP(statut='f',typ='R' ),
+           CRIT_EXTR       =SIMP(statut='f',typ='TXM',into=("MASS_EFFE_UN","MASS_GENE") ),
+           b_freq_min      =BLOC(condition = "FREQ_MIN != None",  
+             FREQ_MAX        =SIMP(statut='o',typ='R' ),
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ),
+           b_crit_extr     =BLOC(condition = "CRIT_EXTR != None",
+             regles=(AU_MOINS_UN('SEUIL','SEUIL_X','SEUIL_Y','SEUIL_Z'),),
+             SEUIL           =SIMP(statut='f',typ='R'),
+             SEUIL_X         =SIMP(statut='f',typ='R'),
+             SEUIL_Y         =SIMP(statut='f',typ='R'),
+             SEUIL_Z         =SIMP(statut='f',typ='R'),
+           ),    
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         IMPRESSION      =FACT(statut='f',
+           CUMUL           =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",into=("MASS_EFFE_UN","MASS_GENE") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 18/05/2010   AUTEUR MEUNIER S.MEUNIER 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+
+def extr_resu_prod(RESULTAT,**args):
+  if AsType(RESULTAT) == evol_elas    : return evol_elas
+  if AsType(RESULTAT) == evol_noli    : return evol_noli
+  if AsType(RESULTAT) == evol_ther    : return evol_ther
+  if AsType(RESULTAT) == evol_varc    : return evol_varc
+  if AsType(RESULTAT) == dyna_trans   : return dyna_trans
+  if AsType(RESULTAT) == dyna_harmo   : return dyna_harmo
+  if AsType(RESULTAT) == acou_harmo   : return acou_harmo
+  if AsType(RESULTAT) == mode_meca    : return mode_meca
+  if AsType(RESULTAT) == mode_acou    : return mode_acou
+  if AsType(RESULTAT) == mult_elas    : return mult_elas
+  if AsType(RESULTAT) == fourier_elas : return fourier_elas
+
+  raise AsException("type de concept resultat non prevu")
+
+EXTR_RESU=OPER(nom="EXTR_RESU",op=176,sd_prod=extr_resu_prod,reentrant='f',
+            UIinfo={"groupes":("Résultats et champs",)},
+            fr="Extraire des champs au sein d'une SD Résultat",
+         regles=(CONCEPT_SENSIBLE('SEPARE'),
+                 #REUSE_SENSIBLE(),
+                 DERIVABLE('RESULTAT'),),
+         RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,dyna_harmo,acou_harmo,mode_meca,
+                                               mode_acou,evol_ther,evol_noli,evol_varc,
+                                               mult_elas,fourier_elas,fourier_ther ) ),
+
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                                   fr="Liste des paramètres de sensibilité.",
+                                   ang="List of sensitivity parameters"),
+
+         ARCHIVAGE       =FACT(statut='f',
+           regles=(  UN_PARMI('NUME_ORDRE', 'INST', 'FREQ', 'NUME_MODE',
+                        'NOEUD_CMP', 'LIST_INST', 'LIST_FREQ', 'LIST_ORDRE',
+                        'NOM_CAS', 'LIST_ARCH', 'PAS_ARCH' ),
+                     EXCLUS( 'CHAM_EXCLU','NOM_CHAM' ),   ),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO()),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+              PRECISION       =SIMP(statut='o',typ='R',),),
+           LIST_ARCH       =SIMP(statut='f',typ=listis_sdaster),
+           PAS_ARCH        =SIMP(statut='f',typ='I'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+           NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+           NOM_CAS         =SIMP(statut='f',typ='TXM'),
+                               ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+def extr_table_prod(TYPE_RESU,**args):
+  defs = globals()
+  typ = TYPE_RESU.lower()
+  if defs.get(typ) is not None:
+     return defs[typ]
+  raise AsException("type de concept resultat non prevu")
+
+EXTR_TABLE=OPER(nom="EXTR_TABLE",op=173,sd_prod=extr_table_prod,reentrant='n',
+            UIinfo={"groupes":("Résultats et champs",)},
+         fr="Extraire d'une table des concepts Code_Aster",
+         TYPE_RESU       =SIMP(statut='o',typ='TXM',),
+
+         TABLE           =SIMP(statut='o',typ=(table_sdaster,table_container)),
+
+         NOM_PARA        =SIMP(statut='o',typ='TXM'),
+
+         FILTRE          =FACT(statut='f',min=1,max='**',
+           NOM_PARA        =SIMP(statut='o',typ='TXM'),
+           CRIT_COMP       =SIMP(statut='f',typ='TXM',defaut="EQ",
+                                 into=("EQ","LT","GT","NE","LE","GE","VIDE",
+                                       "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI") ),
+           b_vale          =BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
+              regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
+              VALE            =SIMP(statut='f',typ='R'),
+              VALE_I          =SIMP(statut='f',typ='I'),
+              VALE_C          =SIMP(statut='f',typ='C'),
+              VALE_K          =SIMP(statut='f',typ='TXM'),),
+
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+
+def factoriser_prod(MATR_ASSE,**args):
+  if AsType(MATR_ASSE) == matr_asse_depl_r : return matr_asse_depl_r
+  if AsType(MATR_ASSE) == matr_asse_depl_c : return matr_asse_depl_c
+  if AsType(MATR_ASSE) == matr_asse_temp_r : return matr_asse_temp_r
+  if AsType(MATR_ASSE) == matr_asse_temp_c : return matr_asse_temp_c
+  if AsType(MATR_ASSE) == matr_asse_pres_r : return matr_asse_pres_r
+  if AsType(MATR_ASSE) == matr_asse_pres_c : return matr_asse_pres_c
+  raise AsException("type de concept resultat non prevu")
+
+FACTORISER=OPER(nom="FACTORISER",op=14,sd_prod=factoriser_prod,
+               fr="Factoriser une matrice assemblée en un produit de deux matrices triangulaires"+
+                  "ou construire une matrice de préconditionnement pour une résolution par gradient conjugué",
+               reentrant='f', UIinfo={"groupes":("Résolution",)},
+         regles=(EXCLUS('BLOC_DEBUT','DDL_DEBUT'),
+                 EXCLUS('BLOC_FIN','DDL_FIN'),),
+         MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,
+                                               matr_asse_temp_c,matr_asse_pres_r,matr_asse_pres_c) ),
+
+         # mots clés pour solveur LDLT et MULT_FRONT et MUMPS:
+         STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         NPREC           =SIMP(statut='f',typ='I',defaut=8),
+
+         # mots clés pour solveur LDLT :
+         BLOC_DEBUT      =SIMP(statut='f',typ='I',val_min=1,),
+         DDL_DEBUT       =SIMP(statut='f',typ='I',val_min=1,),
+         BLOC_FIN        =SIMP(statut='f',typ='I',val_min=1,),
+         DDL_FIN         =SIMP(statut='f',typ='I',val_min=1,),
+
+         # mots clés pour solveur MUMPS :
+         TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut='AUTO',into=('NONSYM','SYMGEN','SYMDEF','AUTO')),
+         PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+         PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+         ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+         OUT_OF_CORE  =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         
+         # mots clés pour solveur GCPC et PETSc :
+         PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR","LDLT_SP"),defaut="LDLT_INC" ),
+         b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",fr="Paramètres de la factorisation incomplete",
+           NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+           REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+         ),
+         b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+           REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 03/08/2009   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une étude, fin du travail engagé par une des commandes DEBUT ou POURSUITE",
+            UIinfo={"groupes":("Gestion du travail",)},
+#
+# FIN est appelé prématurément en cas d'exception ("SIGUSR1", ArretCPUError,
+# NonConvergenceError..., erreurs <S> ou erreurs <F> récupérées).
+# En cas d'ArretCPUError, on limite au maximum le travail à faire dans FIN.
+# Pour cela, on force certains mots-clés dans Execution/E_JDC.py.
+# 
+         FORMAT_HDF      =SIMP(fr="sauvegarde de la base GLOBALE au format HDF",statut='f',
+                               typ='TXM',defaut="NON",into=("OUI","NON",) ), 
+         RETASSAGE       =SIMP(fr="provoque le retassage de la base GLOBALE",
+                               statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         INFO_RESU       =SIMP(fr="provoque l'impression des informations sur les structures de données",
+                               statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",) ),
+         UNITE           =SIMP(statut='f',typ='I',defaut=6),  
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+FONC_FLUI_STRU=OPER(nom="FONC_FLUI_STRU",op= 169,sd_prod=fonction_sdaster,
+                    reentrant='n',fr="Crée une fonction constante paramètrée par l'abscisse curviligne",
+            UIinfo={"groupes":("Fonction",)},
+         TYPE_FLUI_STRU  =SIMP(statut='o',typ=(type_flui_stru) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DURAND C.DURAND
+def formule_prod(self,VALE,VALE_C,**args):
+   if   VALE   != None:
+      return formule
+   elif VALE_C != None:
+      return formule_c
+
+def form_pyth_ops(self,d):
+   NOM_PARA=self.etape['NOM_PARA']
+   VALE    =self.etape['VALE']
+   VALE_C  =self.etape['VALE_C']
+   if type(NOM_PARA) not in (list, tuple):
+      NOM_PARA = [NOM_PARA,]
+   if self.sd == None:
+      return
+   if VALE     != None :
+      texte = ''.join(VALE.splitlines())
+   elif VALE_C != None :
+      texte = ''.join(VALE_C.splitlines())
+   self.sd.setFormule(NOM_PARA, texte.strip())
+
+FORMULE=FORM(nom="FORMULE",op_init=form_pyth_ops,op=-5,
+             sd_prod=formule_prod,UIinfo={"groupes":("Fonction",)},
+             fr="Définit une formule réelle ou complexe à partir de son expression mathématique",
+         regles=(UN_PARMI('VALE','VALE_C',),),
+         VALE     =SIMP(statut='f',typ='TXM'),
+         VALE_C   =SIMP(statut='f',typ='TXM'),
+         NOM_PARA =SIMP(statut='o',typ='TXM',max='**'),
+);
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+GENE_FONC_ALEA=OPER(nom="GENE_FONC_ALEA",op= 118,sd_prod=table_fonction,
+                    fr="Génération de la fonction temporelle à partir d une matrice interspectrale",
+                    reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
+         INTE_SPEC       =SIMP(statut='o',typ=table_fonction),
+         NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("NON","OUI") ),
+         b_interpol_oui    =BLOC(condition = "INTERPOL == 'OUI' ",fr="Parametres cas interpolation autorisee",
+           DUREE_TIRAGE    =SIMP(statut='f',typ='R' ),
+           FREQ_INIT       =SIMP(statut='f',typ='R' ),
+           FREQ_FIN        =SIMP(statut='f',typ='R' ),
+             ),
+         NB_POIN         =SIMP(statut='f',typ='I'),
+         NB_TIRAGE       =SIMP(statut='f',typ='I',defaut= 1 ),
+         INIT_ALEA       =SIMP(statut='f',typ='I'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+def gene_matr_alea_prod(MATR_MOYEN,**args ):
+  if (AsType(MATR_MOYEN) == matr_asse_gene_r )  : return matr_asse_gene_r
+  if (AsType(MATR_MOYEN) == macr_elem_dyna) : return macr_elem_dyna
+  raise AsException("type de concept resultat non prevu")
+
+GENE_MATR_ALEA=OPER(nom="GENE_MATR_ALEA",op=  27,
+#sd_prod=matr_asse_gene_r,
+sd_prod=gene_matr_alea_prod,
+               fr="Générer une réalisation d'une matrice aléatoire réelle sym. déf. positive ou d'un macro élément dynamique",
+               reentrant='n',
+            UIinfo={"groupes":("Matrice",)},
+   MATR_MOYEN   = SIMP(statut='o', typ=(matr_asse_gene_r,macr_elem_dyna)),
+
+#    cas matrice generalisee 
+   b_matr =BLOC( condition = "AsType(MATR_MOYEN) in (matr_asse_gene_r,)",
+           COEF_VAR     = SIMP(statut='f', typ='R', defaut=0.1, val_min=0.E+0 ,
+                                fr="coefficient de variation de la matrice a generer" ),
+           ),
+#    cas macr_elem_dyna 
+   b_macr =BLOC( condition = "AsType(MATR_MOYEN) in (macr_elem_dyna,)",
+           fr="cas macr_elem_dyna (sous-structuratio)",
+           COEF_VAR_RIGI     = SIMP(statut='f', typ='R', defaut=0.1, val_min=0.E+0 ,
+                                fr="coefficient de variation de la matrice de raideur" ),
+           COEF_VAR_MASS     = SIMP(statut='f', typ='R', defaut=0., val_min=0.E+0 ,
+                                fr="coefficient de variation de la matrice de masse" ),
+           COEF_VAR_AMOR     = SIMP(statut='f', typ='R', defaut=0., val_min=0.E+0 ,
+                                fr="coefficient de variation de la matrice d'amortissement" ),),
+
+   INIT_ALEA    =SIMP(statut='f',typ='I'),
+) ;
+   
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+from Macro.gene_vari_alea_ops import gene_vari_alea_ops,gene_vari_alea_init
+GENE_VARI_ALEA=MACRO(nom="GENE_VARI_ALEA",
+               op_init=gene_vari_alea_init,op=gene_vari_alea_ops,
+               sd_prod=reel,reentrant='n',
+               fr="Générer une réalisation d'une variable aléatoire réelle de loi de probabilité donnée (Gamma ou Exponentielle)",
+               UIinfo={"groupes":("Fonction",)},
+   TYPE       = SIMP(statut='f', typ='TXM', into=("EXP_TRONQUEE", "EXPONENTIELLE", "GAMMA"), defaut="GAMMA"),
+   b_gamma    =BLOC(condition = "TYPE == 'GAMMA' ",fr="Parametres loi gamma",
+           VALE_MOY   = SIMP(statut='f', typ='R', defaut=1.),
+           BORNE_INF  = SIMP(statut='f', typ='R', defaut=0.),
+           COEF_VAR   = SIMP(statut='f', typ='R', defaut=0.1),
+             ),
+   b_expo    =BLOC(condition = "TYPE == 'EXPONENTIELLE' ",fr="Parametres loi exponentielle",
+           VALE_MOY   = SIMP(statut='f', typ='R', defaut=0.),
+           BORNE_INF  = SIMP(statut='f', typ='R', defaut=-1.),
+             ),
+   b_expo_tronq    =BLOC(condition = "TYPE == 'EXP_TRONQUEE' ",fr="Parametres loi exponentielle tronquee",
+           VALE_MOY   = SIMP(statut='f', typ='R', defaut=0.),
+           BORNE_INF  = SIMP(statut='f', typ='R', defaut=-1.),
+           BORNE_SUP  = SIMP(statut='f', typ='R', defaut=1.),
+             ),
+   INIT_ALEA       =SIMP(statut='f',typ='I'),
+)
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+IMPR_CO=PROC(nom="IMPR_CO",op=17,
+            UIinfo={"groupes":("Impression",)},
+             fr="Imprimer tous les objets JEVEUX qui constituent un concept utilisateur existant (pour les développeurs)",
+         regles=(UN_PARMI('CONCEPT','CHAINE','TOUT' ),),
+
+         UNITE           =SIMP(statut='f',typ='I',defaut=8),
+         NIVEAU          =SIMP(statut='f',typ='I',defaut=2,into=(-1,0,1,2) ),
+         ATTRIBUT        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","OUI") ),
+         CONTENU         =SIMP(statut='f',typ='TXM',defaut="OUI",into=("NON","OUI") ),
+         BASE            =SIMP(statut='f',typ='TXM',defaut="G",into=(" ","G","V","L") ),
+         CONCEPT    =FACT(statut='f',max='**',
+             regles=(DERIVABLE('NOM'),),
+             NOM         =SIMP(statut='o',typ=assd,validators=NoRepeat(),max='**'),
+             SENSIBILITE =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),
+                                 fr="Paramètre de sensibilité.",
+                                 ang="Sensitivity parameter",max='**'),),        
+         CHAINE          =SIMP(statut='f',typ='TXM'),
+         POSITION        =SIMP(statut='f',typ='I',defaut=1),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+)  ;
+#& MODIF COMMANDE  DATE 22/12/2009   AUTEUR TORKHANI M.TORKHANI 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE Mohamed TORKHANI
+
+from Macro.impr_diag_campbell_ops import impr_diag_campbell_ops
+
+IMPR_DIAG_CAMPBELL=MACRO(nom="IMPR_DIAG_CAMPBELL",op=impr_diag_campbell_ops, fr="Tracer du Diagramme de Campbell",
+            UIinfo={"groupes":("Post-traitements",)},
+            MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster),
+            MODES           =SIMP(statut='o',typ=table_container),
+            NFREQ_camp      =SIMP(statut='o',typ='I' ),
+            TYP_PREC        =SIMP(statut='f',typ='I',defaut= 1, into=(1,2) ),
+            TYP_TRI         =SIMP(statut='f',typ='I',defaut= 2, into=(0,1,2) ),
+            UNIT_FLE        =SIMP(statut='o',typ='I' ,val_min=1),
+            UNIT_TOR        =SIMP(statut='o',typ='I' ,val_min=1),
+            UNIT_LON        =SIMP(statut='o',typ='I' ,val_min=1),
+            UNIT_TOT        =SIMP(statut='o',typ='I' ,val_min=1),
+            UNIT_INT        =SIMP(statut='o',typ='I' ,val_min=1),
+            L_S             =SIMP(statut='f',typ='R', defaut= 1., max='**'),
+);
+#& MODIF COMMANDE  DATE 06/05/2008   AUTEUR CNGUYEN C.NGUYEN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+from Macro.impr_fonction_ops import impr_fonction_ops
+
+IMPR_FONCTION=MACRO(nom="IMPR_FONCTION",op=impr_fonction_ops,sd_prod=None,
+                 fr="Imprime le contenu d'objets de type fonction ou liste de réels dans un fichier destiné à un traceur de courbe",
+            UIinfo={"groupes":("Fonction",)},
+         FORMAT          =SIMP(statut='o',typ='TXM',position='global',defaut='TABLEAU',
+                               into=("TABLEAU","AGRAF","XMGRACE",),),
+         b_pilote = BLOC(condition = "FORMAT == 'XMGRACE'",
+                        fr="Mots-clés propres à XMGRACE",
+           PILOTE          =SIMP(statut='f',typ='TXM',defaut='',
+                                 into=('','POSTSCRIPT','EPS','MIF','SVG','PNM','PNG','JPEG','PDF','INTERACTIF'),
+                            fr="Pilote de sortie, PNG/JPEG/PDF ne sont pas disponibles sur toutes les installations de xmgrace"),
+           UNITE           =SIMP(statut='f',typ='I',val_min=10,val_max=90,defaut=29,
+                                 fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+         ),
+         b_agraf = BLOC(condition = "FORMAT == 'AGRAF'",
+                        fr="Mots-clés propres à AGRAF",
+           UNITE           =SIMP(statut='o',typ='I',defaut=25,
+                                 fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+           UNITE_DIGR      =SIMP(statut='o',typ='I',defaut=26,
+                                 fr="Unité logique définissant le fichier dans lequel on écrit les directives Agraf"),
+         ),
+         # unite pour TABLEAU dans le bloc de mise en forme spécifique
+
+         COURBE          =FACT(statut='o',max='**',fr="Définition de la fonction à tracer",
+           regles=(UN_PARMI('FONCTION','LIST_RESU','FONC_X','ABSCISSE'),),
+           FONCTION        =SIMP(statut='f',typ=(fonction_sdaster, formule, fonction_c, nappe_sdaster),
+                                 fr="Fonction réelle ou complexe", ),
+           LIST_RESU       =SIMP(statut='f',typ=listr8_sdaster,
+                                 fr="Liste des ordonnees d'une fonction réelle définie par deux listes", ),
+           FONC_X          =SIMP(statut='f',typ=(fonction_sdaster,formule),
+                                 fr="Fonction abscisses d'une fonction paramétrique",),
+           ABSCISSE        =SIMP(statut='f',typ='R',max='**',
+                                 fr="Valeurs des abscisses", ),
+           b_fonction      =BLOC(condition = "FONCTION != None",
+             LIST_PARA       =SIMP(statut='f',typ=listr8_sdaster ),
+           ),
+           b_fonction_c  =BLOC(condition = "AsType(FONCTION) in (fonction_c, formule_c)",
+                                 fr="Fonction complexe définie par le mot-clé fonction",
+             PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
+           ),
+           b_list_resu     =BLOC(condition = "LIST_RESU != None",
+             LIST_PARA       =SIMP(statut='o',typ=listr8_sdaster ),
+           ),
+           b_fonc_x        =BLOC(condition = "FONC_X != None",
+             FONC_Y          =SIMP(statut='o',typ=(fonction_sdaster,formule),fr="Fonction ordonnées d une fonction paramétrique" ),
+             LIST_PARA       =SIMP(statut='f',typ=listr8_sdaster ),
+           ),
+           b_vale_resu     =BLOC(condition = "ABSCISSE != None",
+             ORDONNEE      =SIMP(statut='o',typ='R',max='**',
+                                 fr="Valeurs des ordonnées"),
+           ),
+
+           # mots-clés utilisant uniquement aux formats autres que TABLEAU
+           # mais ce serait trop pénible de devoir les supprimer quand on change de format
+           # donc on ne les met pas dans un bloc
+           # "pseudo" bloc mise en forme :
+               LEGENDE         =SIMP(statut='f',typ='TXM',
+                                    fr="Légende associée à la fonction" ),
+               STYLE           =SIMP(statut='f',typ='I',val_min=0,
+                                    fr="Style de la ligne représentant la fonction",),
+               COULEUR         =SIMP(statut='f',typ='I',val_min=0,
+                                    fr="Couleur associée à la fonction",),
+               MARQUEUR        =SIMP(statut='f',typ='I',val_min=0,
+                                    fr="Type du marqueur associé à la fonction",),
+               FREQ_MARQUEUR   =SIMP(statut='f',typ='I',defaut=0,
+                                    fr="Fréquence d impression du marqueur associé à la fonction", ),
+           # fin bloc mise en forme
+           
+           TRI             =SIMP(statut='f',typ='TXM',defaut="N",
+                                 fr="Choix du tri effectué sur les abscisses ou sur les ordonnées",
+                                 into=("N","X","Y","XY","YX") ),
+         ),
+         # Mise en page du tableau ou du graphique
+         b_tableau = BLOC(condition = "FORMAT == 'TABLEAU'",
+                          fr="Mots-clés propres au format Tableau",
+           UNITE           =SIMP(statut='o',typ='I',defaut=8,
+                                 fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+           TITRE           =SIMP(statut='f',typ='TXM',
+                                 fr="Titre associé au graphique" ),
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',
+                                 fr="Sous-titre du graphique" ),
+           SEPARATEUR      =SIMP(statut='f',typ='TXM',defaut=' ',
+                                 fr="Séparateur des colonnes du tableau (ex : ' ', ';'...)"),
+           COMMENTAIRE     =SIMP(statut='f',typ='TXM',defaut='#',
+                                 fr="Caractère indiquant au traceur de fonction que la ligne peut etre ignorée"),
+           COMM_PARA       =SIMP(statut='f',typ='TXM',defaut='',
+                                 fr="Caractère utilisé pour commentariser la ligne des labels de colonnes"),
+           DEBUT_LIGNE     =SIMP(statut='f',typ='TXM',defaut='',
+                                 fr="Caractère de debut de ligne"),
+           FIN_LIGNE       =SIMP(statut='f',typ='TXM',defaut='\n',
+                                 fr="Caractère de fin de ligne"),
+         ),
+         b_graphique = BLOC(condition = "FORMAT != 'TABLEAU'",
+                        fr="Mise en page du graphique",
+           TITRE           =SIMP(statut='f',typ='TXM',
+                                 fr="Titre associé au graphique" ),
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',
+                                 fr="Sous-titre du graphique" ),
+           BORNE_X         =SIMP(statut='f',typ='R',min=2,max=2,
+                                 fr="Intervalles de variation des abscisses"),
+           BORNE_Y         =SIMP(statut='f',typ='R',min=2,max=2,
+                                 fr="Intervalles de variation des ordonnées"),
+           ECHELLE_X       =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),
+                                 fr="Type d'échelle pour les abscisses" ),
+           ECHELLE_Y       =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),
+                                 fr="Type d'échelle pour les ordonnées" ),
+           GRILLE_X        =SIMP(statut='f',typ='R',max=1,val_min=0.,
+                                 fr="Pas du quadrillage vertical" ),
+           GRILLE_Y        =SIMP(statut='f',typ='R',max=1,val_min=0.,
+                                 fr="Pas du quadrillage horizontal" ),
+           LEGENDE_X       =SIMP(statut='f',typ='TXM',
+                                 fr="Légende associée à l'axe des abscisses" ),
+           LEGENDE_Y       =SIMP(statut='f',typ='TXM',
+                                 fr="Légende associée à l'axe des ordonnées" ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 30/09/2008   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
+IMPR_GENE=PROC(nom="IMPR_GENE",op= 157,
+            fr="Imprimer le résultat d'un calcul dynamique en variables généralisées au format RESULTAT",
+            UIinfo={"groupes":("Impression",)},
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",into=("RESULTAT",) ),
+         UNITE           =SIMP(statut='f',typ='I',defaut=8),  
+         GENE            =FACT(statut='o',max='**',
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                          'LIST_INST','LIST_FREQ','TOUT_MODE','TOUT_INST','LIST_ORDRE'),
+                   EXCLUS('TOUT_MODE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                          'LIST_INST','LIST_FREQ','TOUT_ORDRE','TOUT_INST','LIST_ORDRE'),
+                   EXCLUS('TOUT_INST','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                          'LIST_INST','LIST_FREQ','TOUT_ORDRE','LIST_ORDRE'),
+                   EXCLUS('TOUT_CMP_GENE','NUME_CMP_GENE'),
+                   EXCLUS('TOUT_CHAM','NOM_CHAM'),
+                   EXCLUS('TOUT_PARA','NOM_PARA'),),
+#  faut-il faire des blocs selon le type de RESU_GENE                   
+           RESU_GENE       =SIMP(statut='o',typ=(vect_asse_gene, tran_gene, mode_gene, harm_gene)),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster ),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+           TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster ),
+           TOUT_MODE       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+              PRECISION       =SIMP(statut='o',typ='R',),),
+           TOUT_CMP_GENE   =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           NUME_CMP_GENE   =SIMP(statut='f',typ='I',max='**'),
+           TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',max='**'),
+           TOUT_PARA       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+           INFO_CMP_GENE   =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+           INFO_GENE       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 03/08/2009   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+IMPR_JEVEUX=PROC(nom="IMPR_JEVEUX",op=16,
+            UIinfo={"groupes":("Impression",)},
+                 fr="Imprimer le contenu des objets créés par JEVEUX (pour développeur)",
+         ENTITE          =SIMP(fr="choix de l'observation",statut='o',typ='TXM',
+                               into=("DISQUE","MEMOIRE","REPERTOIRE",    
+                                     "OBJET","ATTRIBUT","SYSTEME","ENREGISTREMENT") ),
+         b_objet      =BLOC(condition = "(ENTITE=='OBJET')",
+            NOMOBJ          =SIMP(fr="nom d'objet",statut='f',typ='TXM' ),  
+            NUMOC           =SIMP(fr="numéro d objet de collection",statut='f',typ='I' ),  
+            NOMOC           =SIMP(fr="nom d'objet de collection",statut='f',typ='TXM' ),  
+         ),
+         b_attribut   =BLOC(condition = "(ENTITE=='ATTRIBUT')",
+            NOMOBJ          =SIMP(fr="nom de collection",statut='f',typ='TXM' ),  
+            NOMATR          =SIMP(fr="nom d attribut de collection",statut='f',typ='TXM',
+                                  into=('$$DESO','$$IADD','$$IADM','$$NOM','$$LONG',
+                                      '$$LONO','$$LUTI','$$NUM') ),
+         ),
+         b_systeme    =BLOC(condition = "(ENTITE=='SYSTEME')",
+            CLASSE          =SIMP(statut='o',typ='TXM',into=('G','V') ),  
+            NOMATR          =SIMP(fr="nom d attribut systeme",statut='f',typ='TXM',   
+                                  into=('$$CARA','$$IADD','$$GENR','$$TYPE','$$MARQ',
+                                      '$$DOCU','$$ORIG','$$RNOM','$$LTYP','$$LONG',
+                                      '$$LONO','$$DATE','$$LUTI','$$HCOD','$$INDX',
+                                      '$$TLEC','$$TECR','$$IADM','$$ACCE','$$USADI') ),
+         ),
+         b_repertoire =BLOC(condition = "(ENTITE=='REPERTOIRE')",
+            CLASSE          =SIMP(statut='f',typ='TXM',into=('G','V',' '),defaut=' '),  
+         ),
+         b_disque     =BLOC(condition = "(ENTITE=='DISQUE')",
+            CLASSE          =SIMP(statut='f',typ='TXM' ,into=('G','V',' '),defaut=' '),  
+         ),
+         b_enregist   =BLOC(condition = "(ENTITE=='ENREGISTREMENT')",
+            CLASSE          =SIMP(statut='f',typ='TXM' ,into=('G','V'),defaut='G'),  
+            NUMERO          =SIMP(statut='o',typ='I',val_min=1),  
+            INFO            =SIMP(statut='f',typ='I',into=(1,2),defaut=1),  
+         ),
+         IMPRESSION      =FACT(statut='f',
+           NOM             =SIMP(statut='f',typ='TXM' ),  
+           UNITE           =SIMP(statut='f',typ='I'),  
+         ),
+         COMMENTAIRE     =SIMP(statut='f',typ='TXM' ),  
+)  ;
+#& MODIF COMMANDE  DATE 06/05/2008   AUTEUR CORUS M.CORUS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE CORUS M.CORUS
+
+IMPR_MACR_ELEM=PROC(nom="IMPR_MACR_ELEM",op= 160,
+                    UIinfo={"groupes":("Impression",)},
+         fr="Impression d'une structure de données MACR_ELEM_DYNA au format IDEAS MISS3D PLEXUS ou CADYRO",
+         MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",
+                               into=("MISS_3D","IDEAS","CADYRO","PLEXUS") ),
+
+         b_plexus         =BLOC(condition = "FORMAT == 'IDEAS'",
+           UNITE           =SIMP(statut='f',typ='I',defaut=30),
+           VERSION          =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+         ),             
+
+         b_ideas         =BLOC(condition = "FORMAT == 'PLEXUS'",
+           UNITE           =SIMP(statut='f',typ='I',defaut=30),
+           VERSION         =SIMP(statut='f',typ='I',defaut= 5,into=( 5 ,) ),
+         ),                      
+
+         b_miss_3d       =BLOC(condition = "FORMAT == 'MISS_3D'",
+           regles=(EXCLUS('AMOR_REDUIT','LIST_AMOR'),),
+           UNITE           =SIMP(statut='f',typ='I',defaut= 26 ),
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+           AMOR_REDUIT     =SIMP(statut='f',typ='R'  ,max='**'),
+           LIST_AMOR       =SIMP(statut='f',typ=listr8_sdaster ),
+           GROUP_MA_INTERF =SIMP(statut='o',typ=grma ,max='**'),
+           GROUP_MA_FLU_STR=SIMP(statut='f',typ=grma,max='**'),
+           GROUP_MA_FLU_SOL=SIMP(statut='f',typ=grma,max='**'),
+           GROUP_MA_SOL_SOL=SIMP(statut='f',typ=grma,max='**'),
+           GROUP_MA_CONTROL=SIMP(statut='f',typ=grma,max='**'),
+           FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE12.5",into=("1PE12.5","1PE16.9") ),
+           IMPR_MODE_MECA  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           IMPR_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+
+         b_cadyro        =BLOC(condition = "FORMAT == 'CADYRO'",
+           SQUELETTE       =SIMP(statut='f',typ=squelette ),
+           UNITE_MODE_MECA =SIMP(statut='f',typ='I',defaut= 26 ),
+           UNITE_MODE_STAT =SIMP(statut='f',typ='I',defaut= 27 ),
+           UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut= 28 ),
+           IMPR_MODE_MECA  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           IMPR_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+
+)  ;
+#& MODIF COMMANDE  DATE 13/10/2009   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+IMPR_MISS_3D=PROC(nom="IMPR_MISS_3D",op= 162,
+            UIinfo={"groupes":("Impression",)},
+         fr="Impression des données d'entrée pour une étude sismique avec MISS3D",
+         regles=(UN_PARMI('INST_INIT','FREQ_INIT'),
+                 PRESENT_PRESENT('INST_INIT','INST_FIN'),
+                 PRESENT_PRESENT('FREQ_INIT','FREQ_FIN'),),
+         MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+         EXCIT           =FACT(statut='f',max='**',
+           regles=(UN_PARMI('FONC_MULT','COEF_MULT' ),),
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_sdaster),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           COEF_MULT       =SIMP(statut='f',typ='R' ),
+         ),
+         EXCIT_SOL       =FACT(statut='f',max='**',
+           DIRECTION       =SIMP(statut='o',typ='R',min=3,max=3),
+           FONC_SIGNAL     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",
+                                 into=("DEPL","VITE","ACCE","FORC",) ),
+         ),
+         SOURCE_SOL      =FACT(statut='f',max='**',
+           POINT           =SIMP(statut='o',typ='R',min=3,max=3),
+           DIRECTION       =SIMP(statut='o',typ='R',min=3,max=3),
+           FONC_SIGNAL     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",
+                                 into=("DEPL","VITE","ACCE","FORC",) ),
+         ),
+         SOURCE_FLUIDE   =FACT(statut='f',max='**',
+           POINT           =SIMP(statut='o',typ='R',min=3,max=3),
+           FONC_SIGNAL     =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",
+                                 into=("DEPL","VITE","ACCE","FORC",) ),
+         ),
+         DIRE_ONDE       =SIMP(statut='f',typ='R',min=3,max=3),
+         INST_INIT       =SIMP(statut='f',typ='R' ),
+         INST_FIN        =SIMP(statut='f',typ='R' ),
+         FREQ_INIT       =SIMP(statut='f',typ='R' ),
+         FREQ_FIN        =SIMP(statut='f',typ='R' ),
+         PAS             =SIMP(statut='o',typ='R' ),
+         UNITE           =SIMP(statut='f',typ='I',defaut= 26 ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 16/11/2009   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE FOURNIER I.FOURNIER
+#
+from Macro.impr_oar_ops import impr_oar_ops
+IMPR_OAR =MACRO(nom="IMPR_OAR",op= impr_oar_ops, sd_prod=None,
+               fr="Impression au format OAR",
+               UIinfo={"groupes":("Impression",)},
+   TYPE_CALC = SIMP(statut='o', typ='TXM',into=('COMPOSANT', 'MEF', 'TUYAUTERIE')),
+   b_composant =BLOC(condition = "TYPE_CALC == 'COMPOSANT' ",
+      regles = (AU_MOINS_UN('RESU_MECA','RESU_THER')),
+      DIAMETRE = SIMP(statut='o', typ='R'),
+      ORIGINE  = SIMP(statut='o', typ='TXM', defaut='INTERNE', into=('INTERNE', 'EXTERNE')),
+      COEF_U   = SIMP(statut='f', typ='R',   defaut=1.0),
+      ANGLE_C  = SIMP(statut='o', typ='R',   defaut=0.0),
+      REVET    = SIMP(statut='f', typ='TXM', defaut='NON', into=('OUI', 'NON')),
+      RESU_MECA = FACT(statut='f', max='**',
+         NUM_CHAR  = SIMP(statut='o', typ='I'),
+         TYPE      = SIMP(statut='o', typ='TXM', defaut='FX', into=('FX', 'FY', 'FZ', 'MX', 'MY', 'MZ', 'PRE')),
+         TABLE     = SIMP(statut='o', typ=table_sdaster),
+         TABLE_S   = SIMP(statut='f', typ=table_sdaster)),
+      RESU_THER = FACT(statut='f', max='**',
+         NUM_TRAN  = SIMP(statut='o', typ='I'),
+         TABLE_T   = SIMP(statut='o', typ=table_sdaster),
+         TABLE_TEMP= SIMP(statut='o', typ=table_sdaster),
+         TABLE_S   = SIMP(statut='f', typ=table_sdaster),
+         TABLE_ST  = SIMP(statut='f', typ=table_sdaster)),
+         ),
+   b_mef = BLOC(condition = "TYPE_CALC == 'MEF' ",
+      regles = (AU_MOINS_UN('RESU_MECA','RESU_THER')),
+      DIAMETRE = SIMP(statut='o', typ='R'),
+      ORIGINE  = SIMP(statut='o', typ='TXM', defaut='INTERNE', into=('INTERNE', 'EXTERNE')),
+      COEF_U   = SIMP(statut='f', typ='R',   defaut=1.0),
+      RESU_MECA = FACT(statut='f', max='**',
+         AZI       = SIMP(statut='o', typ='R'),
+         TABLE_T   = SIMP(statut='o', typ=table_sdaster),
+         TABLE_F   = SIMP(statut='o', typ=table_sdaster),
+         TABLE_P   = SIMP(statut='o', typ=table_sdaster),
+         TABLE_CA  = SIMP(statut='o', typ=table_sdaster)),
+      RESU_THER=FACT(statut='f', max='**',
+         AZI       = SIMP(statut='o', typ='R'),
+         NUM_CHAR  = SIMP(statut='o', typ='I'),
+         TABLE_T   = SIMP(statut='o', typ=table_sdaster),
+         TABLE_TI  = SIMP(statut='o', typ=table_sdaster)),
+      ),
+   b_tuyauterie = BLOC(condition = "TYPE_CALC == 'TUYAUTERIE' ",
+      RESU_MECA = FACT(statut='o', max='**',
+         NUM_CHAR  = SIMP(statut='o', typ='I'),
+         TABLE     = SIMP(statut='o', typ=table_sdaster),
+         MAILLAGE  = SIMP(statut='o', typ=maillage_sdaster)),
+         ),
+   UNITE = SIMP(statut='f',typ='I',defaut=38),
+   AJOUT = SIMP(statut='f', typ='TXM', defaut='NON', into=('OUI', 'NON')),
+   );
+#& MODIF COMMANDE  DATE 12/04/2010   AUTEUR SELLENET N.SELLENET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE SELLENET N.SELLENET
+IMPR_RESU=PROC(nom="IMPR_RESU",op=39,
+            UIinfo={"groupes":("Impression",)},
+               fr="Imprimer un maillage et/ou les résultats d'un calcul (différents formats)",
+         MODELE          =SIMP(statut='f',typ=modele_sdaster),
+
+         FORMAT          =SIMP(statut='f',typ='TXM',position='global',defaut="RESULTAT",
+                                 into=("RESULTAT","IDEAS","ASTER","CASTEM","ENSIGHT","MED","GMSH") ),
+
+         b_format_resultat  =BLOC(condition="FORMAT=='RESULTAT'",fr="unité logique d'impression au format RESULTAT",
+           UNITE           =SIMP(statut='f',typ='I',defaut=8),
+         ),
+
+         b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="unité logique d'impression et version IDEAS",
+           UNITE           =SIMP(statut='f',typ='I',defaut=30),
+           VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+         ),
+
+         b_format_aster  =BLOC(condition="FORMAT=='ASTER'",fr="unité logique d'impression au format ASTER",
+           UNITE           =SIMP(statut='f',typ='I',defaut=26),
+         ),
+
+         b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="unité logique d'impression et version CASTEM",
+           UNITE           =SIMP(statut='f',typ='I',defaut=37),
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+         ),
+
+         b_format_ensight  =BLOC(condition="FORMAT=='ENSIGHT'",fr="unité logique d'impression au format ENSIGHT",
+           UNITE           =SIMP(statut='f',typ='I',defaut=31),
+         ),
+
+         b_format_med  =BLOC(condition="FORMAT=='MED'",fr="unité logique d'impression au format MED",
+           UNITE           =SIMP(statut='f',typ='I',defaut=80),
+         ),
+
+         b_format_gmsh  =BLOC(condition="FORMAT=='GMSH'",fr="unité logique d'impression et version GMSH",
+           UNITE           =SIMP(statut='f',typ='I',defaut=37),
+           VERSION         =SIMP(statut='f',typ='R',defaut=1.2,into=(1.0,1.2)),
+         ),
+
+
+         RESTREINT   =FACT(statut='f', max=1,
+           fr="Pour réduire une ou plusieurs sd_resultat sur un ensemble de mailles",
+           regles=(AU_MOINS_UN('GROUP_MA','MAILLE',),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**'),
+           TOUT_GROUP_MA   =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           TOUT_GROUP_NO   =SIMP(statut='f',typ='TXM',defaut='NON',into=('OUI','NON'),),
+         ),
+
+         RESU            =FACT(statut='o',max='**',
+
+           regles=(AU_MOINS_UN('CHAM_GD','RESULTAT','MAILLAGE'),
+                   EXCLUS('CHAM_GD','RESULTAT'),),
+           MAILLAGE        =SIMP(statut='f',typ=(maillage_sdaster,squelette)),
+           CHAM_GD         =SIMP(statut='f',typ=cham_gd_sdaster),
+           RESULTAT        =SIMP(statut='f',typ=resultat_sdaster),
+
+           b_info_med  =BLOC(condition="FORMAT=='MED'",
+             INFO_MAILLAGE   =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           ),
+
+           b_sensibilite   =BLOC(condition="RESULTAT != None",
+                                 fr="Définition des paramètres de sensibilité",
+                                 ang="Definition of sensitivity parameters",
+             regles=(DERIVABLE('RESULTAT'),),
+             SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                                   fr="Liste des paramètres de sensibilité.",
+                                   ang="List of sensitivity parameters"),),
+
+           b_partie        =BLOC(condition="""(AsType(RESULTAT) in (dyna_harmo, acou_harmo) or
+                          AsType(CHAM_GD) != carte_sdaster) and FORMAT in ('CASTEM', 'GMSH', 'MED')""",
+             PARTIE          =SIMP(statut='f',typ='TXM',into=("REEL","IMAG") ),
+           ),
+           b_extrac        =BLOC(condition="RESULTAT != None",
+                                 fr="extraction d un champ de grandeur",
+             regles=(EXCLUS('TOUT_CHAM','NOM_CHAM'),
+                     EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE','NOEUD_CMP',
+                            'LIST_INST','LIST_FREQ','LIST_ORDRE','NOM_CAS','ANGL'),),
+             TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI","NON") ),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',into=C_NOM_CHAM_INTO()),
+
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+             NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+             LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+             NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+             NOM_CAS         =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+             ANGL            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+
+             b_acce_reel     =BLOC(condition="(FREQ != None)or(LIST_FREQ != None)or(INST != None)or(LIST_INST != None)",
+                CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                     PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                     PRECISION       =SIMP(statut='o',typ='R',),),
+             ),
+           ),
+###
+           b_parametres    =BLOC(condition="""(RESULTAT != None)and(FORMAT == 'RESULTAT')""",
+             regles=(EXCLUS('TOUT_PARA','NOM_PARA'),),
+             TOUT_PARA       =SIMP(statut='f',typ='TXM',into=("OUI","NON",) ),
+             NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),
+             FORM_TABL       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON","EXCEL") ),
+           ),
+###
+           b_cmp=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and\
+           ((FORMAT == 'CASTEM')or(FORMAT == 'RESULTAT')or(FORMAT == 'IDEAS')or(FORMAT == 'ENSIGHT')or(FORMAT == 'MED'))""",
+                                fr="sélection des composantes",
+             regles=(EXCLUS('TOUT_CMP','NOM_CMP'),),
+             TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           ),
+###
+           b_gmsh=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and((FORMAT == 'GMSH'))""",
+                                fr="sélection des composantes et des entités toplogiques",
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             TYPE_CHAM       =SIMP(statut='f',typ='TXM',defaut="SCALAIRE",
+                                   into=("VECT_2D","VECT_3D","SCALAIRE","TENS_2D","TENS_3D"),),
+             b_scal          =BLOC(condition = "TYPE_CHAM=='SCALAIRE'",
+               NOM_CMP         =SIMP(statut='f',typ='TXM',max='**' ),),
+             b_vect_2d       =BLOC(condition = "TYPE_CHAM=='VECT_2D'",
+               NOM_CMP         =SIMP(statut='o',typ='TXM',min=2,max=2 ),),
+             b_vect_3d       =BLOC(condition = "TYPE_CHAM=='VECT_3D'",
+               NOM_CMP         =SIMP(statut='o',typ='TXM',min=3,max=3 ),),
+             b_tens_2d       =BLOC(condition = "TYPE_CHAM=='TENS_2D'",
+               NOM_CMP         =SIMP(statut='o',typ='TXM',min=4,max=4 ),),
+             b_tens_3d       =BLOC(condition = "TYPE_CHAM=='TENS_3D'",
+               NOM_CMP         =SIMP(statut='o',typ='TXM',min=6,max=6 ),),
+           ),
+###
+           b_topologie=BLOC(condition="""((CHAM_GD != None)or(RESULTAT != None))and\
+           ((FORMAT == 'RESULTAT')or(FORMAT == 'IDEAS')or(FORMAT == 'MED'))""",
+                                fr="sélection des entités topologiques",
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           ),
+###
+           b_valeurs=BLOC(condition="(FORMAT == 'RESULTAT')",
+                               fr="sélection sur les valeurs",
+             VALE_MAX        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             VALE_MIN        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             BORNE_SUP       =SIMP(statut='f',typ='R'),
+             BORNE_INF       =SIMP(statut='f',typ='R'),
+             IMPR_COOR       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+             FORMAT_R        =SIMP(statut='f',typ='TXM',defaut="1PE12.5"),
+           ),
+
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+) ;
+#& MODIF COMMANDE  DATE 05/05/2008   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+
+IMPR_STURM=PROC(nom="IMPR_STURM",op=32,fr="Calculer et imprimer le nombre de valeurs propres dans un intervalle donné",
+            UIinfo={"groupes":("Résolution",)},
+         MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+         MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="DYNAMIQUE",into=("MODE_FLAMB","DYNAMIQUE"),
+                               fr="Type d analyse" ),
+         b_dynamique  =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
+                            fr="Recheche du nombre de fréquences propres",
+             FREQ_MIN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ,fr="Borne inférieure de l intervalle" ),
+             FREQ_MAX        =SIMP(statut='o',typ='R',fr="Borne supérieure de l intervalle" ),
+         ),
+         b_mode_flamb =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
+                            fr="Recherche du nombre de charges critiques",
+             CHAR_CRIT_MIN   =SIMP(statut='o',typ='R',fr="Borne inférieure de l intervalle" ),
+             CHAR_CRIT_MAX   =SIMP(statut='o',typ='R',fr="Borne supérieure de l intervalle" ),
+         ),
+         NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8 ),
+         NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5 ),
+         UNITE           =SIMP(statut='f',typ='I',defaut=8),  
+         PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+         SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+)  ;
+#& MODIF COMMANDE  DATE 06/05/2008   AUTEUR CNGUYEN C.NGUYEN 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+from Macro.impr_table_ops import impr_table_ops
+
+IMPR_TABLE=MACRO(nom="IMPR_TABLE",op=impr_table_ops,sd_prod=None,
+            UIinfo={"groupes":("Impression",)},
+                fr="Impression du contenu d'une table dans un fichier",
+           regles=(DERIVABLE("TABLE"),),
+   TABLE          =SIMP(statut='o',typ=table_sdaster),
+   SENSIBILITE    =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                         fr="Liste des paramètres de sensibilité.",
+                         ang="List of sensitivity parameters"),
+   FORMAT         =SIMP(statut='f',typ='TXM',defaut="TABLEAU",
+                         into=("TABLEAU","ASTER","TABLEAU_CROISE","AGRAF","XMGRACE",),),
+   b_pilote       =BLOC(condition = "FORMAT == 'XMGRACE'",
+                        fr="Mots-clés propres à XMGRACE",
+      PILOTE         =SIMP(statut='f',typ='TXM',defaut='',
+                           into=('','POSTSCRIPT','EPS','MIF','SVG','PNM','PNG','JPEG','PDF','INTERACTIF'),
+                      fr="Pilote de sortie, PNG/JPEG/PDF ne sont pas disponibles sur toutes les installations de xmgrace"),
+      UNITE          =SIMP(statut='f',typ='I',val_min=10,val_max=90,defaut=29,
+                           fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+   ),
+   b_unite        =BLOC(condition = "FORMAT != 'XMGRACE'",
+      UNITE          =SIMP(statut='f',typ='I',defaut=8,
+                           fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+   ),
+   FILTRE         =FACT(statut='f',max='**',
+      NOM_PARA       =SIMP(statut='o',typ='TXM'),
+      CRIT_COMP      =SIMP(statut='f',typ='TXM',defaut="EQ",
+                           into=("EQ","LT","GT","NE","LE","GE","VIDE",
+                                 "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI"),),
+      b_vale         =BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
+         regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
+         VALE           =SIMP(statut='f',typ='R',max='**'),
+         VALE_I         =SIMP(statut='f',typ='I',max='**'),
+         VALE_C         =SIMP(statut='f',typ='C',max='**'),
+         VALE_K         =SIMP(statut='f',typ='TXM',max='**'),
+      ),
+      b_crit         =BLOC(condition = "CRIT_COMP in ('EQ','NE')",
+         CRITERE        =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         PRECISION      =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+      ),
+   ),
+   TRI            =FACT(statut='f',
+      NOM_PARA       =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+      ORDRE          =SIMP(statut='f',typ='TXM',defaut="CROISSANT", # max='**',
+                           into=("CROISSANT","DECROISSANT") ),
+   ),
+   PAGINATION     =SIMP(statut='f',typ='TXM',max='**'),
+   FORMAT_R       =SIMP(statut='f',typ='TXM',defaut="E12.5"),
+   FORMAT_C       =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",
+                              into=("MODULE_PHASE","REEL_IMAG") ),
+   NOM_PARA       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+   IMPR_FONCTION  =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+
+   # Mise en page du tableau ou du graphique
+   b_tableau = BLOC(condition = "FORMAT == 'TABLEAU'",
+                    fr="Mots-clés propres au format Tableau",
+      SEPARATEUR      =SIMP(statut='f',typ='TXM',defaut=' ',
+                            fr="Séparateur des colonnes du tableau (ex : ' ', ';'...)"),
+      COMMENTAIRE     =SIMP(statut='f',typ='TXM',defaut='#',
+                            fr="Caractère indiquant au traceur de fonction que la ligne peut etre ignorée"),
+      COMM_PARA       =SIMP(statut='f',typ='TXM',defaut='',
+                            fr="Caractère utilisé pour commentariser la ligne des labels de colonnes"),
+      DEBUT_LIGNE     =SIMP(statut='f',typ='TXM',defaut='',
+                            fr="Caractère de debut de ligne"),
+      FIN_LIGNE       =SIMP(statut='f',typ='TXM',defaut='\n',
+                            fr="Caractère de fin de ligne"),
+    ),
+
+   # mise en forme pour les formats qui passent par Graph
+   b_forme         =BLOC(condition = "FORMAT == 'XMGRACE'",
+                         fr="Données de mise en forme du graphique",
+      # pour la courbe
+      LEGENDE         =SIMP(statut='f',typ='TXM',
+                            fr="Légende associée à la fonction" ),
+      STYLE           =SIMP(statut='f',typ='I',val_min=0,
+                            fr="Style de la ligne représentant la fonction",),
+      COULEUR         =SIMP(statut='f',typ='I',val_min=0,
+                            fr="Couleur associée à la fonction",),
+      MARQUEUR        =SIMP(statut='f',typ='I',val_min=0,
+                            fr="Type du marqueur associé à la fonction",),
+      FREQ_MARQUEUR   =SIMP(statut='f',typ='I',defaut=0,
+                            fr="Fréquence d impression du marqueur associé à la fonction", ),
+      # format du graphique
+      BORNE_X         =SIMP(statut='f',typ='R',min=2,max=2,
+                            fr="Intervalles de variation des abscisses"),
+      BORNE_Y         =SIMP(statut='f',typ='R',min=2,max=2,
+                            fr="Intervalles de variation des ordonnées"),
+      ECHELLE_X       =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),
+                            fr="Type d'échelle pour les abscisses" ),
+      ECHELLE_Y       =SIMP(statut='f',typ='TXM',defaut="LIN",into=("LIN","LOG"),
+                            fr="Type d'échelle pour les ordonnées" ),
+      GRILLE_X        =SIMP(statut='f',typ='R',max=1,val_min=0.,
+                            fr="Pas du quadrillage vertical" ),
+      GRILLE_Y        =SIMP(statut='f',typ='R',max=1,val_min=0.,
+                            fr="Pas du quadrillage horizontal" ),
+      LEGENDE_X       =SIMP(statut='f',typ='TXM',
+                            fr="Légende associée à l'axe des abscisses" ),
+      LEGENDE_Y       =SIMP(statut='f',typ='TXM',
+                            fr="Légende associée à l'axe des ordonnées" ),
+   ),
+
+   TITRE          =SIMP(statut='f',typ='TXM',max='**'),
+   INFO           =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DURAND C.DURAND
+INCLUDE=MACRO(nom="INCLUDE",op=ops.build_include,
+            UIinfo={"groupes":("Gestion du travail",)},
+             fr="Débranchement vers un fichier de commandes secondaires",
+             sd_prod=ops.INCLUDE,op_init=ops.INCLUDE_context,fichier_ini=1,
+         UNITE = SIMP(statut='o',typ='I'),
+         INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+);
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DURAND C.DURAND
+INCLUDE_MATERIAU=MACRO(nom="INCLUDE_MATERIAU",op=-14,
+            UIinfo={"groupes":("Modélisation",)},
+         fr="Récupérer les caractéristiques d'un matériau dans le Catalogue Materiaux d'Aster ",
+         sd_prod=ops.INCLUDE_MATERIAU,op_init=ops.INCLUDE_context,fichier_ini=0,
+         NOM_AFNOR       =SIMP(statut='o',typ='TXM' ),  
+         TYPE_MODELE     =SIMP(statut='o',typ='TXM',into=("REF","PAR") ),
+         VARIANTE        =SIMP(statut='o',typ='TXM',     
+                               into=("A","B","C","D","E","F","G","H","I","J",    
+                                     "K","L","M","N","O","P","Q","R","S","T","U","V",   
+                                     "W","X","Y","Z",) ),
+         TYPE_VALE       =SIMP(statut='o',typ='TXM',into=("NOMI","MINI","MAXI") ),
+         NOM_MATER       =SIMP(statut='o',typ='TXM' ),  
+         UNITE           =SIMP(statut='f',typ='I',defaut= 32 ),  
+         EXTRACTION      =FACT(statut='f',max=99,
+           COMPOR          =SIMP(statut='o',typ='TXM' ),  
+           TEMP_EVAL       =SIMP(statut='o',typ='R' ),  
+         ),
+         UNITE_LONGUEUR  =SIMP(statut='f',typ='TXM',into=("M","MM"),defaut="M" ),  
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+INFO_EXEC_ASTER=OPER(nom="INFO_EXEC_ASTER",op=35,sd_prod=table_sdaster,
+                    fr="Récupère différentes informations propres à l'exécution en cours",
+                    reentrant='n',
+                    UIinfo={"groupes":("Gestion du travail",)},
+
+         regles=(),
+         LISTE_INFO     =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=3,
+                              into=("CPU_RESTANT","UNITE_LIBRE","ETAT_UNITE"),),
+         b_etat_unite   =BLOC(condition = "'ETAT_UNITE' in LISTE_INFO", 
+            regles=(UN_PARMI('UNITE','FICHIER'),),
+            UNITE          =SIMP(statut='f',typ='I',val_min=1,val_max=99,max=1,
+                                 fr="Unité logique dont on veut obtenir l'état",),
+            FICHIER        =SIMP(statut='f',typ='TXM',validators=LongStr(1,255),
+                                 fr="Nom du fichier dont on veut obtenir l'état",),
+         ),
+         TITRE          =SIMP(statut='f',typ='TXM',max='**'),
+         INFO           =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 30/09/2008   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+from Macro.info_fonction_ops import info_fonction_ops
+def info_fonction_prod(self,ECART_TYPE,RMS,NOCI_SEISME,MAX,NORME, **args):
+   if (RMS         != None): return table_sdaster
+   if (MAX         != None): return table_sdaster
+   if (NOCI_SEISME != None): return table_sdaster
+   if (ECART_TYPE  != None): return table_sdaster
+   if (NORME       != None): return table_sdaster
+   raise AsException("type de concept resultat non prevu")
+
+INFO_FONCTION=MACRO(nom="INFO_FONCTION",op=info_fonction_ops,sd_prod=info_fonction_prod
+                    ,fr="Opérations mathématiques sur des concepts de type fonction, fonction_c ou nappe",
+                     reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
+         regles=(UN_PARMI('MAX','RMS','NOCI_SEISME','NORME','ECART_TYPE',),),
+         RMS             =FACT(statut='f',fr="Valeur RMS d'une fonction",max='**',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
+           FONCTION        =SIMP(statut='o',typ=fonction_sdaster ),
+           INST_INIT       =SIMP(statut='f',typ='R',fr="Instant initial définissant le début du signal" ),
+           INST_FIN        =SIMP(statut='f',typ='R',fr="Instant final définissant la fin du signal" ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+              PRECISION       =SIMP(statut='o',typ='R'),),
+         ),
+         NOCI_SEISME     =FACT(statut='f',
+           regles=(UN_PARMI('FONCTION','SPEC_OSCI',),),
+           FONCTION        =SIMP(statut='f',typ=fonction_sdaster ),
+           SPEC_OSCI       =SIMP(statut='f',typ=nappe_sdaster ),
+           b_option_f      =BLOC(condition="""FONCTION !=None""",
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",validators=NoRepeat(),max='**',
+                                   into=("INTE_ARIAS","POUV_DEST","INTE_SPEC","VITE_ABSO_CUMU",
+                                         "DUREE_PHAS_FORT","MAXI","ACCE_SUR_VITE","TOUT",), ),
+             b_amor_red          =BLOC(condition="""OPTION in ("TOUT", "INTE_SPEC") """,
+                AMOR_REDUIT     =SIMP(statut='o',typ='R'),),
+             b_pesanteur         =BLOC(condition="""OPTION in ("TOUT", "INTE_ARIAS", "POUV_DEST", "DUREE_PHAS_FORT") """,
+                PESANTEUR       =SIMP(statut='o',typ='R'),),
+           ),
+           b_option_n      =BLOC(condition="""SPEC_OSCI !=None""",
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="INTE_SPEC",into=("INTE_SPEC",), ),
+             NATURE          =SIMP(statut='o',typ='TXM',into=("DEPL","VITE","ACCE") ),
+             AMOR_REDUIT     =SIMP(statut='o',typ='R'), ),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           COEF            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           FREQ_INIT       =SIMP(statut='f',typ='R',defaut= 4.E-1 ),
+           FREQ_FIN        =SIMP(statut='f',typ='R',defaut= 10.E+0 ),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster ),
+           FREQ            =SIMP(statut='f',typ='R',max='**'),
+           NORME           =SIMP(statut='f',typ='R',defaut= 1.E+0 ),
+           BORNE_INF       =SIMP(statut='f',typ='R',defaut= 0.05E+0 ),
+           BORNE_SUP       =SIMP(statut='f',typ='R',defaut= 0.95E+0 ),
+           b_acce_reel     =BLOC(condition="(INST_INIT != None)or(INST_FIN != None)or(FREQ_INIT != None)or(FREQ_FIN != None)",
+                  CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+                  b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                      PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0),),
+                  b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                      PRECISION       =SIMP(statut='o',typ='R'),),
+           ),
+         ),
+         MAX             =FACT(statut='f',fr="Extrémas locaux d'une fonction",
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster),max='**' ),
+         ),
+         NORME           =FACT(statut='f',fr="Norme L2 d'une fonction",
+            FONCTION      =SIMP(statut='o', typ=nappe_sdaster),
+         ),     
+         ECART_TYPE      =FACT(statut='f',fr="Ecart-type d'une fonction",
+            METHODE       =SIMP(statut='f',typ='TXM',defaut="TRAPEZE",into=("SIMPSON","TRAPEZE") ),
+            FONCTION      =SIMP(statut='o',typ=fonction_sdaster),
+            INST_INIT     =SIMP(statut='f',typ='R',fr="Instant initial définissant le début du signal" ),
+            INST_FIN      =SIMP(statut='f',typ='R',fr="Instant final définissant la fin du signal" ),
+            CRITERE       =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+            b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0),),
+            b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                PRECISION       =SIMP(statut='o',typ='R'),),
+         ),     
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+#& MODIF COMMANDE  DATE 12/04/2010   AUTEUR SELLENET N.SELLENET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE SELLENET N.SELLENET
+INFO_RESU=PROC(nom="INFO_RESU",op=40,
+               UIinfo={"groupes":("Impression",)},
+               fr="Imprimer tous les champs présents dans une structure de données résultat",
+               RESULTAT=SIMP(statut='f',typ=resultat_sdaster),
+               UNITE=SIMP(statut='f',typ='I',defaut=6),
+);
+#& MODIF COMMANDE  DATE 16/02/2010   AUTEUR GREFFET N.GREFFET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GREFFET
+INIT_COMPO=PROC(nom="INIT_COMPO",op=  117,
+                    fr="Initialiser adresse component YACS",
+           COMPO           =SIMP(statut='o',typ='I',),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+INTE_MAIL_2D=OPER(nom="INTE_MAIL_2D",op=50,sd_prod=courbe_sdaster,
+            UIinfo={"groupes":("Post traitements",)},
+                  fr="Définition d'une courbe dans un maillage 2D",reentrant='n',
+
+         MAILLAGE        =SIMP(statut='o',typ=(maillage_sdaster) ),
+
+         regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),
+                 AU_MOINS_UN('DEFI_SEGMENT','DEFI_ARC','DEFI_CHEMIN'),
+                 PRESENT_ABSENT('DEFI_CHEMIN','DEFI_SEGMENT','DEFI_ARC'),
+                 PRESENT_ABSENT('DEFI_SEGMENT','NOEUD_ORIG','GROUP_NO_ORIG'),
+                 PRESENT_ABSENT('DEFI_ARC','NOEUD_ORIG','GROUP_NO_ORIG'),
+                 EXCLUS('NOEUD_ORIG','GROUP_NO_ORIG'),
+                 EXCLUS('DEFI_CHEMIN','DEFI_SEGMENT'),
+                 EXCLUS('DEFI_CHEMIN','DEFI_ARC'),),
+
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+
+         DEFI_SEGMENT    =FACT(statut='f',max='**',
+           regles=(UN_PARMI('ORIGINE','NOEUD_ORIG','GROUP_NO_ORIG'),
+                   UN_PARMI('EXTREMITE','NOEUD_EXTR','GROUP_NO_EXTR'),),
+           ORIGINE         =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_ORIG      =SIMP(statut='f',typ=no,),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
+           EXTREMITE       =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,),
+         ),
+
+         DEFI_ARC        =FACT(statut='f',max='**',
+           regles=(UN_PARMI('CENTRE','NOEUD_CENTRE','GROUP_NO_CENTRE'),
+                   UN_PARMI('RAYON','ORIGINE','NOEUD_ORIG','GROUP_NO_ORIG'),
+                   UN_PARMI('RAYON','EXTREMITE','NOEUD_EXTR','GROUP_NO_EXTR'),               
+                   PRESENT_PRESENT('RAYON','SECTEUR'),),
+           CENTRE          =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_CENTRE    =SIMP(statut='f',typ=no,),
+           GROUP_NO_CENTRE =SIMP(statut='f',typ=grno,),
+           RAYON           =SIMP(statut='f',typ='R',val_min=0.E+0),  
+           SECTEUR         =SIMP(statut='f',typ='R',min=2,max=2,
+                                 val_min=-180.E+0,val_max=180E+0),  
+           ORIGINE         =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_ORIG      =SIMP(statut='f',typ=no,),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
+           EXTREMITE       =SIMP(statut='f',typ='R',min=2,max=2),  
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",    
+                                 into=("RELATIF","ABSOLU",) ),
+         ),
+
+         DEFI_CHEMIN     =FACT(statut='f',max='**',
+           regles=(UN_PARMI('MAILLE','GROUP_MA'),),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         ),
+
+         NOEUD_ORIG      =SIMP(statut='f',typ=no,),
+         GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+INTE_MAIL_3D=OPER(nom="INTE_MAIL_3D",op=96,sd_prod=surface_sdaster,
+            UIinfo={"groupes":("Post traitements",)},
+                  fr="Définir un chemin de type segment de droite dans un maillage 3D",reentrant='n',
+         MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster),
+         TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+         DEFI_SEGMENT    =FACT(statut='o',max='**',
+           regles=(UN_PARMI('ORIGINE','NOEUD_ORIG','GROUP_NO_ORIG'),
+                   UN_PARMI('EXTREMITE','NOEUD_EXTR','GROUP_NO_EXTR'),),
+           ORIGINE         =SIMP(statut='f',typ='R',min=3,max=3),  
+           NOEUD_ORIG      =SIMP(statut='f',typ=no,),
+           GROUP_NO_ORIG   =SIMP(statut='f',typ=grno,),
+           EXTREMITE       =SIMP(statut='f',typ='R',min=3,max=3),  
+           NOEUD_EXTR      =SIMP(statut='f',typ=no,),
+           GROUP_NO_EXTR   =SIMP(statut='f',typ=grno,),
+         ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 30/09/2008   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+def lire_champ_prod(TYPE_CHAM=None,**args):
+# Remarque : si cette liste évolue, il faut penser à mettre à jour son
+#            homologue dans macr_adap_mail
+  if TYPE_CHAM[0:5] == "NOEU_" : return cham_no_sdaster
+  if TYPE_CHAM[0:2] == "EL"    : return cham_elem
+  raise AsException("type de concept resultat non prevu")
+
+LIRE_CHAMP=OPER(nom="LIRE_CHAMP",op= 192,sd_prod=lire_champ_prod,
+                fr="Lire un champ dans un fichier au format MED et le stocker dans un concept.",
+                reentrant='n',UIinfo={"groupe":("Résultats et champs",)},
+         MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster,),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="MED",into=("MED",),),
+         UNITE           =SIMP(statut='f',typ='I',defaut= 81,),  
+         b_format =BLOC(condition = "FORMAT == 'MED'",
+         regles=( UN_PARMI('NOM_CMP_IDEM','NOM_CMP'),
+                  PRESENT_PRESENT('NOM_CMP','NOM_CMP_MED' ),
+                  EXCLUS('NUME_ORDRE','INST'),
+                  EXCLUS('NUME_PT','INST'),),
+            NOM_MED      =SIMP(statut='o',typ='TXM', ),
+            NOM_CMP_IDEM =SIMP(statut='f',typ='TXM',into=("OUI",), ),
+            NOM_CMP      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',),
+            NOM_CMP_MED  =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',),
+            PROL_ZERO    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),
+               fr="Affecte des valeurs nulles la ou le champ n'est pas defini (sinon il y a NaN)"),
+            NUME_PT      =SIMP(statut='f',typ='I'  ,validators=NoRepeat(),max='**',),
+            NUME_ORDRE   =SIMP(statut='f',typ='I'  ,validators=NoRepeat(),max='**',
+                           fr="Numero d ordre du champ à lire",ang="Rank of the field to be read" ),
+            INST         =SIMP(statut='f',typ='R',fr="Instant associé",ang="Instant" ),
+#
+            b_precision     =BLOC(condition="(INST != None)",
+                  CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),
+                  fr="Critère de précision sur le choix de l'instant associé",
+                  ang="Accuracy criterium over instant choice" ),
+                  b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                      PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,
+                      fr="Précision sur le choix de l'instant associé",ang="Accuracy over instant choice" ),),
+                  b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                      PRECISION       =SIMP(statut='o',typ='R',
+                      fr="Précision sur le choix de l'instant associé",ang="Accuracy over instant choice" ),),),
+#
+            NOM_MAIL_MED =SIMP(statut='f',typ='TXM',),
+                  ),
+#        Remarque : si cette liste évolue, il faut penser à mettre à jour son
+#                   homologue dans macr_adap_mail
+         TYPE_CHAM       =SIMP(statut='o',typ='TXM',into=C_TYPE_CHAM_INTO()),
+         b_modele =BLOC(condition = "TYPE_CHAM!=None and TYPE_CHAM[0:2] == 'EL'",
+            MODELE      =SIMP(statut='o',typ=modele_sdaster, ),
+                  ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+from Macro.lire_fonction_ops import lire_fonction_ops
+
+def lire_fonction_prod(self,TYPE,**args):
+  if   (TYPE == 'FONCTION')  : return fonction_sdaster
+  elif (TYPE == 'FONCTION_C'): return fonction_c
+  elif (TYPE == 'NAPPE'   )  : return nappe_sdaster
+  raise AsException("type de concept resultat non prevu")
+
+LIRE_FONCTION=MACRO(nom="LIRE_FONCTION",op=lire_fonction_ops,sd_prod=lire_fonction_prod,
+                   fr="Lit les valeurs réelles dans un fichier de données représentant une fonction et"
+                     +" crée un concept de type fonction ou nappe",
+                   reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
+         FORMAT          =SIMP(statut='f',typ='TXM',into=("LIBRE",),defaut="LIBRE"  ),
+         TYPE            =SIMP(statut='f',typ='TXM',into=("FONCTION","FONCTION_C","NAPPE"),defaut="FONCTION"  ),
+         SEPAR           =SIMP(statut='f',typ='TXM',into=("None",",",";","/"),defaut="None" ),
+         INDIC_PARA      =SIMP(statut='f',typ='I',min=2,max=2,defaut=[1,1]),
+         b_fonction      =BLOC(condition = "TYPE=='FONCTION' ",
+           INDIC_RESU      =SIMP(statut='f',typ='I',min=2,max=2,defaut=[1,2]), ),
+         b_fonction_c    =BLOC(condition = "TYPE=='FONCTION_C' ",
+           FORMAT_C        =SIMP(statut='f',typ='TXM',defaut="REEL_IMAG",into=("REEL_IMAG","MODULE_PHASE") ),
+           b_reel_imag     =BLOC(condition = "FORMAT_C=='REEL_IMAG' ",
+             INDIC_REEL      =SIMP(statut='o',typ='I',min=2,max=2,defaut=[1,2]),
+             INDIC_IMAG      =SIMP(statut='o',typ='I',min=2,max=2,defaut=[1,3]), ) ,
+           b_modu_phas     =BLOC(condition = "FORMAT_C=='MODULE_PHASE' ",
+             INDIC_MODU      =SIMP(statut='o',typ='I',min=2,max=2,defaut=[1,2]),
+             INDIC_PHAS      =SIMP(statut='o',typ='I',min=2,max=2,defaut=[1,3]), ), ),
+         b_nappe         =BLOC(condition = "TYPE=='NAPPE' ",
+           NOM_PARA_FONC   =SIMP(statut='o',typ='TXM',into=C_PARA_FONCTION() ),
+           INDIC_ABSCISSE  =SIMP(statut='o',typ='I',min=2,max=2,),
+           INTERPOL_FONC   =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+           PROL_DROITE_FONC=SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+           PROL_GAUCHE_FONC=SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+           DEFI_FONCTION   =FACT(statut='f',max='**',
+             INDIC_RESU      =SIMP(statut='o',typ='I',min=2,max=2,),),  ),
+         UNITE           =SIMP(statut='o',typ='I' ),
+         NOM_PARA        =SIMP(statut='o',typ='TXM',into=C_PARA_FONCTION() ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="TOUTRESU"),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,defaut="LIN",into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',defaut="EXCLU",into=("CONSTANT","LINEAIRE","EXCLU") ),
+         VERIF           =SIMP(statut='f',typ='TXM',defaut="CROISSANT",into=("CROISSANT","NON") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+LIRE_FORC_MISS=OPER(nom="LIRE_FORC_MISS",op= 179,sd_prod=vect_asse_gene,
+                    fr="Création d un vecteur assemblé à partir de base modale",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},           
+         BASE            =SIMP(statut='o',typ=mode_meca),
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         FREQ_EXTR       =SIMP(statut='o',typ='R',max=1),
+         NOM_CMP         =SIMP(statut='o',typ='TXM',into=("DX","DY","DZ") ),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("DEPL","VITE","ACCE"),defaut="DEPL"),
+         UNITE_RESU_FORC =SIMP(statut='f',typ='I',defaut=30),
+)  ;
+
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+LIRE_IMPE_MISS=OPER(nom="LIRE_IMPE_MISS",op= 164,sd_prod=matr_asse_gene_c,
+                    fr="Création d une matrice assemblée à partir de base modale",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},           
+         BASE            =SIMP(statut='o',typ=mode_meca ),
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         FREQ_EXTR       =SIMP(statut='o',typ='R',max=1),
+         UNITE_RESU_IMPE =SIMP(statut='f',typ='I',defaut=30),
+         TYPE            =SIMP(statut='f',typ='TXM',defaut="ASCII",into=("BINAIRE","ASCII") ),         
+)  ;
+
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+
+from Macro.lire_inte_spec_ops import lire_inte_spec_ops
+
+LIRE_INTE_SPEC=MACRO(nom="LIRE_INTE_SPEC",op=lire_inte_spec_ops,sd_prod=table_fonction,
+                    fr="Lecture sur un fichier externe de fonctions complexes pour créer une matrice interspectrale",
+                    reentrant='n',
+            UIinfo={"groupes":("Fonction",)},
+         UNITE           =SIMP(statut='o',typ='I' ),
+         FORMAT_C        =SIMP(statut='f',typ='TXM',defaut="MODULE_PHASE",into=("REEL_IMAG","MODULE_PHASE") ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","IDEAS") ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',defaut="FREQ",
+                               into=("DX","DY","DZ","DRX","DRY","DRZ","TEMP",
+                                     "INST","X","Y","Z","EPSI","FREQ","PULS","AMOR","ABSC",) ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM',defaut="DSP" ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 07/12/2009   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+LIRE_MAILLAGE=OPER(nom="LIRE_MAILLAGE",op=   1,sd_prod=maillage_sdaster,
+                   fr="Crée un maillage par lecture d'un fichier au format Aster ou Med",
+                   ang="Readings of a mesh file",
+                   reentrant='n',
+            UIinfo={"groupes":("Maillage",)},
+#
+         UNITE           =SIMP(statut='f',typ='I',defaut= 20 ),
+#
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","MED"),
+                            fr="Format du fichier : ASTER ou MED.",
+                            ang="Format of the file : ASTER or MED.",),
+#
+         ABSC_CURV       =FACT(statut='f',min=0,
+               TOUT          =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+#
+         VERI_MAIL       =FACT(statut='d',
+               VERIF         =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),  
+               APLAT         =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),  
+         ),
+#
+         b_format_med =BLOC( condition = " ( FORMAT == 'MED' ) " ,
+                             fr="Informations complémentaires pour la lecture MED.",
+                             ang="Further information for MED readings.",
+#
+# Pour une lecture dans un fichier MED, on peut préciser le nom sous lequel
+# le maillage y a été enregistré. Par défaut, on va le chercher sous le nom du concept à créer.
+            NOM_MED    = SIMP(statut='f',typ='TXM',
+                              fr="Nom du maillage dans le fichier MED.",
+                              ang="Name of the mesh into the MED file.",),
+            INFO_MED   = SIMP(statut='f',typ='I',defaut= 1,into=(1,2,3) ),
+#
+            RENOMME = FACT(statut='f', max='**',
+                                 fr="Renommer un nom de groupe MED",
+                 NOM_MED     = SIMP(statut='o', typ=grma,
+                                    fr="Nom du groupe dans le fichier MED"),
+                 NOM         = SIMP(statut='o', typ=grma, validators=LongStr(1,8),
+                                    fr="Nom du groupe dans le maillage ASTER"),
+            ),
+         ),
+#
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+#
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+def lire_miss_3d_prod(TYPE_RESU,**args):
+  if TYPE_RESU == "TRANS" : return dyna_trans
+  if TYPE_RESU == "HARMO" : return dyna_harmo
+  raise AsException("type de concept resultat non prevu")
+
+LIRE_MISS_3D=OPER(nom="LIRE_MISS_3D",op= 163,sd_prod=lire_miss_3d_prod,
+                  fr="Restituer sur base physique une réponse harmonique ou transitoire issue de MISS3D",
+                  reentrant='n',
+            UIinfo={"groupes":("Maillage",)},
+         MACR_ELEM_DYNA  =SIMP(statut='o',typ=macr_elem_dyna ),
+         UNITE           =SIMP(statut='f',typ='I',defaut= 27 ),
+         NOM             =SIMP(statut='f',typ='TXM' ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="TRANS",into=("TRANS","HARMO") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 30/09/2008   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE POTAPOV S.POTAPOV
+
+LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char,
+                 fr="Lire le fichier de résultats au format IDEAS produit par le logiciel EUROPLEXUS",
+                 reentrant='n',
+            UIinfo={"groupes":("Maillage",)},
+         regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+         UNITE           =SIMP(statut='f',typ='I',defaut= 19 ),
+         FORMAT          =SIMP(statut='f',typ='TXM',defaut="IDEAS",into=("IDEAS",)),
+         MAIL_PLEXUS     =SIMP(statut='o',typ=maillage_sdaster ),
+         MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster ),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster ),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+         b_prec_crit     =BLOC(condition = "LIST_INST != None or INST != None",
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+               b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                   PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+               b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                   PRECISION       =SIMP(statut='o',typ='R',),),),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 15/03/2010   AUTEUR SELLENET N.SELLENET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+
+def lire_resu_prod(TYPE_RESU,**args):
+  if TYPE_RESU == "EVOL_CHAR" :  return evol_char
+  if TYPE_RESU == "EVOL_THER" :  return evol_ther
+  if TYPE_RESU == "EVOL_ELAS" :  return evol_elas
+  if TYPE_RESU == "EVOL_NOLI" :  return evol_noli
+  if TYPE_RESU == "DYNA_TRANS" : return dyna_trans
+  if TYPE_RESU == "DYNA_HARMO" : return dyna_harmo
+  if TYPE_RESU == "HARM_GENE" :  return harm_gene
+  if TYPE_RESU == "MODE_MECA" :  return mode_meca
+  if TYPE_RESU == "MODE_MECA_C" : return mode_meca_c
+  if TYPE_RESU == "EVOL_VARC" :  return evol_varc
+  raise AsException("type de concept resultat non prevu")
+
+# pour éviter d'écrire 3 fois cette liste :
+def l_nom_cham_pas_elga(): return (
+     "ACCE", "ACCE_ABSOLU", "CRIT_ELNO_RUPT", "DCHA_ELNO_SIGM",
+     "DCHA_NOEU_SIGM", "DEDE_ELNO_DLDE", "DEDE_NOEU_DLDE", "DEGE_ELNO_DEPL", "DEGE_NOEU_DEPL",
+     "DEPL", "DEPL_ABSOLU", "DESI_ELNO_DLSI", "DESI_NOEU_DLSI", "DETE_ELNO_DLTE", "DETE_NOEU_DLTE",
+     "DURT_ELNO_META", "DURT_NOEU_META", "ECIN_ELEM_DEPL", "EFGE_ELNO_CART", "EFGE_ELNO_DEPL",
+     "EFGE_NOEU_CART", "EFGE_NOEU_DEPL", "ENDO_ELNO_SIGA", "ENDO_ELNO_SINO", "ENDO_NOEU_SINO",
+     "ENEL_ELNO_ELGA", "ENEL_NOEU_ELGA", "EPEQ_ELNO_TUYO", "EPGR_ELNO", "EPME_ELNO_DEPL",
+     "EPMG_ELNO_DEPL", "EPMG_NOEU_DEPL", "EPOT_ELEM_DEPL", "EPSA_ELNO", "EPSA_NOEU",
+     "EPSG_ELNO_DEPL", "EPSG_NOEU_DEPL", "EPSI_ELNO_DEPL", "EPSI_ELNO_TUYO", "EPSI_NOEU_DEPL",
+     "EPSP_ELNO", "EPSP_NOEU", "EQUI_ELNO_EPME", "EQUI_ELNO_EPSI",
+     "EQUI_ELNO_SIGM", "EQUI_NOEU_EPME", "EQUI_NOEU_EPSI", "EQUI_NOEU_SIGM", "ERRE_ELEM_NOZ1",
+     "ERRE_ELEM_NOZ2", "ERRE_ELNO_ELGA", "ERRE_NOEU_ELGA", "ERTH_ELEM_TEMP", "ERTH_ELNO_ELEM",
+     "ETOT_ELEM", "ETOT_ELNO_ELGA", "FLUX_ELNO_TEMP", "FLUX_NOEU_TEMP", "FORC_NODA", "FSUR_2D",
+     "FSUR_3D", "FVOL_2D", "FVOL_3D", "GRAD_NOEU_THETA", "HYDR_ELNO_ELGA", "HYDR_NOEU_ELGA",
+     "INTE_ELNO_ACTI", "INTE_ELNO_REAC", "INTE_NOEU_ACTI", "INTE_NOEU_REAC", "IRRA",
+     "META_ELNO_TEMP", "META_NOEU_TEMP", "PMPB_ELNO_SIEF", "PMPB_NOEU_SIEF",
+     "PRES", "PRES_DBEL_DEPL", "PRES_ELNO_DBEL", "PRES_ELNO_IMAG", "PRES_ELNO_REEL",
+     "PRES_NOEU_DBEL", "PRES_NOEU_IMAG", "PRES_NOEU_REEL",
+     "RADI_ELNO_SIGM", "RADI_NOEU_SIGM", "REAC_NODA",
+     "SIEF_ELNO", "SIEF_ELNO_ELGA", "SIEF_NOEU", "SIEF_NOEU_ELGA", "SIEQ_ELNO_TUYO",
+     "SIGM_ELNO_CART", "SIGM_ELNO_COQU", "SIGM_ELNO_DEPL", "SIGM_ELNO_SIEF",
+     "SIGM_ELNO_TUYO", "SIGM_NOEU_CART", "SIGM_NOEU_COQU",
+     "SIGM_NOEU_DEPL", "SIGM_NOEU_SIEF", "SIGM_NOZ1_ELGA",
+     "SIGM_NOZ2_ELGA", "SIPO_ELNO_DEPL", "SIPO_ELNO_SIEF", "SIPO_NOEU_DEPL",
+     "SIPO_NOEU_SIEF", "SIRE_ELNO_DEPL", "SIRE_NOEU_DEPL", "TEMP", "THETA",
+     "VALE_CONT", "VALE_NCOU_MAXI", "VARI_ELNO", "VARI_ELNO_COQU",
+     "VARI_ELNO_ELGA", "VARI_ELNO_TUYO", "VARI_NOEU", "VARI_NOEU_ELGA",
+     "VITE", "VITE_ABSOLU", "VITE_VENT",
+                           )
+
+LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
+            UIinfo={"groupes":("Résultats et champs",)},
+               fr="Lire dans un fichier, soit format IDEAS, soit au format ENSIGHT soit au format MED,"
+                 +" des champs et les stocker dans une SD résultat",
+
+
+# 0) mots clés généraux :
+#----------------------
+         TYPE_RESU       =SIMP(statut='o',typ='TXM',into=("EVOL_THER","EVOL_ELAS","EVOL_NOLI","MODE_MECA",
+                                                          "MODE_MECA_C","DYNA_TRANS","DYNA_HARMO","HARM_GENE",
+                                                          "EVOL_CHAR","EVOL_VARC") ),
+
+         FORMAT          =SIMP(statut='o',typ='TXM',into=("IDEAS","IDEAS_DS58","ENSIGHT","MED") ),
+
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+
+         regles=(UN_PARMI('MAILLAGE','MODELE'),),
+         MAILLAGE        =SIMP(statut='f',typ=maillage_sdaster),
+         MODELE          =SIMP(statut='f',typ=modele_sdaster),
+         COMP_INCR       =C_COMP_INCR(),
+         NB_VARI         =SIMP(statut='f',typ='I' ),
+
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater,),
+         
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem,),
+
+          b_evol_elas  = BLOC(condition="TYPE_RESU=='EVOL_ELAS'",
+          EXCIT           =FACT(statut='f',max='**',
+            CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+            FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+            TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),),
+           ),
+
+          b_evol_ther  = BLOC(condition="TYPE_RESU=='EVOL_THER'",
+          EXCIT           =FACT(statut='f',max='**',
+            CHARGE          =SIMP(statut='o',typ=(char_ther,char_cine_ther)),
+            FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),),
+           ),
+
+          b_evol_noli  = BLOC(condition="TYPE_RESU=='EVOL_NOLI'",
+          EXCIT           =FACT(statut='f',max='**',
+           CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                 into=("FIXE_CSTE","FIXE_PILO","SUIV","DIDI")),
+           DEPL            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           ACCE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           VITE            =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           MULT_APPUI      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),),
+         ),
+
+
+# 1) blocs selon le format choisi :
+#---------------------------------
+
+# 1-1 ideas dataset-58 :
+# ----------------------
+         b_dataset_58 = BLOC(condition="FORMAT=='IDEAS_DS58'",
+           UNITE           =SIMP(statut='f',typ='I',defaut= 19 ),
+         ),
+         b_dataset_58_b = BLOC(condition="(FORMAT=='IDEAS_DS58') and ((TYPE_RESU=='DYNA_TRANS') or\
+                                        (TYPE_RESU=='DYNA_HARMO') or (TYPE_RESU=='HARM_GENE'))",
+           NOM_CHAM=SIMP(statut='o',typ='TXM',into=("DEPL","VITE","ACCE","EPSI_NOEU_DEPL","SIEF_NOEU",) ),
+           REDEFI_ORIENT=FACT(statut='f',max='**',
+                              regles=(PRESENT_PRESENT('CODE_DIR','DIRECTION','NOEUD',),),
+                              CODE_DIR =SIMP(statut='f',typ='I',into=(1,2,3,) ),
+                              DIRECTION=SIMP(statut='f',typ='R',min=3,max=3,),
+                              NOEUD    =SIMP(statut='f',typ=no,validators=NoRepeat(),max='**'),),
+         ),
+
+# 1-2 ideas  :
+# ---------
+         b_ideas         =BLOC(condition="FORMAT=='IDEAS'",
+           UNITE           =SIMP(statut='f',typ='I',defaut= 19 ),
+#           TEST            =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=l_nom_cham_pas_elga()),
+           PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",),
+             fr="Affecte des valeurs nulles la ou le champ n'est pas defini"),
+           FORMAT_IDEAS    =FACT(statut='f',max='**',
+             regles=(UN_PARMI('POSI_INST','POSI_FREQ'),),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',into=l_nom_cham_pas_elga()),
+             NUME_DATASET    =SIMP(statut='f',typ='I',into=(55,57,2414) ),
+             RECORD_3        =SIMP(statut='f',typ='I',max=10),
+             RECORD_6        =SIMP(statut='f',typ='I',max=10),
+             RECORD_9        =SIMP(statut='f',typ='I',max=10),
+             POSI_ORDRE      =SIMP(statut='o',typ='I',min=2,max=2),
+             POSI_NUME_MODE  =SIMP(statut='f',typ='I',min=2,max=2),
+             POSI_MASS_GENE  =SIMP(statut='f',typ='I',min=2,max=2),
+             POSI_AMOR_GENE  =SIMP(statut='f',typ='I',min=2,max=2),
+             POSI_INST       =SIMP(statut='f',typ='I',min=2,max=2),
+             POSI_FREQ       =SIMP(statut='f',typ='I',min=2,max=2),
+             NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),),
+         ),
+             
+         b_mode   =BLOC(condition="((TYPE_RESU=='MODE_MECA')or(TYPE_RESU=='MODE_MECA_C') )and (FORMAT=='IDEAS')",
+             NUME_DDL        =SIMP(statut='f',typ=(nume_ddl_sdaster),max=1,
+                fr="Utile en dynamique pour pouvoir imposer la numérotation des cham_no."),     
+         ),
+
+# 1-3 ensight :
+# -------------
+         b_ensight       =BLOC(condition="FORMAT=='ENSIGHT'",
+           NOM_FICHIER     =SIMP(statut='f',typ='TXM'),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=l_nom_cham_pas_elga()),
+         ),
+
+# 1-4 med :
+# ---------
+         b_med           =BLOC(condition = "FORMAT == 'MED'",fr="Nom du champ dans le fichier MED",
+           UNITE           =SIMP(statut='f',typ='I',defaut= 81, fr="Le fichier est : fort.n.",),
+           FORMAT_MED      =FACT(statut='o',max='**',
+             regles=(ENSEMBLE('NOM_CMP','NOM_CMP_MED'),UN_PARMI('NOM_CHAM_MED','NOM_RESU'),),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO(),),
+             NOM_CHAM_MED    =SIMP(statut='f',typ='TXM',               fr="Nom du champ dans le fichier MED.",  ),
+             NOM_RESU        =SIMP(statut='f',typ='TXM',               fr="Prefixe du nom de champ dans le fichier MED.",  ),
+             NOM_CMP         =SIMP(statut='f',typ='TXM',max='**',      fr="Nom des composantes dans ASTER.", ),
+             NOM_CMP_MED     =SIMP(statut='f',typ='TXM',max='**',      fr="Nom des composantes dans MED.", ),
+           ),
+           PROL_ZERO       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",),
+            fr="Affecte des valeurs nulles la ou le champ n'est pas defini (sinon il y a NaN)"),
+         ),
+
+# 2) blocs selon le type du résultat :
+#---------------------------------
+         b_mode_meca     =BLOC(condition="(TYPE_RESU=='MODE_MECA')or(TYPE_RESU=='MODE_MECA_C')",
+           MATR_A         =SIMP(statut='f',typ=matr_asse_depl_r,),
+           MATR_B         =SIMP(statut='f',typ=matr_asse_depl_r,),
+         ),
+
+
+# 3) autres blocs :
+#---------------------------------
+         b_extrac        =BLOC(condition="1",fr="accès à un champ dans la structure de données résultat",
+           regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST','FREQ','LIST_FREQ'),),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+
+           b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)or(FREQ != None)or(LIST_FREQ != None)",
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+           ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+from Macro.lire_table_ops import lire_table_ops
+
+LIRE_TABLE=MACRO(nom="LIRE_TABLE",op=lire_table_ops,sd_prod=table_sdaster,
+                 fr="Lecture d'un fichier contenant une table",
+            UIinfo={"groupes":("Table",)},
+         UNITE           =SIMP(statut='o',typ='I' ),
+         FORMAT          =SIMP(statut='f',typ='TXM',into=("ASTER",),defaut="ASTER"),
+         NUME_TABLE      =SIMP(statut='f',typ='I',defaut=1),
+         SEPARATEUR      =SIMP(statut='f',typ='TXM',defaut=' '),
+         PARA            =SIMP(statut='f',typ='TXM',max='**'),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         )  ;
+
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ANDRIAM H.ANDRIAMBOLOLONA
+
+MAC_MODES=OPER(nom="MAC_MODES",op=  141,sd_prod=table_sdaster,
+               fr="Critere orthogonalite de modes propres",
+               reentrant='n',
+               UIinfo={"groupes":("Résolution",)},
+               regles=(PRESENT_PRESENT('IERI','MATR_ASSE'),),
+         BASE_1     =SIMP(statut='o',typ=(mode_meca,mode_meca_c,mode_flamb) ),
+         BASE_2     =SIMP(statut='o',typ=(mode_meca,mode_meca_c,mode_flamb) ),
+         MATR_ASSE  =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_depl_c) ),
+         IERI       =SIMP(statut='f',typ='TXM',into=("OUI",),),
+         TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+         INFO       =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 15/03/2010   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+
+
+from Macro.macr_adap_mail_ops import macr_adap_mail_ops
+
+def macr_adap_mail_prod(self,MAJ_CHAM,ADAPTATION,**args):
+#
+# 0. Typage des structures produites
+#
+  maillage_np1=args['MAILLAGE_NP1']
+  self.type_sdprod(maillage_np1,maillage_sdaster)
+#
+  if ( args['MAILLAGE_NP1_ANNEXE'] is not None ) :
+    maillage_np1_annexe=args['MAILLAGE_NP1_ANNEXE']
+    self.type_sdprod(maillage_np1_annexe,maillage_sdaster)
+#
+  if MAJ_CHAM == None:return None
+# Remarque : la liste qui suit doit etre conforme à son homologue de LIRE_CHAMP
+  for ch in MAJ_CHAM:
+    t=ch['TYPE_CHAM']
+    if t[0:5] == "NOEU_":self.type_sdprod(ch['CHAM_MAJ'],cham_no_sdaster)
+    if t[0:2] == "EL":   self.type_sdprod(ch['CHAM_MAJ'],cham_elem)
+  return None
+
+
+MACR_ADAP_MAIL=MACRO(nom="MACR_ADAP_MAIL",op=macr_adap_mail_ops,sd_prod=macr_adap_mail_prod,
+                     fr="Adapter un maillage avec le logiciel HOMARD.",
+                     ang="Mesh adaptation with the HOMARD software.",
+                     docu="U7.03.01-b",UIinfo={"groupe":("Maillage",)},
+#
+# 1. Le niveau d'information
+#
+  INFO = SIMP(statut='f',typ='I',defaut=1,into=(1,2,3,4)),
+#
+# 2. Version de HOMARD
+#
+  VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V9_6",
+                        into=("V9_6", "V9_N", "V9_N_PERSO"),
+                        fr="Version de HOMARD",
+                        ang="HOMARD release"),
+#
+# 3. Langue des messages produits par HOMARD
+#
+  LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
+                into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
+                fr="Langue des messages produits par HOMARD.",
+                ang="Language for the HOMARD messages." ),
+#
+# 4. Les maillages
+# 4.1. Quel que soit le type de traitement, il faut donner  :
+#      A. Le concept du maillage initial (entree)
+#      B. Le concept du maillage final (sortie)
+#
+  MAILLAGE_N   = SIMP(statut='o',typ=maillage_sdaster,
+                      fr="Maillage avant adaptation",
+                      ang="Mesh before adaptation" ),
+#
+  MAILLAGE_NP1 = SIMP(statut='o',typ=CO,
+                      fr="Maillage apres adaptation",
+                      ang="Mesh after adaptation" ),
+#
+# 4.2. Eventuellement, on peut produire un maillage annexe
+#      Actuellement, c'est le maillage n+1, mais de degré différent.
+#
+  MAILLAGE_NP1_ANNEXE = SIMP(statut='f',typ=CO,
+                             fr="Maillage annexe apres adaptation",
+                             ang="Additional mesh after adaptation" ),
+#
+# 5. Le pilotage de l'adaptation, avec les variantes suivantes :
+#  . Raffinement et deraffinement, selon un champ d'indicateurs d'erreur
+#  . Raffinement seul, selon un champ d'indicateurs d'erreur
+#  . Deraffinement seul, selon un champ d'indicateurs d'erreur
+#  . Raffinement seul, selon des zones geometriques
+#  . Raffinement uniforme : toutes les mailles sont divisées
+#  . Deraffinement uniforme : toutes les mailles sont regroupées
+#  . Modification : le maillage subit des transformations specifiques
+#  . Rien : le maillage est le meme a la sortie et a l'entree
+#
+  ADAPTATION = SIMP(statut='o',typ='TXM',
+                    into=("RAFF_DERA","RAFFINEMENT","DERAFFINEMENT","RAFFINEMENT_ZONE", \
+                          "RAFFINEMENT_UNIFORME","DERAFFINEMENT_UNIFORME", \
+                          "MODIFICATION","RIEN"),
+                    fr="Pilotage de l'adaptation : selon un indicateur d'erreur ou uniforme.",
+                    ang="Adaptation control : either among an error indicator or uniform" ),
+#
+# 6. Pour de l'adaptation libre, il faut un indicateur d'erreur
+#
+  b_indicateur_d_erreur = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+                                              (ADAPTATION == 'RAFFINEMENT') or \
+                                              (ADAPTATION == 'DERAFFINEMENT') " ,
+                                fr="Pour une adaptation libre, choix de l'indicateur d'erreur ou d'une zone à raffiner",
+                                ang="For a free adaptation, selection of the error indicator or of a zone",
+#
+    regles=(UN_PARMI('CHAM_GD','RESULTAT_N')),
+#
+# 6.1. Repérage de la zone à raffiner à l'aide d'un indicateur
+#
+# 6.1.1. Sous forme de champ de grandeur
+#
+    CHAM_GD    = SIMP(statut='f',typ=cham_gd_sdaster,
+                      fr="Champ de grandeur Code_Aster contenant l'indicateur d'erreur",
+                      ang="Code_Aster champ de grandeur with error indicator" ),
+#
+# 6.1.2. Sous forme de concept resultat_sdaster
+#
+    RESULTAT_N = SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther) ,
+                      fr="Concept resultat Code_Aster contenant l'indicateur d'erreur",
+                      ang="The Code_Aster result with error indicator" ),
+#
+    b_champ_indicateur = BLOC(condition="(RESULTAT_N != None)",
+      INDICATEUR = SIMP(statut='o',typ='TXM',
+                        fr="Champ de l'indicateur d'erreur dans le résultat",
+                        ang="The error indicator field in the result structure" ),
+    ),
+#
+# 6.1.3. Est-ce un champ dérivé
+#
+    b_sensibilite = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
+                        fr="Est-ce un champ dérivé",
+                        ang="Is the indicator a derivative field",
+#
+      SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),
+                         fr="Paramètre de sensibilité.",
+                         ang="Sensitivity parameter")
+#
+    ),
+#
+# 6.1.4. La ou les composantes retenues
+#
+    b_composante = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
+                        fr="Choix de la composante ou des composantes pour l'indicateur",
+                        ang="Selection of the component(s) for the error indicator",
+#
+      NOM_CMP_INDICA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                            fr="Liste des composante(s) retenue(s) pour l'indicateur d'erreur.",
+                            ang="List of the selected component(s) for the error indicator." ),
+#
+    ),
+#
+# 6.1.5. Le paramètre temporel pour l'indicateur
+#
+    b_parametre_temporel = BLOC(condition="(RESULTAT_N != None)",
+                                fr="Choix éventuel du paramètre temporel pour l'indicateur",
+                                ang="Time selection for the error indicator (option)",
+#
+      regles=(EXCLUS('NUME_ORDRE','INST'),),
+#
+# 6.1.5.1. Soit le numero d'ordre
+#
+      NUME_ORDRE = SIMP(statut='f',typ='I',
+                        fr="Numero d ordre",
+                        ang="Rank" ),
+#
+# 6.1.5.2. Soit l'instant
+# 6.1.5.2.1. Sa valeur
+#
+      INST       = SIMP(statut='f',typ='R',
+                        fr="Instant associé",
+                        ang="Instant" ),
+#
+# 6.1.5.2.2. La précision du choix de l'instant
+#
+      b_precision = BLOC(condition="(INST != None)",
+                         fr="Choix de la précision du choix de l'instant",
+                         ang="Precision for the choice of the instant",
+        CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),
+                         fr="Critère de précision sur le choix de l'instant associé",
+                         ang="Accuracy criterium over the choice of the instant"),
+        b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,
+                             fr="Précision relative sur le choix de l'instant associé",
+                             ang="Relative accuracy over the choice of the instant"),),
+        b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+            PRECISION       =SIMP(statut='o',typ='R',
+                             fr="Précision absolue sur le choix de l'instant associé",
+                             ang="Absolute accuracy over the choice of the instant"),),
+      ),
+#
+    ),
+#
+# 6.1.6. Type de valeur de l'indicateur : absolue (norme L2), norme infinie, ou relative
+#
+    b_valeur_indicateur = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
+                               fr="Type de valeur pour l'indicateur",
+                               ang="Type of the value type for the error indicator",
+#
+      TYPE_VALEUR_INDICA = SIMP(statut='f',typ='TXM',defaut="V_ABSOLUE",
+                                into=("V_ABSOLUE", "NORME_L2", "NORME_INFINIE", "V_RELATIVE"),
+                                fr="Valeur absolue, norme des composantes ou valeur relative pour l'indicateur",
+                                ang="Absolute value, norm or relative value for the error indicator" ),
+#
+    ),
+#
+# 6.1.7. Type d'opération sur l'indicateur : la valeur par maille ou le max du saut entre mailles
+#
+    b_usage_indicateur = BLOC(condition=" (RESULTAT_N != None) or (CHAM_GD != None) ",
+                              fr="Usage de l'indicateur : direct ou saut",
+                              ang="Use type for the error indicator : direct or jump",
+#
+      TYPE_OPER_INDICA = SIMP(statut='f',typ='TXM',defaut="MAILLE",into=("MAILLE","SAUT"),
+                              fr="Usage de l'indicateur : la valeur par maille ou le saut entre mailles voisines",
+                              ang="Use of the indicator : value over every mesh or jump between neighbour" ),
+#
+    ),
+#
+  ) ,
+#
+# 7. Les criteres pour de l'adaptation libre avec un indicateur d'erreur :
+#        absolu, relatif, en proportion d'entite
+# 7.1. Pour le raffinement :
+#
+  b_critere_de_raffinement = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+                                                 (ADAPTATION == 'RAFFINEMENT') " ,
+                                fr="Critère de raffinement.",
+                                ang="Refinement threshold.",
+#
+    regles=(UN_PARMI ( 'CRIT_RAFF_ABS', 'CRIT_RAFF_REL', 'CRIT_RAFF_PE' ),),
+#
+    CRIT_RAFF_ABS = SIMP(statut='f',typ='R',
+                         fr="Critère absolu",
+                         ang="Absolute threshold" ),
+    CRIT_RAFF_REL = SIMP(statut='f',typ='R',
+                         fr="Critère relatif : fraction réelle entre 0. et 1.",
+                         ang="Relative threshold : ratio between 0. and 1." ),
+    CRIT_RAFF_PE  = SIMP(statut='f',typ='R',
+                         fr="Pourcentage de mailles : fraction réelle entre 0. et 1.",
+                         ang="Percentage of meshes : ratio between 0. and 1." ),
+  ) ,
+#
+# 7.2. Pour le deraffinement :
+#
+  b_critere_de_deraffinement = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+                                                   (ADAPTATION == 'DERAFFINEMENT') " ,
+                                     fr="Critère de déraffinement.",
+                                     ang="Unrefinement threshold.",
+#
+    regles=(UN_PARMI ( 'CRIT_DERA_ABS', 'CRIT_DERA_REL', 'CRIT_DERA_PE' ),),
+#
+    CRIT_DERA_ABS = SIMP(statut='f',typ='R' ,
+                         fr="Critère absolu",
+                         ang="Absolute threshold" ),
+    CRIT_DERA_REL = SIMP(statut='f',typ='R',
+                         fr="Critère relatif : fraction réelle entre 0. et 1.",
+                         ang="Relative threshold : ratio between 0. and 1." ),
+    CRIT_DERA_PE  = SIMP(statut='f',typ='R',
+                         fr="Pourcentage de mailles : fraction réelle entre 0. et 1.",
+                         ang="Percentage of meshes : ratio between 0. and 1." ),
+  ) ,
+#
+# 8. Pour de l'adaptation par zone, définitions des zones
+#
+  b_zone = BLOC( condition = " (ADAPTATION == 'RAFFINEMENT_ZONE') " ,
+                 fr="Pour une adaptation selon une zone à raffiner",
+                 ang="For adaptation among a zone",
+#
+    ZONE = FACT(statut='f',max='**',
+                fr="Définition de zones à raffiner.",
+                ang="Refined zone definition.",
+#
+# 8.1. Type de la zone
+#
+      TYPE = SIMP(statut='o',typ='TXM',into=("RECTANGLE", "BOITE", "DISQUE", "SPHERE", "CYLINDRE", "DISQUE_PERCE", "TUYAU"),
+                  fr="Type de la zone",
+                  ang="Type of the zone" ),
+#
+# Ne sachant pas exploiter les blocs, je mets des regles
+#
+      regles=(AU_MOINS_UN('X_MINI','X_CENTRE','HAUTEUR'),
+              EXCLUS('X_MINI','X_CENTRE','HAUTEUR',),
+              EXCLUS('Z_MINI','X_CENTRE','HAUTEUR',),
+              EXCLUS('X_MINI','Z_CENTRE','HAUTEUR',),
+              EXCLUS('Z_MINI','Z_CENTRE','HAUTEUR',),
+              EXCLUS('X_MINI','RAYON',),
+              EXCLUS('Z_MINI','RAYON',),
+              EXCLUS('X_MINI','X_CENTRE','RAYON_INT',),
+              EXCLUS('Z_MINI','X_CENTRE','RAYON_INT',),
+              EXCLUS('X_MINI','X_CENTRE','RAYON_EXT',),
+              EXCLUS('Z_MINI','X_CENTRE','RAYON_EXT',),
+              EXCLUS('RAYON','RAYON_INT',),),
+#
+# 8.2. Une boite rectangulaire ou parallelepipedique
+# 8.2.1. Incontournables
+#
+##gn      b_z_boiteXY = BLOC( condition = " (TYPE == 'RECTANGLE') or (TYPE == 'BOITE') " ,
+##gn                          fr="X et Y mini/maxi pour un rectangle ou un parallelepipede.",
+##gn                          ang="X and Y min/max for a rectangle or a parallelepipedic box",
+      X_MINI = SIMP(statut='f',typ='R',
+                    fr="Abscisse minimum de la boite",
+                    ang="Minimum X for the box"),
+      X_MAXI = SIMP(statut='f',typ='R',
+                    fr="Abscisse maximum de la boite",
+                    ang="Maximum X for the box"),
+      Y_MINI = SIMP(statut='f',typ='R',
+                    fr="Ordonnée minimum de la boite",
+                    ang="Minimum Y for the box"),
+      Y_MAXI = SIMP(statut='f',typ='R',
+                      fr="Abscisse maximum de la boite",
+                      ang="Maximum Y for the box"),
+##gn      ) ,
+#
+# 8.2.2. Complement pour une boite parallelepipedique
+#
+##gn      b_z_boiteZ = BLOC( condition = " (TYPE == 'BOITE') " ,
+##gn                         fr="Z mini/maxi pour un parallelepipede.",
+##gn                         ang="Z min/max for a parallelepipedic box",
+      Z_MINI = SIMP(statut='f',typ='R',
+                    fr="Cote minimum de la boite",
+                    ang="Minimum Z for the box"),
+      Z_MAXI = SIMP(statut='f',typ='R',
+                    fr="Cote maximum de la boite",
+                    ang="Maximum Z for the box"),
+##gn      ) ,
+#
+# 8.3. Rayon pour un disque, une sphere ou un cylindre
+#
+##gn      b_z_rayon = BLOC( condition = " (TYPE == 'DISQUE') or (TYPE == 'SPHERE') or (TYPE == 'CYLINDRE') " ,
+##gn                        fr="Le rayon d'un disque, d'une sphere ou d'un cylindre.",
+##gn                        ang="The radius of a disk or of a sphere or of a cylinder.",
+      RAYON = SIMP(statut='f',typ='R',
+                   fr="Rayon",
+                   ang="Radius"),
+##gn      ) ,
+#
+# 8.4. Pour un disque plein ou perce, une sphere
+# 8.4.1. Incontournables
+#
+##gn      b_z_di_sp_XY = BLOC( condition = " (TYPE == 'DISQUE') or (TYPE == 'SPHERE') or (TYPE == 'DISQUE_PERCE') " ,
+##gn                           fr="X et Y du centre d'un disque plein ou perce, d'une sphere.",
+##gn                           ang="X and Y of the centre of a disk or of a sphere.",
+      X_CENTRE = SIMP(statut='f',typ='R',
+                      fr="Abscisse du centre du disque ou de la sphere",
+                      ang="X for the center of the disk or of the sphere"),
+      Y_CENTRE = SIMP(statut='f',typ='R',
+                      fr="Ordonnee du centre du disque ou de la sphere",
+                      ang="Y for the center of the disk or of the sphere"),
+##gn      ) ,
+#
+# 8.4.2. Complement pour une sphere
+#
+##gn      b_z_sp_Z = BLOC( condition = " (TYPE == 'SPHERE') " ,
+##gn                       fr="Cote du centre de la sphere.",
+##gn                       ang="Z for the center of the sphere.",
+       Z_CENTRE = SIMP(statut='f',typ='R',
+                       fr="Cote du centre de la sphere",
+                       ang="Z for the center of the sphere"),
+##gn      ) ,
+#
+# 8.5. Rayons interieur et exterieur pour un disque perce ou un tuyau
+#
+##gn      b_z_rayon_int_ext = BLOC( condition = " (TYPE == 'DISQUE_PERCE') or (TYPE == 'TUYAU') " ,
+##gn                                fr="Le rayon d'un disque perce ou d'un tuyau.",
+##gn                                ang="The radius of a holed disk or of a pipe.",
+      RAYON_INT = SIMP(statut='f',typ='R',
+                       fr="Rayon interieur",
+                       ang="Internal radius"),
+      RAYON_EXT = SIMP(statut='f',typ='R',
+                       fr="Rayon exterieur",
+                       ang="External radius"),
+##gn      ) ,
+#
+# 8.6. Un cylindre ou un tuyau
+#
+##gn      b_z_cylindre_tuyau = BLOC( condition = " (TYPE == 'CYLINDRE') or (TYPE == 'TUYAU') " ,
+##gn                                 fr="Pour un cylindre ou un tuyau.",
+##gn                                 ang="For a cylinder or a pipe.",
+      X_AXE = SIMP(statut='f',typ='R',
+                   fr="Abscisse du vecteur directeur de l'axe",
+                   ang="X for the axial vector"),
+      Y_AXE = SIMP(statut='f',typ='R',
+                   fr="Ordonnee du vecteur directeur de l'axe",
+                   ang="Y for the axial vector"),
+      Z_AXE = SIMP(statut='f',typ='R',
+                   fr="Cote du vecteur directeur de l'axe",
+                   ang="Z for the axial vector"),
+      X_BASE = SIMP(statut='f',typ='R',
+                    fr="Abscisse d'un point de la base, sur l'axe",
+                    ang="X for the basis, on the axis"),
+      Y_BASE = SIMP(statut='f',typ='R',
+                    fr="Ordonnee d'un point de la base, sur l'axe",
+                    ang="Y for the basis, on the axis"),
+      Z_BASE = SIMP(statut='f',typ='R',
+                    fr="Cote d'un point de la base, sur l'axe",
+                    ang="Z for the basis, on the axis"),
+      HAUTEUR = SIMP(statut='f',typ='R',
+                     fr="Hauteur",
+                     ang="Height"),
+##gn     ) ,
+#
+    ) ,
+#
+  ) ,
+#
+# 9. Les niveaux extremes pour le maillage adapte
+# 9.1. Pour le raffinement :
+#
+  b_niveau_maximum = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+                                         (ADAPTATION == 'RAFFINEMENT') or \
+                                         (ADAPTATION == 'RAFFINEMENT_UNIFORME') or \
+                                         (ADAPTATION == 'RAFFINEMENT_ZONE') " ,
+                           fr="Niveau maximum de profondeur de raffinement",
+                           ang="Maximum level for the refinement",
+    NIVE_MAX = SIMP(statut='f',typ='I',
+                    fr="Niveau maximum de profondeur de raffinement",
+                    ang="Maximum level for the refinement"),
+  ) ,
+#
+# 9.2. Pour le deraffinement :
+#
+  b_niveau_minimum = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+                                         (ADAPTATION == 'DERAFFINEMENT') or \
+                                         (ADAPTATION == 'DERAFFINEMENT_UNIFORME') " ,
+                           fr="Niveau minimum de profondeur de déraffinement",
+                           ang="Minimum level for the unrefinement",
+    NIVE_MIN = SIMP(statut='f',typ='I',
+                    fr="Niveau minimum de profondeur de déraffinement",
+                    ang="Minimum level for the unrefinement"),
+  ) ,
+#
+# 10. Filtrage de l'adaptation par des groupes
+#
+  b_filtrage_par_des_groupes = BLOC( condition = " (ADAPTATION == 'RAFF_DERA') or \
+                                                   (ADAPTATION == 'RAFFINEMENT') or \
+                                                   (ADAPTATION == 'RAFFINEMENT_UNIFORME') or \
+                                                   (ADAPTATION == 'RAFFINEMENT_ZONE') or \
+                                                   (ADAPTATION == 'DERAFFINEMENT') or \
+                                                   (ADAPTATION == 'DERAFFINEMENT_UNIFORME') " ,
+                                fr="Filtrage de l'adaptation par des groupes.",
+                                ang="Filtering of adaptation by the groups.",
+#
+    GROUP_MA = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                    fr="Liste des groupes de mailles pour le filtrage de l'adaptation.",
+                    ang="List of the groups of meshes for filtering of the adaptation." ),
+#
+    GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**',
+                    fr="Liste des groupes de noeuds pour le filtrage de l'adaptation.",
+                    ang="List of the groups of nodes for filtering of the adaptation." ),
+  ) ,
+#
+# 11. Suivi d'une frontiere
+#
+# 11.1. Definition d'une frontiere par un maillage (valable seulement pour des frontieres 1D)
+#
+  MAILLAGE_FRONTIERE = SIMP(statut='f',typ=maillage_sdaster,
+                           fr="Maillage de la frontiere à suivre",
+                           ang="Boundary mesh" ),
+#
+  b_frontiere = BLOC( condition = " MAILLAGE_FRONTIERE != None " ,
+                      fr="Information complémentaire sur la frontière",
+                      ang="Further information about boundary",
+#
+    GROUP_MA_FRONT = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                          fr="Liste des groupes de mailles définissant la frontière",
+                          ang="Mesh groups which define the boundary" ),
+#
+  ) ,
+#
+# 11.2. Definition analytique d'une frontiere
+#
+  FRONTIERE_ANALYTIQUE = FACT(statut='f',max='**',
+                              fr="Definition analytique de frontieres a suivre.",
+                              ang="Analytical definition of a boundary.",
+#
+# 11.2.1. Type de la frontiere
+#
+    TYPE = SIMP(statut='o',typ='TXM',into=("SPHERE", "CYLINDRE"),
+                fr="Type de la frontiere",
+                ang="Type of the boundary" ),
+#
+# 11.2.2. Groupe lie a la frontiere
+#
+    GROUP_MA = SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**',
+                    fr="Liste des groupes de mailles definissant la frontiere",
+                    ang="Groups of meshes which define the boundary" ),
+#
+# 11.2.3. Pour une sphere ou un cylindre : rayon et centre
+#
+    b_fr_rayon = BLOC( condition = " (TYPE == 'SPHERE') or (TYPE == 'CYLINDRE') " ,
+                       fr="Le rayon et le centre d'une sphere ou d'un cylindre.",
+                       ang="The radius and the centre of a sphere or of a cylinder.",
+      RAYON = SIMP(statut='o',typ='R',
+                   fr="Rayon",
+                   ang="Radius"),
+      X_CENTRE = SIMP(statut='o',typ='R',
+                      fr="Abscisse du centre",
+                      ang="X for the center"),
+      Y_CENTRE = SIMP(statut='o',typ='R',
+                      fr="Ordonnee du centre",
+                      ang="Y for the center"),
+      Z_CENTRE = SIMP(statut='o',typ='R',
+                      fr="Cote du centre",
+                      ang="Z for the center"),
+    ) ,
+#
+# 11.2.4. Complement pour un cylindre
+#
+    b_fr_cylindre = BLOC( condition = " (TYPE == 'CYLINDRE') " ,
+                          fr="Pour un cylindre.",
+                          ang="For a cylinder.",
+      X_AXE = SIMP(statut='o',typ='R',
+                   fr="Abscisse du vecteur directeur de l'axe",
+                   ang="X for the axial vector"),
+      Y_AXE = SIMP(statut='o',typ='R',
+                   fr="Ordonnee du vecteur directeur de l'axe",
+                   ang="Y for the axial vector"),
+      Z_AXE = SIMP(statut='o',typ='R',
+                   fr="Cote du vecteur directeur de l'axe",
+                   ang="Z for the axial vector"),
+    ) ,
+#
+  ) ,
+#
+# 12. Mise à jour de champs sur le nouveau maillage
+#
+  MAJ_CHAM = FACT(statut='f',max='**',
+                  fr="Mise à jour de champs sur le nouveau maillage.",
+                  ang="Updating of the fields over the new mesh.",
+#
+# 12.1. Le nom du champ de grandeur qui contiendra le resultat de la mise a jour
+#
+    CHAM_MAJ = SIMP(statut='o',typ=CO,
+                    fr="Nom du champ de grandeur qui contiendra le champ mis à jour",
+                    ang="Name of the field for the updated field"),
+#
+# 12.2. Le type du champ qui contiendra le resultat de la mise a jour
+#
+    TYPE_CHAM = SIMP(statut='o',typ='TXM',into=C_TYPE_CHAM_INTO(),
+                     fr="Type du champ qui contiendra le champ mis à jour",
+                     ang="Type of the field for the updated field" ),
+#
+# 12.3. Le champ a interpoler
+#
+    regles=(UN_PARMI('CHAM_GD','RESULTAT')),
+#
+# 12.3.1. Sous forme de champ de grandeur
+#
+    CHAM_GD = SIMP(statut='f',typ=cham_gd_sdaster,
+                   fr="Champ de grandeur Code_Aster contenant le champ à mettre à jour",
+                   ang="Champ de grandeur with the field to be updated" ),
+#
+# 12.3.2. Sous forme de champ dans un resultat
+#
+    RESULTAT = SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther),
+                    fr="Resultat contenant le champ à mettre à jour",
+                    ang="Result with the field to be updated" ),
+#
+    b_nom_du_champ = BLOC(condition="(RESULTAT != None)",
+                          fr="Choix éventuel du nom du champ à interpoler",
+                          ang="Selection for the name of the field (option)",
+#
+      NOM_CHAM = SIMP(statut='o',typ='TXM',
+                      fr="Nom du champ à mettre à jour",
+                      ang="Name of the field to be updated" ),
+#
+    ),
+#
+# 12.4. Est-ce un champ dérivé
+#
+    SENSIBILITE = SIMP(statut='f',typ=(para_sensi,theta_geom),
+                       fr="Paramètre de sensibilité.",
+                       ang="Sensitivity parameter"),
+#
+# 12.5. Le paramètre temporel pour le champ a interpoler
+#
+    b_parametre_temporel = BLOC(condition="(RESULTAT != None)",
+                                fr="Choix éventuel du paramètre temporel pour le champ à interpoler",
+                                ang="Time selection for the field (option)",
+#
+      regles=(EXCLUS('NUME_ORDRE','INST'),),
+#
+# 12.5.1. Soit le numero d'ordre
+#
+      NUME_ORDRE = SIMP(statut='f',typ='I',
+                        fr="Numero d ordre du champ à mettre à jour",
+                        ang="Rank of the field to be updated" ),
+#
+# 12.5.2. Soit l'instant
+# 12.5.2.1. Sa valeur
+#
+      INST = SIMP(statut='f',typ='R',
+                  fr="Instant associé",
+                  ang="Instant" ),
+#
+# 12.5.2.2. La précision du choix de l'instant
+#
+      b_precision = BLOC(condition="(INST != None)",
+                         fr="Choix de la précision du choix de l'instant",
+                         ang="Selection for the choice of the instant",
+#
+        CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),
+                         fr="Critère de précision sur le choix de l'instant associé",
+                         ang="Accuracy criterium over the choice of the instant"),
+        b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,
+                             fr="Précision relative sur le choix de l'instant associé",
+                             ang="Relative accuracy over the choice of the instant"),),
+        b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+            PRECISION       =SIMP(statut='o',typ='R',
+                             fr="Précision absolue sur le choix de l'instant associé",
+                             ang="Absolute accuracy over the choice of the instant"),),
+#
+      ),
+#
+    ),
+  ),
+#
+# 13. Les Modifications
+#
+  b_modifications = BLOC( condition = " (ADAPTATION == 'MODIFICATION') " ,
+                          fr="Modification de maillage.",
+                          ang="Modification of the mesh.",
+#
+      #regles=(AU_MOINS_UN('DEGRE','JOINT'),),
+#
+# 13.1. Changement de degre
+#
+      DEGRE         = SIMP(statut='o',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          fr="Changement de degre du maillage",
+                          ang="Modification of the degree of the mesh" ),
+#
+# 13.2. Création des joints
+#
+      #JOINT         = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                          #fr="Creations des joints",
+                          #ang="Creation of the junctions" ),
+#
+  ) ,
+#
+# 14. Les options d'analyse de maillage ; par defaut, on ne fait que les nombres
+# 14.1. Nombre de noeuds et mailles
+#
+  NOMBRE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                        fr="Nombre de noeuds et de mailles du maillage",
+                        ang="Number of nodes and meshes in the mesh" ),
+#
+# 14.2. Determination de la qualité des éléments du maillage
+#
+  QUALITE        = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                        fr="Qualité du maillage",
+                        ang="Quality of the mesh" ),
+#
+# 14.3. Connexite du maillage
+#
+  CONNEXITE      = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                        fr="Connexité du maillage.",
+                        ang="Connexity of the mesh." ),
+#
+# 14.4. Taille des sous-domaines du maillage
+#
+  TAILLE         = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                        fr="Tailles des sous-domaines du maillage.",
+                        ang="Sizes of mesh sub-domains." ),
+#
+# 14.5. Controle de la non-interpenetration des mailles
+#
+  INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                        fr="Controle de la non interpénétration des mailles.",
+                        ang="Overlapping checking." ),
+#
+# 14.6. Propriétés du maillage de calcul
+#
+  PROP_CALCUL    = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                        fr="Propriétés du maillage de calcul.",
+                        ang="Properties of the calculation mesh." ),
+#
+# 15. Unite logique d'un fichier a ajouter a HOMARD.Configuration
+#
+  b_unite = BLOC( condition = " (VERSION_HOMARD == 'V9_N') or \
+                                (VERSION_HOMARD == 'V9_N_PERSO') " ,
+                                fr="Fichier supplementaire.",
+                                ang="Additional file.",
+#
+  UNITE = SIMP(statut='f',typ='I',
+               fr="Unite logique a ajouter a HOMARD.Configuration",
+               ang="Additional file to HOMARD.Configuration" ),
+#
+  ) ,
+#
+# 16. Gestion des mailles autres que celles compatibles avec HOMARD
+#       "REFUSER" : elles sont refusées (defaut)
+#       "IGNORER" : elles sont ignorées
+#
+  ELEMENTS_NON_HOMARD = SIMP(statut='f',typ='TXM',defaut="REFUSER",into=("REFUSER","IGNORER"),
+                             fr="Acceptation de mailles incompatibles avec HOMARD",
+                             ang="Incompatible meshes for HOMARD" ),
+#
+) ;
+#& MODIF COMMANDE  DATE 07/07/2009   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+from Macro.macr_ascouf_calc_ops import macr_ascouf_calc_ops
+def macr_ascouf_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS,RESU_THER,**args):
+  self.type_sdprod(MODELE,modele_sdaster)
+  if CHAM_MATER != None:self.type_sdprod(CHAM_MATER,cham_mater)
+  if CARA_ELEM  != None:self.type_sdprod(CARA_ELEM,cara_elem)
+  if FOND_FISS  != None:self.type_sdprod(FOND_FISS,fond_fiss)
+  if RESU_THER  != None:self.type_sdprod(RESU_THER,evol_ther)
+  return evol_noli
+
+MACR_ASCOUF_CALC=MACRO(nom="MACR_ASCOUF_CALC",op=macr_ascouf_calc_ops,sd_prod=macr_ascouf_calc_prod,
+                      fr="Réalise l'analyse thermomécanique du coude dont le maillage a été concu par MACR_ASCOUF_MAIL",
+                      reentrant='n',
+            UIinfo={"groupes":("Outils métier",)},
+         regles=(UN_PARMI('COMP_INCR','COMP_ELAS'),),
+
+         TYPE_MAILLAGE   =SIMP(statut='o',typ='TXM',
+                               into=("SAIN",
+                                     "FISS_COUDE",
+                                     "FISS_AXIS_DEB",
+                                     "SOUS_EPAIS_COUDE"
+                                     ) ),
+
+         CL_BOL_P2_GV    =FACT(statut='f',
+           ANGLE           =SIMP(statut='o',typ='R' ),
+           AZIMUT          =SIMP(statut='f',typ='R',defaut= 90. ),
+         ),
+
+         MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster ),
+         MODELE          =SIMP(statut='o',typ=CO,),
+         CHAM_MATER      =SIMP(statut='f',typ=CO,),
+         CARA_ELEM       =SIMP(statut='f',typ=CO,),
+         FOND_FISS       =SIMP(statut='f',typ=CO,),
+         RESU_THER       =SIMP(statut='f',typ=CO,),
+
+         AFFE_MATERIAU   =FACT(statut='o',max=3,
+           regles=(UN_PARMI('TOUT','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ='TXM',into=("COUDE","BOL") ),
+           MATER           =SIMP(statut='o',typ=mater_sdaster ),
+           TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         ),
+
+         PRES_REP        =FACT(statut='f',
+           PRES            =SIMP(statut='o',typ='R' ),
+           EFFE_FOND_P1    =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           PRES_LEVRE      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         ECHANGE         =FACT(statut='f',
+           COEF_H          =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+           TEMP_EXT        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         TORS_P1         =FACT(statut='f',max=6,
+           regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           FX              =SIMP(statut='f',typ='R' ),
+           FY              =SIMP(statut='f',typ='R' ),
+           FZ              =SIMP(statut='f',typ='R' ),
+           MX              =SIMP(statut='f',typ='R' ),
+           MY              =SIMP(statut='f',typ='R' ),
+           MZ              =SIMP(statut='f',typ='R' ),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+
+         COMP_INCR       =FACT(statut='f',
+           RELATION        =SIMP(statut='o',typ='TXM',into=("VMIS_ISOT_TRAC",) ),
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R'
+                                ,defaut= 1.0E-6),
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+                                 into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+         ),
+
+         COMP_ELAS       =FACT(statut='f',
+           RELATION        =SIMP(statut='o',typ='TXM',into=("ELAS","ELAS_VMIS_TRAC") ),
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+                                 into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+         ),
+
+         SOLVEUR         =C_SOLVEUR(),
+
+         CONVERGENCE     =C_CONVERGENCE(),
+
+         NEWTON          =C_NEWTON(),
+
+         RECH_LINEAIRE   =C_RECH_LINEAIRE(),
+
+         INCREMENT       =C_INCREMENT(),
+
+         THETA_3D        =FACT(statut='f',max='**',
+           R_INF           =SIMP(statut='o',typ='R' ),
+           R_SUP           =SIMP(statut='o',typ='R' ),
+         ),
+
+         IMPR_TABLE      =FACT(statut='f',
+           regles=(UN_PARMI('TOUT_PARA','NOM_PARA', ),
+            PRESENT_PRESENT('TOUT_PARA','ANGLE',    ),
+            PRESENT_PRESENT('TOUT_PARA','R_CINTR',  ),
+                   UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL',),),
+           NOM_PARA        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=4,
+                                 into=("TRESCA_MEMBRANE",
+                                       "TRESCA_MFLE",
+                                       "TRESCA",
+                                       "SI_LONG"
+                                       "SI_RADI"
+                                       "SI_CIRC"
+                                       ) ),
+           TOUT_PARA       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           ANGLE           =SIMP(statut='f',typ='R',max='**' ),
+           R_CINTR         =SIMP(statut='f',typ='R',max='**' ),
+           POSI_CURV_LONGI =SIMP(statut='f',typ='R',max='**' ),
+           POSI_ANGUL      =SIMP(statut='f',typ='R',max='**' ),
+           TRANSFORMEE     =SIMP(statut='f',typ='TXM',defaut="COUDE",into=("COUDE","TUBE") ),
+         ),
+
+         IMPRESSION      =FACT(statut='f',
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
+                                 into=("RESULTAT","ASTER","IDEAS","CASTEM") ),
+
+           b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+             VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           ),
+
+           b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+             NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+           ),
+
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM' ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+from Macro.macr_ascouf_mail_ops import macr_ascouf_mail_ops
+MACR_ASCOUF_MAIL=MACRO(nom="MACR_ASCOUF_MAIL",op=macr_ascouf_mail_ops,sd_prod=maillage_sdaster,
+            fr="Engendre le maillage d'un coude sain ou comportant une fissure ou une (ou plusieurs) sous-épaisseur(s)",
+            UIinfo={"groupes":("Outils métier",)},reentrant='n',
+
+         regles=(EXCLUS('SOUS_EPAIS_COUDE','FISS_COUDE','SOUS_EPAIS_MULTI'),),
+
+         EXEC_MAILLAGE   =FACT(statut='o',
+           LOGICIEL        =SIMP(statut='o',typ='TXM',defaut="GIBI2000",into=("GIBI98","GIBI2000") ),
+           UNITE_DATG      =SIMP(statut='f',typ='I',defaut=70),  
+           UNITE_MGIB      =SIMP(statut='f',typ='I',defaut=19),  
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,4,5,6,7,8,9,10,11)),
+         ),
+
+         TYPE_ELEM       =SIMP(statut='f',typ='TXM',defaut="CU20",into=("CU20","CUB8") ),
+
+         COUDE           =FACT(statut='o',
+           ANGLE           =SIMP(statut='o',typ='R' ),  
+           R_CINTR         =SIMP(statut='o',typ='R' ),  
+           L_TUBE_P1       =SIMP(statut='o',typ='R' ),  
+           L_TUBE_P2       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           NB_ELEM_EPAIS   =SIMP(statut='f',typ='I',defaut= 3 ),  
+           SYME            =SIMP(statut='f',typ='TXM',defaut="ENTIER",into=("ENTIER","QUART","DEMI") ),
+           TRANSFORMEE     =SIMP(statut='o',typ='TXM',defaut="COUDE",into=("COUDE","TUBE") ),
+           b_transf_coude  =BLOC(condition = "TRANSFORMEE == 'COUDE' ",
+              DEXT            =SIMP(statut='o',typ='R' ),  
+              EPAIS           =SIMP(statut='o',typ='R' ),  
+              SUR_EPAIS       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+              BOL_P2          =SIMP(statut='f',typ='TXM',into=("ASP_MPP","CUVE","GV") ),
+           ),
+           b_transf_tube   =BLOC(condition = "TRANSFORMEE == 'TUBE' ",
+              TRAN_EPAIS      =SIMP(statut='o',typ='TXM',defaut="NON",into=("OUI","NON") ),
+              b_trans_epais_oui    =BLOC(condition = "TRAN_EPAIS == 'OUI' ",
+                      regles=(ENSEMBLE('ANGL_TETA2','EPAIS_TI'),
+                              UN_PARMI('ABSC_CURV_TRAN','POSI_ANGU_TRAN'),),
+                      DEXT_T1         =SIMP(statut='o',typ='R' ),  
+                      EPAIS_T1        =SIMP(statut='o',typ='R' ),  
+                      EPAIS_T2        =SIMP(statut='o',typ='R' ),  
+                      EPAIS_TI        =SIMP(statut='f',typ='R' ),  
+                      ANGL_TETA1      =SIMP(statut='o',typ='R' ),  
+                      ANGL_TETA2      =SIMP(statut='f',typ='R' ),  
+                      ABSC_CURV_TRAN  =SIMP(statut='f',typ='R' ),  
+                      POSI_ANGU_TRAN  =SIMP(statut='f',typ='R' ),  
+              ),
+              b_trans_epais_non    =BLOC(condition = "TRAN_EPAIS == 'NON' ",
+                      DEXT            =SIMP(statut='o',typ='R' ),  
+                      EPAIS           =SIMP(statut='o',typ='R' ),  
+                      SUR_EPAIS       =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+                      BOL_P2          =SIMP(statut='f',typ='TXM',into=("ASP_MPP","CUVE","GV") ),
+              ),
+           ),
+         ),
+
+         SOUS_EPAIS_COUDE=FACT(statut='f',
+           regles=(UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL'),
+                   UN_PARMI('POSI_CURV_CIRC','AZIMUT'),),
+           TYPE            =SIMP(statut='o',typ='TXM',into=("AXIS","ELLI") ),
+           AXE_CIRC        =SIMP(statut='f',typ='R' ),  
+           AXE_LONGI       =SIMP(statut='o',typ='R' ),  
+           PROFONDEUR      =SIMP(statut='o',typ='R' ),  
+           POSI_CURV_LONGI =SIMP(statut='f',typ='R' ),  
+           POSI_ANGUL      =SIMP(statut='f',typ='R' ),  
+           POSI_CURV_CIRC  =SIMP(statut='f',typ='R' ),  
+           AZIMUT          =SIMP(statut='f',typ='R' ),  
+           SOUS_EPAIS      =SIMP(statut='o',typ='TXM',into=("INTERNE","EXTERNE") ),
+           NB_ELEM_LONGI   =SIMP(statut='o',typ='I' ),  
+           NB_ELEM_CIRC    =SIMP(statut='o',typ='I' ),  
+           NB_ELEM_RADI    =SIMP(statut='f',typ='I',defaut= 3 ),  
+           EMPREINTE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+
+         SOUS_EPAIS_MULTI=FACT(statut='f',max='**',
+           regles=(UN_PARMI('POSI_CURV_LONGI','POSI_ANGUL'),
+                   UN_PARMI('POSI_CURV_CIRC','AZIMUT'),),
+           TYPE            =SIMP(statut='o',typ='TXM',into=("AXIS","ELLI") ),
+           AXE_CIRC        =SIMP(statut='f',typ='R' ),  
+           AXE_LONGI       =SIMP(statut='o',typ='R' ),  
+           PROFONDEUR      =SIMP(statut='o',typ='R' ),  
+           POSI_CURV_LONGI =SIMP(statut='f',typ='R' ),  
+           POSI_ANGUL      =SIMP(statut='f',typ='R' ),  
+           POSI_CURV_CIRC  =SIMP(statut='f',typ='R' ),  
+           AZIMUT          =SIMP(statut='f',typ='R' ),  
+           SOUS_EPAIS      =SIMP(statut='o',typ='TXM',into=("INTERNE","EXTERNE") ),
+           NB_ELEM_LONGI   =SIMP(statut='o',typ='I' ),  
+           NB_ELEM_CIRC    =SIMP(statut='o',typ='I' ),  
+           EMPREINTE       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+
+         FISS_COUDE      =FACT(statut='f',
+           regles=(UN_PARMI('ABSC_CURV','POSI_ANGUL'),),
+           AXIS            =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON" ),  
+           b_axis_non    =BLOC(condition = "AXIS == 'NON' ",
+                   LONGUEUR        =SIMP(statut='o',typ='R' ),  
+           ),
+           b_axis_oui    =BLOC(condition = "AXIS == 'OUI' ",
+                   LONGUEUR        =SIMP(statut='f',typ='R' ),  
+           ),
+           PROFONDEUR      =SIMP(statut='o',typ='R' ),  
+           ABSC_CURV       =SIMP(statut='f',typ='R' ),  
+           POSI_ANGUL      =SIMP(statut='f',typ='R' ),  
+           FISSURE         =SIMP(statut='o',typ='TXM',into=("DEB_INT","DEB_EXT") ),
+           AZIMUT          =SIMP(statut='f',typ='R',defaut= 90. ),  
+           ORIEN           =SIMP(statut='o',typ='R',
+                                 into=(45.,-45.,90.,0.E+0) ),
+           NB_TRANCHE      =SIMP(statut='o',typ='I' ),  
+           NB_SECTEUR      =SIMP(statut='o',typ='I' ),  
+           NB_COURONNE     =SIMP(statut='o',typ='I' ),  
+           RAYON_TORE      =SIMP(statut='f',typ='R' ),  
+           COEF_MULT_RC2   =SIMP(statut='f',typ='R',defaut= 1. ),  
+           COEF_MULT_RC3   =SIMP(statut='f',typ='R' ),  
+           ANGL_OUVERTURE  =SIMP(statut='f',typ='R',defaut= 0.5 ),  
+         ),
+
+         IMPRESSION      =FACT(statut='f',max='**',
+           regles=(PRESENT_PRESENT('FICHIER','UNITE'),),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",   
+                                 into=("ASTER","IDEAS","CASTEM") ),
+           b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+             VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           ),  
+           b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+             NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+           ),
+           FICHIER         =SIMP(statut='f',typ='TXM' ),  
+           UNITE           =SIMP(statut='f',typ='I' ),  
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 07/07/2009   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+from Macro.macr_aspic_calc_ops import macr_aspic_calc_ops
+
+def macr_aspic_calc_prod(self,MODELE,CHAM_MATER,CARA_ELEM,FOND_FISS_1,FOND_FISS_2,RESU_THER,**args):
+  if MODELE      != None:self.type_sdprod(MODELE,modele_sdaster)
+  if CHAM_MATER  != None:self.type_sdprod(CHAM_MATER,cham_mater)
+  if CARA_ELEM   != None:self.type_sdprod(CARA_ELEM,cara_elem)
+  if FOND_FISS_1 != None:self.type_sdprod(FOND_FISS_1,fond_fiss)
+  if FOND_FISS_2 != None:self.type_sdprod(FOND_FISS_2,fond_fiss)
+  if RESU_THER   != None:self.type_sdprod(RESU_THER,evol_ther)
+  return evol_noli
+
+MACR_ASPIC_CALC=MACRO(nom="MACR_ASPIC_CALC",op=macr_aspic_calc_ops,sd_prod=macr_aspic_calc_prod,
+            fr="Réalise un calcul prédéfini de piquages sains ou fissurés ainsi que les post-traitements associés ",
+            UIinfo={"groupes":("Outils métier",)},reentrant='n',
+         regles=(UN_PARMI('COMP_INCR','COMP_ELAS'),),
+
+         TYPE_MAILLAGE   =SIMP(statut='o',typ='TXM',
+                               into=("SAIN_FIN","SAIN_GROS","FISS_COUR_DEB","FISS_COUR_NONDEB","FISS_LONG_DEB",
+                                     "FISS_LONG_NONDEB","FISS_AXIS_DEB","FISS_AXIS_NONDEB") ),
+
+         TUBULURE        =FACT(statut='o',
+           TYPE            =SIMP(statut='o',typ='TXM',into=("TYPE_1","TYPE_2") ),
+         ),
+         MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster),
+         MODELE          =SIMP(statut='f',typ=CO,),
+         CHAM_MATER      =SIMP(statut='f',typ=CO,),
+         CARA_ELEM       =SIMP(statut='f',typ=CO,),
+         FOND_FISS_1     =SIMP(statut='f',typ=CO,),
+         FOND_FISS_2     =SIMP(statut='f',typ=CO,),
+         RESU_THER       =SIMP(statut='f',typ=CO,),
+
+         AFFE_MATERIAU   =FACT(statut='o',max=3,
+           regles=(UN_PARMI('TOUT','GROUP_MA'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           GROUP_MA        =SIMP(statut='f',typ='TXM',into=("TUBU","CORP","SOUD","SOUDCORP","SOUDTUBU") ),
+           MATER           =SIMP(statut='o',typ=mater_sdaster),
+           TEMP_REF        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           RCCM            =SIMP(statut='o',typ='TXM',into=("OUI","NON")),
+         ),
+
+         EQUILIBRE       =FACT(statut='o',
+           NOEUD           =SIMP(statut='o',typ=no),
+         ),
+
+         PRES_REP        =FACT(statut='o',
+           PRES            =SIMP(statut='o',typ='R'),
+           NOEUD           =SIMP(statut='f',typ=no),
+           EFFE_FOND       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           PRES_LEVRE      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+         ),
+
+         ECHANGE         =FACT(statut='f',
+           COEF_H_TUBU     =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           COEF_H_CORP     =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           TEMP_EXT        =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+         ),
+
+         TORS_CORP       =FACT(statut='f',max=6,
+           regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           NOEUD           =SIMP(statut='o',typ=no),
+           FX              =SIMP(statut='f',typ='R'),
+           FY              =SIMP(statut='f',typ='R'),
+           FZ              =SIMP(statut='f',typ='R'),
+           MX              =SIMP(statut='f',typ='R'),
+           MY              =SIMP(statut='f',typ='R'),
+           MZ              =SIMP(statut='f',typ='R'),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+         ),
+
+         TORS_TUBU       =FACT(statut='f',max=6,
+           regles=(AU_MOINS_UN('FX','FY','FZ','MX','MY','MZ'),),
+           FX              =SIMP(statut='f',typ='R'),
+           FY              =SIMP(statut='f',typ='R'),
+           FZ              =SIMP(statut='f',typ='R'),
+           MX              =SIMP(statut='f',typ='R'),
+           MY              =SIMP(statut='f',typ='R'),
+           MZ              =SIMP(statut='f',typ='R'),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+         ),
+
+         COMP_INCR       =FACT(statut='f',
+           RELATION        =SIMP(statut='o',typ='TXM',into=("VMIS_ISOT_TRAC",) ),
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R',defaut=1.0E-6),
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut=10),
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut=0),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+                                 into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+         ),
+
+         COMP_ELAS       =FACT(statut='f',
+           RELATION        =SIMP(statut='o',typ='TXM',into=("ELAS","ELAS_VMIS_TRAC") ),
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+                                 into=("RUNGE_KUTTA_2","RUNGE_KUTTA_4","IMPLICITE")),
+         ),
+
+         THETA_3D        =FACT(statut='f',max='**',
+           R_INF           =SIMP(statut='o',typ='R'),
+           R_SUP           =SIMP(statut='o',typ='R'),
+         ),
+
+         OPTION          =SIMP(statut='f',typ='TXM',into=("CALC_G_MAX","CALC_G_MAX_LOCAL") ),
+         BORNES          =FACT(statut='f',max='**',
+           NUME_ORDRE      =SIMP(statut='o',typ='I'),
+           VALE_MIN        =SIMP(statut='o',typ='R'),
+           VALE_MAX        =SIMP(statut='o',typ='R'),
+         ),
+
+         SOLVEUR         =C_SOLVEUR(),
+
+         CONVERGENCE     =C_CONVERGENCE(),
+
+         NEWTON          =C_NEWTON(),
+
+         RECH_LINEAIRE   =C_RECH_LINEAIRE(),
+
+         INCREMENT       =C_INCREMENT(),
+
+         PAS_AZIMUT      =SIMP(statut='f',typ='I',defaut=1),
+
+         IMPRESSION      =FACT(statut='f',
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="RESULTAT",
+                                 into=("RESULTAT","ASTER","CASTEM","IDEAS")),
+
+           b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+             VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           ),
+
+           b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+             NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+           ),
+
+           b_extrac        =BLOC(condition="((FORMAT=='IDEAS')or(FORMAT=='CASTEM'))",
+                                 fr="extraction d un champ de grandeur",
+             regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST'),),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=3,
+                                   into=("DEPL","EQUI_ELNO_SIGM","TEMP")),
+
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           ),
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+
+         TITRE           =SIMP(statut='f',typ='TXM'),
+)
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+
+from Macro.macr_aspic_mail_ops import macr_aspic_mail_ops
+
+MACR_ASPIC_MAIL=MACRO(nom="MACR_ASPIC_MAIL",op= macr_aspic_mail_ops,sd_prod=maillage_sdaster,reentrant='n',
+            fr="Engendre le maillage d'un piquage sain ou avec fissure (longue ou courte)",
+            UIinfo={"groupes":("Outils métier",)},
+
+         EXEC_MAILLAGE   =FACT(statut='o',
+           LOGICIEL        =SIMP(statut='o',typ='TXM',defaut="GIBI2000",into=("GIBI98","GIBI2000")),
+           UNITE_DATG      =SIMP(statut='f',typ='I',defaut=70),  
+           UNITE_MGIB      =SIMP(statut='f',typ='I',defaut=19),  
+           NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,4,5,6,7,8,9,10,11)),
+         ),
+
+         TYPE_ELEM       =SIMP(statut='f',typ='TXM',defaut="CU20",into=("CU20","CUB8")),
+
+         RAFF_MAIL       =SIMP(statut='f',typ='TXM',defaut="GROS",into=("GROS","FIN")),
+
+         TUBULURE        =FACT(statut='o',
+           E_BASE          =SIMP(statut='o',typ='R'),  
+           DEXT_BASE       =SIMP(statut='o',typ='R'),  
+           L_BASE          =SIMP(statut='o',typ='R'),  
+           L_CHANF         =SIMP(statut='o',typ='R'),  
+           E_TUBU          =SIMP(statut='o',typ='R'),  
+           DEXT_TUBU       =SIMP(statut='o',typ='R'),  
+           Z_MAX           =SIMP(statut='o',typ='R'),  
+           TYPE            =SIMP(statut='o',typ='TXM',into=("TYPE_1","TYPE_2")),
+           L_PENETR        =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+         ),
+
+         SOUDURE         =FACT(statut='o',
+           H_SOUD          =SIMP(statut='o',typ='R'),  
+           ANGL_SOUD       =SIMP(statut='o',typ='R'),  
+           JEU_SOUD        =SIMP(statut='o',typ='R'),  
+         ),
+
+         CORPS           =FACT(statut='o',
+           E_CORP          =SIMP(statut='o',typ='R'),  
+           DEXT_CORP       =SIMP(statut='o',typ='R'),  
+           X_MAX           =SIMP(statut='o',typ='R'),  
+         ),
+
+         FISS_SOUDURE    =FACT(statut='f',
+           TYPE            =SIMP(statut='o',typ='TXM',into=("LONGUE","COURTE")),
+           AXIS            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+           PROFONDEUR      =SIMP(statut='o',typ='R'),  
+           LONGUEUR        =SIMP(statut='f',typ='R'),  
+           AZIMUT          =SIMP(statut='o',typ='R'),  
+           RAYON_TORE      =SIMP(statut='f',typ='R'),  
+           POSITION        =SIMP(statut='o',typ='TXM',into=("DROIT","INCLINE")),
+           FISSURE         =SIMP(statut='o',typ='TXM',into=("DEB_INT","DEB_EXT","NON_DEB","TRAVERS")),
+           LIGA_INT        =SIMP(statut='f',typ='R'),  
+           ANGL_OUVERTURE  =SIMP(statut='f',typ='R',defaut= 0.0E+0),  
+           COEF_MULT_RC1   =SIMP(statut='f',typ='R'),  
+           COEF_MULT_RC2   =SIMP(statut='f',typ='R'),  
+           COEF_MULT_RC3   =SIMP(statut='f',typ='R'),  
+           NB_TRANCHE      =SIMP(statut='f',typ='I'),  
+           NB_SECTEUR      =SIMP(statut='f',typ='I'),  
+           NB_COURONNE     =SIMP(statut='f',typ='I'),  
+         ),
+
+         IMPRESSION      =FACT(statut='f',max='**',
+           regles=(PRESENT_PRESENT('FICHIER','UNITE'),),
+           FORMAT          =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","IDEAS","CASTEM")),
+
+           b_format_ideas  =BLOC(condition="FORMAT=='IDEAS'",fr="version Ideas",
+             VERSION         =SIMP(statut='f',typ='I',defaut=5,into=(4,5)),
+           ),  
+
+           b_format_castem =BLOC(condition="FORMAT=='CASTEM'",fr="version Castem",
+             NIVE_GIBI       =SIMP(statut='f',typ='I',defaut=10,into=(3,10)),
+           ),
+           FICHIER         =SIMP(statut='f',typ='TXM'),  
+           UNITE           =SIMP(statut='f',typ='I'),  
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 30/06/2008   AUTEUR FLEJOU J-L.FLEJOU 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE FLEJOU J.L.FLEJOU
+
+from Macro.macr_cara_poutre_ops import macr_cara_poutre_ops
+
+MACR_CARA_POUTRE=MACRO(nom="MACR_CARA_POUTRE",op=macr_cara_poutre_ops,sd_prod=table_sdaster,
+                       reentrant='n',
+         UIinfo={"groupes":("Modélisation",)},
+         fr="Calculer les caractéristiques d'une section transversale de poutre à partir d'un maillage 2D de la section",
+         regles=( EXCLUS('SYME_X','GROUP_MA_BORD'),
+                  EXCLUS('SYME_Y','GROUP_MA_BORD'),
+                ),
+
+         MAILLAGE       =SIMP(statut='f',typ=maillage_sdaster,
+                           fr="Nom du concept maillage"),
+         b_maillage=BLOC( condition = "MAILLAGE == None",
+            regles=( PRESENT_PRESENT('FORMAT','UNITE') ),
+            FORMAT         =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","MED"),
+                              fr="Format du fichier"),
+            UNITE          =SIMP(statut='f',typ='I',defaut= 20,
+                              fr="Unite correspondant au format du fichier maillage"),
+         ),
+
+         ORIG_INER      =SIMP(statut='f',typ='R',max=3,defaut=(0.E+0,0.E+0),
+                           fr="Point par rapport auquel sont calculées les inerties"),
+         INFO           =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+
+         SYME_X         =SIMP(statut='f',typ='TXM',into=("OUI",),
+                           fr="demi maillage par rapport a x=0"),
+         SYME_Y         =SIMP(statut='f',typ='TXM',into=("OUI",),
+                           fr="demi maillage par rapport a y=0"),
+
+         GROUP_MA       =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                           fr="Calcul des caractéristiques équivalentes a plusieurs sections disjointes"),
+
+         GROUP_MA_BORD  =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                           fr="Groupe(s) de mailles linéiques, bord(s) de(s) section(s)"),
+
+            b_gma_bord  =BLOC( condition = "GROUP_MA_BORD != None",
+               fr=" calcul des carac. mecaniques",
+               regles=(UN_PARMI('NOEUD','GROUP_NO')),
+               NOEUD           =SIMP(statut='f',typ=no,  max='**',
+                                 fr="Simplement pour empecher des pivots nuls le cas echeant. Fournir un noeud quelconque"),
+               GROUP_NO        =SIMP(statut='f',typ=grno,max='**',
+                                 fr="Simplement pour empecher des pivots nuls le cas echeant. Fournir un noeud quelconque"),
+               GROUP_MA_INTE   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                                 fr="groupes de mailles linéiques bordant des trous dans la section"),
+            ),
+
+            b_reseau = BLOC( condition ="""(GROUP_MA_BORD != None) and (GROUP_MA != None)""",
+               fr=" calcul des coef de cisaillement équivalents a un reseau de poutres",
+               regles=(ENSEMBLE('LONGUEUR','LIAISON','MATERIAU') ,),
+               LONGUEUR        =SIMP(statut='f',typ='R',
+                                 fr="Longueur du réseau de poutres"),
+               MATERIAU        =SIMP(statut='f',typ=mater_sdaster,
+                                 fr="Materiau elastique lineaire du reseau"),
+               LIAISON         =SIMP(statut='f',typ='TXM',into=("ROTULE","ENCASTREMENT"),
+                                 fr="type de conditions aux limites sur le plancher supérieur" ),
+            ),
+)
+#& MODIF COMMANDE  DATE 30/09/2008   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+
+from Macro.macr_ecla_pg_ops import macr_ecla_pg_ops
+
+def macr_ecla_pg_prod(self,RESULTAT,MAILLAGE,RESU_INIT,**args):
+  self.type_sdprod(RESULTAT,AsType(RESU_INIT))
+  self.type_sdprod(MAILLAGE,maillage_sdaster)
+  return None
+
+
+MACR_ECLA_PG=MACRO(nom="MACR_ECLA_PG",op=macr_ecla_pg_ops,sd_prod=macr_ecla_pg_prod, reentrant='n',
+             UIinfo={"groupes":("Post traitements",)},
+             fr="Permettre la visualisation des champs aux points de Gauss d'une SD_RESULTAT sans lissage ni interpolation",
+
+
+             # SD résultat ,modèle et champs à "éclater" :
+             RESU_INIT       =SIMP(statut='o',typ=resultat_sdaster,fr="RESULTAT à éclater",),
+             MODELE_INIT     =SIMP(statut='o',typ=modele_sdaster,fr="MODELE à éclater"),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+
+             # paramètres numériques de la commande :
+             SHRINK          =SIMP(statut='f',typ='R',defaut= 0.9, fr="Facteur de réduction" ),
+             TAILLE_MIN      =SIMP(statut='f',typ='R',defaut= 0.0, fr="Taille minimale d'un coté" ),
+
+             # concepts produits par la commande :
+             RESULTAT        =SIMP(statut='o',typ=CO,fr="SD_RESULTAT résultat de la commande"),
+             MAILLAGE        =SIMP(statut='o',typ=CO,fr="MAILLAGE associé aux cham_no de la SD_RESULTAT"),
+
+             # Sélection éventuelle d'un sous-ensemble des éléments à visualiser :
+             TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+
+             # Sélection des numéros d'ordre :
+             regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+             LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+            )
+#& MODIF COMMANDE  DATE 21/04/2010   AUTEUR BOTTONI M.BOTTONI 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE BOTTONI M.BOTTONI
+
+from Macro.macr_ecre_calc_ops import macr_ecre_calc_ops
+
+def macr_ecre_calc_prod(self,TABLE,DEBIT,**args):
+
+  self.type_sdprod(TABLE,table_sdaster)
+  self.type_sdprod(DEBIT,table_sdaster)
+  return None
+
+MACR_ECRE_CALC=MACRO(nom="MACR_ECRE_CALC",op=macr_ecre_calc_ops,sd_prod=macr_ecre_calc_prod,reentrant='n',
+                     UIinfo={"groupes":("Outils metier",)},fr="Procedure de couplage avec Ecrevisse",
+
+         regles             = (UN_PARMI('LOGICIEL','VERSION'),),
+
+#      CONCEPTS SORTANT : 2 TABLES POUR LE POST-TRAITEMENT
+#      ********************************************
+         TABLE              =SIMP(statut='o',typ=CO),
+         DEBIT              =SIMP(statut='o',typ=CO),
+
+#      DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+#      *******************************************
+
+         FISSURE            =FACT(statut='o',min=1,max=1,
+           LONGUEUR            =SIMP(statut='o',typ='R',val_min=0.E+0,fr="Longueur de la fissure [zl]"),
+           RUGOSITE            =SIMP(statut='o',typ='R',fr="Rugosite absolu (metres) [eps]"),
+           ANGLE               =SIMP(statut='o',typ='R',fr="Angle par rapport a l'ascendante verticale (degres)"),
+           ZETA                =SIMP(statut='o',typ='R',fr="Coefficient de la perte de charge singuliere a l'entree [zeta]"),
+           SECTION             =SIMP(statut='o',typ='TXM',into=("ELLIPSE","RECTANGLE"),fr="Type de section [is]"),
+           b_section_ellipse   =BLOC(condition="SECTION=='ELLIPSE'",fr="Fissure a section elliptique",
+             LISTE_COTES_AH      =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant le grand axe de la section",
+                                       validators=NoRepeat()),
+             LISTE_VAL_AH        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant le grand axe de la section",),
+             LISTE_COTES_BL      =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant le petit axe de la section",
+                                       validators=NoRepeat()),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant le petit axe de la section",),
+           ),
+           b_section_rectangle =BLOC(condition="SECTION=='RECTANGLE'",fr="Fissure a section rectangulaire",
+             LISTE_COTES_AH      =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant la hauteur de la section",
+                                       validators=NoRepeat()),
+             LISTE_VAL_AH        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant la hauteur de la section",),
+             LISTE_COTES_BL      =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant la largeur de la section",
+                                       validators=NoRepeat()),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant la largeur de la section",),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A L"ECOULEMENT
+#      ********************************
+
+         ECOULEMENT         =FACT(statut='f',min=1,max=1,
+           PRES_ENTREE         =SIMP(statut='o',typ='R',fr="Pression de stagnation a l'entree (Pa) [pe]" ),
+           PRES_SORTIE         =SIMP(statut='o',typ='R',fr="Pression de stagnation a la sortie (Pa) [ps]" ),
+           FLUIDE_ENTREE       =SIMP(statut='o',typ='I',into=(1,2,3,4,5,6),fr="Condition du fluide a l'entree [iflow]" ),
+           b_condition_1       =BLOC(condition="FLUIDE_ENTREE==1",fr="Eau sous-refroidie ou saturee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_2       =BLOC(condition="FLUIDE_ENTREE==2",fr="Fluide diphasique",
+             TITR_MASS           =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+           ),
+           b_condition_3       =BLOC(condition="FLUIDE_ENTREE==3",fr="Vapeur saturee ou surchauffee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_4       =BLOC(condition="FLUIDE_ENTREE==4",fr="Air + vapeur surchauffee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             PRES_PART           =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_5       =BLOC(condition="FLUIDE_ENTREE==5",fr="Air + vapeur saturee",
+             TITR_MASS           =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+             PRES_PART           =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_6       =BLOC(condition="FLUIDE_ENTREE==6",fr="Air seul",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES AU PROFIL DE TEMPERATURE A TRAVERS LA PAROI
+#      *************************************************************
+
+         TEMPERATURE        =FACT(statut='f',min=1,max=1,
+           GRADIENT            =SIMP(statut='o',typ='TXM',into=("FOURNI","IMPOSE","CALCULE"),
+                                     fr="Modele de calcul du gradient de temperature [imograd]" ),
+           b_gradient_fourni   =BLOC(condition="GRADIENT=='FOURNI'",fr="Distribution de temperature fournie [imograd=-1]",
+             LISTE_COTES_TEMP    =SIMP(statut='o',typ='R',max='**',fr="Liste des cotes pour les temperatures",
+                                       validators=NoRepeat() ),
+             LISTE_VAL_TEMP      =SIMP(statut='o',typ='R',max='**',fr="Liste des valeurs de temperature", ),
+           ),
+           b_gradient_impose   =BLOC(condition="GRADIENT=='IMPOSE'",fr="Distribution imposee de temperature [imograd=0]",
+             TEMP1               =SIMP(statut='o',typ='R',
+                                       fr="Gradient de temperature de la paroi le long de l'ecoulement (degC/m) [tm1]", ),
+             TEMP2               =SIMP(statut='o',typ='R',fr="Temperature de la paroi a l'entree (degC) [tm2]", ),
+           ),
+           b_gradient_calcule  =BLOC(condition="GRADIENT=='CALCULE'",fr="Profil de temperature calcule [imograd=1]",
+             EPAISSEUR_PAROI     =SIMP(statut='o',typ='R',fr="Epaisseur de la paroi (m) [epp]", ),
+             CONVECTION_AMONT    =SIMP(statut='o',typ='R',
+                                       fr="Coefficient de convection a la surface de la paroi cote amont (W/degC/m2) [alphe]", ),
+             CONVECTION_AVAL     =SIMP(statut='o',typ='R',
+                                       fr="Coefficient de convection a la surface de la paroi cote aval (W/degC/m2) [alphs]", ),
+             LAMBDA              =SIMP(statut='o',typ='R',fr="Conduction thermique de la paroi (W/degC/m) [lambd]", ),
+             TEMP_FLUIDE_AVAL    =SIMP(statut='o',typ='R',fr="Temperature du fluide cote aval (degC) [ts]", ),
+           ),
+         ),
+
+
+#      CHOIX DES MODELES
+#      *****************
+
+         MODELE_ECRE        =FACT(statut='f',min=1,max=1,
+           IVENAC              =SIMP(statut='f', typ='I', into=(0,1), defaut=0,
+                                     fr="Calcul ECREVISSE avec prise en compte de la vena contracta"),
+           ECOULEMENT          =SIMP(statut='o',typ='TXM',into=("SATURATION","GELE"),
+                                     fr="Type de modele d'ecoulement diphasique [imod]" ),
+           b_ecou_gele         =BLOC(condition="ECOULEMENT=='GELE'",fr="Modele d'ecoulement gele",
+             PRESS_EBULLITION    =SIMP(statut='o',typ='R',fr="Pression d'ebullition [corrp*psat(t)]"),
+           ),
+           FROTTEMENT          =SIMP(statut='o',typ='I',into=(-3,-2,-1,0,1,2,3),fr="Correlation de frottement [ifrot]"),
+           b_frottement        =BLOC(condition="FROTTEMENT<0",fr="Modele d'ecoulement gele",
+             REYNOLDS_LIM        =SIMP(statut='o',typ='R',fr="Coefficient de Reynolds limite [relim]"),
+             FROTTEMENT_LIM      =SIMP(statut='o',typ='R',fr="Coefficient de frottement impose [frtlim]"),
+           ),
+
+           TRANSFERT_CHAL      =SIMP(statut='o',typ='I',into=(-2,-1,0,1,2),fr="Transfert de chaleur [ichal]"),
+           b_transchal         =BLOC(condition="TRANSFERT_CHAL<0", fr="Cas diphasique",
+             XMINCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux min [xminch]"),
+             XMAXCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux max [xmaxch]"),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+#      ********************************************
+
+         CONVERGENCE        =FACT(statut='f',min=1,max=1,
+           KGTEST              =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 0.5E+0,
+                                     fr="Parametre de l'algorithme iteratif [kgtest]" ),
+           ITER_GLOB_MAXI      =SIMP(statut='f',typ='I',defaut= 400,
+                                     fr="Nombre maximum d'iterations de la methode de Newton [itnmax]" ),
+           CRIT_CONV_DEBI      =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 1.E-5,
+                                     fr="Critere de convergence en debit [precdb]" ),
+         ),
+
+
+#      GENERAL
+#      *******
+
+         COURBES            =SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
+                                  fr="Generation eventuelle des courbes" ),
+         LOGICIEL           =SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
+         VERSION            =SIMP(statut='f',typ='TXM',defaut="3.1.2",into = ("3.1.1","3.1.2")),
+         ENTETE             =SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
+         IMPRESSION         =SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
+         INFO               =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2010   AUTEUR BOTTONI M.BOTTONI 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE BOTTONI M.BOTTONI
+
+from Macro.macr_ecrevisse_ops import macr_ecrevisse_ops
+
+def macr_ecrevisse_prod(self,TABLE,TEMPER,DEBIT,**args):
+    # On definit ici les concepts produits
+    self.type_sdprod(TABLE,table_sdaster)
+    self.type_sdprod(TEMPER,evol_ther)
+    self.type_sdprod(DEBIT,table_sdaster)
+    # concept retourne
+    return evol_noli
+
+
+
+MACR_ECREVISSE=MACRO(nom="MACR_ECREVISSE",op=macr_ecrevisse_ops,sd_prod=macr_ecrevisse_prod,reentrant='f',
+                       UIinfo={"groupes":("Outils metier",)},fr="Procedure de couplage avec Ecrevisse",
+
+       reuse =SIMP(statut='f',typ='evol_noli'),
+       regles = (EXCLUS('TEMPER','ETAT_INIT'),
+                 UN_PARMI('LOGICIEL','VERSION'),),
+
+#      CONCEPT SORTANT
+#      ********************************************
+         TABLE              =SIMP(statut='f',typ=CO),
+         DEBIT              =SIMP(statut='f',typ=CO),
+         TEMPER             =SIMP(statut='f',typ=CO),
+
+#      ETAT_INITIAL
+#      ********************************************
+         ETAT_INIT       =FACT(statut='f',
+             EVOL_NOLI       =SIMP(statut='o',typ=evol_noli),
+             EVOL_THER       =SIMP(statut='o',typ=evol_ther),
+             NUME_ORDRE      =SIMP(statut='o',typ='I'),
+         ),
+
+
+#      MODELES MECANIQUES
+#      ********************************************
+         MODELE_MECA        =SIMP(statut='o',typ=modele_sdaster),
+         MODELE_THER        =SIMP(statut='o',typ=modele_sdaster),
+
+
+#      DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+#      *******************************************
+         FISSURE            =FACT(statut='o',min=1,max='**',
+           PREFIXE_FICHIER     =SIMP(statut='f',typ='TXM',validators=LongStr(1,8)),
+           GROUP_MA            =SIMP(statut='o',typ=grma,validators=NoRepeat(),min=2,max=2,
+                                     fr="Groupe(s) des noeuds definissant les levres de la fissure"),
+           GROUP_NO_ORIG       =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+           GROUP_NO_EXTR       =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+           ZETA                =SIMP(statut='o',typ='R',fr="Coefficient de la perte de charge singuliere a l'entree [zeta]" ),
+           RUGOSITE            =SIMP(statut='o',typ='R',fr="Rugosite absolu (metres) [eps]" ),
+           TORTUOSITE          =SIMP(statut='f',typ='R',defaut=1.0, val_min=0., val_max=1.0,
+                                       fr="Coefficient de tortuosite de la fissure" ),
+           OUVERT_REMANENTE    =SIMP(statut='o',typ='R',val_min=0.,fr="Ouverture remanente"),
+           SECTION             =SIMP(statut='o',typ='TXM',into=("ELLIPSE","RECTANGLE"),fr="Type de section [is]" ),
+           b_section_ellipse   =BLOC(condition="SECTION=='ELLIPSE'",fr="Fissure a section elliptique",
+             LISTE_COTES_BL      =SIMP(statut='f',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant le petit axe de la section",
+                                       validators=NoRepeat() ),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant le petit axe de la section", ),
+           ),
+           b_section_rectangle =BLOC(condition="SECTION=='RECTANGLE'",fr="Fissure a section rectangulaire",
+             LISTE_COTES_BL      =SIMP(statut='f',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant la largeur de la section",validators=NoRepeat()),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant la largeur de la section", ),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A L"ECOULEMENT
+#      ********************************
+         ECOULEMENT         =FACT(statut='o',min=1,max=1,
+                                  regles=(UN_PARMI('PRES_ENTREE','PRES_ENTREE_FO'),
+                                          UN_PARMI('PRES_SORTIE','PRES_SORTIE_FO'),
+                                          ),
+           PRES_ENTREE         =SIMP(statut='f',typ='R',fr="Pression de stagnation a l'entree (Pa) [pe]" ),
+           PRES_ENTREE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                     fr="Evolution de la pression de stagnation a l'entree (Pa) [pe]" ),
+           PRES_SORTIE         =SIMP(statut='f',typ='R',fr="Pression de stagnation a la sortie (Pa) [ps]" ),
+           PRES_SORTIE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                     fr="Evolution de la pression de stagnation a la sortie (Pa) [ps]" ),
+           FLUIDE_ENTREE       =SIMP(statut='o',typ='I',into=(1,2,3,4,5,6),fr="Condition du fluide a l'entree [iflow]" ),
+           b_condition_1       =BLOC(condition="FLUIDE_ENTREE==1",
+                                     regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO')),
+                                     fr="Eau sous-refroidie ou saturee",
+             TEMP_ENTREE         =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             TEMP_ENTREE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_2       =BLOC(condition="FLUIDE_ENTREE==2",
+                                     regles=(UN_PARMI('TITR_MASS', 'TITR_MASS_FO')),
+                                     fr="Fluide diphasique",
+             TITR_MASS           =SIMP(statut='f',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+             TITR_MASS_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution du titre massique eau vap/eau tot a l'entree [xe]" ),
+           ),
+           b_condition_3       =BLOC(condition="FLUIDE_ENTREE==3",
+                                     regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO')),
+                                     fr="Vapeur saturee ou surchauffee",
+             TEMP_ENTREE         =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             TEMP_ENTREE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_4       =BLOC(condition="FLUIDE_ENTREE==4",
+                                     regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO'),
+                                             UN_PARMI('PRES_PART', 'PRES_PART_FO')),
+                                     fr="Air + vapeur surchauffee",
+             TEMP_ENTREE         =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             TEMP_ENTREE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+             PRES_PART           =SIMP(statut='f',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+             PRES_PART_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_5       =BLOC(condition="FLUIDE_ENTREE==5",
+                                     regles=(UN_PARMI('TITR_MASS', 'TITR_MASS_FO'),
+                                             UN_PARMI('PRES_PART', 'PRES_PART_FO')),
+                                     fr="Air + vapeur saturee",
+             TITR_MASS           =SIMP(statut='f',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+             TITR_MASS_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution du titre massique eau vap/eau tot a l'entree [xe]" ),
+             PRES_PART           =SIMP(statut='f',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+             PRES_PART_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_6       =BLOC(condition="FLUIDE_ENTREE==6",
+                                     regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO')),
+                                     fr="Air seul",
+             TEMP_ENTREE         =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             TEMP_ENTREE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+           ),
+         ),
+
+         LIST_INST =SIMP(statut='f',typ=(listr8_sdaster), fr="Liste des instants de calcul imposes" ),
+
+#      CHOIX DES MODELES
+#      *****************
+
+         MODELE_ECRE        =FACT(statut='o',min=1,max=1,
+           IVENAC              =SIMP(statut='f', typ='I', into=(0,1), defaut=0,
+                                     fr="Calcul ECREVISSE avec prise en compte de la vena contracta"),
+           ECOULEMENT          =SIMP(statut='o',typ='TXM',into=("SATURATION","GELE"),
+                                     fr="Type de modele d'ecoulement diphasique [imod]" ),
+           b_ecou_gele         =BLOC(condition="ECOULEMENT=='GELE'",fr="Modele d'ecoulement gele",
+             PRESS_EBULLITION  =SIMP(statut='o',typ='R',fr="Pression d'ebullition [corrp*psat(t)]" ),
+           ),
+           FROTTEMENT          =SIMP(statut='o',typ='I',into=(-3,-2,-1,0,1,2,3),fr="Correlation de frottement [ifrot]" ),
+           b_frottement        =BLOC(condition="FROTTEMENT<0",fr="Modele d'ecoulement gele",
+             REYNOLDS_LIM        =SIMP(statut='o',typ='R',fr="Coefficient de Reynolds limite [relim]" ),
+             FROTTEMENT_LIM      =SIMP(statut='o',typ='R',fr="Coefficient de frottement impose [frtlim]" ),
+           ),
+
+           TRANSFERT_CHAL      =SIMP(statut='o',typ='I',into=(-2,-1,0,1,2),fr="Transfert de chaleur [ichal]" ),
+           b_transchal         =BLOC(condition="TRANSFERT_CHAL<0", fr="Cas diphasique",
+             XMINCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux min [xminch]"),
+             XMAXCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux max [xmaxch]"),
+           ),
+         ),
+
+
+#      CRITERE DE CONVERGENCE
+#      **********************
+
+         CONV_CRITERE       =FACT(statut='o',min=1,max=1,
+           TEMP_REF            =SIMP(statut='o',typ='R',val_min=1.0E-5,fr="Temperature de reference pour le calcul du critere"),
+           PRES_REF            =SIMP(statut='o',typ='R',val_min=1.0E-5,fr="Pression de reference pour le calcul du critere"),
+           CRITERE             =SIMP(statut='o',typ='TXM',defaut="TEMP_PRESS",into=("TEMP_PRESS","EXPLICITE","TEMP","PRESS"),
+                                     fr="La nature du critere pour la convergence"),
+           b_critere_autre     =BLOC(condition="CRITERE=='TEMP_PRESS' or CRITERE=='TEMP' or CRITERE=='PRESS'",
+                                     fr="Critere de convergence temp_press, temp, ou press",
+             SUBD_NIVEAU         =SIMP(statut='f',typ='I',val_min=2,defaut=3,
+                                       fr="Nombre maximum de niveau de subdivision d'un pas de temps"),
+             SUBD_PAS_MINI       =SIMP(statut='f',typ='R',val_min=0.0, fr="Pas de temps en dessous duquel on ne subdivise plus"),
+             NUME_ORDRE_MIN      =SIMP(statut='f',typ='I',val_min=-1,defaut=-1,
+                                       fr="Numero d'ordre a partir duquel le critere est pris en compte"),
+             PREC_CRIT           =SIMP(statut='f',typ='R',val_min=1.0E-2,defaut=1.0,
+                                       fr="Valeur du critere pour l'erreur de convergence"),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+#      ********************************************
+
+         CONVERGENCE_ECREVISSE =FACT(statut='f',min=1,max=1,
+           KGTEST                 =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 0.5E+0,
+                                        fr="Parametre de l'algorithme iteratif [kgtest]" ),
+           ITER_GLOB_MAXI         =SIMP(statut='f',typ='I',defaut= 400,
+                                        fr="Nombre maximum d'iterations de la methode de Newton [itnmax]" ),
+           CRIT_CONV_DEBI         =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 1.E-5,
+                                        fr="Critere de convergence en debit [precdb]" ),
+         ),
+
+
+#      GENERAL
+#      *******
+
+         COURBES            = SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
+                                  fr="Generation eventuelle des courbes" ),
+         LOGICIEL           = SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
+         VERSION            = SIMP(statut='f',typ='TXM',defaut="3.1.2",into = ("3.1.1","3.1.2") ),
+         ENTETE             = SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
+         IMPRESSION         = SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
+         INFO               = SIMP(statut='f',typ='I',defaut="1",into=(1,2) ),
+
+#      DONNEES POUR STAT_NON_LINE ET THER_NON_LINE
+#      *******************************************
+
+         # copie de stat_non_line.capy des options des mots cles qui nous interessent
+
+         # donnees communes
+
+         CHAM_MATER         =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM          =SIMP(statut='f',typ=cara_elem),
+
+         # donnees specifiques a stat_non_line
+
+         EXCIT_MECA         =FACT(statut='o',max='**',
+           CHARGE              =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+           FONC_MULT           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           TYPE_CHARGE         =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                     into=("FIXE_CSTE","SUIV","DIDI")),
+         ),
+
+         CONTACT            = SIMP(statut='o',typ=char_contact),
+
+         COMP_INCR          =C_COMP_INCR(),
+         NEWTON             =FACT(statut='d',
+           REAC_INCR           =SIMP(statut='f',typ='I',defaut= 1 ),
+           PREDICTION          =SIMP(statut='f',typ='TXM',into=("DEPL_CALCULE","TANGENTE","ELASTIQUE","EXTRAPOL") ),
+           MATRICE             =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
+           PAS_MINI_ELAS       =SIMP(statut='f',typ='R',defaut=0.0E+0),
+           REAC_ITER           =SIMP(statut='f',typ='I',defaut=0),
+           REAC_ITER_ELAS      =SIMP(statut='f',typ='I',defaut=0),
+           EVOL_NOLI           =SIMP(statut='f',typ=evol_noli),
+         ),
+         CONVERGENCE        =FACT(statut='d',regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA'),),
+           b_refe_rela         =BLOC(condition = "RESI_REFE_RELA != None",
+                                     regles=(AU_MOINS_UN('SIGM_REFE','EPSI_REFE','FLUX_THER_REFE',
+                                                         'FLUX_HYD1_REFE','FLUX_HYD2_REFE','VARI_REFE'),
+                                            ),
+             SIGM_REFE           =SIMP(statut='f',typ='R'),
+             EPSI_REFE           =SIMP(statut='f',typ='R'),
+             FLUX_THER_REFE      =SIMP(statut='f',typ='R'),
+             FLUX_HYD1_REFE      =SIMP(statut='f',typ='R'),
+             FLUX_HYD2_REFE      =SIMP(statut='f',typ='R'),
+             VARI_REFE           =SIMP(statut='f',typ='R'),
+           ),
+           RESI_REFE_RELA   =SIMP(statut='f',typ='R'),
+           RESI_GLOB_MAXI   =SIMP(statut='f',typ='R'),
+           RESI_GLOB_RELA   =SIMP(statut='f',typ='R'),
+           ITER_GLOB_MAXI   =SIMP(statut='f',typ='I',defaut=10),
+           ITER_GLOB_ELAS   =SIMP(statut='f',typ='I',defaut=25),
+           ARRET            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+         ),
+
+         # donnees specifiques a ther_lineaire
+
+         EXCIT_THER         =FACT(statut='o',max='**',
+           CHARGE              =SIMP(statut='o',typ=(char_ther,char_cine_ther)),
+           FONC_MULT           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+         ),
+         PARM_THETA         =SIMP(statut='f',typ='R',defaut= 0.57),
+
+)
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE CORUS M.CORUS
+
+MACR_ELEM_DYNA=OPER(nom="MACR_ELEM_DYNA",op=  81,sd_prod=macr_elem_dyna,
+                    fr="Définition d'un macro élément pour analyse modale ou harmonique par sous structuration dynamique",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         regles=(EXCLUS('MATR_AMOR','AMOR_REDUIT' ),
+                 PRESENT_ABSENT('MATR_IMPE','MATR_RIGI','MATR_MASS'),),
+         BASE_MODALE     =SIMP(statut='o',typ=mode_meca ),
+         MATR_RIGI       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_depl_c),),
+         MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         MATR_AMOR       =SIMP(statut='f',typ=matr_asse_depl_r ),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'), 
+         SANS_GROUP_NO   =SIMP(statut='f',typ=grno ),
+         MATR_IMPE       =SIMP(statut='f',typ=matr_asse_gene_c ),
+         b_matr_impe     =BLOC(condition = "MATR_IMPE != None",
+             FREQ_EXTR       =SIMP(statut='o',typ='R' ),
+             AMOR_SOL        =SIMP(statut='f',typ='R',defaut=0.E+0 ),
+           ),
+         CAS_CHARGE      =FACT(statut='f',max='**',
+           NOM_CAS         =SIMP(statut='o',typ='TXM'),
+           VECT_ASSE_GENE  =SIMP(statut='o',typ=vect_asse_gene ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+MACR_ELEM_STAT=OPER(nom="MACR_ELEM_STAT",op=86,sd_prod=macr_elem_stat,reentrant='f',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+                    fr="Définition d'un macro-élément pour l'analyse statique par sous-structuration",
+        regles=(AU_MOINS_UN('DEFINITION','RIGI_MECA','MASS_MECA','CAS_CHARGE'),
+                ENSEMBLE('DEFINITION','EXTERIEUR'),),
+         DEFINITION      =FACT(statut='f',
+           regles=(PRESENT_PRESENT('PROJ_MESU','MODE_MESURE'),),
+           MODELE          =SIMP(statut='o',typ=modele_sdaster),
+           CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+           CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+           CHAR_MACR_ELEM  =SIMP(statut='f',typ=char_meca),
+           INST            =SIMP(statut='f',typ='R',defaut=0.0E+0 ),
+           NMAX_CAS        =SIMP(statut='f',typ='I',defaut=10),
+           NMAX_CHAR       =SIMP(statut='f',typ='I',defaut=10),
+           PROJ_MESU       =SIMP(statut='f',typ=(mode_gene,tran_gene,harm_gene),max=1),
+#           MODE_MESURE     =SIMP(statut='f',typ=( mode_meca,base_modale) ),
+           MODE_MESURE     =SIMP(statut='f',typ= mode_meca ), 
+         ),
+         EXTERIEUR       =FACT(statut='f',
+           regles=(AU_MOINS_UN('NOEUD','GROUP_NO'),),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+         ),
+         RIGI_MECA       =FACT(statut='f',
+         ),
+         MASS_MECA       =FACT(statut='f',
+         ),
+         AMOR_MECA       =FACT(statut='f',
+         ),
+         CAS_CHARGE      =FACT(statut='f',max='**',
+           NOM_CAS         =SIMP(statut='o',typ='TXM'),
+           SUIV            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
+           INST            =SIMP(statut='f',typ='R',defaut=0.E+0),
+         ),
+
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+
+from Macro.macr_fiab_impr_ops import macr_fiab_impr_ops
+
+MACR_FIAB_IMPR=MACRO(nom="MACR_FIAB_IMPR",op=macr_fiab_impr_ops,
+                     docu="U7.04.41",UIinfo={"groupe":("Impression",)},
+                     fr="Imprimer les valeurs à transmettre au logiciel de fiabilité.",
+                     ang="Print values for the fiability software",
+#
+# 1. Le niveau d'information
+#
+   INFO           = SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+#
+# 2. Impression de la valeur de la cible
+#
+# 2.1. ==> La table contenant la valeur à imprimer
+#
+   TABLE_CIBLE = SIMP(statut='o',typ=table_sdaster,
+                 fr="Table contenant la valeur cible.",
+                 ang="Table which includes the target value."),
+#
+# 2.2. ==> Le nom du paramètre associé à la valeur cible dans cette table
+#
+   NOM_PARA_CIBLE = SIMP(statut='o',typ='TXM',
+                    fr="Nom du paramètre associé à la valeur cible.",
+                    ang="Name of the parameter connected to the target value."),
+#
+# 3. Impressions des valeurs des éventuels gradients
+#
+   GRADIENTS = FACT(statut='f',min=1,max='**',
+#
+# 3.1. ==> La table contenant la valeur à imprimer
+#
+       TABLE = SIMP(statut='o',typ=table_sdaster,
+                    fr="Table contenant le gradient.",
+                    ang="Table which includes the gradient."),
+#
+# 3.2. ==> Le paramètre sensible
+#
+       PARA_SENSI = SIMP(statut='o',typ=(para_sensi,theta_geom),
+                       fr="Paramètre sensible associé au gradient.",
+                       ang="Sensitivity parameter connected to the gradient."),
+#
+# 3.3. ==> Le nom du paramètre associé au gradient dans cette table
+#
+       NOM_PARA = SIMP(statut='o',typ='TXM',
+                       fr="Nom du paramètre associé au gradient.",
+                       ang="Name of the parameter connected to the gradient."),
+#
+         ),
+#
+);
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+
+from Macro.macr_fiabilite_ops import macr_fiabilite_ops
+
+#
+#====
+# 1. Le retour : une liste de rééls.
+#====
+#
+def macr_fiabilite_prod ( self , **args ):
+  return listr8_sdaster
+#
+#====
+# 2. L'entete
+#====
+#
+MACR_FIABILITE = MACRO ( nom="MACR_FIABILITE",op=macr_fiabilite_ops,
+                         docu="U7.03.31",UIinfo={"groupe":("Post traitements",)},
+                         sd_prod=macr_fiabilite_prod,
+                         fr="Calcule les probabiltés de dépassement de seuil (mécanique de fiabilité).",
+                         ang="Fiability mechanics.",
+#
+#====
+# 3. Le niveau d'information
+#====
+#
+   INFO           = SIMP(statut="f",typ="I",defaut=1,into=(1,2)),
+#
+#====
+# 4. Nom et Version du logiciel de fiabilité
+#====
+#
+   LOGICIEL = SIMP(statut="f",typ="TXM",defaut="MEFISTO",
+                   into=("MEFISTO",),
+                   fr="Nom du logiciel de fiabilité.",
+                   ang="Fiability software name."),
+#
+   VERSION = SIMP(statut="f",typ="TXM",defaut="V3_2",
+                  into=("V3_2", "V3_N"),
+                  fr="Version du logiciel de fiabilité.",
+                  ang="Fiability software release."),
+#
+#====
+# 5. Les entrees-sorties du calcul ASTER déterministe
+#====
+#
+# 5.1. ==> Le jeu de commandes déterministe
+#
+   UNITE_ESCL = SIMP(statut="o",typ="I",
+                     fr="Unité logique associée aux commandes du calcul ASTER déterministe.",
+                     ang="Logical unit for the commands of the ASTER deterministic calculation."),
+#
+# 5.2. ==> Le destin des messages produits par ASTER
+#
+   MESS_ASTER = SIMP(statut="f",typ="TXM",defaut="DERNIER",
+                        into=("AUCUN", "DERNIER", "TOUS"),
+                        fr="Quels messages ASTER récupérer.",
+                        ang="Which ASTER messages must be kept."),
+#
+#====
+# 6. Options
+#====
+# 6.1. ==> Générales
+#
+# 6.1.1. ==> La valeur du seuil
+#
+   SEUIL = SIMP(statut="o",typ="R",max=1,
+                fr="Le seuil de défaillance.",
+                ang="Failure threshold."),
+#
+# 6.1.2. ==> Le type du seuil : on a deux cas de figure selon que
+#            la défaillance a lieu au dessus d'un seuil maximum ou
+#            en dessous d'un seuil minimum
+#
+   SEUIL_TYPE = SIMP(statut="o",typ="TXM",max=1,
+                     into=("MINIMUM","MAXIMUM"),
+                     fr="Que faut-il ne pas dépasser : un maximum ou un minimum.",
+                     ang="What is the failure threshold : maximum or minimum."),
+#
+# 6.2. ==> Pour MEFISTO
+#
+### en attente de résolution de AL 2004-006 (1/2)   b_mefisto=BLOC( condition = "LOGICIEL=='MEFISTO'",
+#
+# 6.2.1. ==> Pilotage de la recherche du point de conception
+#
+     RECH_PT_CONCEPT = SIMP(statut="f",typ="TXM",defaut="OUI",
+                            into=("OUI","NON"),
+                            fr="Pour trouver le point de conception.",
+                            ang="To find the design point."),
+#
+     b_rech_pt_concept=BLOC( condition = "RECH_PT_CONCEPT=='OUI'",
+#
+       EPSILON_U = SIMP(statut="f",typ="R",defaut=1.0E-2,
+                        fr="Précision du test d'arret sur les points itératifs dans l'espace standard.",
+                        ang="Precision of stop test for iterative points in standard space."),
+#
+       EPSILON_G = SIMP(statut="f",typ="R",defaut=1.0E-2,
+                        fr="Précision du test d'arret sur la proximité de la surface d'état limite.",
+                        ang="Precision of stop test for limit state surface."),
+#
+       TAU       = SIMP(statut="f",typ="R",defaut=5.0E-1,
+                        fr="Paramètre de la méthode de minimisation.",
+                        ang="Parameter for the minimization method."),
+#
+       OMEGA     = SIMP(statut="f",typ="R",defaut=1.0E-4,
+                        fr="Paramètre de la méthode de minimisation.",
+                        ang="Parameter for the minimization method."),
+#
+       ITER_MAX  = SIMP(statut="f",typ="I",defaut=50,
+                        fr="Nombre maximum d'itérations.",
+                        ang="Maximum number of iterations."),
+     ),
+#
+# 6.2.2. ==> Méthode(s) employée(s) pour la probabilité de défaillance
+#
+     METHODE_FORM = SIMP(statut="f",typ="TXM",defaut="OUI",
+                         into=("OUI","NON"),
+                         fr="Recherche de la probabilité de défaillance avec la méthode FORM.",
+                         ang="Research of failure probability with FORM method."),
+#
+     METHODE_SORM = SIMP(statut="f",typ="TXM",defaut="NON",
+                         into=("OUI","NON"),
+                         fr="Recherche de la probabilité de défaillance avec la méthode SORM.",
+                         ang="Research of failure probability with SORM method."),
+#
+     TIRAGE_IMPORTANCE = SIMP(statut="f",typ="TXM",defaut="NON",
+                              into=("OUI","NON"),
+                              fr="Recherche de la probabilité de défaillance avec le tirage d'importance.",
+                              ang="Research of failure probability with ."),
+#
+     b_tirage_importance=BLOC( condition = "TIRAGE_IMPORTANCE=='OUI'",
+#
+       NB_SIMULATION = SIMP(statut="f",typ="I",defaut=3,
+                            fr="Nombre de simulations pour le tirage d'importance.",
+                            ang="Number of simulation for."),
+#
+     ),
+#
+# 6.2.3. ==> Création d'une surface de réponse polynomiale
+#
+     POLYNOME_TAYLOR   = SIMP(statut="f",typ="TXM",defaut="NON",into=("OUI","NON"),),
+     HGRAD             = SIMP(statut="f",typ="R",defaut=1.0E-2,
+                              fr="Pas incrémental pour le calcul des gradients.",
+                              ang="Step for calculation of gradients."),
+     HHESS             = SIMP(statut="f",typ="R",defaut=1.0E-2,
+                              fr="Pas incrémental pour le calcul des dérivées secondes.",
+                              ang="Step for calculation of second derivatives."),
+#
+# 6.2.4. ==> Recherche d'un plan d'expérience
+#
+     PLAN_EXPERIENCE   = SIMP(statut="f",typ="TXM",defaut="NON",into=("OUI","NON"),
+                              fr="Construction d'un plan d'expérience.",
+                              ang="Construction of an experiment plan."),
+#
+     b_plan_experience=BLOC( condition = "PLAN_EXPERIENCE=='OUI'",
+#
+       ALPHA         = SIMP(statut="f",typ="R",defaut=2.0E-1,
+                            fr="Plan d'expérience : maille du plan de type composite centré.",
+                            ang="Experiment plane : mesh centered composite."),
+#
+       BETA          = SIMP(statut="f",typ="R",defaut=4.0E-1,
+                            fr="Plan d'expérience : maille du plan de type factoriel.",
+                            ang="Experiment plane : mesh factor."),
+#
+     ),
+#
+# 6.2.5. ==> Les tests
+# 6.2.5.1. ==> Test de la sphere
+#
+     T_SPHERE = SIMP(statut="f",typ="TXM",defaut="NON",into=("OUI","NON"),
+                     fr="Test de la sphère.",
+                     ang="Sphere test."),
+#
+     b_test_de_la_sphere=BLOC( condition = "T_SPHERE=='OUI'",
+#
+       METHODE_TEST = SIMP(statut="f",typ="TXM",defaut="GAUSSIENNE",
+                           into=("GAUSSIENNE","PARAMETRIQUE","REJECTION"),
+                           fr="Type de méthode.",
+                           ang="Method."),
+#
+       NB_POINT     = SIMP(statut="f",typ="I",max=1,defaut=60,
+                           fr="Nombre de points de la sphere.",
+                           ang="Number of points over the sphere.")
+     ),
+#
+# 6.2.5.2. ==> Test du maximum fort
+#
+     T_MAXIMUM_FORT = SIMP(statut="f",typ="TXM",defaut="NON",into=("OUI","NON"),
+                           fr="Test du maximum fort.",
+                           ang="Strong maximum test."),
+#
+     b_test_du_maximum_fort=BLOC( condition = "T_MAXIMUM_FORT=='OUI'",
+#
+       COS_LIM = SIMP(statut="f",typ="R",max=1,defaut=1.0,
+                      fr="Cosinus de l'angle d'exclusion.",
+                      ang="Cosine of angle of exclusion."),
+#
+       DPROB   = SIMP(statut="f",typ="R",max=1,defaut=4.3E-1,
+                      fr="Fraction d'iso-densité de probabilité de défaillance.",
+                      ang="Fraction.")
+#
+     ),
+#
+# 6.2.5.3. ==> Test du hessien
+#
+     T_HESSIEN = SIMP(statut="f",typ="TXM",defaut="NON",into=("OUI","NON"),
+                      fr="Test du hessien.",
+                      ang="Hessian test."),
+#
+# 6.2.6. ==> Les correlations entre les variables
+#
+     MATRICE = SIMP(statut="f",typ="R",max="**",
+                    fr="Matrice de corrélation entre les variables.",
+                    ang="Correlation matrix."), 
+#
+### en attente de résolution de AL 2004-006 (2/2)   ),
+#
+#====
+# 7. Definition des paramètres
+#====
+#
+   VARIABLE = FACT(statut="o",min=1,max="**",
+#
+# 7.1. ==> Nom de la variable
+#
+       NOM = SIMP(statut="o",typ="TXM",
+                  fr="Nom de la variable, identique au nom de concept PARA_SENSI.",
+                  ang="Name of the variable, identical to the name of the PARA_SENSI conceipt."),
+#
+# 7.2. ==> Loi de distribution
+#
+       LOI = SIMP(statut="o",typ="TXM",
+                  into=("UNIFORME","NORMALE","LOGNORMALE","NORMALE_TRONQUEE"),
+                  fr="Choix de la loi",
+                  ang="Law."),
+#
+# 7.2.1. ==> Loi normale
+#
+       b_normale=BLOC(condition="LOI=='NORMALE'",
+#
+         VALE_MOY   = SIMP(statut="o",typ="R",max=1,
+                               fr="Valeur moyenne.",
+                               ang="Mean value."),
+#
+         ECART_TYPE = SIMP(statut="o",typ="R",max=1,
+                               fr="Ecart type.",
+                               ang="Standard deviation."),
+#
+       ),
+#
+# 7.2.2. ==> Loi lognormale
+#
+       b_lognormale=BLOC(condition="LOI=='LOGNORMALE'",
+#
+         VALE_MIN       = SIMP(statut="o",typ="R",max=1,
+                                   fr="Valeur minimale.",
+                                   ang="Minimal value."),
+#
+         VALE_MOY       = SIMP(statut="f",typ="R",max=1,
+                                   fr="Valeur moyenne dans l'espace de la loi normale.",
+                                   ang="Mean value in the space of the normal law."),
+#
+         ECART_TYPE     = SIMP(statut="f",typ="R",max=1,
+                                   fr="Ecart type dans l'espace de la loi normale.",
+                                   ang="Standard deviation in the space of the normal law."),
+#
+         VALE_MOY_PHY   = SIMP(statut="f",typ="R",max=1,
+                                   fr="Valeur moyenne dans l'espace physique.",
+                                   ang="Mean value in the physical space."),
+#
+         ECART_TYPE_PHY = SIMP(statut="f",typ="R",max=1,
+                                   fr="Ecart type dans l'espace physique.",
+                                   ang="Standard deviation in the physical space."),
+#
+         regles=(AU_MOINS_UN("VALE_MOY"  ,"VALE_MOY_PHY"),
+                 AU_MOINS_UN("ECART_TYPE","ECART_TYPE_PHY"),
+                 EXCLUS  ("VALE_MOY"  ,"VALE_MOY_PHY"),
+                 EXCLUS  ("VALE_MOY"  ,"ECART_TYPE_PHY"),
+                 EXCLUS  ("ECART_TYPE","VALE_MOY_PHY"),
+                 EXCLUS  ("ECART_TYPE","ECART_TYPE_PHY")),
+#
+       ),
+#
+# 7.2.3. ==> Loi uniforme
+#
+       b_uniforme=BLOC(condition="LOI=='UNIFORME'",
+#
+         VALE_MIN = SIMP(statut="o",typ="R",max=1,
+                             fr="Valeur minimale.",
+                             ang="Minimal value."),
+#
+         VALE_MAX = SIMP(statut="o",typ="R",max=1,
+                             fr="Valeur maximale.",
+                             ang="Maximal value."),
+#
+       ),
+#
+# 7.2.4. ==> Loi normale tronquée
+#
+       b_normale_tronquee=BLOC(condition="LOI=='NORMALE_TRONQUEE'",
+#
+         VALE_MOY   = SIMP(statut="o",typ="R",max=1,
+                               fr="Valeur moyenne de la loi normale complète.",
+                               ang="Mean value for the entire normal law."),
+#
+         ECART_TYPE = SIMP(statut="o",typ="R",max=1,
+                               fr="Ecart type de la loi normale complète.",
+                               ang="Standard deviation for the entire normal law."),
+#
+         VALE_MIN   = SIMP(statut="o",typ="R",max=1,
+                               fr="Valeur minimale.",
+                               ang="Minimal value."),
+#
+         VALE_MAX   = SIMP(statut="o",typ="R",max=1,
+                               fr="Valeur maximale.",
+                               ang="Maximal value."),
+#
+       ),
+#
+# 7.3. ==> Paramètres de calcul
+# 7.3.1. ==> Soit on cherche le point de conception, soit on le connait deja
+#
+       regles=(EXCLUS("POINT_INI","POINT_CONCEPT"),
+               EXCLUS("POINT_REF","POINT_CONCEPT"),),
+#
+# 7.3.2. ==> Quand on cherche le point de conception, on peut préciser le départ de l'algorithme.
+#            Si on ne le fait pas, le programme prendra la valeur moyenne.
+#
+       POINT_INI = SIMP(statut="f",typ="R",max=1,
+                          fr="Point de démarrage de l'algorithme itératif.",
+                          ang="Initial point for iterative process."),
+#
+# 7.3.3. ==> Quand on cherche le point de conception, on peut préciser un point de référence pour normaliser.
+#            Si on ne le fait pas, le programme prendra la valeur moyenne.
+#
+       POINT_REF = SIMP(statut="f",typ="R",max=1,
+                          fr="Point de référence de l'algorithme itératif.",
+                          ang="Reference point for iterative process."),
+#
+# 7.3.4. ==> Quand on cherche uniquement la probabilité de défaillance, il faut donner le point de conception
+#
+       POINT_CONCEPT = SIMP(statut="f",typ="R",max=1,
+                              fr="Point de conception.",
+                              ang="Design point."),
+#
+# 7.4. ==> Mode d'obtention du gradient par rapport à ce paramètre
+#
+       GRADIENT = SIMP(statut="o",typ="TXM",max=1,
+                           into=("OUI","NON"),
+                           fr="ASTER calcule directement le gradient.",
+                       ang="ASTER computes the gradient for this parameter."),
+
+       b_gradient=BLOC(condition="GRADIENT=='NON'",
+         INCREMENT = SIMP(statut="o",typ="R",max=1,
+                             fr="Incrément dans la direction.",
+                         ang="Direction increment."),
+       ),
+
+   ),
+#
+);
+#& MODIF COMMANDE  DATE 15/03/2010   AUTEUR GNICOLAS G.NICOLAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE GNICOLAS G.NICOLAS
+
+from Macro.macr_adap_mail_ops import macr_adap_mail_ops
+
+MACR_INFO_MAIL=MACRO(nom="MACR_INFO_MAIL",op=macr_adap_mail_ops,
+                     docu="U7.03.02-b",UIinfo={"groupe":("Maillage",)},
+                     fr="Donner des informations sur un maillage.",
+                     ang="To give information about a mesh.",
+#
+# 1. Le niveau d'information
+#
+  INFO = SIMP(statut='f',typ='I',defaut=1,into=(1,2,3,4)),
+#
+# 2. Version de HOMARD
+#
+  VERSION_HOMARD = SIMP(statut='f',typ='TXM',defaut="V9_6",
+                        into=("V9_6", "V9_N", "V9_N_PERSO"),
+                        fr="Version de HOMARD",
+                        ang="HOMARD release"),
+#
+# 3. Langue des messages issus de HOMARD
+#
+  LANGUE = SIMP(statut='f',typ='TXM',defaut="FRANCAIS",    
+                into=("FRANCAIS","FRENCH","ANGLAIS","ENGLISH",),
+                fr="Langue des messages issus de HOMARD.",
+                ang="Language for HOMARD messages." ),
+#
+# 4. Le nom du maillage a analyser
+#
+  MAILLAGE = SIMP(statut='o',typ=maillage_sdaster,
+                  fr="Maillage à analyser.",
+                  ang="Mesh to be checked." ),
+#
+# 5. Suivi d'une frontiere
+#
+  MAILLAGE_FRONTIERE = SIMP(statut='f',typ=maillage_sdaster,
+                           fr="Maillage de la frontiere à suivre",
+                           ang="Boundary mesh" ),
+#
+  b_frontiere = BLOC( condition = " MAILLAGE_FRONTIERE != None " ,
+                      fr="Information complémentaire sur la frontière",
+                      ang="Further information about boundary",
+#
+    GROUP_MA_FRONT = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                          fr="Groupes de mailles définissant la frontière",
+                          ang="Mesh groups which define the boundary" ),
+#
+                    ) ,
+#
+# 6. Les options ; par defaut, on controle tout
+# 6.1. Nombre de noeuds et mailles
+#
+  NOMBRE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                        fr="Nombre de noeuds et de mailles du maillage",
+                        ang="Number of nodes and meshes in the mesh" ),
+#
+# 6.2. Determination de la qualite des mailles du maillage
+#
+  QUALITE        = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                        fr="Qualité du maillage",
+                        ang="Quality of the mesh" ),
+#
+# 6.3. Connexite du maillage
+#
+  CONNEXITE      = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                        fr="Connexité du maillage.",
+                        ang="Connexity of the mesh." ),
+#
+# 6.4. Taille des sous-domaines du maillage
+#
+  TAILLE         = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                        fr="Tailles des sous-domaines du maillage.",
+                        ang="Sizes of mesh sub-domains." ),
+#
+# 6.5. Controle de la non-interpenetration des elements
+#
+  INTERPENETRATION=SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON"),
+                        fr="Controle de la non interpénétration des éléments.",
+                        ang="Overlapping checking." ),
+#
+# 6.6. Propriétés du maillage de calcul
+#
+  PROP_CALCUL    = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON"),
+                        fr="Propriétés du maillage de calcul.",
+                        ang="Properties of the calculation mesh." ),
+#
+# 7. Unite logique d'un fichier a ajouter a HOMARD.Configuration
+#
+  b_unite = BLOC( condition = " (VERSION_HOMARD == 'V9_N') or \
+                                (VERSION_HOMARD == 'V9_N_PERSO') " ,
+                                fr="Fichier supplementaire.",
+                                ang="Additional file.",
+#
+  UNITE = SIMP(statut='f',typ='I',
+               fr="Unite logique a ajouter a HOMARD.Configuration",
+               ang="Additional file to HOMARD.Configuration" ),
+#
+  ) ,
+#
+# 8. Gestion des mailles autres que celles compatibles avec HOMARD
+#       "REFUSER" : elles sont refusées (defaut)
+#       "IGNORER" : elles sont ignorées
+#
+  ELEMENTS_NON_HOMARD = SIMP(statut='f',typ='TXM',defaut="REFUSER",into=("REFUSER","IGNORER"),
+                             fr="Acceptation de mailles incompatibles avec HOMARD",
+                             ang="Incompatible meshes for HOMARD" ),
+)  ;
+#& MODIF COMMANDE  DATE 30/09/2008   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DURAND C.DURAND
+
+from Macro.macr_lign_coupe_ops import macr_lign_coupe_ops
+
+MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=table_sdaster,
+                       reentrant='n',
+            UIinfo={"groupes":("Outils métier",)},
+            fr="Extraction des valeurs d'un résultat dans une ou plusieurs tables sur des lignes de coupe définies"
+             +" par deux points et un intervalle",
+            regles=(UN_PARMI("RESULTAT","CHAM_GD"),),
+
+         RESULTAT        =SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther) ),
+         CHAM_GD         =SIMP(statut='f',typ=(cham_gd_sdaster)),
+
+         b_extrac        =BLOC(condition = "RESULTAT != None",fr="extraction des résultats",
+                                 regles=(EXCLUS('NUME_ORDRE','LIST_ORDRE','INST','LIST_INST',), ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+             LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+             LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+           ),
+
+# extraction des résultats
+         b_meca        =BLOC(condition = "AsType(RESULTAT) in (evol_elas,evol_noli)",fr="résultat mécanique",
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut='SIGM_NOEU_DEPL' ),
+         ),
+         b_ther        =BLOC(condition = "AsType(RESULTAT) in (evol_ther,)",fr="résultat thermique",
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut='TEMP' ),
+         ),
+         b_cham       =BLOC(condition = "CHAM_GD!=None",
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',),),
+
+         UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=25),
+         MODELE          =SIMP(statut='f',typ=modele_sdaster ),
+
+         VIS_A_VIS       =FACT(statut='f',max='**',
+                             regles=(EXCLUS('GROUP_MA_1','MAILLE_1'),),
+           GROUP_MA_1        =SIMP(statut='f',typ=grma),
+           MAILLE_1          =SIMP(statut='f',typ=ma,max='**'),),
+
+         LIGN_COUPE     =FACT(statut='o',max='**',
+            regles=(EXCLUS("NOM_CMP","INVARIANT","ELEM_PRINCIPAUX","RESULTANTE"),
+                    PRESENT_PRESENT("TRAC_DIR","DIRECTION"),
+                    EXCLUS("TRAC_DIR","TRAC_NOR"),
+                    PRESENT_PRESENT("TRAC_DIR","NOM_CMP"),
+                    PRESENT_PRESENT("TRAC_NOR","NOM_CMP"),),
+
+           INTITULE        =SIMP(statut='f',typ='TXM',),
+           TYPE            =SIMP(statut='o',typ='TXM',max=1,
+                                 into=("GROUP_NO","SEGMENT","ARC","GROUP_MA"),defaut="SEGMENT"),
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL",
+                                into=("GLOBAL","LOCAL","POLAIRE","UTILISATEUR","CYLINDRIQUE"),),
+           OPERATION       =SIMP(statut='f',typ='TXM',into=("EXTRACTION","MOYENNE",),defaut="EXTRACTION",),
+
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           INVARIANT       =SIMP(statut='f',typ='TXM',into=("OUI",),),
+           ELEM_PRINCIPAUX =SIMP(statut='f',typ='TXM',into=("OUI",),),
+           RESULTANTE      =SIMP(statut='f',typ='TXM',max='**'),
+           TRAC_NOR        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           TRAC_DIR        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+
+
+           b_local        =BLOC(condition = "REPERE=='LOCAL' ",
+             VECT_Y          =SIMP(statut='o',typ='R',min=2,max=3),),
+
+           b_utili        =BLOC(condition = "REPERE=='UTILISATEUR'",
+             ANGL_NAUT       =SIMP(statut='o',typ='R',min=3,max=3),),
+
+           b_grno          =BLOC(condition = "TYPE=='GROUP_NO'",
+             GROUP_NO        =SIMP(statut='o',typ=grno, max=1),),
+
+           b_grma          =BLOC(condition = "TYPE=='GROUP_MA'",
+             GROUP_MA        =SIMP(statut='o',typ=grma, max=1),
+             MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster),),
+
+           b_segment       =BLOC(condition = "TYPE=='SEGMENT'",
+             NB_POINTS       =SIMP(statut='o',typ='I',max=1),
+             COOR_ORIG       =SIMP(statut='o',typ='R',min=2,max=3),
+             COOR_EXTR       =SIMP(statut='o',typ='R',min=2,max=3),),
+
+           b_arc           =BLOC(condition = "TYPE=='ARC'",
+             NB_POINTS       =SIMP(statut='o',typ='I',max=1),
+             COOR_ORIG       =SIMP(statut='o',typ='R',min=2,max=3),
+             CENTRE          =SIMP(statut='o',typ='R',min=2,max=3),
+             ANGLE           =SIMP(statut='o',typ='R',max=1),
+             DNOR            =SIMP(statut='f',typ='R',min=2,max=3),),
+
+           b_cylind       =BLOC(condition = ("REPERE=='CYLINDRIQUE' and TYPE!='ARC'"),
+             ORIGINE         =SIMP(statut='f',typ='R',min=2,max=3),
+             AXE_Z           =SIMP(statut='f',typ='R',min=3,max=3),),
+
+           DISTANCE_MAX    =SIMP(statut='f',typ='R',defaut=0.,
+                fr="Si la distance entre un noeud de la ligne de coupe et le maillage coupé "
+                +"est > DISTANCE_MAX, ce noeud sera ignoré."),
+
+         ),
+)  ;
+
+
+#& MODIF COMMANDE  DATE 22/04/2010   AUTEUR ASSIRE A.ASSIRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+from Macro.macr_recal_ops import macr_recal_ops
+
+def macr_recal_prod(self,**args ):
+  return listr8_sdaster
+
+MACR_RECAL = MACRO(nom="MACR_RECAL",op=macr_recal_ops,
+            UIinfo={"groupes":("Résultats et champs",)},
+                      sd_prod=macr_recal_prod,
+                      fr="Réalise le recalage des calculs Aster sur des résultats expérimentaux"
+                        +" ou sur d'autres résultats de calculs",
+
+         UNITE_ESCL      =SIMP(statut='o',typ='I'),
+         RESU_EXP        =SIMP(statut='o',typ=assd,max='**'),
+         POIDS           =SIMP(statut='f',typ=assd,max='**'),
+         RESU_CALC       =SIMP(statut='o',typ=assd,max='**'),
+         LIST_PARA       =SIMP(statut='o',typ=assd,max='**'),
+
+         UNITE_RESU      =SIMP(statut='f',typ='I',defaut=91),
+         PARA_DIFF_FINI  =SIMP(statut='f',typ='R',defaut=0.001),
+
+         GRAPHIQUE       =FACT(statut='f',
+             FORMAT          =SIMP(statut='f',typ='TXM',defaut='XMGRACE',into=("XMGRACE","GNUPLOT"),),
+             AFFICHAGE       =SIMP(statut='f',typ='TXM',defaut='TOUTE_ITERATION',into=("TOUTE_ITERATION","ITERATION_FINALE"),),
+             b_pilote = BLOC(condition = "FORMAT == 'XMGRACE'", fr="Mots-clés propres à XMGRACE",
+                 PILOTE          =SIMP(statut='f',typ='TXM',defaut='', 
+                                       into=('','POSTSCRIPT','EPS','MIF','SVG','PNM','PNG','JPEG','PDF','INTERACTIF'),
+                            fr="Pilote de sortie, PNG/JPEG/PDF ne sont pas disponibles sur toutes les installations de xmgrace"),
+                 UNITE           =SIMP(statut='f',typ='I',val_min=10,val_max=90,defaut=29,
+                            fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+             ),
+         ),
+
+
+         # Methodes d'optimisation
+         # -----------------------
+         METHODE         =SIMP(statut='f',typ='TXM',defaut='LEVENBERG',into=("LEVENBERG", "FMIN", "FMINBFGS", "FMINNCG",
+                                                                             "GENETIQUE","HYBRIDE")),
+
+         b_genetique_options=BLOC(condition = "METHODE == 'GENETIQUE' or METHODE == 'HYBRIDE'" ,
+             NB_PARENTS       =SIMP(statut='f',typ='I',defaut=10),
+             NB_FILS          =SIMP(statut='f',typ='I',defaut=5),
+             ECART_TYPE       =SIMP(statut='f',typ='R',defaut=1.),
+             GRAINE           =SIMP(statut='f',typ='I'),
+             ITER_ALGO_GENE   =SIMP(statut='f',typ='I',defaut=10),
+             RESI_ALGO_GENE   =SIMP(statut='f',typ='R',defaut=1.E-3),
+         ),
+         
+
+         # Criteres d'arret globaux
+         # -------------------------
+         ITER_MAXI       =SIMP(statut='f',typ='I',defaut=10,    fr="Nombre maximum d'iterations d'optimisation"),
+         ITER_FONC_MAXI  =SIMP(statut='f',typ='I',defaut=1000,  fr="Nombre maximum d'evaluations de la focntionnelle"),
+         RESI_GLOB_RELA  =SIMP(statut='f',typ='R',defaut=1.E-3, fr="Critere d'arret sur la valeur du residu"),
+         TOLE_PARA       =SIMP(statut='f',typ='R',defaut=1.E-8, fr="Critere d'arret sur la valeur des parametres"),
+         TOLE_FONC       =SIMP(statut='f',typ='R',defaut=1.E-8, fr="Critere d'arret sur la valeur de la fonctionnelle"),
+
+
+         # Calculs des gradients
+         # ---------------------
+         b_gradient =BLOC(condition = "METHODE == 'FMINBFGS' or METHODE == 'FMINNCG'" ,
+             GRADIENT        =SIMP(statut='f',typ='TXM',defaut='NON_CALCULE', into=("NON_CALCULE", "NORMAL", "ADIMENSIONNE" )),
+         ),
+
+         b_gradient_levenberg =BLOC(condition = "METHODE == 'LEVENBERG'" ,
+             GRADIENT        =SIMP(statut='f',typ='TXM',defaut='NORMAL', into=( "NORMAL", "ADIMENSIONNE" )),
+         ),
+
+
+         # Mode d'evaluation de l'esclave
+         # ------------------------------
+         CALCUL_ESCLAVE       =FACT(statut='d',
+            LANCEMENT         =SIMP(statut='f', typ='TXM', defaut='INCLUSION',into=("DISTRIBUTION","INCLUSION"),),
+
+            b_eval_distrib =BLOC(condition = "LANCEMENT == 'DISTRIBUTION'",
+                MODE          =SIMP(statut='f', typ='TXM',      into=("INTERACTIF","BATCH"),),
+                MEMOIRE       =SIMP(statut='f', typ='I',        fr="Memoire demandee pour les calculs esclaves (Mo)"),
+                TEMPS         =SIMP(statut='f', typ='I',        fr="Temps demandee pour les calculs esclaves (secondes)"),
+                CLASSE        =SIMP(statut='f', typ='TXM',      fr="Classe demandee pour les calculs en batch"),
+                NMAX_SIMULT   =SIMP(statut='f', typ='I',
+                               fr="Nombre de calculs esclaves lances en paralle en mode distribution (non precise = automatique)"),
+            ),
+         ),
+
+         DYNAMIQUE       =FACT(statut='f',
+               MODE_EXP           =SIMP(statut='o',typ='TXM'),
+               MODE_CALC          =SIMP(statut='o',typ='TXM'),
+               APPARIEMENT_MANUEL =SIMP(statut='f',typ='TXM',defaut='NON',into=("OUI","NON")),           
+                               ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut=2,into=( 1, 2 ) ),
+);
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE VOLDOIRE F.VOLDOIRE
+
+from Macro.macr_spectre_ops import macr_spectre_ops
+
+MACR_SPECTRE=MACRO(nom="MACR_SPECTRE",op=macr_spectre_ops,sd_prod=table_sdaster,
+                       reentrant='n', UIinfo={"groupes":("Outils métier",)},
+                       fr="calcul de spectre, post-traitement de séisme",
+         MAILLAGE      =SIMP(statut='o',typ=maillage_sdaster,),
+         PLANCHER      =FACT(statut='o',max='**',
+            regles=(AU_MOINS_UN('NOEUD','GROUP_NO' ),),
+            NOM           =SIMP(statut='o',typ='TXM',),
+            GROUP_NO      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+            NOEUD         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'), ),
+         NOM_CHAM      =SIMP(statut='o',typ='TXM' ,into=('ACCE','DEPL')),
+         CALCUL        =SIMP(statut='o',typ='TXM' ,into=('ABSOLU','RELATIF'),position='global'),
+         b_acce  =BLOC( condition = "NOM_CHAM=='ACCE'",
+           regles=(UN_PARMI('LIST_FREQ','FREQ'),),
+           AMOR_SPEC     =SIMP(statut='o',typ='R',max='**'),
+           LIST_INST     =SIMP(statut='f',typ=listr8_sdaster ),
+           LIST_FREQ     =SIMP(statut='f',typ=listr8_sdaster ),
+           FREQ          =SIMP(statut='f',typ='R',max='**'),
+           NORME         =SIMP(statut='o',typ='R'),  
+           RESU          =FACT(statut='o',max='**',
+                regles=(UN_PARMI('RESU_GENE','RESULTAT'),),
+                RESU_GENE     =SIMP(statut='f',typ=tran_gene),
+                RESULTAT      =SIMP(statut='f',typ=(dyna_trans,evol_noli)),
+                b_calc  =BLOC( condition = "CALCUL=='RELATIF'",
+                   ACCE_X        =SIMP(statut='o',typ=fonction_sdaster),
+                   ACCE_Y        =SIMP(statut='o',typ=fonction_sdaster),
+                   ACCE_Z        =SIMP(statut='o',typ=fonction_sdaster),), ),
+           IMPRESSION    =FACT(statut='f',
+                TRI           =SIMP(statut='f',typ='TXM',defaut='AMOR_SPEC',into=("AMOR_SPEC","DIRECTION",),),
+                FORMAT        =SIMP(statut='f',typ='TXM',defaut='TABLEAU',into=("TABLEAU","XMGRACE",),),
+                UNITE         =SIMP(statut='f',typ='I',val_min=10,val_max=90,defaut=29,
+                                    fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit"),
+                b_pilote = BLOC(condition = "FORMAT == 'XMGRACE'",
+                   PILOTE        =SIMP(statut='f',typ='TXM',defaut='',
+                                 into=('','POSTSCRIPT','EPS','MIF','SVG','PNM','PNG','JPEG','PDF','INTERACTIF'),),),
+                TOUT          =SIMP(statut='f',typ='TXM',defaut='NON',into=("OUI","NON",),),
+                              ),
+         ),
+         b_depl  =BLOC( condition = "NOM_CHAM=='DEPL'",
+           LIST_INST     =SIMP(statut='f',typ=listr8_sdaster),  
+           RESU          =FACT(statut='o',max=3,
+                regles=(UN_PARMI('RESU_GENE','RESULTAT'),),
+                RESU_GENE     =SIMP(statut='f',typ=tran_gene),
+                RESULTAT      =SIMP(statut='f',typ=(dyna_trans,evol_noli)),
+                b_calc  =BLOC( condition = "CALCUL=='ABSOLU'",
+                   DEPL_X        =SIMP(statut='o',typ=fonction_sdaster),
+                   DEPL_Y        =SIMP(statut='o',typ=fonction_sdaster),
+                   DEPL_Z        =SIMP(statut='o',typ=fonction_sdaster),),),
+         ),
+)
+#& MODIF COMMANDE  DATE 19/01/2010   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+
+from Macro.macro_elas_mult_ops import macro_elas_mult_ops
+
+def macro_elas_mult_prod(self,NUME_DDL,CAS_CHARGE,**args ):
+  if isinstance(NUME_DDL,CO) :
+    self.type_sdprod(NUME_DDL,nume_ddl_sdaster)
+  else:
+    self.type_sdprod(NUME_DDL,NUME_DDL.__class__)
+  if CAS_CHARGE[0]['NOM_CAS']      != None : return mult_elas
+  if CAS_CHARGE[0]['MODE_FOURIER'] != None : return fourier_elas
+  raise AsException("type de concept resultat non prevu")
+
+MACRO_ELAS_MULT=MACRO(nom="MACRO_ELAS_MULT",op=macro_elas_mult_ops,sd_prod=macro_elas_mult_prod,reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
+         fr="Calculer les réponses statiques linéaires pour différents cas de charges ou modes de Fourier",
+         regles=(UN_PARMI('CHAR_MECA_GLOBAL','LIAISON_DISCRET', ),),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         NUME_DDL        =SIMP(statut='f',typ=(nume_ddl_sdaster,CO)),
+         CHAR_MECA_GLOBAL=SIMP(statut='f',typ=(char_meca),validators=NoRepeat(),max='**'),
+         LIAISON_DISCRET =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         CAS_CHARGE      =FACT(statut='o',max='**',
+           regles=(UN_PARMI('NOM_CAS','MODE_FOURIER'),
+                   UN_PARMI('CHAR_MECA','VECT_ASSE'),),
+           NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+           MODE_FOURIER    =SIMP(statut='f',typ='I' ),
+           TYPE_MODE       =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
+           CHAR_MECA       =SIMP(statut='f',typ=(char_meca),validators=NoRepeat(),max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                                 into=("EFGE_ELNO_DEPL","EPOT_ELEM_DEPL","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
+                                       "SIGM_ELNO_CART","EFGE_ELNO_CART","DEGE_ELNO_DEPL","EPSI_ELNO_DEPL",
+                                       "EPSI_ELGA_DEPL","EPSG_ELNO_DEPL","EPSG_ELGA_DEPL","EPSP_ELNO","EPSP_ELGA",
+                                       "ECIN_ELEM_DEPL","FLUX_ELGA_TEMP","FLUX_ELNO_TEMP","SOUR_ELGA_ELEC",
+                                       "PRES_ELNO_DBEL","PRES_ELNO_REEL","PRES_ELNO_IMAG","INTE_ELNO_ACTI",
+                                       "INTE_ELNO_REAC","SIGM_NOZ1_ELGA","ERZ1_ELEM_SIGM","SIGM_NOZ2_ELGA",
+                                       "ERZ2_ELEM_SIGM","VNOR_ELEM_DEPL","ERRE_ELNO_ELEM","SIRE_ELNO_DEPL",
+                                       "ERRE_ELEM_SIGM","EQUI_ELNO_SIGM","EQUI_ELGA_SIGM","EQUI_ELNO_EPSI",
+                                       "QIRE_ELEM_SIGM","QIRE_ELNO_ELEM","QIZ1_ELEM_SIGM","QIZ2_ELEM_SIGM",
+                                       "EQUI_ELGA_EPSI","FORC_NODA","REAC_NODA","EPSI_NOEU_DEPL","SIGM_NOEU_DEPL",
+                                       "EFGE_NOEU_DEPL","EQUI_NOEU_SIGM","EQUI_NOEU_EPSI","FLUX_NOEU_TEMP") ),
+           NUME_COUCHE     =SIMP(statut='f',typ='I',defaut=1),
+           NIVE_COUCHE     =SIMP(statut='f',typ='TXM',defaut="MOY",into=("SUP","INF","MOY")),
+           SOUS_TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_sdaster),
+         ),
+         SOLVEUR         =FACT(statut='d',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT") ),
+           b_mult_front    = BLOC ( condition = "METHODE == 'MULT_FRONT' ",
+                                    fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+            ),
+           b_ldlt_mult     =BLOC(condition = "METHODE == 'LDLT' or METHODE == 'MULT_FRONT' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factorise",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE BODEL C.BODEL
+
+from Macro.macro_expans_ops import macro_expans_ops
+
+def macro_expans_prod(self, MODELE_MESURE, RESU_NX, RESU_EX, RESU_ET, RESU_RD, **args):
+    RESU_EXP = MODELE_MESURE['MESURE']
+    self.type_sdprod(RESU_NX, mode_meca)
+    for res in (RESU_EX, RESU_ET, RESU_RD):
+        if isinstance(res, CO):
+            if AsType(RESU_EXP) == mode_meca:
+                self.type_sdprod(res, mode_meca)
+            else:
+                self.type_sdprod(res, dyna_harmo)
+        else:
+            self.type_sdprod(res,res.__class__)
+    return None
+
+MACRO_EXPANS=MACRO(nom="MACRO_EXPANS",
+                   op=macro_expans_ops,
+                   sd_prod=macro_expans_prod,
+                   reentrant='n',
+                   UIinfo={"groupes":("Outils métier",)},
+                   fr="Outil d'expansion de resultats exprimentaux sur une base definie sur un modele numerique",
+                        MODELE_CALCUL   = FACT(statut='o',
+                           MODELE          = SIMP(statut='o',typ=(modele_sdaster) ),
+                           BASE            = SIMP(statut='o',typ=(mode_meca,) ), 
+                           NUME_MODE       = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**',defaut=0),
+                           NUME_ORDRE      = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**',defaut=0),
+
+                                             ),
+                        MODELE_MESURE   = FACT(statut='o',
+                           MODELE          = SIMP(statut='o',typ=(modele_sdaster) ),
+                           MESURE          = SIMP(statut='o',typ=(dyna_trans,dyna_harmo,mode_meca,mode_meca_c,) ),
+                           NOM_CHAM        = SIMP(statut='f',typ='TXM',defaut="DEPL",
+                                                  into=("DEPL","VITE","ACCE","SIEF_NOEU","EPSI_NOEU_DEPL",) ),
+                           NUME_MODE       = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**',defaut=0),
+                           NUME_ORDRE      = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**',defaut=0),
+
+                                             ),
+                        NUME_DDL       = SIMP(statut='f',typ=(nume_ddl_sdaster)),
+                        RESU_NX        = SIMP(statut='f',typ=(mode_meca,dyna_harmo, CO)),
+                        RESU_EX        = SIMP(statut='f',typ=(mode_meca,dyna_harmo, CO)),
+                        RESU_ET        = SIMP(statut='f',typ=(mode_meca,dyna_harmo, CO)),
+                        RESU_RD        = SIMP(statut='f',typ=(mode_meca,dyna_harmo, CO)),
+                        RESOLUTION     = FACT(statut='f',
+                           METHODE =SIMP(statut='f',typ='TXM',defaut="LU",into=("LU","SVD",) ),
+                           b_svd   =BLOC(condition="METHODE=='SVD'",
+                                         EPS=SIMP(statut='f',typ='R',defaut=0. ),
+                                        ),
+                           REGUL   =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","NORM_MIN","TIK_RELA",) ),
+                           b_regul =BLOC(condition="REGUL!='NON'",
+                                         regles=(PRESENT_ABSENT('COEF_PONDER','COEF_PONDER_F', ),),
+                                         COEF_PONDER   =SIMP(statut='f',typ='R',defaut=0.     ,max='**' ),
+                                         COEF_PONDER_F =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**' ),
+                                        ),
+                                             ),
+                   )
+#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GREFFET N.GREFFET
+
+from Macro.macro_matr_ajou_ops import macro_matr_ajou_ops
+
+def macro_matr_ajou_prod(self,MATR_AMOR_AJOU,MATR_MASS_AJOU,MATR_RIGI_AJOU,FORC_AJOU,**args):
+  self.type_sdprod(MATR_AMOR_AJOU,matr_asse_gene_r)
+  self.type_sdprod(MATR_MASS_AJOU,matr_asse_gene_r)
+  self.type_sdprod(MATR_RIGI_AJOU,matr_asse_gene_r)
+  if FORC_AJOU != None:
+    for m in FORC_AJOU:
+      self.type_sdprod(m['VECTEUR'],vect_asse_gene)
+
+  return None
+
+MACRO_MATR_AJOU=MACRO(nom="MACRO_MATR_AJOU",op=macro_matr_ajou_ops,sd_prod=macro_matr_ajou_prod,
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+            fr="Calculer de facon plus condensée qu'avec CALC_MATR_AJOU des matrices de masse, d'amortissement"
+              +" ou de rigidité ajoutés",
+      regles=(AU_MOINS_UN('MODE_MECA','DEPL_IMPO','MODELE_GENE'),
+              AU_MOINS_UN('MATR_MASS_AJOU','MATR_AMOR_AJOU','MATR_RIGI_AJOU'),
+              EXCLUS('MODE_MECA','DEPL_IMPO','MODELE_GENE'),
+              EXCLUS('MONO_APPUI','MODE_STAT',),
+             ),
+         MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster),
+         GROUP_MA_FLUIDE =SIMP(statut='o',typ=grma),
+         GROUP_MA_INTERF =SIMP(statut='o',typ=grma),
+         MODELISATION    =SIMP(statut='o',typ='TXM',into=("PLAN","AXIS","3D")),
+         FLUIDE          =FACT(statut='o',max='**',
+           RHO             =SIMP(statut='o',typ='R'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           MAILLE          =SIMP(statut='f',typ=ma),
+         ),
+         DDL_IMPO        =FACT(statut='o',max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO'),
+                   UN_PARMI('PRES_FLUIDE','PRES_SORTIE'),),
+           NOEUD           =SIMP(statut='f',typ=no),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+           PRES_FLUIDE     =SIMP(statut='f',typ='R'),
+           PRES_SORTIE     =SIMP(statut='f',typ='R'),
+         ),
+         ECOULEMENT      =FACT(statut='f',
+           GROUP_MA_1      =SIMP(statut='o',typ=grma),
+           GROUP_MA_2      =SIMP(statut='o',typ=grma),
+           VNOR_1          =SIMP(statut='o',typ='R'),
+           VNOR_2          =SIMP(statut='f',typ='R'),
+           POTENTIEL       =SIMP(statut='f',typ=evol_ther),
+         ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca),
+         DEPL_IMPO       =SIMP(statut='f',typ=cham_no_sdaster),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene),
+         NUME_DDL_GENE   =SIMP(statut='f',typ=nume_ddl_gene),
+         DIST_REFE       =SIMP(statut='f',typ='R',defaut= 1.0E-2),
+         MATR_MASS_AJOU  =SIMP(statut='f',typ=CO,),
+         MATR_RIGI_AJOU  =SIMP(statut='f',typ=CO,),
+         MATR_AMOR_AJOU  =SIMP(statut='f',typ=CO,),
+         MONO_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",),),
+         MODE_STAT       =SIMP(statut='f',typ=mode_meca,),
+         FORC_AJOU       =FACT(statut='f',max='**',
+           DIRECTION     =SIMP(statut='o',typ='R',max=3),
+           NOEUD         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           VECTEUR       =SIMP(statut='o',typ=CO),
+         ),
+         SOLVEUR         =FACT(statut='d',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt         =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+             b_ldltinc       =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+               NIVE_REMPLISSAGE    =SIMP(statut='f',typ='I',defaut= 0 ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+               ),
+             b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.0E-6,),
+             OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             ),
+
+           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+             ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+               NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+               REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+             ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
+           ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         NOEUD_DOUBLE    =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         AVEC_MODE_STAT  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+)
+#& MODIF COMMANDE  DATE 17/11/2008   AUTEUR DELMAS J.DELMAS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+
+from Macro.macro_matr_asse_ops import macro_matr_asse_ops
+
+def macro_matr_asse_prod(self,NUME_DDL,MATR_ASSE,**args):
+  if not MATR_ASSE:  raise AsException("Impossible de typer les concepts resultats")
+  if not NUME_DDL :  raise AsException("Impossible de typer les concepts resultats")
+  if isinstance(NUME_DDL,CO) :
+    self.type_sdprod(NUME_DDL,nume_ddl_sdaster)
+  else:
+    self.type_sdprod(NUME_DDL,NUME_DDL.__class__)
+  for m in MATR_ASSE:
+    opti=m['OPTION']
+
+    if opti in ( "RIGI_MECA","RIGI_FLUI_STRU","RIGI_MECA_LAGR" ,
+       "MASS_MECA" , "MASS_FLUI_STRU" ,"RIGI_GEOM" ,"RIGI_ROTA",
+       "AMOR_MECA","IMPE_MECA",
+       "ONDE_FLUI","MASS_MECA_DIAG","MECA_GYRO" ) : t=matr_asse_depl_r
+
+    if opti in ( "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",) : t=matr_asse_pres_c
+
+    if opti in ( "RIGI_THER","MASS_THER","RIGI_THER_CONV" ,
+       "RIGI_THER_CONV_D",) : t=matr_asse_temp_r
+
+    if opti == "RIGI_MECA_HYST"   : t= matr_asse_depl_c
+
+    self.type_sdprod(m['MATRICE'],t)
+  return None
+
+MACRO_MATR_ASSE=MACRO(nom="MACRO_MATR_ASSE",op=macro_matr_asse_ops,
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+                      sd_prod=macro_matr_asse_prod,
+                      fr="Calcul des matrices assemblées (rigidité, masse, amortissement,...) ",
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         INST            =SIMP(statut='f',typ='R',defaut=0.),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou),validators=NoRepeat(),max='**'),
+         CHAR_CINE       =SIMP(statut='f',typ=(char_cine_meca,char_cine_ther,char_cine_acou) ),
+         NUME_DDL        =SIMP(statut='o',typ=(nume_ddl_sdaster,CO)),
+         SOLVEUR         =FACT(statut='d',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+         b_mult_front    =BLOC(condition="METHODE=='MULT_FRONT'",fr="Paramètres associés à la méthode multifrontale",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("MD","MDA","METIS"),defaut="METIS" ),
+         ),
+         b_ldlt          =BLOC(condition="METHODE=='LDLT'",fr="Paramètres associés à la méthode LDLT",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
+         ),
+         b_mumps         =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+           RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+           OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+         ),
+         b_gcpc          =BLOC(condition="METHODE=='GCPC'",fr="Paramètres associés à la méthode gradient conjugué",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
+         ),
+         b_petsc         =BLOC(condition = "METHODE == 'PETSC'",fr="Paramètres de la méthode PETSC",
+           RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+         ),
+         ),
+
+         MATR_ASSE       =FACT(statut='o',max='**',
+             MATRICE         =SIMP(statut='o',typ=CO),
+             OPTION          =SIMP(statut='o',typ='TXM',
+                                   into=("RIGI_MECA","MASS_MECA","MASS_MECA_DIAG",
+                                         "AMOR_MECA","RIGI_MECA_HYST","IMPE_MECA",
+                                         "ONDE_FLUI","RIGI_FLUI_STRU","MASS_FLUI_STRU",
+                                         "RIGI_ROTA","RIGI_GEOM","RIGI_MECA_LAGR","MECA_GYRO",
+                                         "RIGI_THER","MASS_THER",
+                                         "RIGI_ACOU","MASS_ACOU","AMOR_ACOU",)
+                                   ),
+
+             b_rigi_meca = BLOC( condition = "OPTION=='RIGI_MECA'",
+               MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0),
+             ),
+
+             b_rigi_geom = BLOC( condition = "OPTION=='RIGI_GEOM'",
+               SIEF_ELGA       =SIMP(statut='o',typ=cham_elem),
+               MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0),
+             ),
+
+             b_rigi_meca_lagr = BLOC( condition = "OPTION=='RIGI_MECA_LAGR'",
+               THETA           =SIMP(statut='o',typ=theta_geom),
+               PROPAGATION     =SIMP(statut='f',typ='R'),
+             ),
+
+             b_rigi_ther = BLOC( condition = "OPTION=='RIGI_THER'",
+               MODE_FOURIER    =SIMP(statut='f',typ='I',defaut= 0),
+             ),
+
+         ), # fin MATR_ASSE
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 16/02/2010   AUTEUR GREFFET N.GREFFET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+
+from Macro.macro_miss_3d_ops import macro_miss_3d_ops
+
+MACRO_MISS_3D=MACRO(nom="MACRO_MISS_3D",op=macro_miss_3d_ops,
+            fr="Préparation des données puis exécution du logiciel MISS3D",
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         OPTION          =FACT(statut='o',
+           regles=(UN_PARMI('TOUT','MODULE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           MODULE          =SIMP(statut='f',typ='TXM',into=("PRE_MISS","MISS_EVOL","MISS_IMPE")),
+         ),
+         PROJET          =SIMP(statut='o',typ='TXM'),  
+         REPERTOIRE      =SIMP(statut='f',typ='TXM'),
+         VERSION         =SIMP(statut='f',typ='TXM',into=("V1_3","V1_4","V1_5",),defaut="V1_4"),
+         UNITE_IMPR_ASTER=SIMP(statut='f',typ='I',defaut=25),  
+         UNITE_OPTI_MISS =SIMP(statut='f',typ='I',defaut=26),  
+         UNITE_MODELE_SOL=SIMP(statut='f',typ='I',defaut=27),  
+         TABLE_SOL       =SIMP(statut='f',typ=table_sdaster, fr="Caractéristiques du sol"),  
+         UNITE_RESU_IMPE =SIMP(statut='f',typ='I',defaut=30),
+         UNITE_RESU_FORC =SIMP(statut='f',typ='I',defaut=0),
+         PARAMETRE       =FACT(statut='f',         
+           regles=(PRESENT_PRESENT('FREQ_MIN','FREQ_MAX','FREQ_PAS'),
+                   PRESENT_PRESENT('CONTR_NB','CONTR_LISTE'),
+                   PRESENT_PRESENT('LFREQ_NB','LFREQ_LISTE'),
+                   PRESENT_PRESENT('OFFSET_MAX','OFFSET_NB'),
+                   PRESENT_PRESENT('SPEC_MAX','SPEC_NB'),),
+           FREQ_MIN        =SIMP(statut='f',typ='R'), 
+           FREQ_MAX        =SIMP(statut='f',typ='R'),
+           FREQ_PAS        =SIMP(statut='f',typ='R'),
+           Z0              =SIMP(statut='f',typ='R'), 
+           SURF            =SIMP(statut='f',typ='TXM',into=("OUI","NON",),defaut="NON"),
+           RFIC            =SIMP(statut='f',typ='R'),
+           FICH_RESU_IMPE  =SIMP(statut='f',typ='TXM'),
+           FICH_RESU_FORC  =SIMP(statut='f',typ='TXM'),
+           TYPE            =SIMP(statut='f',typ='TXM',into=("BINAIRE","ASCII",),defaut="ASCII"),
+           DREF            =SIMP(statut='f',typ='R'),
+           ALGO            =SIMP(statut='f',typ='TXM',into=("DEPL","REGU")),
+           OFFSET_MAX      =SIMP(statut='f',typ='R'),
+           OFFSET_NB       =SIMP(statut='f',typ='I'),
+           SPEC_MAX        =SIMP(statut='f',typ='R'),
+           SPEC_NB         =SIMP(statut='f',typ='I'),
+           ISSF            =SIMP(statut='f',typ='TXM',into=("OUI","NON",),defaut="NON"),
+           FICH_POST_TRAI  =SIMP(statut='f',typ='TXM'),
+           CONTR_NB        =SIMP(statut='f',typ='I'),
+           CONTR_LISTE     =SIMP(statut='f',typ='R',max='**'),
+           LFREQ_NB        =SIMP(statut='f',typ='I'),
+           LFREQ_LISTE     =SIMP(statut='f',typ='R',max='**'),
+           DIRE_ONDE       =SIMP(statut='f',typ='R',max='**'),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 05/05/2008   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+
+from Macro.macro_mode_meca_ops import macro_mode_meca_ops
+
+MACRO_MODE_MECA=MACRO(nom="MACRO_MODE_MECA",op=macro_mode_meca_ops,sd_prod=mode_meca,
+                     reentrant='n',fr="Lancer une succession de calculs de modes propres réels",
+            UIinfo={"groupes":("Résolution",)},
+         MATR_A          =SIMP(statut='o',typ=matr_asse_depl_r ),
+         MATR_B          =SIMP(statut='o',typ=matr_asse_depl_r ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+#  ce mot cle ne devrait il pas etre dans calc_freq  
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="SORENSEN",    
+                               into=("TRI_DIAG","JACOBI","SORENSEN",) ),
+         b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
+           PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ),
+           NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+           PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-8,val_min=0.E+0 ),
+           NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ), 
+         ),
+         b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
+           PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.E-10,val_min=0.E+0 ),
+           NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40,val_min=0 ),
+           PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+           NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12,val_min=0 ),
+         ),
+         b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
+           PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E+0,val_min=0.E+0 ),  
+           NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ),  
+           PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ),
+         ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="SANS",    
+                               into=("MODE_RIGIDE","SANS") ),
+         CALC_FREQ       =FACT(statut='d',min=0,
+           regles=(UN_PARMI('FREQ','FREQ_MAX'),
+                   PRESENT_PRESENT('FREQ_MIN','FREQ_MAX'),
+                   PRESENT_PRESENT('FREQ_MAX','NB_BLOC_FREQ'),
+                   EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
+           FREQ            =SIMP(statut='f',typ='R',min=2,validators=NoRepeat(),max='**', ),  
+           FREQ_MIN        =SIMP(statut='f',typ='R' ),  
+           FREQ_MAX        =SIMP(statut='f',typ='R' ),  
+           NB_BLOC_FREQ    =SIMP(statut='f',typ='I' ),  
+           DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),  
+           COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
+           NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8 ),  
+           NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5 ),  
+           PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2 ),  
+           SEUIL_FREQ      =SIMP(statut='f',typ='R' ,defaut= 1.E-2 ),  
+           STOP_FREQ_VIDE  =SIMP(statut='f',typ='TXM',defaut="NON" ,into=("OUI","NON") ),
+         ),
+         VERI_MODE       =FACT(statut='d',min=0,
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-6 ),  
+           PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-3 ),  
+           STURM           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         NORM_MODE       =FACT(statut='o',max='**',
+           NORME           =SIMP(statut='f',typ='TXM',defaut="TRAN_ROTA",    
+                                 into=("MASS_GENE","RIGI_GENE","EUCL",           
+                                       "EUCL_TRAN","TRAN","TRAN_ROTA") ),
+           INFO            =SIMP(statut='f',typ='I',defaut= 1 ,into=(1,2) ),
+         ),
+         FILTRE_MODE     =FACT(statut='f',
+           CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",    
+                                 into=("MASS_EFFE_UN","MASS_GENE") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-3 ),  
+         ),
+         IMPRESSION      =FACT(statut='d',
+           TOUT_PARA       =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           CUMUL           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           CRIT_EXTR       =SIMP(statut='f',typ='TXM',defaut="MASS_EFFE_UN",    
+                                 into=("MASS_EFFE_UN","MASS_GENE",) ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
+
+from Macro.macro_proj_base_ops import macro_proj_base_ops
+
+def macro_proj_base_prod(self,MATR_ASSE_GENE,VECT_ASSE_GENE,PROFIL,**args ):
+  if MATR_ASSE_GENE != None:
+    for m in MATR_ASSE_GENE:
+      self.type_sdprod(m['MATRICE'],matr_asse_gene_r)
+  if VECT_ASSE_GENE != None:
+    for v in VECT_ASSE_GENE:
+      self.type_sdprod(v['VECTEUR'],vect_asse_gene)
+  return None
+
+MACRO_PROJ_BASE=MACRO(nom="MACRO_PROJ_BASE",op=macro_proj_base_ops,
+         regles=(AU_MOINS_UN('MATR_ASSE_GENE','VECT_ASSE_GENE')),
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+                      sd_prod=macro_proj_base_prod,
+         fr="Projection des matrices et/ou vecteurs assemblés sur une base (modale ou de RITZ)",
+         BASE            =SIMP(statut='o',typ=(mode_meca,mode_gene) ),
+         NB_VECT         =SIMP(statut='f',typ='I',defaut= 9999),
+         PROFIL          =SIMP(statut='f',typ='TXM',defaut="DIAG",into=("PLEIN","DIAG") ),
+         MATR_ASSE_GENE  =FACT(statut='f',max='**',
+           MATRICE         =SIMP(statut='o',typ=CO,),
+           regles=(UN_PARMI('MATR_ASSE','MATR_ASSE_GENE',),),
+           MATR_ASSE       =SIMP(statut='f',typ=matr_asse_depl_r),
+           MATR_ASSE_GENE  =SIMP(statut='f',typ=matr_asse_gene_r),
+         ),
+         VECT_ASSE_GENE  =FACT(statut='f',max='**',
+           VECTEUR         =SIMP(statut='o',typ=CO,),
+           regles=(UN_PARMI('VECT_ASSE','VECT_ASSE_GENE',),),
+           TYPE_VECT       =SIMP(statut='f',typ='TXM',defaut="FORC"),
+           VECT_ASSE       =SIMP(statut='f',typ=cham_no_sdaster),
+           VECT_ASSE_GENE  =SIMP(statut='f',typ=vect_asse_gene),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+MAJ_CATA=PROC(nom="MAJ_CATA",op=20,
+            UIinfo={"groupes":("Gestion du travail",)},
+              fr="Compilation des catalogues de commandes et d'éléments",
+
+         ELEMENT         =FACT(statut='f',),
+
+)  ;
+#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+MECA_STATIQUE=OPER(nom="MECA_STATIQUE",op=46,sd_prod=evol_elas,
+                   fr="Résoudre un problème de mécanique statique linéaire",reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
+         regles=(EXCLUS("INST","LIST_INST"),
+                 AU_MOINS_UN('CHAM_MATER','CARA_ELEM',),
+                 CONCEPT_SENSIBLE('ENSEMBLE'),),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater,
+         fr="le CHAM_MATER est nécessaire, sauf si le modèle ne contient que des éléments discrets (modélisations DIS_XXX)",
+         ang="CHAM_MATER is compulsory, except if the model contains only discret elements (modelizations DIS_XXX)"),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem,
+         fr="le CARA_ELEM est nécessaire dès que le modèle contient des éléments de structure : coques, poutres, ...",
+         ang="CARA_ELEM is compulsory as soon as the model contains structural elements : plates, beams, ..."),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         EXCIT           =FACT(statut='o',max='**',
+           CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE",into=("FIXE",) ),
+         ),
+         INST            =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+         INST_FIN        =SIMP(statut='f',typ='R'),
+         OPTION          =SIMP(statut='f',typ='TXM',into=("SIEF_ELGA_DEPL","SANS"),defaut="SIEF_ELGA_DEPL",max=1,
+             fr="seule option : contraintes aux points de Gauss. Utiliser CALC_ELEM pour les autres.",
+                          ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters"),
+
+         SOLVEUR         =FACT(statut='d',
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","FETI","MUMPS","PETSC") ),
+
+           b_feti          =BLOC(condition = "METHODE == 'FETI' ",fr="Paramètres de la méthode FETI 1",
+             PARTITION       =SIMP(statut='o',typ=sd_feti_sdaster),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.E-6,val_min=0.),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+             REAC_RESI       =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+             TYPE_REORTHO_DD =SIMP(statut='f',typ='TXM',defaut="GSM",into=("SANS","GS","GSM","IGSM") ),
+             NB_REORTHO_DD   =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+             NB_REORTHO_INST =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+             PRE_COND        =SIMP(statut='f',typ='TXM',defaut="LUMPE",into=("LUMPE","SANS") ),
+             SCALING         =SIMP(statut='f',typ='TXM',defaut="MULT",into=("SANS","MULT") ),
+             VERIF_SDFETI    =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+             TEST_CONTINU    =SIMP(statut='f',typ='R',defaut=1.E-8,val_min=0.),
+             INFO_FETI       =SIMP(statut='f',typ='TXM',defaut='FFFFFFFFFFFFFFFFFFFFFFFF'),
+             STOCKAGE_GI     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON","CAL") ),
+             NB_SD_PROC0     =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+             ACCELERATION_SM =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+
+           b_direct_hybride =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' or METHODE=='FETI' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+             b_ldltinc       =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+               NIVE_REMPLISSAGE    =SIMP(statut='f',typ='I',defaut= 0 ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+               ),
+             b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+
+           b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.0E-6,),
+             OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             MATR_DISTRIBUEE =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             ),
+
+           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+             ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+               NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+               REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+             ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
+           ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BODEL C.BODEL
+MODE_ITER_CYCL=OPER(nom="MODE_ITER_CYCL",op=  80,sd_prod=mode_cycl,
+                    fr="Calcul des modes propres d'une structure à répétitivité cyclique à partir"
+                        +" d'une base de modes propres réels",
+                    reentrant='n',
+            UIinfo={"groupes":("Résolution",)},
+         BASE_MODALE     =SIMP(statut='o',typ=mode_meca ),
+         NB_MODE         =SIMP(statut='f',typ='I',defaut= 999 ),
+         NB_SECTEUR      =SIMP(statut='o',typ='I' ),
+         LIAISON         =FACT(statut='o',
+           DROITE          =SIMP(statut='o',typ='TXM' ),
+           GAUCHE          =SIMP(statut='o',typ='TXM' ),
+           AXE             =SIMP(statut='f',typ='TXM' ),
+         ),
+         VERI_CYCL       =FACT(statut='f',
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF",) ),
+           DIST_REFE       =SIMP(statut='f',typ='R' ),
+         ),
+         CALCUL          =FACT(statut='o',
+           regles=(UN_PARMI('TOUT_DIAM','NB_DIAM'),),
+           TOUT_DIAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NB_DIAM         =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE"
+                                ,into=("PLUS_PETITE","CENTRE","BANDE") ),
+           b_centre      =BLOC(condition = "OPTION == 'CENTRE'",
+             FREQ            =SIMP(statut='o',typ='R',),
+           ),
+           b_bande       =BLOC(condition = "OPTION == 'BANDE'",
+             FREQ            =SIMP(statut='o',typ='R',min=2,validators=NoRepeat(),max=2),
+           ),
+#  NMAX_FREQ n a-t-il pas un sens qu avec OPTION CENTRE                                
+           NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10 ),
+           PREC_SEPARE     =SIMP(statut='f',typ='R',defaut= 100. ),
+           PREC_AJUSTE     =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+           NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 50 ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 05/05/2009   AUTEUR BOITEAU O.BOITEAU 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE O.BOITEAU
+
+def mode_iter_inv_prod(MATR_A,MATR_C,TYPE_RESU,**args ):
+  if TYPE_RESU == "MODE_FLAMB" : return mode_flamb
+  if AsType(MATR_C) == matr_asse_depl_r : return mode_meca_c
+  if AsType(MATR_A) == matr_asse_depl_r : return mode_meca
+  if AsType(MATR_A) == matr_asse_pres_r : return mode_acou
+  if AsType(MATR_A) == matr_asse_gene_r : return mode_gene
+  raise AsException("type de concept resultat non prevu")
+
+MODE_ITER_INV=OPER(nom="MODE_ITER_INV",op=  44,sd_prod=mode_iter_inv_prod
+                    ,fr="Calcul des modes propres par itérations inverses ; valeurs propres et modes réels ou complexes",
+                     reentrant='n',
+            UIinfo={"groupes":("Résolution",)},
+         regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
+         MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+         MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+         MATR_C          =SIMP(statut='f',typ=matr_asse_depl_r ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="DYNAMIQUE",   
+                               into=("MODE_FLAMB","DYNAMIQUE"),fr="Type d analyse" ),
+         b_dynam         =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
+           CALC_FREQ       =FACT(statut='o',fr="Choix des paramètres pour le calcul des valeurs propres",
+           
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="AJUSTE",into=("SEPARE","AJUSTE","PROCHE"),
+                                   fr="Choix de l option pour estimer les valeurs propres"  ),
+             FREQ            =SIMP(statut='o',typ='R',max='**'),
+             AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),     
+             NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 0,val_min=0 ),           
+             NMAX_ITER_SEPARE=SIMP(statut='f',typ='I' ,defaut= 30,val_min=0 ),
+             PREC_SEPARE     =SIMP(statut='f',typ='R',defaut= 1.E-4,val_min=0.E+0 ),
+             NMAX_ITER_AJUSTE=SIMP(statut='f',typ='I',defaut= 15,val_min=0 ),
+             PREC_AJUSTE     =SIMP(statut='f',typ='R',defaut= 1.E-4,val_min=0.E+0 ),
+
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0, ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0, ),
+           ),
+         ),
+         b_flamb        =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
+           CALC_FREQ       =FACT(statut='o',fr="Choix des paramètres pour le calcul des valeurs propres",
+           
+             OPTION          =SIMP(statut='f',typ='TXM',defaut="AJUSTE",into=("SEPARE","AJUSTE","PROCHE"),
+                                 fr="Choix de l option pour estimer les valeurs propres"  ),
+             CHAR_CRIT       =SIMP(statut='o',typ='R',validators=NoRepeat(),max='**' ),
+             NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 0,val_min=0 ),           
+             NMAX_ITER_SEPARE=SIMP(statut='f',typ='I' ,defaut= 30,val_min=0 ),
+             PREC_SEPARE     =SIMP(statut='f',typ='R',defaut= 1.E-4,val_min=0.E+0, ),
+             NMAX_ITER_AJUSTE=SIMP(statut='f',typ='I',defaut= 15 ),
+             PREC_AJUSTE     =SIMP(statut='f',typ='R',defaut= 1.E-4,val_min=0.E+0, ),
+           
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0, ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0, ),
+           ),
+         ),
+         CALC_MODE       =FACT(statut='d',min=0,fr="Choix des paramètres pour le calcul des vecteurs propres",
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="DIRECT",into=("DIRECT","RAYLEIGH") ),
+           PREC            =SIMP(statut='f',typ='R',defaut= 1.E-5,val_min=0.E+0,fr="Précision de convergence" ),
+           NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ),
+         ),
+         VERI_MODE       =FACT(statut='d',min=0,
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0,
+                                 fr="Valeur limite admise pour l ereur a posteriori des modes"  ),
+         ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des param\350tres de sensibilit\351.",
+                               ang="List of sensitivity parameters",
+         ),
+         b_sensibilite   =BLOC(condition = "SENSIBILITE != None",
+             CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+             CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+             EXCIT           =FACT(statut='f',max='**',),  # que pour NMDOME
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 05/05/2009   AUTEUR BOITEAU O.BOITEAU 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE O.BOITEAU
+
+def mode_iter_simult_prod(MATR_A,MATR_C,TYPE_RESU,**args ):
+  if TYPE_RESU == "MODE_FLAMB" : return mode_flamb
+  if AsType(MATR_C) == matr_asse_depl_r : return mode_meca_c
+  if AsType(MATR_A) == matr_asse_depl_r : return mode_meca
+  if AsType(MATR_A) == matr_asse_depl_c : return mode_meca_c
+  if AsType(MATR_A) == matr_asse_pres_r : return mode_acou
+  if AsType(MATR_A) == matr_asse_gene_r : return mode_gene
+  if AsType(MATR_A) == matr_asse_gene_c : return mode_gene
+
+  raise AsException("type de concept resultat non prevu")
+
+MODE_ITER_SIMULT=OPER(nom="MODE_ITER_SIMULT",op=  45,sd_prod=mode_iter_simult_prod,
+                      fr="Calcul des modes propres par itérations simultanées ; valeurs propres et"
+                         +" modes propres réels ou complexes",
+                      reentrant='n',
+            UIinfo={"groupes":("Résolution",)},
+         regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
+         MATR_A          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,
+                               matr_asse_gene_r,matr_asse_gene_c,matr_asse_pres_r ) ),
+         MATR_B          =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ) ),
+         MATR_C          =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r) ),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="SORENSEN",
+                               into=("TRI_DIAG","JACOBI","SORENSEN","QZ") ),
+         b_tri_diag =BLOC(condition = "METHODE == 'TRI_DIAG'",
+           PREC_ORTHO      =SIMP(statut='f',typ='R',defaut= 1.E-12,val_min=0.E+0 ),
+           NMAX_ITER_ORTHO =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+           PREC_LANCZOS    =SIMP(statut='f',typ='R',defaut= 1.E-8,val_min=0.E+0 ),
+           NMAX_ITER_QR    =SIMP(statut='f',typ='I',defaut= 30,val_min=0 ), 
+         ),
+         b_jacobi =BLOC(condition = "METHODE == 'JACOBI'",
+           PREC_BATHE      =SIMP(statut='f',typ='R',defaut= 1.E-10,val_min=0.E+0 ),
+           NMAX_ITER_BATHE =SIMP(statut='f',typ='I',defaut= 40,val_min=0 ),
+           PREC_JACOBI     =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+           NMAX_ITER_JACOBI=SIMP(statut='f',typ='I',defaut= 12,val_min=0 ),
+         ),
+         b_sorensen =BLOC(condition = "METHODE == 'SORENSEN'",
+           PREC_SOREN      =SIMP(statut='f',typ='R',defaut= 0.E+0,val_min=0.E+0 ),  
+           NMAX_ITER_SOREN =SIMP(statut='f',typ='I',defaut= 20,val_min=0 ),  
+           PARA_ORTHO_SOREN=SIMP(statut='f',typ='R',defaut= 0.717,val_min=0.E+0 ),
+         ),
+         b_qz =BLOC(condition = "METHODE == 'QZ'",
+           TYPE_QZ      =SIMP(statut='f',typ='TXM',defaut="QZ_SIMPLE",into=("QZ_QR","QZ_SIMPLE","QZ_EQUI") ),  
+         ),
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="DYNAMIQUE",
+                               into=("MODE_FLAMB","DYNAMIQUE"),
+                               fr="Type d analyse" ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="SANS",into=("MODE_RIGIDE","SANS"),
+                               fr="Calcul des modes de corps rigide, uniquement pour la méthode TRI_DIAG" ),
+
+         b_flamb         =BLOC(condition = "TYPE_RESU == 'MODE_FLAMB'",
+           CALC_FREQ       =FACT(statut='d',min=0,
+             OPTION       =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE","TOUT"),
+                                   fr="Choix de l option et par conséquent du shift du problème modal" ),
+             b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+             ),
+             b_centre      =BLOC(condition = "OPTION == 'CENTRE'",
+                                 fr="Recherche des valeurs propres les plus proches d une valeur donnée",
+               CHAR_CRIT       =SIMP(statut='o',typ='R',
+                                     fr="Charge critique autour de laquelle on cherche les charges critiques propres"),
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+             ),
+             b_bande       =BLOC(condition = "(OPTION == 'BANDE')",
+                                 fr="Recherche des valeurs propres dans une bande donnée",
+               CHAR_CRIT       =SIMP(statut='o',typ='R',min=2,validators=NoRepeat(),max=2,
+                                     fr="Valeur des deux charges critiques délimitant la bande de recherche"),
+             ),           
+             APPROCHE        =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG"),
+                                   fr="Choix du pseudo-produit scalaire pour la résolution du problème quadratique" ),           
+             regles=(EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
+             DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
+             COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0 ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+           ),
+         ),
+
+         b_dynam        =BLOC(condition = "TYPE_RESU == 'DYNAMIQUE'",
+           CALC_FREQ       =FACT(statut='d',min=0,
+             OPTION      =SIMP(statut='f',typ='TXM',defaut="PLUS_PETITE",into=("PLUS_PETITE","BANDE","CENTRE","TOUT"),
+                                   fr="Choix de l option et par conséquent du shift du problème modal" ),
+             b_plus_petite =BLOC(condition = "OPTION == 'PLUS_PETITE'",fr="Recherche des plus petites valeurs propres",
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+             ),
+             b_centre       =BLOC(condition = "OPTION == 'CENTRE'",
+                                  fr="Recherche des valeurs propres les plus proches d une valeur donnée",
+               FREQ            =SIMP(statut='o',typ='R',
+                                     fr="Fréquence autour de laquelle on cherche les fréquences propres"),
+               AMOR_REDUIT     =SIMP(statut='f',typ='R',),
+               NMAX_FREQ       =SIMP(statut='f',typ='I',defaut= 10,val_min=0 ),
+             ),
+             b_bande         =BLOC(condition = "(OPTION == 'BANDE')",
+                                   fr="Recherche des valeurs propres dans une bande donnée",
+               FREQ            =SIMP(statut='o',typ='R',min=2,validators=NoRepeat(),max=2,
+                                     fr="Valeur des deux fréquences délimitant la bande de recherche"),
+             ),           
+             APPROCHE        =SIMP(statut='f',typ='TXM',defaut="REEL",into=("REEL","IMAG","COMPLEXE"),
+                                   fr="Choix du pseudo-produit scalaire pour la résolution du problème quadratique" ),           
+             regles=(EXCLUS('DIM_SOUS_ESPACE','COEF_DIM_ESPACE'),),
+             DIM_SOUS_ESPACE =SIMP(statut='f',typ='I' ),
+             COEF_DIM_ESPACE =SIMP(statut='f',typ='I' ),
+             NPREC_SOLVEUR   =SIMP(statut='f',typ='I',defaut= 8,val_min=0 ),
+             NMAX_ITER_SHIFT =SIMP(statut='f',typ='I',defaut= 5,val_min=0 ),
+             PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-2,val_min=0.E+0 ),
+             SEUIL_FREQ      =SIMP(statut='f',typ='R',defaut= 1.E-2,val_min=0.E+0 ),
+           ),
+         ),
+
+         VERI_MODE       =FACT(statut='d',min=0,
+           STOP_ERREUR     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           PREC_SHIFT      =SIMP(statut='f',typ='R',defaut= 5.E-3,val_min=0.E+0 ),
+           SEUIL           =SIMP(statut='f',typ='R',defaut= 1.E-6,val_min=0.E+0,
+                                 fr="Valeur limite admise pour l ereur a posteriori des modes" ),
+           STURM           =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des param\350tres de sensibilit\351.",
+                               ang="List of sensitivity parameters",
+         ),
+         b_sensibilite   =BLOC(condition = "SENSIBILITE != None",
+             CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
+             CARA_ELEM       =SIMP(statut='f',typ=cara_elem ),
+             EXCIT           =FACT(statut='f',max='**',),  # que pour NMDOME
+         ),
+         STOP_FREQ_VIDE  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),        
+)  ;
+#& MODIF COMMANDE  DATE 13/10/2009   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+
+MODE_STATIQUE=OPER(nom="MODE_STATIQUE",op= 93,sd_prod=mode_meca,
+                   fr="Calcul de deformees statiques pour un déplacement, une force ou une accélération unitaire imposé",
+                   reentrant='n',
+            UIinfo={"groupes":("Résolution",)},
+         MATR_RIGI       =SIMP(statut='o',typ=matr_asse_depl_r ),
+         MATR_MASS       =SIMP(statut='f',typ=matr_asse_depl_r ),
+               regles=(UN_PARMI('MODE_STAT','FORCE_NODALE','PSEUDO_MODE'),),
+         MODE_STAT       =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
+                   UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ,),
+           NOEUD           =SIMP(statut='f',typ=no   ,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno ,max='**'),
+           TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ,),
+           AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+           SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         FORCE_NODALE    =FACT(statut='f',max='**',
+           regles=(UN_PARMI('TOUT','NOEUD','GROUP_NO'),
+                   UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",), ),
+           NOEUD           =SIMP(statut='f',typ=no   ,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno ,max='**'),
+           TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",), ),
+           AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+           SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+         ),
+         PSEUDO_MODE       =FACT(statut='f',max='**',
+           regles=(UN_PARMI('AXE','DIRECTION','TOUT','NOEUD','GROUP_NO' ),),
+           AXE             =SIMP(statut='f',typ='TXM',into=("X","Y","Z"),max=3),
+           DIRECTION       =SIMP(statut='f',typ='R',min=3,max=3),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           NOEUD           =SIMP(statut='f',typ=no   ,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno ,max='**'),
+           b_dir           =BLOC(condition = "DIRECTION != None",
+             NOM_DIR         =SIMP(statut='f',typ='TXM' ),),
+           b_cmp          =BLOC(condition="TOUT!= None or NOEUD!=None or GROUP_NO!=None",
+             regles=(UN_PARMI('TOUT_CMP','AVEC_CMP','SANS_CMP'),),
+             TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             AVEC_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+             SANS_CMP        =SIMP(statut='f',typ='TXM',max='**'),
+           ),
+         ),
+
+
+         SOLVEUR         =FACT(statut='d', fr="Méthode de résolution des systèmes linéaires",
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+
+
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+
+           b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             ),
+
+           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+             ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+               NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+               REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+             ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
+           ),
+
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC",),defaut="LDLT_INC" ),
+             NIVE_REMPLISSAGE=SIMP(statut='f',typ='I',defaut= 0 ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.E-6),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+         ),
+
+
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+MODI_BASE_MODALE=OPER(nom="MODI_BASE_MODALE",op= 149,sd_prod=mode_meca,
+                      reentrant='f',
+            fr="Définir la base modale d'une structure sous écoulement",
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+#  la commande modi_base _modale : reentrant = f ou o                      
+         regles=(EXCLUS('AMOR_UNIF','AMOR_REDUIT', ),),
+         BASE            =SIMP(statut='o',typ=mode_meca ),
+         BASE_ELAS_FLUI  =SIMP(statut='o',typ=melasflu_sdaster ),
+         NUME_VITE_FLUI  =SIMP(statut='o',typ='I' ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         AMOR_REDUIT     =SIMP(statut='f',typ='R',max='**'),
+         AMOR_UNIF       =SIMP(statut='f',typ='R' ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 14/10/2008   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+MODI_MAILLAGE=OPER(nom="MODI_MAILLAGE",op= 154,sd_prod=maillage_sdaster,
+                   fr="Effectuer des modifications sur un maillage existant: réorienter des mailles servant,"
+                      +" à l'application d'une pression, à la modélisation du contact,...",
+                   reentrant='o',
+            UIinfo={"groupes":("Maillage",)},
+      regles=(AU_MOINS_UN('ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+                       'TRANSLATION','ROTATION','MODI_BASE','ECHELLE','ORIE_SHB','SYMETRIE',
+                       'ORIE_LIGNE',),
+              PRESENT_ABSENT('ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+                       'ORIE_LIGNE'),
+              PRESENT_ABSENT('DEFORME','ORIE_FISSURE','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+                       'ORIE_LIGNE'),
+              PRESENT_ABSENT('EQUE_PIQUA','ORIE_FISSURE','DEFORME','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+                       'ORIE_LIGNE'),
+              PRESENT_ABSENT('ORIE_PEAU_2D','ORIE_FISSURE','DEFORME','EQUE_PIQUA',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','MODI_MAILLE',
+                       'ORIE_LIGNE'),
+              PRESENT_ABSENT('ORIE_PEAU_3D','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'PLAQ_TUBE','MODI_MAILLE',),
+              PRESENT_ABSENT('ORIE_NORM_COQUE','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'PLAQ_TUBE','MODI_MAILLE','ORIE_LIGNE'),
+              PRESENT_ABSENT('PLAQ_TUBE','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','MODI_MAILLE','ORIE_LIGNE'),
+              PRESENT_ABSENT('MODI_MAILLE','ORIE_FISSURE','DEFORME','EQUE_PIQUA','ORIE_PEAU_2D',
+                       'ORIE_PEAU_3D','ORIE_NORM_COQUE','PLAQ_TUBE','ORIE_LIGNE'),
+              EXCLUS('EQUE_PIQUA','PLAQ_TUBE'),
+              EXCLUS('EQUE_PIQUA','TUBE_COUDE'),
+              EXCLUS('ROTATION','MODI_BASE'),
+              EXCLUS('SYMETRIE','ROTATION'),
+              EXCLUS('SYMETRIE','TRANSLATION'),
+              EXCLUS('SYMETRIE','MODI_BASE'),
+              EXCLUS('SYMETRIE','ECHELLE'),
+              ),
+         MAILLAGE        =SIMP(statut='o',typ=maillage_sdaster ),
+
+         ORIE_FISSURE    =FACT(statut='f',
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+         ),
+
+         DEFORME         =FACT(statut='f',
+           OPTION          =SIMP(statut='o',typ='TXM',into=("TRAN","TRAN_APPUI") ),
+           DEPL            =SIMP(statut='o',typ=cham_no_sdaster ),
+        b_deform        =BLOC(condition = "OPTION=='TRAN_APPUI'",
+           GROUP_NO_APPUI = SIMP(statut='o',typ=grno,validators=NoRepeat(),max='**' ),
+           GROUP_NO_STRU  = SIMP(statut='o',typ=grno,validators=NoRepeat(),max='**' ),),
+         ),
+
+         EQUE_PIQUA      =FACT(statut='f',
+           GROUP_NO        =SIMP(statut='o',typ=grno),
+           E_BASE          =SIMP(statut='o',typ='R' ),
+           DEXT_BASE       =SIMP(statut='o',typ='R' ),
+           L_BASE          =SIMP(statut='o',typ='R' ),
+           L_CHANF         =SIMP(statut='o',typ='R' ),
+           TYPE            =SIMP(statut='o',typ='TXM',into=("TYPE_1","TYPE_2")),
+           H_SOUD          =SIMP(statut='o',typ='R' ),
+           ANGL_SOUD       =SIMP(statut='o',typ='R' ),
+           JEU_SOUD        =SIMP(statut='o',typ='R' ),
+           E_CORP          =SIMP(statut='o',typ='R' ),
+           DEXT_CORP       =SIMP(statut='o',typ='R' ),
+           AZIMUT          =SIMP(statut='o',typ='R' ),
+           RAFF_MAIL       =SIMP(statut='o',typ='TXM' ),
+           X_MAX           =SIMP(statut='o',typ='R' ),
+         ),
+         ORIE_PEAU_2D    =FACT(statut='f',max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_MA_SURF   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         ),
+         ORIE_PEAU_3D    =FACT(statut='f',max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_MA_VOLU   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         ),
+         ORIE_SHB       =FACT(statut='f',max=1,
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+         ),
+         ORIE_NORM_COQUE =FACT(statut='f',max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+           VECT_NORM       =SIMP(statut='f',typ='R',max=3),
+           b_vect_norm     =BLOC(condition = "VECT_NORM != None",
+             regles=UN_PARMI('NOEUD','GROUP_NO'),
+             NOEUD           =SIMP(statut='f',typ=no),
+             GROUP_NO        =SIMP(statut='f',typ=grno),
+           ),
+         ),
+         ORIE_LIGNE =FACT(statut='f',max='**',
+           GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+           VECT_TANG       =SIMP(statut='f',typ='R',max=3),
+           b_vect_tang     =BLOC(condition = "VECT_TANG != None",
+             regles=UN_PARMI('NOEUD','GROUP_NO'),
+             NOEUD           =SIMP(statut='f',typ=no),
+             GROUP_NO        =SIMP(statut='f',typ=grno),
+           ),
+         ),
+         PLAQ_TUBE       =FACT(statut='f',
+           DEXT            =SIMP(statut='o',typ='R' ),
+           EPAIS           =SIMP(statut='o',typ='R' ),
+           L_TUBE_P1       =SIMP(statut='o',typ='R' ),
+           AZIMUT          =SIMP(statut='f',typ='R',defaut= 90. ),
+           COUTURE         =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON",)  ),
+         ),
+         TUBE_COUDE      =FACT(statut='f',
+           ANGLE           =SIMP(statut='o',typ='R' ),
+           R_CINTR         =SIMP(statut='o',typ='R' ),
+           L_TUBE_P1       =SIMP(statut='o',typ='R' ),
+         ),
+         MODI_MAILLE     =FACT(statut='f',max=1,
+           regles=(AU_MOINS_UN('GROUP_MA_FOND','MAILLE_FOND','GROUP_NO_FOND','NOEUD_FOND'),),
+           OPTION          =SIMP(statut='o',typ='TXM',into=("NOEUD_QUART",) ),
+           GROUP_MA_FOND   =SIMP(statut='f',typ=grma,validators=NoRepeat(),max=1),
+           MAILLE_FOND     =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max=1),
+           GROUP_NO_FOND   =SIMP(statut='f',typ=grno,validators=NoRepeat(),max=1),
+           NOEUD_FOND      =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max=1),
+         ),
+         MODI_BASE       =FACT(statut='f',
+           VECT_X          =SIMP(statut='o',typ='R',min=2,max=3),
+           VECT_Y          =SIMP(statut='f',typ='R',min=2,max=3),
+         ),
+         ECHELLE         =SIMP(statut='f',typ='R',),
+         TRANSLATION     =SIMP(statut='f',typ='R',min=2,max=3),
+         ROTATION        =FACT(statut='f',max='**',
+           POIN_1           =SIMP(statut='o',typ='R',min=2,max=3),
+           ANGL             =SIMP(statut='o',typ='R',defaut= 0.E+0 ),
+           regles=(EXCLUS('DIR','POIN_2'),),
+           POIN_2           =SIMP(statut='f',typ='R',min=2,max=3),
+           DIR              =SIMP(statut='f',typ='R',min=2,max=3),
+         ),
+         SYMETRIE        =FACT(statut='f',max='**',
+                          fr = "Symétrie du maillage par rapport à un plan en 3D ou à une droite en 2D.",
+           POINT           =SIMP(statut='o',typ='R',min=2,max=3,
+                            fr="Point appartenant à la droite ou au plan."),
+           AXE_1           =SIMP(statut='o',typ='R',min=2,max=3,
+                            fr="Vecteur directeur de la droite ou 1er vecteur appartenant au plan."),
+           AXE_2           =SIMP(statut='f',typ='R',min=3,max=3,
+                            fr="2nd vecteur appartenant du plan."),
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 16/06/2009   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+
+MODI_MODELE=OPER(nom="MODI_MODELE",op= 103,sd_prod=modele_sdaster,reentrant='o',
+         UIinfo={"groupes":("Modélisation",)},
+         fr="Modifier la partition d'un modèle (parallélisme) ",
+
+         MODELE          =SIMP(statut='o',typ=modele_sdaster,min=1,max=1,),
+
+         PARTITION         =FACT(statut='d',
+             PARALLELISME    =SIMP(statut='f',typ='TXM',defaut="MAIL_DISPERSE",
+                                   into=("MAIL_CONTIGU","MAIL_DISPERSE","SOUS_DOMAINE","CENTRALISE",)),
+             b_dist_maille          =BLOC(condition = "PARALLELISME in ('MAIL_DISPERSE','MAIL_CONTIGU')",
+                 CHARGE_PROC0_MA =SIMP(statut='f',typ='I',defaut=100,val_min=0),
+             ),
+             b_dist_sd          =BLOC(condition = "PARALLELISME == 'SOUS_DOMAINE'",
+                 PARTITION       =SIMP(statut='o',typ=sd_feti_sdaster),
+                 CHARGE_PROC0_SD =SIMP(statut='f',typ='I',defaut=0,val_min=0),
+             ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 20/04/2009   AUTEUR GENIAUT S.GENIAUT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+
+MODI_MODELE_XFEM=OPER(nom="MODI_MODELE_XFEM",op= 113,sd_prod=modele_sdaster,docu="U4.44.12-e",reentrant='f',
+            UIinfo={"groupes":("Modélisation",)},
+                           fr="Engendrer ou enrichir une structure de donnees en affectant les cham_gd associes",
+                           
+    MODELE_IN       =SIMP(statut='o',typ=modele_sdaster,min=1,max=1,),
+    FISSURE         =SIMP(statut='o',typ=fiss_xfem,min=1,max='**',),
+    CRITERE         =SIMP(statut='f',typ='R',defaut=1.1E-4),
+    INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,)),
+    CONTACT         =SIMP(statut='f',typ='TXM',defaut='NON',into=("OUI","NON"),min=1,max=1,),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE KHAM M.KHAM
+MODI_OBSTACLE=OPER(nom="MODI_OBSTACLE",op=182,sd_prod=table_fonction,
+            fr="Calculer les obstacles dans les systèmes guidage-tube après usure",
+            reentrant='f',
+            UIinfo={"groupes":("Modélisation",)},
+      regles=(PRESENT_ABSENT('R_MOBILE','CRAYON'),
+              PRESENT_PRESENT('V_USUR_TUBE','V_USUR_OBST'),),
+         OBSTACLE        =SIMP(statut='f',typ=table_fonction),
+         GUIDE           =SIMP(statut='o',typ=table_sdaster),
+         CRAYON          =SIMP(statut='f',typ=table_sdaster),
+         TABL_USURE      =SIMP(statut='f',typ=table_sdaster),
+         INST            =SIMP(statut='f',typ='R'),  
+         R_MOBILE        =SIMP(statut='f',typ='R'),  
+         PERCEMENT       =SIMP(statut='f',typ='R',defaut=1),  
+         V_USUR_TUBE     =SIMP(statut='f',typ='R',max='**'),
+         V_USUR_OBST     =SIMP(statut='f',typ='R',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 02/03/2010   AUTEUR MACOCCO K.MACOCCO 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+def modi_repere_prod(RESULTAT,**args):
+  if AsType(RESULTAT) != None : return AsType(RESULTAT)
+
+MODI_REPERE=OPER(nom="MODI_REPERE",op=191,sd_prod=modi_repere_prod,reentrant='n',
+            UIinfo={"groupes":("Résultats et champs",)},
+                    fr="Calcule des résultats dans le repère cylindrique",
+         RESULTAT        =SIMP(statut='o',typ=resultat_sdaster),
+
+         regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                        'NOEUD_CMP','LIST_INST','LIST_FREQ','NOM_CAS'),),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         NOM_CAS         =SIMP(statut='f',typ='TXM' ),
+
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+         b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+         b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+             PRECISION       =SIMP(statut='o',typ='R',),),
+
+         MODI_CHAM       =FACT(statut='o',max='**',
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TYPE_CHAM       =SIMP(statut='o',typ='TXM',
+                                 into=("VECT_2D","VECT_3D","TORS_3D","TENS_2D","TENS_3D"),),
+           NOM_CHAM        =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO()),
+           b_vect_2d       =BLOC(condition = "TYPE_CHAM=='VECT_2D'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=2,max=2 ),),
+           b_vect_3d       =BLOC(condition = "TYPE_CHAM=='VECT_3D'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=3,max=3 ),),
+           b_tors_3d       =BLOC(condition = "TYPE_CHAM=='TORS_3D'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=6,max=6 ),),
+           b_tens_2d       =BLOC(condition = "TYPE_CHAM=='TENS_2D'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=4,max=4 ),),
+           b_tens_3d       =BLOC(condition = "TYPE_CHAM=='TENS_3D'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=6,max=6 ),),
+         ),
+         DEFI_REPERE     =FACT(statut='o',
+         regles=(UN_PARMI('ANGL_NAUT','ORIGINE','VECT_X'),),
+           REPERE          =SIMP(statut='f',typ='TXM',defaut="UTILISATEUR",
+                                 into=("UTILISATEUR","CYLINDRIQUE"),),
+           ANGL_NAUT       =SIMP(statut='f',typ='R',max=3),
+           ORIGINE         =SIMP(statut='f',typ='R',min=2,max=3),
+           AXE_Z           =SIMP(statut='f',typ='R',min=3,max=3),
+           VECT_X          =SIMP(statut='f',typ='R',min=3,max=3 ),
+           b_vecteurs      =BLOC(condition = "VECT_X != None",             
+              VECT_Y         =SIMP(statut='o',typ='R',min=3,max=3 ),),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE NISTOR I.NISTOR
+
+def norm_mode_prod(MODE,**args ):
+  if AsType(MODE) == mode_meca   : return mode_meca
+  if AsType(MODE) == mode_meca_c : return mode_meca_c
+  if AsType(MODE) == mode_flamb  : return mode_flamb
+  raise AsException("type de concept resultat non prevu")
+
+NORM_MODE=OPER(nom="NORM_MODE",op=  37,sd_prod=norm_mode_prod,
+               fr="Normer des modes propres en fonction d'un critère choisi par l'utilisateur",
+               reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
+         regles=(UN_PARMI('NORME','NOEUD','AVEC_CMP','SANS_CMP'),
+                 CONCEPT_SENSIBLE('SEPARE'),
+                 DERIVABLE('MODE'),),
+         MODE       =SIMP(statut='o',typ=(mode_meca,mode_flamb) ),
+         NORME      =SIMP(statut='f',typ='TXM',fr="Norme prédéfinie : masse généralisée, euclidienne,...",
+                          into=("MASS_GENE","RIGI_GENE","EUCL","EUCL_TRAN","TRAN","TRAN_ROTA") ),
+         NOEUD      =SIMP(statut='f',typ=no, fr="Composante donnée d un noeud spécifié égale à 1"),
+         b_noeud    =BLOC(condition = "NOEUD != None",
+           NOM_CMP    =SIMP(statut='o',typ='TXM' ),
+         ),
+         AVEC_CMP   =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         SANS_CMP   =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         MODE_SIGNE =FACT(statut='f',fr="Imposer un signe sur une des composantes des modes",
+           NOEUD      =SIMP(statut='o',typ=no,fr="Noeud ou sera imposé le signe"),
+           NOM_CMP    =SIMP(statut='o',typ='TXM',fr="Composante du noeud ou sera imposé le signe" ),
+           SIGNE      =SIMP(statut='f',typ='TXM',defaut="POSITIF",into=("NEGATIF","POSITIF"),
+                            fr="Choix du signe" ),
+         ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des param\350tres de sensibilit\351.",
+                               ang="List of sensitivity parameters",
+         ),
+#         b_base    =BLOC(condition = "AsType(MODE) == base_modale",
+#              MASSE = SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ), ),
+#              RAIDE = SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_gene_r,matr_asse_pres_r ), ),
+#              AMOR  = SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r) ),
+#         ),
+         MASSE = SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r,matr_asse_pres_r ), ),
+         RAIDE = SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_gene_r,matr_asse_pres_r ), ),
+         AMOR  = SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_gene_r) ),
+         TITRE      =SIMP(statut='f',typ='TXM',max='**'),
+         INFO       =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
+)  ;
+#& MODIF COMMANDE  DATE 08/08/2008   AUTEUR DESOZA T.DESOZA 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+NUME_DDL=OPER(nom="NUME_DDL",op=11,sd_prod=nume_ddl_sdaster,reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+              fr="Etablissement de la numérotation des ddl avec ou sans renumérotation et du stockage de la matrice",
+                  regles=(UN_PARMI('MATR_RIGI','MODELE'),),
+         MATR_RIGI       =SIMP(statut='f',validators=NoRepeat(),max=100,
+                               typ=(matr_elem_depl_r ,matr_elem_depl_c,matr_elem_temp_r ,matr_elem_pres_c) ),
+         MODELE          =SIMP(statut='f',typ=modele_sdaster ),
+         b_modele        =BLOC(condition = "MODELE != None",
+           CHARGE     =SIMP(statut='f',validators=NoRepeat(),max='**',typ=(char_meca,char_ther,char_acou, ),),
+         ),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","PETSC","MUMPS") ),
+         b_mult_front    =BLOC(condition="METHODE=='MULT_FRONT'",fr="paramètres associés à la méthode multifrontale",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("MD","MDA","METIS"),defaut="METIS" ),
+         ),
+         b_ldlt          =BLOC(condition="METHODE=='LDLT'",fr="paramètres associés à la méthode LDLT",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
+         ),
+         b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+           RENUM         =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+         ),
+         b_gcpc          =BLOC(condition="METHODE=='GCPC' or METHODE=='PETSC'",fr="paramètres associés à la GCPC ou PETSc",
+           RENUM           =SIMP(statut='f',typ='TXM',into=("RCMK","SANS"),defaut="RCMK"  ),
+         ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BODEL C.BODEL
+NUME_DDL_GENE=OPER(nom="NUME_DDL_GENE",op= 127,sd_prod=nume_ddl_gene,
+                   fr="Etablissement de la numérotation des ddl d'un modèle établi en coordonnées généralisées",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         regles=UN_PARMI('MODELE_GENE','BASE'),
+         MODELE_GENE     =SIMP(statut='f',typ=modele_gene ),
+             b_modele_gene     =BLOC(condition = "MODELE_GENE != None",
+               STOCKAGE     =SIMP(statut='f',typ='TXM',defaut="LIGN_CIEL",into=("LIGN_CIEL","PLEIN") ),
+               METHODE            =SIMP(statut='f',typ='TXM',defaut="CLASSIQUE",into=("INITIAL","CLASSIQUE") ),
+                                    ),
+         BASE     =SIMP(statut='f',typ=(mode_meca,mode_gene ) ),
+             b_base     =BLOC(condition = "BASE != None",
+               STOCKAGE     =SIMP(statut='f',typ='TXM',defaut="DIAG",into=("DIAG","PLEIN") ),
+               NB_VECT     =SIMP(statut='f',typ='I',defaut= 9999 ),
+                             ),
+)  ;
+#& MODIF COMMANDE  DATE 14/12/2009   AUTEUR ANDRIAM H.ANDRIAMBOLOLONA 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE BODEL C.BODEL
+
+from Macro.observation_ops import observation_ops
+
+
+def observation_prod(self, RESULTAT, **args):
+    if  AsType(RESULTAT) == mode_meca :
+        return mode_meca
+    elif AsType(RESULTAT) == evol_elas :
+        return evol_elas
+    elif AsType(RESULTAT) == dyna_harmo :
+        return dyna_harmo
+    elif AsType(RESULTAT) == dyna_trans :
+        return dyna_trans
+    else :
+        return None
+
+OBSERVATION=MACRO(nom="OBSERVATION",op=observation_ops,
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+                      sd_prod=observation_prod,
+                      fr="Calcul de l'observabilite d'un champ aux noeuds ",
+#
+         MODELE_1        =SIMP(statut='o',typ=modele_sdaster),
+         MODELE_2        =SIMP(statut='o',typ=modele_sdaster),
+         RESULTAT        =SIMP(statut='o',typ=(mode_meca,evol_elas,dyna_harmo,dyna_trans,) ),
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1),
+
+#        ------------------------------------------------------------------
+
+         regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','FREQ','LIST_FREQ','NUME_MODE','INST','LIST_INST' ),),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+         LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+         NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+
+#        ------------------------------------------------------------------
+#        OPTIONS DE PROJ_CHAMP (SANS MC FACTEUR PARTICULIER)
+#        ------------------------------------------------------------------
+         PROJECTION     =SIMP(statut='f',max=1,typ='TXM',into=("OUI","NON"),defaut="OUI"),
+         CAS_FIGURE      =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",) ),
+         DISTANCE_MAX    =SIMP(statut='f',typ='R',
+                fr="Distance maximale entre le noeud et l'élément le plus proche, lorsque le noeud n'est dans aucun élément."),
+         ALARME          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+
+         TYPE_CHAM       =SIMP(statut='f',typ='TXM',into=("NOEU",), 
+                fr="Pour forcer le type des champs projetés. NOEU -> cham_no"),
+
+#           PROL_ZERO       =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
+#                fr="Si le résultat est un mode_xxx ou une base_xxx, on peut prolonger"
+#                   +" les champs par zéro la ou la projection ne donne pas de valeurs."),
+
+         NUME_DDL        =SIMP(statut='f',typ=(nume_ddl_sdaster) ),
+         VIS_A_VIS       =FACT(statut='f',max='**',
+             regles=(AU_MOINS_UN('TOUT_1','GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                     AU_MOINS_UN('TOUT_2','GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),),
+             TOUT_1          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             TOUT_2          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             CAS_FIGURE      =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",) ),
+             ),
+
+#        ------------------------------------------------------------------
+#        MODI_REPERE
+#        ------------------------------------------------------------------
+         MODI_REPERE     =FACT(statut='f',max='**',
+         regles=(UN_PARMI('REPERE'),
+                 AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+#
+           TYPE_CHAM       =SIMP(statut='f',typ='TXM',
+                                 into=("VECT_2D","VECT_3D","TORS_3D","TENS_2D","TENS_3D"),
+                                       defaut="VECT_3D"),
+           b_vect_2d       =BLOC(condition = "TYPE_CHAM=='VECT_2D'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=2,max=2 ),),
+           b_vect_3d       =BLOC(condition = "TYPE_CHAM=='VECT_3D'",
+              NOM_CMP         =SIMP(statut='f',typ='TXM',min=3,max=3,defaut=('DX','DY','DZ') ),),
+           b_tors_3d       =BLOC(condition = "TYPE_CHAM=='TORS_3D'",
+              NOM_CMP         =SIMP(statut='o',typ='TXM',min=6,max=6 ),),
+           b_tens_2d       =BLOC(condition = "TYPE_CHAM=='TENS_2D'",
+              NOM_CMP         =SIMP(statut='f',typ='TXM',min=4,max=4,defaut=('EPXX','EPYY','EPZZ','EPXY',) ),),
+           b_tens_3d       =BLOC(condition = "TYPE_CHAM=='TENS_3D'",
+              NOM_CMP         =SIMP(statut='f',typ='TXM',min=6,max=6,defaut=('EPXX','EPYY','EPZZ','EPXY','EPXZ','EPYZ',),),),
+
+           REPERE          =SIMP(statut='o',typ='TXM',
+                                 into=("UTILISATEUR","CYLINDRIQUE","NORMALE","DIR_JAUGE"),),
+           b_normale       =BLOC(condition = "REPERE=='NORMALE'",
+             regles=(UN_PARMI('VECT_X','VECT_Y')),
+             VECT_X          =SIMP(statut='f',typ='R',min=3,max=3),
+             VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3), ),
+           b_utilisateur   =BLOC(condition = "REPERE=='UTILISATEUR'",
+             ANGL_NAUT       =SIMP(statut='o',typ='R',max=3)),
+           b_cylindrique   =BLOC(condition = "REPERE=='CYLINDRIQUE'",
+             ORIGINE         =SIMP(statut='o',typ='R',min=2,max=3),
+             AXE_Z           =SIMP(statut='o',typ='R',min=3,max=3)),
+           b_dir_jauge       =BLOC(condition = "REPERE=='DIR_JAUGE'",
+             VECT_X          =SIMP(statut='f',typ='R',min=3,max=3),
+             VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3), ),
+         ),
+
+#        ------------------------------------------------------------------
+#        EPSI_MOYENNE
+#        ------------------------------------------------------------------
+         EPSI_MOYENNE     =FACT(statut='f',max='**',
+                       regles=(AU_MOINS_UN('GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+           NOEUD       = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           GROUP_NO     = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           SEUIL_VARI      =SIMP(statut='f',typ='R',validators=NoRepeat(),defaut=0.1,),
+           MASQUE          =SIMP(statut='f',typ='TXM',max=6),
+         ),
+
+#        ------------------------------------------------------------------
+#        FILTRE DES DDL
+#        ------------------------------------------------------------------
+         FILTRE     =FACT(statut='f',max='**',
+           regles=(UN_PARMI('DDL_ACTIF'),
+#                           'MASQUE'),
+           AU_MOINS_UN('TOUT','GROUP_MA','MAILLE','GROUP_NO','NOEUD'),),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+#
+           DDL_ACTIF       =SIMP(statut='f',typ='TXM',max=6),
+# TODO : mettre en place le systeme de masques
+#           MASQUE          =SIMP(statut='f',typ='TXM',max=6),
+         ),
+#        ------------------------------------------------------------------
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+      )  ;
+#& MODIF COMMANDE  DATE 27/07/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+def post_cham_xfem_prod(RESULTAT,**args ):
+  if AsType(RESULTAT) == evol_noli  : return evol_noli
+  if AsType(RESULTAT) == mode_meca : return mode_meca
+
+  raise AsException("type de concept resultat non prevu")
+
+POST_CHAM_XFEM=OPER(nom="POST_CHAM_XFEM",op= 196,sd_prod=post_cham_xfem_prod,
+                    reentrant='n',UIinfo={"groupes":("Post traitements",)},
+            fr="Calcul des champs DEPL et SIEF_ELGA sur le maillage fissuré",
+    MAILLAGE_SAIN = SIMP(statut='o',typ=maillage_sdaster),
+    MAILLAGE_FISS = SIMP(statut='o',typ=maillage_sdaster),
+    NOM_CHAM      = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","SIEF_ELGA","VARI_ELGA"),),
+    MODELE        = SIMP(statut='o',typ=modele_sdaster,),
+    RESULTAT      = SIMP(statut='o',typ=resultat_sdaster),
+      b_elga      = BLOC(condition = "NOM_CHAM in ('SIEF_ELGA','VARI_ELGA') or \
+                                      (type(NOM_CHAM)==type(()) and 'SIEF_ELGA' in NOM_CHAM) or \
+                                      (type(NOM_CHAM)==type(()) and 'VARI_ELGA' in NOM_CHAM)",
+      MODELE_VISU = SIMP(statut='o',typ=modele_sdaster,),
+                         ),
+    INFO           =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
+);                     
+#& MODIF COMMANDE  DATE 08/02/2010   AUTEUR DESROCHES X.DESROCHES 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+
+from Macro.post_coque_ops import post_coque_ops
+POST_COQUE=MACRO(nom="POST_COQUE",op=post_coque_ops,sd_prod=table_sdaster, reentrant='n',
+             UIinfo={"groupes":("Post traitements",)},
+             fr="Calcul des efforts et déformations en un point et une cote quelconque de la coque",
+
+             regles=(EXCLUS('INST','NUME_ORDRE'),),
+
+             # SD résultat et champ à posttraiter :
+             RESULTAT        =SIMP(statut='o',typ=resultat_sdaster,fr="RESULTAT à posttraiter",),
+             CHAM            =SIMP(statut='o',typ='TXM',into=("EFFORT","DEFORMATION",)),
+             NUME_ORDRE      =SIMP(statut='f',typ='I'),
+             INST            =SIMP(statut='f',typ='R',defaut=0.E+0),
+
+             # points de post-traitement :
+             COOR_POINT      =FACT(statut='o',max='**',fr="coordonnées et position dans l épaisseur",
+                                   COOR=SIMP(statut='o',typ='R',min=3,max=4),),
+
+            )
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+from Macro.post_dyna_alea_ops import post_dyna_alea_ops
+POST_DYNA_ALEA=MACRO(nom="POST_DYNA_ALEA",op= post_dyna_alea_ops,sd_prod=table_sdaster,
+                    fr="Traitements statistiques de résultats de type interspectre et impression sur fichiers",
+                    reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
+         regles=(UN_PARMI('FRAGILITE','INTE_SPEC'),),
+         FRAGILITE  =FACT(statut='f',fr="donnees pour courbe de fragilite",max='**', 
+                    TABL_RESU  =SIMP(statut='o',typ=table_sdaster),
+                    regles=(UN_PARMI('VALE','LIST_PARA'),),
+                    VALE       = SIMP(statut='f',typ='R', min=1,validators=NoRepeat(),max='**' ), 
+                    LIST_PARA  = SIMP(statut='f',typ=listr8_sdaster), 
+                    AM_INI     =  SIMP(statut='f',typ='R',defaut= 0.4 ), 
+                    BETA_INI   = SIMP(statut='f',typ='R',defaut= 0.3 ), 
+                    FRACTILE   = SIMP(statut='f',typ='R', min=1,validators=NoRepeat(),max='**'),
+                    b_inte_spec_f  = BLOC(condition="""FRACTILE !=None""",
+                        NB_TIRAGE =SIMP(statut='f',typ='I' ),),                   
+                 ),
+         INTE_SPEC       =SIMP(statut='f',typ=table_fonction),
+         b_inte_spec_f      =BLOC(condition="""INTE_SPEC !=None""",
+            regles=(UN_PARMI('NOEUD_I','NUME_ORDRE_I','OPTION'),),
+            NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),  
+            TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+            NUME_ORDRE_I    =SIMP(statut='f',typ='I',max='**' ),
+            NOEUD_I         =SIMP(statut='f',typ=no,max='**'),         
+            OPTION          =SIMP(statut='f',typ='TXM',into=("DIAG",) ),
+            b_nume_ordre_i =BLOC(condition = "NUME_ORDRE_I != None",
+               NUME_ORDRE_J    =SIMP(statut='o',typ='I',max='**' ),   
+                                ),  
+            b_noeud_i      =BLOC(condition = "NOEUD_I != None",
+               NOEUD_J         =SIMP(statut='o',typ=no,max='**'),
+               NOM_CMP_I       =SIMP(statut='o',typ='TXM',max='**' ),  
+               NOM_CMP_J       =SIMP(statut='o',typ='TXM',max='**' ),     
+                                ), 
+            MOMENT          =SIMP(statut='f',typ='I',max='**',fr="Moments spectraux en complément des cinq premiers" ), 
+            ),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
+POST_DYNA_MODA_T=OPER(nom="POST_DYNA_MODA_T",op= 130,sd_prod=table_sdaster,
+                      fr="Post-traiter les résultats en coordonnées généralisées produit par DYNA_TRAN_MODAL",
+                      reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
+        regles=(UN_PARMI('CHOC','RELA_EFFO_DEPL', ),),
+         RESU_GENE       =SIMP(statut='o',typ=tran_gene ),
+         CHOC            =FACT(statut='f',max='**',
+                               fr="Analyse des non linéarités de choc",
+           INST_INIT       =SIMP(statut='f',typ='R',defaut= -1. ),  
+           INST_FIN        =SIMP(statut='f',typ='R',defaut= 999. ),  
+           NB_BLOC         =SIMP(statut='f',typ='I',defaut= 1 ),  
+           SEUIL_FORCE     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           DUREE_REPOS     =SIMP(statut='f',typ='R',defaut= 0.E+0 ),  
+           OPTION          =SIMP(statut='f',typ='TXM',defaut="USURE",into=("IMPACT","USURE") ),
+           NB_CLASSE       =SIMP(statut='f',typ='I',defaut= 10 ),  
+         ),
+         RELA_EFFO_DEPL  =FACT(statut='f',
+                               fr="Analyse des relationsnon linéaires effort-déplacement",
+           NOEUD           =SIMP(statut='o',typ=no),
+           NOM_CMP         =SIMP(statut='o',typ='TXM' ),  
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 19/05/2009   AUTEUR MACOCCO K.MACOCCO 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+POST_ELEM=OPER(nom="POST_ELEM",op=107,sd_prod=table_sdaster,reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
+               fr="Calcul de quantités globales (masse, inerties, énergie, ...) sur tout ou partie du modèle",
+
+         regles=(UN_PARMI('MASS_INER', 'ENER_POT', 'ENER_CIN','TRAV_EXT','MINMAX',
+                          'WEIBULL', 'RICE_TRACEY', 'CARA_GEOM','CHAR_LIMITE',
+                          'CARA_POUTRE', 'INDIC_ENER', 'INDIC_SEUIL',
+                          'AIRE_INTERNE','ENER_ELAS','ENER_TOTALE','ENER_DISS','INTEGRALE'),
+                ),
+
+         MASS_INER      = FACT(statut='f',max='**',
+                               regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               ORIG_INER    = SIMP(statut='f',typ='R',min=3,max=3 ),
+                              ),
+         b_mass_iner = BLOC(condition = "( MASS_INER != None )",
+                       fr="calcul de la masse, les inerties et le centre de gravité",
+                       regles=(EXCLUS('CHAM_GD','RESULTAT'),
+                               EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                                      'NOEUD_CMP','LIST_ORDRE','LIST_INST','LIST_FREQ','NOM_CAS'),),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                                        char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
+                       NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       GEOMETRIE      = SIMP(statut='f',typ='TXM',defaut="INITIALE",into=("INITIALE","DEFORMEE")),
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       RESULTAT       = SIMP(statut='f',typ=(mode_meca,evol_elas,evol_noli,mult_elas,
+                                                             fourier_elas,dyna_trans) ),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+                       FREQ           = SIMP(statut='f',typ='R',),
+                       LIST_FREQ      = SIMP(statut='f',typ=listr8_sdaster),
+                       NUME_MODE      = SIMP(statut='f',typ='I',),
+                       NOEUD_CMP      = SIMP(statut='f',typ='TXM',min=2,validators=NoRepeat(),max=2),
+                       NOM_CAS        = SIMP(statut='f',typ='TXM',),
+         ),
+
+         ENER_POT       = FACT(statut='f',max='**',
+                               regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                              ),
+         b_ener_pot = BLOC(condition = "( ENER_POT  != None )",
+                       fr="calcul de l'énergie potentielle de déformation",
+                       regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+                               EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                                      'NOEUD_CMP','LIST_ORDRE','LIST_INST','LIST_FREQ','NOM_CAS'),),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
+                       NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+                       ANGLE          = SIMP(statut='f',typ='I',defaut=0),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       RESULTAT       = SIMP(statut='f',typ=(mode_meca,evol_elas,evol_ther,evol_noli,dyna_trans,mult_elas) ),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+                       FREQ           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_FREQ      = SIMP(statut='f',typ=listr8_sdaster),
+                       NUME_MODE      = SIMP(statut='f',typ='I'  ,validators=NoRepeat(),max='**'),
+                       NOEUD_CMP      = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+                       NOM_CAS        = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         ),
+
+         ENER_CIN       = FACT(statut='f',max='**',
+                               regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+                               OPTION       = SIMP(statut='f',typ='TXM',
+                                                   into=("MASS_MECA","MASS_MECA_DIAG"),
+                                                   defaut="MASS_MECA" ),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                              ),
+         b_ener_cin = BLOC(condition = "( ENER_CIN != None )",
+                       fr="calcul de l'énergie cinétique",
+                       regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+                               EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','NUME_MODE',
+                                      'NOEUD_CMP','LIST_ORDRE','LIST_INST','LIST_FREQ','NOM_CAS'),),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
+                       NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+                       ANGLE          = SIMP(statut='f',typ='I',defaut=0),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       RESULTAT       = SIMP(statut='f',typ=(mode_meca,evol_elas,evol_ther,evol_noli,dyna_trans) ),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+                       FREQ           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_FREQ      = SIMP(statut='f',typ=listr8_sdaster),
+                       NUME_MODE      = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       NOEUD_CMP      = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+                       NOM_CAS        = SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+         ),
+
+         ENER_DISS      = FACT(statut='f',max='**',
+                               regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                              ),
+         b_ener_diss = BLOC(condition = "( ENER_DISS != None )",
+                       fr="calcul de l'énergie dissipée",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
+                       NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
+                       regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+
+         ENER_ELAS      = FACT(statut='f',max='**',
+                               regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                              ),
+         b_ener_elas = BLOC(condition = "( ENER_ELAS != None )",
+                       fr="calcul de l'énergie de déformation élastique",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
+                       NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
+                       regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+         ENER_TOTALE    = FACT(statut='f',max='**',
+                               regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                              ),
+         b_ener_totale = BLOC(condition = "( ENER_TOTALE != None )",
+                       fr="calcul de l'énergie de déformation totale",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
+                       NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
+                       regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+         INTEGRALE  = FACT(statut='f',max='**',
+                               regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               NOM_CHAM     = SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+                               NOM_CMP      = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+                               DEJA_INTEGRE = SIMP(statut='f',typ='TXM',into=("OUI","NON",),),
+                              ),
+         b_integrale = BLOC(condition = "( INTEGRALE != None )",
+                       fr="calcul de la moyenne d'une composante",
+                       regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+                               EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_ORDRE','LIST_INST'),),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       RESULTAT       = SIMP(statut='f',typ=(evol_noli,evol_ther,evol_elas,evol_char) ),
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+
+         MINMAX  = FACT(statut='f',max=1,
+                       fr="calcul des extrema en espace d'une CMP d'un champ, pour tous les instants spécifiés",
+                       regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+                               PRESENT_PRESENT('CHAM_GD','MODELE'),
+                               PRESENT_PRESENT('RESULTAT','NOM_CHAM'),
+                               AU_MOINS_UN('TOUT','GROUP_MA'),),
+                       TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                       RESULTAT       = SIMP(statut='f',typ=(evol_noli,evol_ther,evol_elas) ),
+                       NOM_CHAM       = SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       NOM_CMP        = SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**'),
+              b_minmax = BLOC(condition = "( RESULTAT != None )",
+                       regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                              b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                                  PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                              b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                                  PRECISION       =SIMP(statut='o',typ='R',),),
+                              TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                              NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                              LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                              INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                              LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+                              ),
+         ),
+
+         WEIBULL        = FACT(statut='f',max='**',
+                               regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               OPTION       = SIMP(statut='f',typ='TXM',
+                                                   into=("SIGM_ELGA","SIGM_ELMOY"),
+                                                   defaut="SIGM_ELGA"),
+                               CORR_PLAST   = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+                               COEF_MULT    = SIMP(statut='f',typ='R',defaut=1.),
+                              ),
+         b_weibull = BLOC(condition = "( WEIBULL != None )",
+                       fr="calcul du champ élémentaire de la puissance m-ième de la contrainte de Weibull",
+                       regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+                               EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
+                       NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       RESULTAT       = SIMP(statut='f',typ=(evol_noli) ),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+         RICE_TRACEY    = FACT(statut='f',max='**',
+                               regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               OPTION       = SIMP(statut='f',typ='TXM',
+                                                   into=("SIGM_ELGA","SIGM_ELMOY"),
+                                                   defaut="SIGM_ELGA"),
+                               LOCAL        = SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+                              ),
+         b_rice_tracey = BLOC(condition = "( RICE_TRACEY != None )",
+                       fr="calcul du taux de croissance d'une cavité sphérique par rapport à un domaine",
+                       regles=(UN_PARMI('CHAM_GD','RESULTAT'),
+                               EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       NUME_COUCHE    = SIMP(statut='f',typ='I',defaut=1),
+                       NIVE_COUCHE    = SIMP(statut='f',typ='TXM',defaut="MOY",into=("INF","SUP","MOY"),),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       CHAM_GD        = SIMP(statut='f',typ=(cham_no_sdaster,cham_elem) ),
+                       RESULTAT       = SIMP(statut='f',typ=(evol_noli) ),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+         INDIC_ENER     = FACT(statut='f',max='**',
+                               regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                              ),
+         b_indic_ener = BLOC(condition = "( INDIC_ENER != None )",
+                       fr="calcul un indicateur global de perte de proportionnalité du chargement",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
+                       regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                           PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+         INDIC_SEUIL    = FACT(statut='f',max='**',
+                               regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                              ),
+         b_indic_seuil = BLOC(condition = "( INDIC_SEUIL != None )",
+                       fr="calcul un indicateur global de perte de proportionnalité du chargement",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
+                       regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+         CHAR_LIMITE    = FACT(statut='f',min=0,
+                               CHAR_CSTE = SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON")
+                              ),
+         b_char_limite = BLOC(condition = "( CHAR_LIMITE != None )",
+                       fr="post-traitement du calcul de la charge limite",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CARA_ELEM      = SIMP(statut='f',typ=cara_elem),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+                       RESULTAT       = SIMP(statut='o',typ=(evol_noli) ),
+                       regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','INST','LIST_INST'),),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                          PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                          PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                       NUME_ORDRE     = SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+                       LIST_ORDRE     = SIMP(statut='f',typ=listis_sdaster),
+                       INST           = SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+                       LIST_INST      = SIMP(statut='f',typ=listr8_sdaster),
+         ),
+
+         CARA_GEOM      = FACT(statut='f',max='**',
+                               regles=(AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+                               TOUT         = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               MAILLE       = SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+                               GROUP_MA     = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               SYME_X       = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+                               SYME_Y       = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+                               ORIG_INER    = SIMP(statut='f',typ='R',min=2,max=2),
+                              ),
+         b_cara_geom = BLOC(condition = "( CARA_GEOM != None )",
+                       fr="calcul des caractéristiques géométriques d'un section de poutre",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+         ),
+
+         CARA_POUTRE    = FACT(statut='f',max='**',
+                               regles=(AU_MOINS_UN('TOUT','GROUP_MA'),
+                                       ENSEMBLE('LONGUEUR','LIAISON','MATERIAU'),),
+                               TOUT          = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                               GROUP_MA      = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               GROUP_MA_INTE = SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+                               CARA_GEOM     = SIMP(statut='o',typ=table_sdaster),
+                               RT            = SIMP(statut='f',typ='R'),
+                               LAPL_PHI      = SIMP(statut='f',typ=evol_ther),
+                               LAPL_PHI_Y    = SIMP(statut='f',typ=evol_ther),
+                               LAPL_PHI_Z    = SIMP(statut='f',typ=evol_ther),
+                               LIAISON       = SIMP(statut='f',typ='TXM',into=("ROTULE","ENCASTREMENT")),
+                               LONGUEUR      = SIMP(statut='f',typ='R'),
+                               MATERIAU      = SIMP(statut='f',typ=mater_sdaster),
+                               OPTION        = SIMP(statut='f',typ='TXM',
+                                                    into=("CARA_TORSION","CARA_CISAILLEMENT","CARA_GAUCHI") ),
+                             ),
+         b_cara_poutre = BLOC(condition = "( CARA_POUTRE != None )",
+                       fr="calcul des caractéristiques mécaniques d'un section de poutre",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+                       CHAM_MATER     = SIMP(statut='f',typ=cham_mater),
+                       CHARGE         = SIMP(statut='f',typ=(char_meca,char_cine_meca,
+                       char_ther,char_acou),validators=NoRepeat(),max='**' ),
+                       MODE_FOURIER   = SIMP(statut='f',typ='I',defaut=0),
+         ),
+
+          AIRE_INTERNE   = FACT(statut='f',max='**',
+                                GROUP_MA_BORD  = SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+                               ),
+         b_aire_interne = BLOC(condition = "( AIRE_INTERNE != None )",
+                       fr="calcul de l'aire d'un trou dans un maillage 2D",
+                       MODELE         = SIMP(statut='f',typ=modele_sdaster),
+         ),
+
+         TRAV_EXT       = FACT(statut='f',),
+         b_trav_ext = BLOC(condition = "( TRAV_EXT != None )",
+                       fr="calcul du travail des efforts extérieurs",
+                       RESULTAT       = SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans) ),
+                       CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+                       b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+                       b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                           PRECISION       =SIMP(statut='o',typ='R',),),
+                       TOUT_ORDRE     = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+
+ )  ;
+#& MODIF COMMANDE  DATE 21/04/2010   AUTEUR BOTTONI M.BOTTONI 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE BOTTONI M.BOTTONI
+
+# ---------------------------------------------------------------------------
+#                  POST_ENDO_FISS
+# RECHERCHE DU TRAJET DE FISSURATION SUR UN
+#  CHAMP SCALAIRE 2D
+
+
+from Macro.post_endo_fiss_ops import post_endo_fiss_ops
+
+
+def post_endo_fiss_prod(self,TABLE,**args) :
+    self.type_sdprod(TABLE,table_sdaster)
+    return maillage_sdaster
+
+POST_ENDO_FISS=MACRO(nom       = "POST_ENDO_FISS",
+                     op        = post_endo_fiss_ops,
+                     sd_prod  = post_endo_fiss_prod,
+                     reentrant = 'n',
+                     UIinfo = {"groupes":("Outils metier",)},
+                     fr = "Individuation du trace d'une fissure a partir d'un champ scalaire pertinant",
+
+            TABLE  = SIMP(statut = 'o', typ = CO,),
+
+            regles = (UN_PARMI("RESULTAT","CHAM_GD"),
+                      ),
+
+            b_resultat = BLOC(condition  = "RESULTAT != None",
+                              regles     = (UN_PARMI('NUME_ORDRE','INST'),),
+                              NUME_ORDRE = SIMP(statut = 'f', typ = 'I', validators = NoRepeat(), max='**'),
+                              INST       = SIMP(statut = 'f', typ = 'R', validators = NoRepeat(), max='**'),
+                              MODELE     = SIMP(statut = 'f', typ = modele_sdaster,
+                                                fr = "nom du modele a associer au champ",),),
+
+            b_champ    = BLOC(condition = "CHAM_GD != None",
+                              MODELE    = SIMP(statut = 'o', typ = modele_sdaster,
+                                               fr = "nom du modele a associer au champ",),),
+
+            CHAM_GD         = SIMP(statut = 'f',typ = (cham_gd_sdaster)),
+            RESULTAT        = SIMP(statut = 'f',typ = (evol_noli)),
+            NOM_CMP         = SIMP(statut = 'o',typ='TXM',),
+            NOM_CHAM        = SIMP(statut = 'o', typ = 'TXM',
+                                   fr = "nom du champ a post-traiter",),
+
+            RECHERCHE = FACT(statut = 'o',min=1,max='**',
+                           regles = (
+                                       PRESENT_ABSENT('TOUT','GROUP_MA',),
+                                    ),
+                              LONG_ORTH  = SIMP(statut='o', typ='R'),
+                              NB_POINT   = SIMP(statut='f', typ='I', defaut = 500),
+                              PAS        = SIMP(statut='o', typ='R', max='**'),
+                              LONG_REG   = SIMP(statut='o', typ='R'),
+                              SEUIL      = SIMP(statut='o', typ='R'),
+                              ANGL_MAX   = SIMP(statut='f', typ='R', defaut=180.),
+                              TOUT       = SIMP(statut='f', typ='TXM', into=("OUI",) ),
+                              GROUP_MA   = SIMP(statut='f', typ=grma,  validators=NoRepeat(),max='**'),
+                              ),
+                   )
+
+
+
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+POST_FATI_ALEA=OPER(nom="POST_FATI_ALEA",op=170,sd_prod=table_sdaster,reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
+                    fr="Calculer le dommage de fatigue subi par une structure soumise à une sollicitation de type aléatoire",
+         regles=(ENSEMBLE('MOMENT_SPEC_0','MOMENT_SPEC_2'),
+                 PRESENT_PRESENT( 'MOMENT_SPEC_4','MOMENT_SPEC_0'),
+                 UN_PARMI('TABL_POST_ALEA','MOMENT_SPEC_0'), ),
+         MOMENT_SPEC_0   =SIMP(statut='f',typ='R'),  
+         MOMENT_SPEC_2   =SIMP(statut='f',typ='R'),  
+         MOMENT_SPEC_4   =SIMP(statut='f',typ='R'),  
+         TABL_POST_ALEA  =SIMP(statut='f',typ=table_sdaster),
+         COMPTAGE        =SIMP(statut='o',typ='TXM',into=("PIC","NIVEAU")),
+         DUREE           =SIMP(statut='f',typ='R',defaut= 1.),  
+         CORR_KE         =SIMP(statut='f',typ='TXM',into=("RCCM",)),
+         DOMMAGE         =SIMP(statut='o',typ='TXM',into=("WOHLER",)),
+         MATER           =SIMP(statut='o',typ=mater_sdaster),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ANGLES J.ANGLES
+POST_FATIGUE=OPER(nom="POST_FATIGUE",op=136,sd_prod=table_sdaster,reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
+                  fr="Calculer en un point, le dommage de fatigue subi par une structure soumise à une histoire de chargement",
+
+         CHARGEMENT = SIMP(statut='o',typ='TXM',into=("UNIAXIAL","PERIODIQUE","QUELCONQUE")),
+
+         b_uniaxial = BLOC( condition = "CHARGEMENT=='UNIAXIAL'",
+                      regles=(PRESENT_PRESENT('CORR_KE','MATER'),
+                              PRESENT_PRESENT('CORR_SIGM_MOYE','MATER'),
+                              PRESENT_PRESENT('DOMMAGE','MATER'),),
+             HISTOIRE       = FACT(statut='o',
+                                 regles=(UN_PARMI('SIGM','EPSI'),),
+                                 SIGM  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 EPSI  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),),
+             COMPTAGE       = SIMP(statut='o',typ='TXM',into=("RAINFLOW","RCCM","NATUREL")),
+             DELTA_OSCI     = SIMP(statut='f',typ='R',defaut= 0.0E+0),
+             COEF_MULT      = FACT(statut='f',
+                                 KT    = SIMP(statut='o',typ='R'),),
+             CORR_KE        = SIMP(statut='f',typ='TXM',into=("RCCM",)),
+             DOMMAGE        = SIMP(statut='f',typ='TXM',into=("WOHLER","MANSON_COFFIN",
+                                                              "TAHERI_MANSON","TAHERI_MIXTE")),
+             MATER          = SIMP(statut='f',typ=mater_sdaster),
+             CORR_SIGM_MOYE = SIMP(statut='f',typ='TXM',into=("GOODMAN","GERBER")),
+             TAHERI_NAPPE   = SIMP(statut='f',typ=(nappe_sdaster,formule)),
+             TAHERI_FONC    = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+             CUMUL          = SIMP(statut='f',typ='TXM',into=("LINEAIRE",)),
+         ),
+
+         b_periodique = BLOC( condition = "CHARGEMENT=='PERIODIQUE'",
+             HISTOIRE       = FACT(statut='o',
+                                 SIGM_XX  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_YY  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_ZZ  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_XY  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_XZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_YZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),),
+             CRITERE        = SIMP(statut='o',typ='TXM',into=("CROSSLAND","PAPADOPOULOS")),
+             DOMMAGE        = SIMP(statut='f',typ='TXM',into=("WOHLER",)),
+             MATER          = SIMP(statut='o',typ=mater_sdaster),
+             COEF_CORR      = SIMP(statut='f',typ='R'),
+         ),
+
+         b_quelconque = BLOC( condition = "CHARGEMENT=='QUELCONQUE'",
+             HISTOIRE       = FACT(statut='o',
+                                 SIGM_XX  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_YY  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_ZZ  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_XY  = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_XZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 SIGM_YZ  = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 EPSP     = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),
+                                 TEMP     = SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule)),),
+             DOMMAGE        = SIMP(statut='f',typ='TXM',into=("LEMAITRE",),),
+             MATER          = SIMP(statut='o',typ=mater_sdaster),
+             CUMUL          = SIMP(statut='f',typ='TXM',into=("LINEAIRE",)),
+         ),
+
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 08/12/2009   AUTEUR PROIX J-M.PROIX 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE WADIER Y.WADIER
+
+from Macro.post_gp_ops import post_gp_ops
+def post_gp_prod(self, TABL_RESU, **kargs):
+   """Typage des sd_prod
+   """
+   if TABL_RESU != None:
+      self.type_sdprod(TABL_RESU, table_sdaster)
+   return table_sdaster
+
+POST_GP=MACRO(nom="POST_GP", op=post_gp_ops, sd_prod=post_gp_prod,
+              fr="Calcul du critère énergétique Gp suite à un calcul thermo-mécanique",
+              reentrant='n',
+              UIinfo={"groupes":("Post traitements",)},
+              regles=(UN_PARMI('IDENTIFICATION', 'PREDICTION'),
+                      UN_PARMI('THETA_2D','THETA_3D'),
+                      UN_PARMI('PAS_ENTAILLE','LIST_EP_COPEAUX'),
+                      PRESENT_PRESENT('THETA_2D','DIRECTION'),),
+      
+      # Résultat, modèle, comportement, chargement
+      RESULTAT     = SIMP(statut='o',typ=(evol_elas,evol_noli,dyna_trans,mode_meca),),
+      RESU_THER    = SIMP(statut='f',typ=evol_ther,),
+      MODELE       = SIMP(statut='o',typ=modele_sdaster),
+      MATER        = SIMP(statut='o',typ=mater_sdaster),
+      
+      COMP_ELAS    = FACT(statut='o',
+            RELATION    = SIMP(statut='f',typ='TXM',defaut="ELAS",
+                            into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC"),),
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
+      ),
+      
+      EXCIT        = FACT(statut='f', max='**',
+            CHARGE      = SIMP(statut='o', typ=(char_meca,char_cine_meca)),
+            FONC_MULT   = SIMP(statut='f', typ=(fonction_sdaster,nappe_sdaster,formule)),
+            TYPE_CHARGE = SIMP(statut='f', typ='TXM', defaut="FIXE", into=("FIXE",)),
+      ),
+      SYME_CHAR    = SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","ANTI","SANS")),
+      
+      DIRECTION    = SIMP(statut='f', typ='R', max=3),
+
+      THETA_2D     = FACT(statut='f', max='**',
+                          fr="paramètres de définition des champs theta",
+            GROUP_NO    = SIMP(statut='o', typ=grno, validators=NoRepeat(), max='**'),
+            R_INF       = SIMP(statut='o', typ='R'),
+            R_SUP       = SIMP(statut='o', typ='R'),
+      ),
+
+
+      THETA_3D        =FACT(statut='f',max='**',
+            GROUP_MA        =SIMP(statut='o',typ=grma,validators=NoRepeat(),max='**'),
+            R_INF           =SIMP(statut='o',typ='R'),
+            R_SUP           =SIMP(statut='o',typ='R'),
+                         ),
+         b_theta_3d     =BLOC(condition="THETA_3D != None",
+            LISSAGE         =FACT(statut='d',
+                DEGRE            =SIMP(statut='f',typ='I',defaut=5,into=(0,1,2,3,4,5,6,7) ),
+                LISSAGE_THETA    =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",
+                                  into=("LEGENDRE","LAGRANGE","LAGRANGE_REGU"),),
+                LISSAGE_G        =SIMP(statut='f',typ='TXM',defaut="LEGENDRE",
+                                  into=("LEGENDRE","LAGRANGE","LAGRANGE_NO_NO","LAGRANGE_REGU"),),
+                             ),
+    
+            FOND_FISS       =SIMP(statut='o',typ=fond_fiss,max=1,),
+            NB_TRANCHES     =SIMP(statut='o',typ='I',max=1,
+                            fr="nombre de tranches: nombre de segments maillant le fond de fissure",),
+                         ),
+
+      # prise en compte de la traction compression
+      TRAC_COMP    = SIMP(statut='f',typ='TXM',into=("OUI",),
+                          fr="prise en compte de la traction-compression (plus lent)",
+                         ),
+
+      # copeaux
+      GROUP_MA        = SIMP(statut='o', typ=grma, validators=NoRepeat(), max='**'),
+      PAS_ENTAILLE    = SIMP(statut='f', typ='R', val_min=0.),
+      LIST_EP_COPEAUX = SIMP(statut='f', typ='R', max='**'),
+      
+      # critère sur Gp
+      CRIT_MAXI_GP = SIMP(statut='f', typ='TXM', defaut="ABSOLU",
+                          into=("RELATIF","ABSOLU")),
+      
+      # correction axisymétrie
+      RAYON_AXIS   = SIMP(statut='f', typ='R', val_min=0., defaut=1.),
+      
+      # identification
+      IDENTIFICATION = FACT(statut='f', max=1,
+            KJ_CRIT     = SIMP(statut='o', typ='R', val_min=0., max='**'),
+            TEMP        = SIMP(statut='o', typ='R', val_min=0., max='**'),
+      ),
+      
+      # prédiction
+      PREDICTION   = FACT(statut='f', max=1,
+            GP_CRIT     = SIMP(statut='o', typ='R', val_min=0., max='**'),
+            TEMP        = SIMP(statut='o', typ='R', val_min=0., max='**'),
+      ),
+      
+      # table résultat
+      TABL_RESU    = SIMP(statut='o', typ=CO,),
+      
+      INFO         = SIMP(statut='f', typ='I', defaut=1, into=(1, 2),),
+)
+#& MODIF COMMANDE  DATE 20/10/2008   AUTEUR GALENNE E.GALENNE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+from Macro.post_k1_k2_k3_ops import post_k1_k2_k3_ops
+POST_K1_K2_K3=MACRO(nom="POST_K1_K2_K3",op=post_k1_k2_k3_ops,sd_prod=table_sdaster,
+                   fr="Calcul des facteurs d'intensité de contraintes en 2D et en 3D par extrapolation des sauts de déplacements"
+                     +" sur les lèvres de la fissure",
+                   reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
+
+           regles=(UN_PARMI('RESULTAT','TABL_DEPL_SUP'),
+                  EXCLUS('FISSURE','FOND_FISS'),
+                  PRESENT_PRESENT('FISSURE','RESULTAT'),
+                  PRESENT_PRESENT('FOND_FISS','VECT_K1'),
+                  PRESENT_PRESENT('TABL_DEPL_SUP','VECT_K1'),
+                   #PRESENT_PRESENT('RESULTAT','FOND_FISS'),
+                   ),
+
+         MODELISATION  =SIMP(statut='o',typ='TXM',
+                             into=("3D","AXIS","D_PLAN","C_PLAN"),
+                             fr="Modélisation cohérente avec celle utilisée pour le calcul des déplacements"),
+         FOND_FISS     =SIMP(statut='f',typ=fond_fiss),
+         FISSURE     =SIMP(statut='f',typ=fiss_xfem),
+         b_fond_fiss   =BLOC (condition="(FOND_FISS!= None)",
+                         MAILLAGE      = SIMP(statut='o',typ=maillage_sdaster),
+                         TYPE_MAILLAGE = SIMP(statut='f',typ='TXM',into=("LIBRE","REGLE"),defaut="REGLE"),
+                         NB_NOEUD_COUPE= SIMP(statut='f',typ='I'),
+                         NOEUD         = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                         GROUP_NO      = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                         SANS_NOEUD    = SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+                         SANS_GROUP_NO = SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+                         TOUT          = SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                         EVOL_THER     = SIMP(statut='f',typ=(evol_ther),fr="Température sur le fond de fissure")
+                         ),
+         b_fissure   =BLOC (condition="(FISSURE!= None)",
+                         MAILLAGE       = SIMP(statut='o',typ=maillage_sdaster),
+                         NB_NOEUD_COUPE = SIMP(statut='f',typ='I' ,defaut=5 ),
+                         NB_POINT_FOND  = SIMP(statut='f',typ='I' ,),
+                         NUME_FOND      = SIMP(statut='f',typ='I',defaut=1),
+                         DTAN_ORIG      = SIMP(statut='f',typ='R',max='**'),
+                         DTAN_EXTR      = SIMP(statut='f',typ='R',max='**'),
+                         ),
+         MATER         =SIMP(statut='o',typ=mater_sdaster,
+                             fr="Matériau homogène et isotrope cohérent avec celui utilisé pour le calcul des déplacements"),
+         RESULTAT      =SIMP(statut='f',typ=(evol_elas,evol_noli),
+                             fr="Déplacement des noeuds de la lèvre supérieure et inférieure"),
+         TABL_DEPL_SUP =SIMP(statut='f',typ=table_sdaster,
+                             fr="Table issue de post_releve_t sur les noeuds de la lèvre supérieure"),
+         TABL_DEPL_INF =SIMP(statut='f',typ=table_sdaster,
+                             fr="Table issue de post_releve_t sur les noeuds de la lèvre inférieure"),
+         ABSC_CURV_MAXI=SIMP(statut='o',typ='R',
+                             fr="Distance maximum à partir du fond de fissure à utiliser pour le calcul"),  
+         PREC_VIS_A_VIS= SIMP(statut='f',typ='R',defaut=0.1),
+         TOUT_ORDRE    =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE    =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+         LIST_ORDRE    =SIMP(statut='f',typ=listis_sdaster),
+         INST          =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         LIST_INST     =SIMP(statut='f',typ=listr8_sdaster),
+             b_acce_reel     =BLOC(condition="(INST != None)or(LIST_INST != None)",
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+               b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                   PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+               b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                   PRECISION       =SIMP(statut='o',typ='R',),),
+             ),
+         SYME_CHAR       =SIMP(statut='f',typ='TXM',defaut="SANS",into=("SYME","SANS") ),
+         INFO          =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         VECT_K1       =SIMP(statut='f',typ='R',max=3,min=3,
+                             fr="Vecteur normal au plan de fissure, orienté de la lèvre inférieure vers la lèvre supérieure"),  
+         TITRE         =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 03/06/2008   AUTEUR DURAND C.DURAND 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE C.MESSELIER-GOUZE
+#
+POST_K_BETA=OPER(nom="POST_K_BETA",op=198,sd_prod=table_sdaster,
+                   fr="Calcul des facteurs d'intensité de contraintes par la méthode K_BETA",
+                   reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
+         MAILLAGE      = SIMP(statut='o',typ=maillage_sdaster),
+         MATER_REV     = SIMP(statut='o',typ=mater_sdaster),
+         EPAIS_REV     = SIMP(statut='o',typ='R'),
+         FISSURE       = FACT(statut='o',
+            DECALAGE       = SIMP(statut='f',typ='R',defaut=-2.e-04),
+            PROFONDEUR     = SIMP(statut='o',typ='R'),
+            LONGUEUR       = SIMP(statut='o',typ='R'),
+            ORIENTATION    = SIMP(statut='o',typ='TXM',
+                                 into=("CIRC","LONGI"),),
+         ),
+         K1D           = FACT(statut='o',max='**',
+            TABL_MECA_REV  = SIMP(statut='o',typ=(table_sdaster)),
+            TABL_MECA_MDB  = SIMP(statut='o',typ=(table_sdaster)),
+            TABL_THER      = SIMP(statut='o',typ=(table_sdaster)),
+            INTITULE       = SIMP(statut='o',typ='TXM' ), 
+         ),
+         TITRE         = SIMP(statut='f',typ='TXM',max='**'),  
+);
+#& MODIF COMMANDE  DATE 30/09/2008   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+
+from Macro.post_k_trans_ops import post_k_trans_ops
+
+POST_K_TRANS=MACRO(nom="POST_K_TRANS",op=post_k_trans_ops,sd_prod=table_sdaster,
+            fr="Calcul des facteurs d intensite des contrainte par recombinaison modale",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
+        RESU_TRANS      =SIMP(statut='o',typ=tran_gene), 
+        K_MODAL         =FACT(statut='o',
+           TABL_K_MODA     =SIMP(statut='f',typ=table_sdaster,),
+           RESU_MODA       =SIMP(statut='f',typ=mode_meca,),
+           FOND_FISS       =SIMP(statut='f',typ=fond_fiss,),
+           FISSURE         =SIMP(statut='f',typ=fiss_xfem,),
+           THETA           =SIMP(statut='f',typ=(theta_geom,cham_no_sdaster)),
+           R_INF           =SIMP(statut='f',typ='R'),
+           R_SUP           =SIMP(statut='f',typ='R'),
+           MODULE          =SIMP(statut='f',typ='R'),
+           DIRE_THETA      =SIMP(statut='f',typ=cham_no_sdaster ),
+           DIRECTION       =SIMP(statut='f',typ='R',max='**'),
+           R_INF_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           R_SUP_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),             
+           MODULE_FO       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           DEGRE           =SIMP(statut='f',typ='I',into=(0,1,2,3,4,5,6,7) ),
+           LISSAGE_THETA   =SIMP(statut='f',typ='TXM',into=("LEGENDRE","LAGRANGE","LAGRANGE_REGU"),),
+           LISSAGE_G       =SIMP(statut='f',typ='TXM',into=("LEGENDRE","LAGRANGE","LAGRANGE_NO_NO","LAGRANGE_REGU"),),
+
+
+           regles=(UN_PARMI('TABL_K_MODA','RESU_MODA'),
+                   UN_PARMI('FISSURE','FOND_FISS'),
+                   EXCLUS('MODULE','MODULE_FO'),
+                   PRESENT_PRESENT('R_INF','R_SUP'),
+                   PRESENT_PRESENT('R_INF_FO','R_SUP_FO'), ),
+         ),
+        regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','LIST_ORDRE'),),
+        TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+        NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+        LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+        INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+        LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+        CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",) ),
+        b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6),),
+        b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+           PRECISION       =SIMP(statut='o',typ='R'),),
+        INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+        TITRE           =SIMP(statut='f',typ='TXM'),
+)
+
+#& MODIF COMMANDE  DATE 12/05/2009   AUTEUR MAZET S.MAZET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+POST_MAIL_XFEM=OPER(nom="POST_MAIL_XFEM",op= 187,sd_prod=maillage_sdaster,
+                    reentrant='n',UIinfo={"groupes":("Maillage",)},
+            fr="Crée un maillage se conformant à la fissure pour le post-traitement des éléments XFEM",
+    MODELE        = SIMP(statut='o',typ=modele_sdaster),
+    MAILLAGE_SAIN = SIMP(statut='o',typ=maillage_sdaster),
+    PREF_NOEUD_X   =SIMP(statut='f',typ='TXM',defaut="NX",validators=LongStr(1,2),),
+    PREF_NOEUD_M   =SIMP(statut='f',typ='TXM',defaut="NM",validators=LongStr(1,2),),
+    PREF_NOEUD_P   =SIMP(statut='f',typ='TXM',defaut="NP",validators=LongStr(1,2),),
+    PREF_MAILLE_X  =SIMP(statut='f',typ='TXM',defaut="MX",validators=LongStr(1,2),),
+    PREF_GROUP_CO  =SIMP(statut='f',typ=geom ,defaut="NFISSU",),
+    TITRE         = SIMP(statut='f',typ='TXM',max='**'),
+    INFO           =SIMP(statut='f',typ='I',defaut= 1,into=(1,2,) ),
+
+);                     
+#& MODIF COMMANDE  DATE 06/07/2009   AUTEUR GALENNE E.GALENNE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTIC               
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+POST_RCCM=OPER(nom="POST_RCCM",op= 165,sd_prod=table_sdaster,
+               fr="Vérification des critères de niveau 0 et certains critères de niveau A du RCC-M-B3200 (Edition 1991)",
+               reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
+         TYPE_RESU       =SIMP(statut='f',typ='TXM',defaut="VALE_MAX",into=("VALE_MAX","DETAILS") ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         TYPE_RESU_MECA  =SIMP(statut='o',typ='TXM',into=("EVOLUTION","UNITAIRE","TUYAUTERIE") ),
+
+# ======================================================================
+     b_evolution  =BLOC(condition="(TYPE_RESU_MECA == 'EVOLUTION')",
+
+         OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                               into=("PM_PB","SN","FATIGUE_ZH210","AMORCAGE") ),
+         MATER           =SIMP(statut='o',typ=mater_sdaster ),
+         SY_MAX          =SIMP(statut='f',typ='R',
+                               fr="limite élastique utilisée pour le calcul du rochet thermique" ),
+         TYPE_KE         =SIMP(statut='f',typ='TXM',defaut="KE_MECA",into=("KE_MECA","KE_MIXTE"),
+                               fr="Ke meca seul ou partition mecanique + thermique" ),
+                               
+         TRANSITOIRE     =FACT(statut='o',max='**',fr="transitoire à dépouiller",
+           regles=(EXCLUS('TOUT_ORDRE','INST','LIST_INST'),
+                   UN_PARMI('TABL_RESU_MECA','TABL_SIGM_THETA'),),
+           NB_OCCUR        =SIMP(statut='f',typ='I',defaut= 1,
+                                 fr="nombre d occurences réelles de ce transitoire" ),
+           TABL_RESU_MECA  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="relevé des contraintes sur le chemin"),
+           TABL_SIGM_THER  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="résultat sous chargement thermique seul" ),
+           TABL_RESU_PRES  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes sous chargement de pression" ),
+           TABL_SIGM_THETA =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes a la distance d de la singularité pour chacun des angles THETA" ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+           b_inst          =BLOC(condition = "(INST != None) or (LIST_INST != None)" ,
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+               b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                   PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+               b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                   PRECISION       =SIMP(statut='o',typ='R',),),),
+           ),
+         ),
+
+# ======================================================================
+     b_unitaire  =BLOC(condition="(TYPE_RESU_MECA == 'UNITAIRE')",
+
+         OPTION          =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',
+                               into=("PM_PB","SN","FATIGUE") ),
+         MATER           =SIMP(statut='o',typ=mater_sdaster ),
+         SY_MAX          =SIMP(statut='f',typ='R',
+                               fr="limite élastique utilisée pourle calcul du rochet thermique" ),
+         TYPE_KE         =SIMP(statut='f',typ='TXM',defaut="KE_MECA",into=("KE_MECA","KE_MIXTE"),
+                               fr="Ke meca seul ou partition mecanique + thermique" ),
+         CHAR_MECA   =FACT(statut='o',max='**',fr="Chargements mécaniques",
+                           regles=(UN_PARMI('MX','MX_TUBU'),),
+           NUME_CHAR     =SIMP(statut='o',typ='I',fr="numéro du chargement" ),
+           NOM_CHAR      =SIMP(statut='f',typ='TXM',fr="nom du chargement" ),
+           MX            =SIMP(statut='f',typ='R',fr="moment suivant x", ),
+           MX_TUBU       =SIMP(statut='f',typ='R',fr="moment suivant x, tubulure", ),
+           b_1_tenseur     =BLOC( condition = "MX != None",
+             FX            =SIMP(statut='f',typ='R',fr="effort suivant x", ),
+             FY            =SIMP(statut='f',typ='R',fr="effort suivant y", ),
+             FZ            =SIMP(statut='f',typ='R',fr="effort suivant z", ),
+             MY            =SIMP(statut='o',typ='R',fr="moment suivant y", ),
+             MZ            =SIMP(statut='o',typ='R',fr="moment suivant z", ),
+           ),
+           b_2_tenseurs    =BLOC( condition = "MX_TUBU != None",
+             FX_TUBU       =SIMP(statut='f',typ='R',fr="effort suivant x, tubulure", ),
+             FY_TUBU       =SIMP(statut='f',typ='R',fr="effort suivant y, tubulure", ),
+             FZ_TUBU       =SIMP(statut='f',typ='R',fr="effort suivant z, tubulure", ),
+             MY_TUBU       =SIMP(statut='o',typ='R',fr="moment suivant y, tubulure", ),
+             MZ_TUBU       =SIMP(statut='o',typ='R',fr="moment suivant z, tubulure", ),
+             FX_CORP       =SIMP(statut='f',typ='R',fr="effort suivant x, corps du piquage", ),
+             FY_CORP       =SIMP(statut='f',typ='R',fr="effort suivant y, corps du piquage", ),
+             FZ_CORP       =SIMP(statut='f',typ='R',fr="effort suivant z, corps du piquage", ),
+             MX_CORP       =SIMP(statut='o',typ='R',fr="moment suivant x, corps du piquage", ),
+             MY_CORP       =SIMP(statut='o',typ='R',fr="moment suivant y, corps du piquage", ),
+             MZ_CORP       =SIMP(statut='o',typ='R',fr="moment suivant z, corps du piquage", ),
+           ),
+
+                         ),
+         RESU_MECA_UNIT =FACT(statut='o',fr="resultats mécaniques unitaires",
+                              regles=(UN_PARMI('TABL_MX','TABL_MX_TUBU'),),
+           TABL_MX       =SIMP(statut='f',typ=table_sdaster,
+                               fr="table relevé des contraintes pour chargement unitaire MX"),
+           TABL_MX_TUBU  =SIMP(statut='f',typ=table_sdaster,
+                               fr="table relevé des contraintes pour chargement unitaire MX_TUBU"),
+           b_1_tenseur     =BLOC( condition = "TABL_MX != None",
+             TABL_FX       =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FX"),
+             TABL_FY       =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FY"),
+             TABL_FZ       =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FZ"),
+             TABL_MY       =SIMP(statut='o',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire MY"),
+             TABL_MZ       =SIMP(statut='o',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire MZ"),
+           ),
+           b_2_tenseurs    =BLOC( condition = "TABL_MX_TUBU != None",
+             TABL_FX_TUBU  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FX_TUBU"),
+             TABL_FY_TUBU  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FY_TUBU"),
+             TABL_FZ_TUBU  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FZ_TUBU"),
+             TABL_MY_TUBU  =SIMP(statut='o',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire MY_TUBU"),
+             TABL_MZ_TUBU  =SIMP(statut='o',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire MZ_TUBU"),
+             TABL_FX_CORP  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FX_CORP"),
+             TABL_FY_CORP  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FY_CORP"),
+             TABL_FZ_CORP  =SIMP(statut='f',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire FZ_CORP"),
+             TABL_MX_CORP  =SIMP(statut='o',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire MX_CORP"),
+             TABL_MY_CORP  =SIMP(statut='o',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire MY_CORP"),
+             TABL_MZ_CORP  =SIMP(statut='o',typ=table_sdaster,
+                                 fr="table relevé des contraintes pour chargement unitaire MZ_CORP"),
+           ),
+           TABL_PRES     =SIMP(statut='o',typ=table_sdaster,
+                               fr="table relevé des contraintes pour chargement unitaire de pression"),
+                         ),
+
+          RESU_THER   =FACT(statut='f',max='**',fr="resultats thermiques",
+           NUME_RESU_THER =SIMP(statut='o',typ='I',fr="numéro de la table de résultat thermique" ),
+           TABL_RESU_THER =SIMP(statut='o',typ=table_sdaster,
+                              fr="table relevé des contraintes sous chargement thermique seul" ),
+                           ),
+         SEISME         =FACT(statut='f',max='**',fr="Situation séisme",ang="situation_ang",
+              NB_OCCUR         =SIMP(statut='o',typ='I',fr="nombre d'occurences de la situation" ),
+              NB_CYCL_SEISME   =SIMP(statut='o',typ='I',fr="nombre de cycles associé au séisme" ),
+              NUME_SITU        =SIMP(statut='o',typ='I',fr="numéro de la situation" ),
+              NOM_SITU         =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
+              NUME_GROUPE      =SIMP(statut='o',typ='I',fr="numéros du groupe de la situation" ),
+              CHAR_ETAT        =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
+                               ),
+         SITUATION         =FACT(statut='o',max='**',fr="Situation",ang="situation_ang",
+              NB_OCCUR         =SIMP(statut='o',typ='I',fr="nombre d'occurences de la situation" ),
+              NUME_SITU        =SIMP(statut='o',typ='I',fr="numéro de la situation" ),
+              NOM_SITU         =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
+              COMBINABLE       =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ),
+              NUME_GROUPE      =SIMP(statut='f',typ='I',
+                                     fr="numéros des groupes de la situation" ),
+              NUME_PASSAGE     =SIMP(statut='f',typ='I',min=2,max=2,
+                                     fr="numéro des situations de passage" ),
+              NUME_RESU_THER   =SIMP(statut='f',typ='I',max=1,fr="numeros de transitoires thermiques" ),
+              CHAR_ETAT_A      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
+              CHAR_ETAT_B      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat B" ),
+              PRES_A           =SIMP(statut='o',typ='R',fr="pression etat A"),
+              PRES_B           =SIMP(statut='o',typ='R',fr="pression etat B"),
+              TEMP_REF_A       =SIMP(statut='f',typ='R',fr="temperature référence etat A"),
+              TEMP_REF_B       =SIMP(statut='f',typ='R',fr="temperature référence etat B"),
+                               ),
+                      ),
+# ======================================================================
+     b_tuyauterie  =BLOC(condition="(TYPE_RESU_MECA == 'TUYAUTERIE')",
+
+         OPTION          =SIMP(statut='o',typ='TXM',into=("FATIGUE",) ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         TYPE_KE         =SIMP(statut='f',typ='TXM',defaut="KE_MECA",into=("KE_MECA","KE_MIXTE"),
+                               fr="Ke meca seul ou partition mecanique + thermique" ),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CARA_ELEM       =SIMP(statut='o',typ=cara_elem),
+         ZONE_ANALYSE =FACT(statut='o',fr="liste des mailles ou des noeuds analysés",
+            regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+            GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            ),
+         RESU_MECA   =FACT(statut='o',max='**',fr="Chargements mécaniques",
+           regles=(UN_PARMI('CHAM_GD','RESULTAT'),),
+           NUME_CHAR     =SIMP(statut='o',typ='I',fr="numéro du chargement" ),
+           NOM_CHAR      =SIMP(statut='f',typ='TXM',fr="nom du chargement" ),
+           CHAM_GD         =SIMP(statut='f',typ=cham_gd_sdaster),
+           RESULTAT        =SIMP(statut='f',typ=resultat_sdaster),
+           b_extrac        =BLOC(condition="RESULTAT != None",
+                                 fr="extraction d un champ de grandeur",
+             regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE','INST','NOEUD_CMP'),),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',into=("EFGE_ELNO_DEPL","SIEF_ELNO_ELGA"),),
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',),
+             INST            =SIMP(statut='f',typ='R',),
+             NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+             b_acce_reel     =BLOC(condition="(INST != None)",
+               CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+               b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                   PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+               b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                   PRECISION       =SIMP(statut='o',typ='R',),),
+             ),
+           ),
+                          ),
+         INDI_SIGM =FACT(statut='o',max='**',fr="indices de contraintes",
+            regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+            C1              =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes C1 du RCCM"),
+            K1              =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes K1 du RCCM"),
+            C2              =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes C2 du RCCM"),
+            K2              =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes K2 du RCCM"),
+            C3              =SIMP(statut='f',typ='R',defaut=0.5,fr="indice de contraintes C3 du RCCM"),
+            K3              =SIMP(statut='f',typ='R',defaut=1.0,fr="indice de contraintes K3 du RCCM"),
+            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",),),
+            GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**',
+                             fr="groupe(s) de mailles ou sont affectés les indices de contraintes"),
+            MAILLE          =SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**',
+                             fr="liste des mailles ou sont affectés les indices de contraintes"),
+            b_grma     =BLOC(condition="(GROUP_MA != None)or(MAILLE != None)",
+               GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+               NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            ),
+            TYPE_ELEM_STANDARD =SIMP(statut='f',typ='TXM',into=("DRO","COU","TRN","TEE"),
+                              fr="type d'élément de tuyauterie ou sont affectés les indices de contraintes"),
+                         ),
+          RESU_THER   =FACT(statut='f',max='**',fr="resultats thermiques",
+            regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),AU_MOINS_UN('TOUT','GROUP_MA','MAILLE'),),
+            NUME_RESU_THER =SIMP(statut='o',typ='I',fr="numéro de la table de résultat thermique" ),
+            TABL_RESU_THER =SIMP(statut='o',typ=table_sdaster,
+                              fr="table relevé des températures sur la section"),
+            TABL_MOYE_THER =SIMP(statut='o',typ=table_sdaster,
+                              fr="table relevé des moyennes sur la section"),
+            TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+            GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+            b_grma     =BLOC(condition="(GROUP_MA != None)or(MAILLE != None)",
+               GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+               NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+            ),
+                           ),
+         SEISME         =FACT(statut='f',max='**',fr="Situation séisme",ang="situation_ang",
+              NB_OCCUR         =SIMP(statut='o',typ='I',fr="nombre d'occurences de la situation" ),
+              NB_CYCL_SEISME   =SIMP(statut='o',typ='I',fr="nombre de cycles associé au séisme" ),
+              NUME_SITU        =SIMP(statut='o',typ='I',fr="numéro de la situation" ),
+              NOM_SITU         =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
+              NUME_GROUPE      =SIMP(statut='o',typ='I',fr="numéros du groupe de la situation" ),
+              CHAR_ETAT        =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
+              TEMP_REF         =SIMP(statut='f',typ='R',fr="temperature référence"),
+                               ),
+         SITUATION         =FACT(statut='o',max='**',fr="Situation",ang="situation_ang",
+              NB_OCCUR         =SIMP(statut='o',typ='I',fr="nombre d'occurences de la situation" ),
+              NUME_SITU        =SIMP(statut='o',typ='I',fr="numéro de la situation" ),
+              NOM_SITU         =SIMP(statut='f',typ='TXM',fr="nom de la situation" ),
+              COMBINABLE       =SIMP(statut='f',typ='TXM',defaut= "OUI",into=("OUI","NON"),fr="non = sous-cycle" ),
+              NUME_GROUPE      =SIMP(statut='f',typ='I',
+                                     fr="numéros des groupes de la situation" ),
+              NUME_PASSAGE     =SIMP(statut='f',typ='I',min=2,max=2,
+                                     fr="numéro des situations de passage" ),
+              NUME_RESU_THER   =SIMP(statut='f',typ='I',max='**',fr="numeros de transitoires thermiques" ),
+              CHAR_ETAT_A      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat A" ),
+              CHAR_ETAT_B      =SIMP(statut='o',typ='I',max='**',fr="numeros de chargements etat B" ),
+              PRES_A           =SIMP(statut='o',typ='R',fr="pression etat A"),
+              PRES_B           =SIMP(statut='o',typ='R',fr="pression etat B"),
+              TEMP_REF_A       =SIMP(statut='f',typ='R',fr="temperature référence etat A"),
+              TEMP_REF_B       =SIMP(statut='f',typ='R',fr="temperature référence etat B"),
+                               ),
+               ),
+)  ;
+#& MODIF COMMANDE  DATE 12/05/2009   AUTEUR DESROCHES X.DESROCHES 
+# ======================================================================
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE DESROCHES X.DESROCHES
+POST_RELEVE_T=OPER(nom="POST_RELEVE_T",op=51,sd_prod=table_sdaster,reentrant='f',
+            fr="Extraire des valeurs de composantes de champs de grandeurs pour y effectuer des calculs (moyenne,invariants,..)"
+               +" ou pour les exprimer dans d'autres repères",
+            docu="U4.81.21",UIinfo={"groupes":("Post traitements",)},
+
+         ACTION          =FACT(statut='o',max='**',
+                               regles=(UN_PARMI('RESULTAT','CHAM_GD'),), 
+
+           OPERATION       =SIMP(statut='o',typ='TXM',into=("EXTRACTION","MOYENNE","MOYENNE_ARITH","EXTREMA"),
+           validators=NoRepeat(),max=2),
+           INTITULE        =SIMP(statut='o',typ='TXM'),  
+
+           CHAM_GD         =SIMP(statut='f',typ=(cham_no_sdaster,
+                                                 cham_elem,),),
+           RESULTAT        =SIMP(statut='f',typ=resultat_sdaster),
+#
+#  1. Sensibilité
+#  1.1. Cas d'un résultat réel
+#       Cas d'un résultat harmonique dont on veut partie réelle ou imaginaire
+#
+           b_sensibilite   =BLOC(condition=" (RESULTAT != None) and \
+                                      (   AsType(RESULTAT) in (evol_elas,evol_ther,evol_noli,dyna_trans, \
+                                                               mode_meca,mode_flamb,mode_acou, \
+                                                               mult_elas,fourier_elas,fourier_ther) or \
+                                        ( AsType(RESULTAT) in (dyna_harmo,acou_harmo) and FORMAT_C != 'MODULE' ) )",
+                                 fr="Définition des paramètres de sensibilité",
+                                 ang="Definition of sensitivity parameters",
+             regles=(CONCEPT_SENSIBLE("SEPARE"), REUSE_SENSIBLE(),
+                     DERIVABLE('RESULTAT'),),
+             SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                                   fr="Liste des paramètres de sensibilité.",
+                                   ang="List of sensitivity parameters"),
+
+           ),
+#
+#  1.2. Cas d'un résultat harmonique dont on veut le module
+#
+           b_sensibilite_harmo =BLOC(condition=" (RESULTAT != None) and \
+                                      ( AsType(RESULTAT) in (dyna_harmo,acou_harmo) and FORMAT_C == 'MODULE' )",
+                                     fr="Définition des paramètres de sensibilité",
+                                     ang="Definition of sensitivity parameters",
+             regles=(CONCEPT_SENSIBLE("SEPARE"), REUSE_SENSIBLE(),
+                     DERIVABLE('RESULTAT'),),
+             SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                                   fr="Liste des paramètres de sensibilité.",
+                                   ang="List of sensitivity parameters"),
+               b_sensibilite_harmo =BLOC(condition=" SENSIBILITE != None",
+                                         fr="Option pour la sensibilite",
+                                         ang="Option for sensitivity",
+               SENSIBILITE_OPTION =SIMP(statut='o',typ='TXM',into=("MODULE_SENSIBILITE","SENSIBILITE_MODULE",),
+                                        fr="Option : module de la dérivée ou dérivée du module",
+                                        ang="Option : modulus of derivative or derivative of modulus"),
+               ),
+           ),
+
+           b_extrac        =BLOC(condition = "RESULTAT != None",fr="extraction des résultats",
+                                 regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','LIST_ORDRE','NUME_MODE','LIST_MODE',         
+                                                'INST','LIST_INST','FREQ','LIST_FREQ','NOEUD_CMP','NOM_CAS'), ),           
+             NOM_CHAM        =SIMP(statut='o',typ='TXM' ),  
+             TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),  
+             LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+             NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),  
+             LIST_MODE       =SIMP(statut='f',typ=listis_sdaster),
+             NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+             NOM_CAS         =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),  
+             FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),  
+             LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),  
+             LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+           ),
+
+           b_extrema   =BLOC(condition="OPERATION == 'EXTREMA'",
+                             fr="recherche de MIN MAX",
+                             regles=(EXCLUS('TOUT_CMP','NOM_CMP'),),
+              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+              GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+              NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+              TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+              NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),  
+           ),
+
+           b_MOYENNE_ARITH   =BLOC(condition="OPERATION == 'MOYENNE_ARITH'",
+                             fr="moyenne sur des groupes",
+                             regles=(EXCLUS('TOUT_CMP','NOM_CMP'),),
+              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+              GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+              NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+              TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+              NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),  
+           ),
+
+           b_autre   =BLOC(condition="OPERATION != 'EXTREMA' and OPERATION != 'MOYENNE_ARITH'",
+                           fr="extraction et moyenne",
+                           regles=(AU_MOINS_UN('CHEMIN','GROUP_NO','NOEUD'),
+                                   EXCLUS('CHEMIN','GROUP_NO'),
+                                   EXCLUS('CHEMIN','NOEUD'),
+                                   PRESENT_ABSENT('CHEMIN','GROUP_MA','MAILLE'),
+                                   UN_PARMI('TOUT_CMP','NOM_CMP','INVARIANT','ELEM_PRINCIPAUX','RESULTANTE'),
+                                   PRESENT_PRESENT('TRAC_DIR','DIRECTION'),          
+                                   ENSEMBLE('MOMENT','POINT'),
+                                   PRESENT_PRESENT('MOMENT','RESULTANTE'),
+                                   PRESENT_ABSENT('TOUT_CMP','TRAC_DIR','TRAC_NOR'),
+                                   EXCLUS('TRAC_DIR','TRAC_NOR'),
+                                   PRESENT_PRESENT('ORIGINE','AXE_Z'),),
+                   
+              CHEMIN          =SIMP(statut='f',typ=(courbe_sdaster,surface_sdaster) ),
+              TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+              GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+              MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+              GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+              NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+
+              TOUT_CMP        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+              NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),  
+              INVARIANT       =SIMP(statut='f',typ='TXM',into=("OUI",)),
+              ELEM_PRINCIPAUX =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+              RESULTANTE      =SIMP(statut='f',typ='TXM',max='**'),  
+
+              MOMENT          =SIMP(statut='f',typ='TXM',max='**'),  
+              POINT           =SIMP(statut='f',typ='R',max='**'),  
+
+              REPERE          =SIMP(statut='f',typ='TXM',defaut="GLOBAL",
+                                 into=("GLOBAL","LOCAL","POLAIRE","UTILISATEUR","CYLINDRIQUE"),),
+              ANGL_NAUT       =SIMP(statut='f',typ='R',min=3,max=3),  
+              ORIGINE         =SIMP(statut='f',typ='R',min=3,max=3),  
+              AXE_Z           =SIMP(statut='f',typ='R',min=3,max=3),  
+
+              TRAC_NOR        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+              TRAC_DIR        =SIMP(statut='f',typ='TXM',into=("OUI",)),
+              DIRECTION       =SIMP(statut='f',typ='R',max='**'),  
+              VECT_Y          =SIMP(statut='f',typ='R',max='**'),  
+              MOYE_NOEUD      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           ),
+
+           FORMAT_C        =SIMP(statut='f',typ='TXM',defaut="MODULE",into=("MODULE","REEL","IMAG")),
+
+         ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ZENTNER I.ZENTNER
+POST_USURE=OPER(nom="POST_USURE",op=153,sd_prod=table_sdaster,reentrant='f',
+            UIinfo={"groupes":("Post traitements",)},
+                fr="Calcul des volumes d'usure et des profondeurs d'usure d'après la puissance d'usure",
+         regles=(UN_PARMI('TUBE_NEUF','RESU_GENE','PUIS_USURE'),
+                 PRESENT_PRESENT('RESU_GENE','NOEUD','LOI_USURE'),
+                 PRESENT_PRESENT('PUIS_USURE','LOI_USURE'),),
+         TUBE_NEUF       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         ETAT_INIT       =FACT(statut='f',
+           TABL_USURE      =SIMP(statut='f',typ=table_sdaster),
+           INST_INIT       =SIMP(statut='f',typ='R'),  
+                         ),
+         RESU_GENE       =SIMP(statut='f',typ=tran_gene),
+         NOEUD           =SIMP(statut='f',typ=no,),
+         INST_INIT       =SIMP(statut='f',typ='R',defaut=-1.0E+0),  
+         INST_FIN        =SIMP(statut='f',typ='R'),  
+         NB_BLOC         =SIMP(statut='f',typ='I',defaut= 1 ),  
+         PUIS_USURE      =SIMP(statut='f',typ='R'),  
+         LOI_USURE       =SIMP(statut='f',typ='TXM',into=("ARCHARD","KWU_EPRI","EDF_MZ")),
+         b_archard       =BLOC(condition = "LOI_USURE == 'ARCHARD'",
+           regles=(UN_PARMI('MOBILE','MATER_USURE','SECTEUR'), 
+                   EXCLUS('MATER_USURE','OBSTACLE'),
+                   EXCLUS('MOBILE','USURE_OBST'),),
+           MOBILE          =FACT(statut='f',
+             COEF_USURE      =SIMP(statut='o',typ='R'), 
+           ),   
+           OBSTACLE        =FACT(statut='f',
+             COEF_USURE      =SIMP(statut='o',typ='R'), 
+           ),
+           SECTEUR         =FACT(statut='f',max='**',
+             CONTACT         =SIMP(statut='f',typ='TXM',into=("TUBE_BAV","TUBE_ALESAGE","TUBE_4_ENCO",  
+                                                              "GRAPPE_ALESAGE","TUBE_3_ENCO","TUBE_TUBE", 
+                                                              "GRAPPE_1_ENCO","GRAPPE_2_ENCO")),
+             COEF_USUR_MOBILE=SIMP(statut='f',typ='R'),  
+             COEF_USUR_OBST  =SIMP(statut='f',typ='R'),  
+             ANGL_INIT       =SIMP(statut='f',typ='R'),  
+             ANGL_FIN        =SIMP(statut='f',typ='R'),  
+           ),
+           MATER_USURE     =SIMP(statut='f',typ='TXM'),  
+           USURE_OBST      =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         ),
+         b_kwu_epri        =BLOC(condition = "LOI_USURE == 'KWU_EPRI'",
+           regles=(UN_PARMI('MOBILE','MATER_USURE'), 
+                   EXCLUS('MATER_USURE','OBSTACLE'),
+                   EXCLUS('MOBILE','USURE_OBST'),),
+           MOBILE          =FACT(statut='f',
+             COEF_FNOR       =SIMP(statut='f',typ='R'),  
+             COEF_VTAN       =SIMP(statut='f',typ='R'),  
+             COEF_USURE      =SIMP(statut='f',typ='R'),  
+             COEF_K          =SIMP(statut='f',typ='R',defaut=5.0E+0),  
+             COEF_C          =SIMP(statut='f',typ='R',defaut=10.0E+0),  
+           ),   
+           OBSTACLE        =FACT(statut='f',
+             COEF_FNOR       =SIMP(statut='f',typ='R' ),  
+             COEF_VTAN       =SIMP(statut='f',typ='R' ),  
+             COEF_USURE      =SIMP(statut='o',typ='R'), 
+             COEF_K          =SIMP(statut='f',typ='R',defaut=5.0E+0),  
+             COEF_C          =SIMP(statut='f',typ='R',defaut=10.0E+0),  
+           ),   
+           MATER_USURE     =SIMP(statut='f',typ='TXM'),  
+           USURE_OBST      =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           FNOR_MAXI       =SIMP(statut='f',typ='R' ),  
+           VTAN_MAXI       =SIMP(statut='f',typ='R' ),  
+         ),
+         b_edf_mz          =BLOC(condition = "LOI_USURE == 'EDF_MZ'",
+           regles=(UN_PARMI('MOBILE','MATER_USURE'), 
+                   EXCLUS('MATER_USURE','OBSTACLE'),
+                   EXCLUS('MOBILE','USURE_OBST'),),
+           MOBILE          =FACT(statut='f',
+             COEF_USURE      =SIMP(statut='f',typ='R',defaut=1.0E-13),  
+             COEF_B          =SIMP(statut='f',typ='R',defaut=1.2E+0),  
+             COEF_N          =SIMP(statut='f',typ='R',defaut=2.44E-8),  
+             COEF_S          =SIMP(statut='f',typ='R',defaut=1.14E-16),  
+           ),   
+           OBSTACLE        =FACT(statut='f',
+             COEF_USURE      =SIMP(statut='o',typ='R',defaut=1.0E-13), 
+             COEF_B          =SIMP(statut='f',typ='R',defaut=1.2E+0),  
+             COEF_N          =SIMP(statut='f',typ='R',defaut=2.44E-8),  
+             COEF_S          =SIMP(statut='f',typ='R',defaut=1.14E-16),  
+           ),   
+           MATER_USURE     =SIMP(statut='f',typ='TXM'),  
+           USURE_OBST      =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         ),
+         b_tube_neuf       =BLOC(condition = "TUBE_NEUF == 'OUI'",
+            TABL_USURE      =SIMP(statut='o',typ=table_sdaster),
+            INST            =SIMP(statut='f',typ='R'),
+         ),
+         CONTACT         =SIMP(statut='f',typ='TXM',into=("TUBE_BAV","TUBE_ALESAGE","TUBE_4_ENCO",    
+                                                          "GRAPPE_ALESAGE","TUBE_3_ENCO","TUBE_TUBE",        
+                                                          "GRAPPE_1_ENCO","GRAPPE_2_ENCO")),
+         RAYON_MOBILE    =SIMP(statut='f',typ='R'),  
+         RAYON_OBST      =SIMP(statut='f',typ='R'),  
+         LARGEUR_OBST    =SIMP(statut='f',typ='R'),  
+         ANGL_INCLI      =SIMP(statut='f',typ='R'),  
+         ANGL_ISTHME     =SIMP(statut='f',typ='R'),  
+         ANGL_IMPACT     =SIMP(statut='f',typ='R'),  
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),  
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+         COEF_INST       =SIMP(statut='f',typ='R',defaut=1.0E+0),  
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 16/02/2010   AUTEUR PELLET J.PELLET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+
+POURSUITE=MACRO(nom="POURSUITE",op=ops.build_poursuite,repetable='n',
+                fr="Poursuite d'une étude à partir de la sauvegarde au format JEVEUX ou HDF de sa base globale",
+                sd_prod = ops.POURSUITE,
+            UIinfo={"groupes":("Gestion du travail",)},
+                op_init = ops.POURSUITE_context,fichier_ini = 1,
+         FORMAT_HDF      =SIMP(fr="sauvegarde de la base GLOBALE au format HDF",statut='f',
+                               typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         PAR_LOT         =SIMP(fr="mode de traitement des commandes",statut='f',typ='TXM',
+                           into=("OUI","NON"),defaut="OUI"),
+         IMPR_MACRO      =SIMP(fr="affichage des sous-commandes produites par les macros dans le fichier mess",
+                           statut='f',typ='TXM',into=("OUI","NON"),defaut="NON"),
+
+         BASE            =FACT(fr="définition des paramètres associés aux bases JEVEUX",
+                               statut='f',min=1,max=2,
+           FICHIER         =SIMP(fr="nom de la base",statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           CAS             =SIMP(statut='f',typ='TXM'),
+           NMAX_ENRE       =SIMP(fr="nombre maximum d enregistrements",statut='f',typ='I'),
+           LONG_ENRE       =SIMP(fr="longueur des enregistrements",statut='f',typ='I'),
+           LONG_REPE       =SIMP(fr="longueur du répertoire",statut='f',typ='I'),
+         ),
+
+         IMPRESSION      =FACT(statut='f',min=1,max=3,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           UNITE           =SIMP(statut='o',typ='I'),
+         ),
+
+         CATALOGUE       =FACT(statut='f',min=1,max=10,
+           FICHIER         =SIMP(statut='o',typ='TXM'),
+           TITRE           =SIMP(statut='f',typ='TXM'),
+           UNITE           =SIMP(statut='f',typ='I'),
+         ),
+
+         ERREUR          =FACT(fr="comportement en cas d'erreur",statut='f',min=1,max=1,
+           ERREUR_F        =SIMP(statut='f',typ='TXM',into=('ABORT','EXCEPTION'),defaut='ABORT'),
+         ),
+
+         DEBUG           =FACT(fr="option de déboggage reservée aux développeurs",
+                               statut='f',min=1,max=1,
+           JXVERI          =SIMP(fr="vérifie l intégrité de la segmentation mémoire",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           SDVERI          =SIMP(fr="vérifie la conformité des SD produites par les commandes",
+                                 statut='f',typ='TXM',into=('OUI','NON')),
+           JEVEUX          =SIMP(fr="force les déchargement sur disque",
+                                 statut='f',typ='TXM',into=('OUI','NON'),defaut='NON'),
+           ENVIMA          =SIMP(fr="imprime les valeurs définies dans ENVIMA",
+                                 statut='f',typ='TXM',into=('TEST',)),
+         ),
+
+         MESURE_TEMPS     =FACT(fr="Pour choisir les mesures de temps consommé dans les commandes",
+                               statut='d',min=1,max=1,
+           NIVE_DETAIL      =SIMP(fr="niveau de détail des impressions",
+                                 statut='f',typ='I',into=(0,1,2,3),defaut=1),
+                                 # 0 : rien
+                                 # 1 : impression en fin de commande des mesures principales
+                                 # 2 : impression en fin de commande des mesures principales et secondaires
+                                 # 3 : impression des mesures principales et secondaires pour chaque pas de temps
+         ),
+
+         MEMOIRE         =FACT(fr="mode de gestion mémoire utilisé",statut='d',min=1,max=1,
+           GESTION         =SIMP(statut='f',typ='TXM',into=('COMPACTE','RAPIDE'),defaut='RAPIDE'),
+           TYPE_ALLOCATION =SIMP(statut='f',typ='I',into=(1,2,3,4),defaut=1),
+           TAILLE          =SIMP(statut='f',typ='I'),
+           TAILLE_BLOC     =SIMP(statut='f',typ='R',defaut=800.),
+           PARTITION       =SIMP(statut='f',typ='R' ),
+           DYNAMIQUE       =SIMP(statut='f',typ='I',defaut=1),
+         ),
+
+         RESERVE_CPU     =FACT(fr="reserve de temps pour terminer une execution",statut='d',max=1,
+           regles=(EXCLUS('VALE','POURCENTAGE'),),
+           VALE            =SIMP(statut='f',typ='I',val_min=0),
+#                            valeur par défaut fixée à 10. dans le FORTRAN si CODE présent
+           POURCENTAGE     =SIMP(statut='f',typ='R',val_min=0.,val_max=1.0),
+#                           valeur par défaut fixée à 10% dans le FORTRAN
+           BORNE           =SIMP(statut='f',typ='I',val_min=0,defaut=900) ),
+#          valeur en pourcentage du temps maximum bornée à 900 secondes
+
+         CODE            =FACT("définition d'un nom pour l'ensemble d'une étude",
+                               statut='f',min=1,max=1,
+           NOM             =SIMP(statut='o',typ='TXM'),
+         ),
+
+
+         IGNORE_ALARM = SIMP(statut='f', typ='TXM', max='**', fr="Alarmes que l'utilisateur souhaite délibérément ignorer"),
+
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+PRE_GIBI=PROC(nom="PRE_GIBI",op=49,
+            UIinfo={"groupes":("Gestion du travail",)},
+              fr="Conversion d'un fichier de maillage GIBI au format Aster",
+         UNITE_GIBI      =SIMP(statut='f',typ='I',defaut=19),  
+         UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+PRE_GMSH=PROC(nom="PRE_GMSH",op=47,
+            UIinfo={"groupes":("Gestion du travail",)},
+               fr="Conversion d'un fichier de maillage GMSH au format Aster",
+         UNITE_GMSH      =SIMP(statut='f',typ='I',defaut=19),  
+         UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE MIKCHEVITCH A.MIKCHEVITCH
+PRE_IDEAS=PROC(nom="PRE_IDEAS",op=47,
+            UIinfo={"groupes":("Gestion du travail",)},
+               fr="Conversion d'un fichier universel IDEAS-SUPERTAB au format Aster",
+         UNITE_IDEAS     =SIMP(statut='f',typ='I',defaut=19),  
+         UNITE_MAILLAGE  =SIMP(statut='f',typ='I',defaut=20),  
+         CREA_GROUP_COUL =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+
+PROD_MATR_CHAM=OPER(nom="PROD_MATR_CHAM",op= 156,sd_prod=cham_no_sdaster,
+                    fr="Effectuer le produit d'une matrice par un vecteur",
+                    reentrant='n',
+            UIinfo={"groupes":("Résultats et champs",)},
+         MATR_ASSE       =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,matr_asse_pres_c ) ),
+         CHAM_NO         =SIMP(statut='o',typ=cham_no_sdaster),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+)  ;
+#& MODIF COMMANDE  DATE 19/04/2010   AUTEUR BERARD A.BERARD 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+def proj_champ_prod(RESULTAT=None,CHAM_GD=None,**args ):
+    if AsType(RESULTAT) != None : return AsType(RESULTAT)
+    if AsType(CHAM_GD)  != None : return AsType(CHAM_GD)
+    raise AsException("type de concept resultat non prevu")
+
+
+
+
+PROJ_CHAMP=OPER(nom="PROJ_CHAMP",op= 166,sd_prod=proj_champ_prod,reentrant='f',
+            UIinfo={"groupes":("Résultats et champs",)},
+                fr="Projeter des champs d'un maillage sur un autre",
+
+
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="ELEM",
+                               into=("NUAGE_DEG_0","NUAGE_DEG_1","ELEM",) ),
+
+         regles=(UN_PARMI('RESULTAT','CHAM_GD'),
+                 UN_PARMI('MODELE_1','MAILLAGE_1'),
+                 UN_PARMI('MODELE_2','MAILLAGE_2'),
+                 ),
+         RESULTAT        =SIMP(statut='f',typ=resultat_sdaster),
+         CHAM_GD         =SIMP(statut='f',typ=(cham_no_sdaster,cham_elem)),
+
+         MODELE_1        =SIMP(statut='f',typ=modele_sdaster),
+         MAILLAGE_1      =SIMP(statut='f',typ=maillage_sdaster),
+
+         MODELE_2        =SIMP(statut='f',typ=modele_sdaster),
+         MAILLAGE_2      =SIMP(statut='f',typ=maillage_sdaster),
+
+         # Cas de la projection NUAGE_DEG_0/1 :
+         #--------------------------------------------
+         b_nuage         =BLOC(condition="METHODE in ('NUAGE_DEG_0','NUAGE_DEG_1')",
+             CHAM_NO_REFE    =SIMP(statut='o',typ=cham_no_sdaster),
+         ),
+
+
+         # Cas de la projection ELEM :
+         #--------------------------------------------
+         b_elem          =BLOC(condition="METHODE == 'ELEM'",
+             CAS_FIGURE      =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",),
+                  fr="Pour indiquer au programme le type de projection souhaité"),
+             DISTANCE_MAX    =SIMP(statut='f',typ='R',
+                  fr="Distance maximale entre le noeud et l'élément le plus proche, lorsque le noeud n'est dans aucun élément."),
+
+             TRANSF_GEOM_1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                  fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                     " aux noeuds du MODELE_1 avant la projection."),
+             TRANSF_GEOM_2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                  fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                     " aux noeuds du MODELE_2 avant la projection."),
+
+             ALARME          =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+
+             TYPE_CHAM       =SIMP(statut='f',typ='TXM',into=("NOEU",),
+                  fr="Pour forcer le type des champs projetés. NOEU -> cham_no"),
+
+             PROL_ZERO       =SIMP(statut='f',typ='TXM',into=("OUI","NON"),defaut="NON",
+                  fr="Pour prolonger les champs par zéro là ou la projection ne donne pas de valeurs."),
+         ),
+
+
+
+         # Cas de la projection d'une sd_resultat :
+         #--------------------------------------------
+         b_resultat      =BLOC(condition="RESULTAT != None",
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','FREQ','LIST_INST','LIST_FREQ','LIST_ORDRE'),
+                   EXCLUS('TOUT_CHAM','NOM_CHAM',),
+                   CONCEPT_SENSIBLE('SEPARE'),
+                   REUSE_SENSIBLE(),
+                   DERIVABLE('RESULTAT'),),
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters",),
+
+           NOM_PARA        =SIMP(statut='f',typ='TXM', max='**'),
+           TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+
+           NUME_DDL        =SIMP(statut='f',typ=(nume_ddl_sdaster),
+                fr="Utile en dynamique pour pouvoir imoser la numérotation des cham_no."),
+
+
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster),
+           NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+           NOEUD_CMP       =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**'),
+
+           b_acce_reel     =BLOC(condition="(FREQ != None)or(LIST_FREQ != None)or(INST != None)or(LIST_INST != None)",
+              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+              b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                   PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+              b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                   PRECISION       =SIMP(statut='o',typ='R',),),
+           ),
+
+         ),
+
+
+
+         # Mots clés utilisables dans tous les cas :
+         #---------------------------------------------
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+
+         VIS_A_VIS       =FACT(statut='f',max='**',
+           regles=(AU_MOINS_UN('TOUT_1','GROUP_MA_1','MAILLE_1','GROUP_NO_1','NOEUD_1'),
+                   AU_MOINS_UN('TOUT_2','GROUP_MA_2','MAILLE_2','GROUP_NO_2','NOEUD_2'),),
+           TOUT_1          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA_1      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_1        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_1      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_1         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+           TOUT_2          =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA_2      =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE_2        =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           GROUP_NO_2      =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+           NOEUD_2         =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+
+           # les mots clés suivants ne sont actifs que si METHODE='ELEM' mais on ne peut pas le vérifier:
+               CAS_FIGURE      =SIMP(statut='f',typ='TXM',into=("2D","3D","2.5D","1.5D",) ),
+               TRANSF_GEOM_1   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                    fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                       " aux noeuds du MODELE_1 avant la projection."),
+               TRANSF_GEOM_2   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),min=2,max=3,
+                    fr="2 (ou 3) fonctions fx,fy,fz définissant la transformation géométrique à appliquer"+
+                       " aux noeuds du MODELE_2 avant la projection."),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
+def matr_asse_gene_prod(MATR_ASSE,MATR_ASSE_GENE,**args):
+  if AsType(MATR_ASSE) == matr_asse_depl_r  : return matr_asse_gene_r
+  if AsType(MATR_ASSE_GENE) == matr_asse_gene_r  : return matr_asse_gene_r
+  if AsType(MATR_ASSE) == matr_asse_depl_c  : return matr_asse_gene_c
+  if AsType(MATR_ASSE_GENE) == matr_asse_gene_c  : return matr_asse_gene_c
+  raise AsException("type de concept resultat non prevu")
+
+PROJ_MATR_BASE=OPER(nom="PROJ_MATR_BASE",op=  71,sd_prod=matr_asse_gene_prod,
+                    fr="Projection d'une matrice assemblée sur une base (modale ou de RITZ)",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         regles=(UN_PARMI('MATR_ASSE','MATR_ASSE_GENE'),),            
+         BASE            =SIMP(statut='o',typ=(mode_meca,mode_gene ) ),
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         MATR_ASSE       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_depl_c) ),
+         MATR_ASSE_GENE  =SIMP(statut='f',typ=(matr_asse_gene_r,matr_asse_gene_c) ),
+)  ;
+
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ANDRIAM H.ANDRIAMBOLOLONA
+def proj_mesu_modal_prod(MODELE_MESURE,**args):
+     vale=MODELE_MESURE['MESURE']
+     if  AsType(vale) == dyna_trans   : return tran_gene
+     if  AsType(vale) == dyna_harmo   : return harm_gene
+     if  AsType(vale) == mode_meca    : return mode_gene
+     if  AsType(vale) == mode_meca_c  : return mode_gene
+#     if  AsType(vale) == base_modale  : return mode_gene
+     raise AsException("type de concept resultat non prevu")
+
+PROJ_MESU_MODAL=OPER(nom="PROJ_MESU_MODAL",op= 193,
+                     sd_prod=proj_mesu_modal_prod,
+                     reentrant='n',
+            UIinfo={"groupes":("Résultats et champs",)},
+                     fr="Calcul des coordonnees généralisees de mesure experimentale relatives a une base de projection",
+
+         MODELE_CALCUL   =FACT(statut='o',
+           MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
+#           BASE            =SIMP(statut='o',typ=(mode_meca,base_modale,) ),          
+           BASE            =SIMP(statut='o',typ= mode_meca, ),
+                         ),
+         MODELE_MESURE   =FACT(statut='o',
+           MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
+#           MESURE          =SIMP(statut='o',typ=(dyna_trans,dyna_harmo,base_modale,mode_meca,mode_meca_c,) ),
+           MESURE          =SIMP(statut='o',typ=(dyna_trans,dyna_harmo,mode_meca,mode_meca_c,) ),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE","ACCE","SIEF_NOEU","EPSI_NOEU_DEPL",) ),
+                         ),
+         CORR_MANU       =FACT(statut='f',max='**',
+           regles=(PRESENT_PRESENT('NOEU_CALCUL','NOEU_MESURE'),),
+           NOEU_CALCUL     =SIMP(statut='f',typ=no),
+           NOEU_MESURE     =SIMP(statut='f',typ=no),
+                         ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),
+         RESOLUTION      =FACT(statut='f',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="LU",into=("LU","SVD",) ),
+           b_svd =BLOC(condition="METHODE=='SVD'",
+                       EPS=SIMP(statut='f',typ='R',defaut=0. ),
+                      ),
+           REGUL           =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","NORM_MIN","TIK_RELA",) ),
+           b_regul =BLOC(condition="REGUL!='NON'",
+                         regles=(PRESENT_ABSENT('COEF_PONDER','COEF_PONDER_F', ),),
+                         COEF_PONDER   =SIMP(statut='f',typ='R',defaut=0.     ,max='**' ),  
+                         COEF_PONDER_F =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),max='**' ),
+                        ),
+             ),
+
+          ); 
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+PROJ_SPEC_BASE=OPER(nom="PROJ_SPEC_BASE",op= 146,sd_prod=table_fonction,reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+            fr="Projecter un ou plusieurs spectres de turbulence sur une (ou plusieurs) base(s) modale(s) ",
+      regles=(UN_PARMI('BASE_ELAS_FLUI','MODE_MECA','CHAM_NO'),),
+         SPEC_TURB       =SIMP(statut='o',typ=spectre_sdaster,validators=NoRepeat(),max='**' ),
+         TOUT_CMP        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+         BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu_sdaster ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         CHAM_NO         =SIMP(statut='f',typ=cham_no_sdaster),
+         FREQ_INIT       =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+         FREQ_FIN        =SIMP(statut='o',typ='R',val_min=0.E+0 ),  
+         NB_POIN         =SIMP(statut='o',typ='I' ),  
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG")),
+         GROUP_MA        =SIMP(statut='f',typ=grma),
+#  Quel est le type attendu derriere  MODELE_INTERFACE         
+         MODELE_INTERFACE=SIMP(statut='f',typ=modele_sdaster),
+         VECT_X          =SIMP(statut='f',typ='R',min=3,max=3 ),  
+         VECT_Y          =SIMP(statut='f',typ='R',min=3,max=3 ),  
+         ORIG_AXE        =SIMP(statut='f',typ='R',min=3,max=3 ),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
+
+PROJ_VECT_BASE=OPER(nom="PROJ_VECT_BASE",op=  72,sd_prod=vect_asse_gene,
+                    fr="Projection d'un vecteur assemblé sur une base (modale ou de RITZ)",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         regles=(UN_PARMI('VECT_ASSE','VECT_ASSE_GENE'),),              
+         BASE            =SIMP(statut='o',typ=(mode_meca,mode_gene) ),
+         NUME_DDL_GENE   =SIMP(statut='o',typ=nume_ddl_gene ),
+         TYPE_VECT       =SIMP(statut='f',typ='TXM',defaut="FORC"),
+         VECT_ASSE       =SIMP(statut='f',typ=cham_no_sdaster),
+         VECT_ASSE_GENE  =SIMP(statut='f',typ=vect_asse_gene ),
+)  ;
+#& MODIF COMMANDE  DATE 03/05/2010   AUTEUR GENIAUT S.GENIAUT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GALENNE E.GALENNE
+
+
+from Macro.propa_fiss_ops import propa_fiss_ops
+
+def propa_fiss_prod(self,**args):
+  if  args.has_key('MAIL_TOTAL')  : 
+      MAIL_TOTAL = args['MAIL_TOTAL']
+      self.type_sdprod(MAIL_TOTAL,maillage_sdaster)
+  if  args.has_key('MAIL_FISS')  : 
+      MAIL_FISS = args['MAIL_FISS']
+      self.type_sdprod(MAIL_FISS,maillage_sdaster)
+  if args.has_key('FISSURE') :
+      FISSURE = args['FISSURE']
+      for numfis in FISSURE :
+        if (args['METHODE_PROPA']=='MAILLAGE') :
+          self.type_sdprod(numfis['MAIL_PROPAGE'],maillage_sdaster)
+        else :
+          self.type_sdprod(numfis['FISS_PROPAGEE'],fiss_xfem)
+  return None
+
+PROPA_FISS=MACRO(nom="PROPA_FISS",op=propa_fiss_ops,sd_prod=propa_fiss_prod,
+            fr="Propagation de fissure avec X-FEM",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
+
+        METHODE_PROPA = SIMP(statut='o',typ='TXM',
+                               into=("SIMPLEXE","UPWIND","MAILLAGE","INITIALISATION") ),
+            
+        b_hamilton = BLOC(condition="(METHODE_PROPA=='SIMPLEXE') or (METHODE_PROPA=='UPWIND') ",
+              MODELE        = SIMP(statut='o',typ=modele_sdaster),
+              TEST_MAIL     = SIMP(statut='f',typ='TXM',into=("NON","OUI",),defaut="NON"),
+              DA_MAX        = SIMP(statut='o',typ='R',max=1),
+              RAYON         = SIMP(statut='o',typ='R',),
+              ZONE_MAJ      = SIMP(statut='f',typ='TXM',into=("TOUT","TORE"),defaut="TORE"),
+              b_tore        = BLOC(condition = "ZONE_MAJ == 'TORE' ",
+                                   RAYON_TORE    = SIMP(statut='f',typ='R',max=1,val_min=0.0),
+                                  ),
+              b_propagation = BLOC(condition = "TEST_MAIL == 'NON' ",
+                                   FISSURE   = FACT(statut='o',min=1,max='**',
+                                                    FISS_ACTUELLE  = SIMP(statut='o',typ=fiss_xfem,max=1),
+                                                    FISS_PROPAGEE  = SIMP(statut='o',typ=CO,max=1),
+                                                    GRILLE_AUX     = SIMP(statut='f',typ=modele_sdaster,max=1),
+                                                    NB_POINT_FOND  = SIMP(statut='f',typ='I',max='**'),
+                                                    TABLE          = SIMP(statut='o',typ=table_sdaster,max=1),
+                                                    ),
+                                   LOI_PROPA = FACT(statut='o',max=1,
+                                                    LOI     = SIMP(statut='o',typ='TXM',into=("PARIS",),defaut="PARIS"),
+                                                    b_paris = BLOC(condition = "LOI=='PARIS'",
+                                                                   C = SIMP(statut='o',typ='R',),
+                                                                   N = SIMP(statut='o',typ='R',),
+                                                                   M = SIMP(statut='o',typ='R',),
+                                                                  ),
+                                                    MATER = SIMP(statut='o',typ=mater_sdaster,),
+                                                   ),
+                                   COMP_LINE = FACT(statut='f',max=1, 
+                                                    COEF_MULT_MINI = SIMP(statut='o',typ='R',),
+                                                    COEF_MULT_MAXI = SIMP(statut='o',typ='R',),
+                                                   ),
+                                   ),
+
+              b_test_const  = BLOC(condition = "TEST_MAIL == 'OUI' ",
+                                   FISSURE   = FACT(statut='o',min=1,max='**',
+                                                    FISS_ACTUELLE  = SIMP(statut='o',typ=fiss_xfem,max=1),
+                                                    FISS_PROPAGEE  = SIMP(statut='o',typ=CO,max=1),
+                                                    GRILLE_AUX     = SIMP(statut='f',typ=modele_sdaster,max=1),
+                                                    ),
+                                   ITERATIONS     = SIMP(statut='f',typ='I',max=1,val_min=3,defaut=5),
+                                   TOLERANCE      = SIMP(statut='f',typ='R',max=1,val_min=0.0,val_max=100.0,defaut=5.0),
+                                  ),
+
+                         ),
+
+        b_maillage    =BLOC(condition="(METHODE_PROPA=='MAILLAGE')",
+               MAIL_STRUC       = SIMP(statut='o',typ=maillage_sdaster), 
+               ITERATION      = SIMP(statut='o',typ='I',max=1),
+               DA_MAX        = SIMP(statut='o',typ='R',max=1),
+               
+               FISSURE   = FACT(statut='o',min=1,max='**',
+                                MAIL_ACTUEL    = SIMP(statut='o',typ=maillage_sdaster,max=1),
+                                GROUP_MA_FOND    = SIMP(statut='f',typ='TXM',defaut="FOND"), 
+                                GROUP_MA_FISS    = SIMP(statut='f',typ='TXM',defaut="FISS"), 
+                                FISS_ACTUELLE  = SIMP(statut='o',typ=fiss_xfem,max=1),
+                                MAIL_PROPAGE  = SIMP(statut='f',typ=CO,max=1),
+                                TABLE          = SIMP(statut='o',typ=table_sdaster,max=1),
+                                METHODE_POSTK  = SIMP(statut='f',typ='I',into=(1,2,3),max=1),
+                                DTAN_ORIG      = SIMP(statut='f',typ='R',max=3),
+                                DTAN_EXTR      = SIMP(statut='f',typ='R',max=3),
+                                                    ),
+               MAIL_TOTAL        = SIMP(statut='o',typ=CO), 
+               COMP_LINE = FACT(statut='f',max=1, 
+                                COEF_MULT_MINI = SIMP(statut='o',typ='R',),
+                                COEF_MULT_MAXI = SIMP(statut='o',typ='R',),
+                                                   ),
+                                ),      
+                                    
+        b_init    =BLOC(condition="(METHODE_PROPA=='INITIALISATION')",
+               MAIL_STRUC    = SIMP(statut='o',typ=maillage_sdaster), 
+               FORM_FISS   = SIMP(statut='o',typ='TXM', into=("DEMI_DROITE","DEMI_PLAN","ELLIPSE"), ),
+               GROUP_MA_FOND    = SIMP(statut='f',typ='TXM',defaut="FOND"), 
+               GROUP_MA_FISS    = SIMP(statut='f',typ='TXM',defaut="FISS"), 
+               MAIL_TOTAL     = SIMP(statut='o',typ=CO), 
+               MAIL_FISS       = SIMP(statut='f',typ=CO), 
+             
+               b_droite = BLOC(condition = "FORM_FISS == 'DEMI_DROITE' ",
+                  PFON        = SIMP(statut='o',typ='R',max=3),
+                  DTAN        = SIMP(statut='o',typ='R',min=3,max=3),
+               ),
+               
+               b_plan = BLOC(condition = "FORM_FISS == 'DEMI_PLAN' ",
+                  DTAN        = SIMP(statut='o',typ='R',min=3,max=3),
+                  POINT_ORIG        = SIMP(statut='o',typ='R',min=3,max=3),
+                  POINT_EXTR        = SIMP(statut='o',typ='R',min=3,max=3),
+                  NB_POINT_FOND     = SIMP(statut='o',typ='I',val_max=26),
+               ),
+                
+               b_ellipse = BLOC(condition = "FORM_FISS == 'ELLIPSE' ",
+                  CENTRE         =SIMP(statut='o',typ='R',min=3,max=3),
+                  DEMI_GRAND_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+                  DEMI_PETIT_AXE =SIMP(statut='o',typ='R',val_min=0.E+0),
+                  VECT_X         =SIMP(statut='o',typ='R',min=3,max=3),
+                  VECT_Y         =SIMP(statut='o',typ='R',min=3,max=3),
+                  ANGLE_ORIG        = SIMP(statut='o',typ='R',),
+                  ANGLE_EXTR        = SIMP(statut='o',typ='R',),
+                  NB_POINT_FOND     = SIMP(statut='o',typ='I',val_max=52,),
+               ),   
+             ),       
+
+        b_loi_et_comp_line=BLOC(condition="(METHODE_PROPA=='MAILLAGE')  ",
+                             LOI_PROPA = FACT(statut='o',max=1,
+                                                    LOI     = SIMP(statut='o',typ='TXM',into=("PARIS",),defaut="PARIS"),
+                                                    b_paris = BLOC(condition = "LOI=='PARIS'",
+                                                                   C = SIMP(statut='o',typ='R',),
+                                                                   N = SIMP(statut='o',typ='R',),
+                                                                   M = SIMP(statut='o',typ='R',),
+                                                                  ),
+                                                    MATER = SIMP(statut='o',typ=mater_sdaster,),
+                                                   ),
+                              ),
+
+        INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+)
+
+#& MODIF COMMANDE  DATE 15/12/2009   AUTEUR COLOMBO D.COLOMBO 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+
+PROPA_XFEM=OPER(nom="PROPA_XFEM",op=10,sd_prod=fiss_xfem,reentrant='n',
+                UIinfo={"groupes":("Modelisation",)},
+                fr="Propagation de fissure avec X-FEM",
+    
+    MODELE        =SIMP(statut='o',typ=modele_sdaster),
+
+    GRILLE_AUX    =SIMP(statut='f',typ=modele_sdaster),
+
+    TEST_MAIL     =SIMP(statut='f',typ='TXM',into=("NON","OUI",),defaut="NON"),
+
+    DA_MAX        =SIMP(statut='o',typ='R'),
+
+    FISS_PROP     =SIMP(statut='o',typ=fiss_xfem),
+
+    ZONE_MAJ      =SIMP(statut='f',typ='TXM',into=("TOUT","TORE"),defaut="TORE"),
+
+    RAYON_TORE    =SIMP(statut='f',typ='R'),
+
+    LISTE_FISS    =SIMP(statut='o',typ=fiss_xfem,min=1,max='**'),
+        
+    b_propa =BLOC( condition = "TEST_MAIL == 'NON' ",
+                   NB_POINT_FOND =SIMP(statut='f',typ='I',min=1,max='**'),
+                   TABLE         =SIMP(statut='o',typ=table_sdaster,min=1,max='**'),
+                   LOI_PROPA     =FACT(statut='o',max=1,
+                   LOI            =SIMP(statut='o',typ='TXM',into=("PARIS",),defaut="PARIS"),
+                   b_paris        =BLOC( condition = "LOI=='PARIS'",
+                     C            =SIMP(statut='o',typ='R',),
+                     N            =SIMP(statut='o',typ='R',),
+                     M            =SIMP(statut='o',typ='R',),
+                     E            =SIMP(statut='o',typ='R',),
+                     NU           =SIMP(statut='o',typ='R',),),
+                       ),
+
+                   COMP_LINE      =FACT(statut='f',max=1, 
+                     COEF_MULT_MINI        =SIMP(statut='o',typ='R',),
+                     COEF_MULT_MAXI        =SIMP(statut='o',typ='R',),
+                       ),
+         ),
+
+    b_test_mail_const =BLOC( condition = "TEST_MAIL == 'OUI' ",
+                             FISS_INITIALE =SIMP(statut='o',typ=fiss_xfem,max=1),
+                             DISTANCE      =SIMP(statut='o',typ='R',max=1),
+                             TOLERANCE     =SIMP(statut='o',typ='R',max=1),
+                           ),
+            
+    RAYON          =SIMP(statut='o',typ='R',),
+          
+    METHODE =SIMP(statut='f',typ='TXM',into=("SIMPLEXE","UPWIND",),defaut="UPWIND"),
+
+    INFO           =SIMP(statut='f',typ='I',defaut= 0,into=(0,1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 20/07/2009   AUTEUR GENIAUT S.GENIAUT 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE GENIAUT S.GENIAUT
+from Macro.raff_xfem_ops import raff_xfem_ops
+RAFF_XFEM=MACRO(nom="RAFF_XFEM",op=raff_xfem_ops,sd_prod=cham_no_sdaster,
+                   fr="Calcul de la distance au fond de fissure le plus proche",
+                   reentrant='n',
+            UIinfo={"groupes":("Rupture",)},
+
+    FISSURE       =SIMP(statut='o',typ=fiss_xfem,min=1,max='**',),
+    INFO          =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE PARROT A.PARROT
+RECA_WEIBULL=OPER(nom="RECA_WEIBULL",op= 197,sd_prod=table_sdaster,
+                     fr="Recaler les paramètres du modèle de WEIBULL sur des données expérimentales",reentrant='n',
+            UIinfo={"groupes":("Post traitements",)},
+         LIST_PARA       =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=2,into=("SIGM_REFE","M",) ),
+         RESU            =FACT(statut='o',max='**',
+           regles=(EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST',),
+                   AU_MOINS_UN('TOUT','GROUP_MA','MAILLE', ),),
+           EVOL_NOLI       =SIMP(statut='o',typ=(evol_noli) ),
+           MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
+           CHAM_MATER      =SIMP(statut='o',typ=(cham_mater) ),
+           TEMPE           =SIMP(statut='f',typ='R' ),
+           LIST_INST_RUPT  =SIMP(statut='o',typ='R',validators=NoRepeat(),max='**' ),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+           COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.E0 ),
+                         ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="SIGM_ELGA",into=("SIGM_ELGA","SIGM_ELMOY",) ),
+         CORR_PLAST      =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="MAXI_VRAI",into=("MAXI_VRAI","REGR_LINE",) ),
+         INCO_GLOB_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+         ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ,) ),
+                       )  ;
+#& MODIF COMMANDE  DATE 23/03/2010   AUTEUR BOYERE E.BOYERE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+def recu_fonction_prod(RESULTAT=None,TABLE=None,RESU_GENE=None,
+                       BASE_ELAS_FLUI=None,CHAM_GD=None,NAPPE=None,
+                       NOM_PARA_TABL=None,**args):
+   if AsType(RESULTAT)  == dyna_harmo or \
+      AsType(RESU_GENE) == harm_gene or \
+      (TABLE != None and NOM_PARA_TABL == "FONCTION_C"):
+      return fonction_c
+   else:
+      return fonction_sdaster
+
+RECU_FONCTION=OPER(nom="RECU_FONCTION",op=90,sd_prod=recu_fonction_prod,
+                   fr="Extraire sous forme d'une fonction, l'évolution d'une grandeur en fonction d'une autre",
+                   reentrant='f',
+            UIinfo={"groupes":("Fonction",)},
+         regles=(UN_PARMI('CHAM_GD','RESULTAT','RESU_GENE','TABLE','BASE_ELAS_FLUI','NAPPE'),),
+
+         CHAM_GD         =SIMP(statut='f',typ=(cham_no_sdaster,cham_elem,),),
+         RESULTAT        =SIMP(statut='f',typ=resultat_sdaster),
+         RESU_GENE       =SIMP(statut='f',typ=(tran_gene, mode_gene, harm_gene)),
+         TABLE           =SIMP(statut='f',typ=(table_sdaster,table_fonction)),
+         BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu_sdaster),
+         NAPPE           =SIMP(statut='f',typ=nappe_sdaster),
+
+# ======= SENSIBILITE =================================================
+         b_sensibilite   =BLOC(condition="RESULTAT != None",
+                                 fr="Définition des paramètres de sensibilité",
+                                 ang="Definition of sensitivity parameters",
+           regles=(CONCEPT_SENSIBLE('SEPARE'), REUSE_SENSIBLE(),
+                   DERIVABLE('RESULTAT'),),
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                                   fr="Liste des paramètres de sensibilité.",
+                                   ang="List of sensitivity parameters"),),
+# ======= ACCES A LA SD RESULTAT =================================================
+         b_acces = BLOC ( condition = "(RESULTAT != None) or (RESU_GENE != None)",
+                          fr="acces a une SD résultat",
+# on ne peut pas mettre de regles, le défaut TOUT_ORDRE est pris en compte dans le fortran
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           LIST_ORDRE      =SIMP(statut='f',typ=listis_sdaster ),
+           TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+           FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+           LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster ),
+           NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           b_prec = BLOC ( condition = "(INST != None) or (LIST_INST != None) or (FREQ != None) or (LIST_FREQ != None)",
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+             INTERP_NUME     =SIMP(statut='f',typ='TXM',into=("NON","LIN") ),
+           ),
+         ),
+# ======= BASE_ELAS_FLUI =================================================
+         b_base_elas_flui = BLOC ( condition = "BASE_ELAS_FLUI != None",
+                                   fr="Récupération de la fonction à partir d un concept melasflu",
+           regles=(UN_PARMI('TOUT_ORDRE','NUME_ORDRE'),),
+           TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           NUME_MODE       =SIMP(statut='o',typ='I' ),
+           PARA_X          =SIMP(statut='o',typ='TXM',into=("VITE_FLU",) ),
+           PARA_Y          =SIMP(statut='o',typ='TXM',into=("FREQ","AMOR") ),
+         ),
+
+# ======= TABLE =================================================
+         b_table = BLOC ( condition = "TABLE != None",
+                          fr="Récupération de la fonction à partir d un concept table",
+                          regles=(UN_PARMI('PARA_X','NOM_PARA_TABL'),
+                                  PRESENT_PRESENT('PARA_X','PARA_Y'),),
+           PARA_X        = SIMP(statut='f',typ='TXM',
+                                 fr="1ère colonne de la table qui définit la fonction à récupérer", ),
+           PARA_Y        = SIMP(statut='f',typ='TXM',
+                                 fr="2ème colonne de la table qui définit la fonction à récupérer", ),
+           #b_tabl_fonc = BLOC(condition = "AsType(TABLE) == table_fonction",
+           NOM_PARA_TABL = SIMP(statut='f',typ='TXM',into=("FONCTION","FONCTION_C"),
+                                fr="Nom du paramètre de la table contenant la fonction" ),
+           #),
+
+           FILTRE        = FACT(statut='f',max='**',
+              NOM_PARA        =SIMP(statut='o',typ='TXM' ),
+              CRIT_COMP       =SIMP(statut='f',typ='TXM',defaut="EQ",
+                                    into=("EQ","LT","GT","NE","LE","GE","VIDE",
+                                          "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI") ),
+              b_vale          =BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
+                 regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
+                 VALE            =SIMP(statut='f',typ='R' ),
+                 VALE_I          =SIMP(statut='f',typ='I' ),
+                 VALE_C          =SIMP(statut='f',typ='C' ),
+                 VALE_K          =SIMP(statut='f',typ='TXM' ),),
+
+              CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ),
+         ),
+
+# ======= RESULTAT =================================================
+         b_resu = BLOC ( condition = "RESULTAT != None", fr="Opérandes en cas de RESULTAT",
+                         regles=(UN_PARMI('NOM_CHAM','NOM_PARA_RESU'),),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+           NOM_PARA_RESU   =SIMP(statut='f',typ='TXM' ),
+           b_cham = BLOC ( condition = "NOM_CHAM != None",
+                           regles=(AU_MOINS_UN('MAILLE','GROUP_MA','GROUP_NO','NOEUD'),
+                                   PRESENT_ABSENT('POINT','NOEUD','GROUP_NO'),
+                                   PRESENT_ABSENT('SOUS_POINT','NOEUD','GROUP_NO'),
+                                   EXCLUS('GROUP_MA','MAILLE'),
+                                   EXCLUS('GROUP_NO','NOEUD'),),
+             NOM_CMP         =SIMP(statut='o',typ='TXM' ),
+             MAILLE          =SIMP(statut='f',typ=ma),
+             GROUP_MA        =SIMP(statut='f',typ=grma),
+             NOEUD           =SIMP(statut='f',typ=no),
+             GROUP_NO        =SIMP(statut='f',typ=grno),
+             POINT           =SIMP(statut='f',typ='I' ),
+             SOUS_POINT      =SIMP(statut='f',typ='I' ),
+           ),
+         ),
+
+# ======= RESU_GENE =================================================
+         b_tran_gene = BLOC ( condition = "AsType(RESU_GENE) == tran_gene",
+                              fr="Récupération d'une fonction à partir d un concept TRAN_GENE",
+                              regles=(UN_PARMI('NOM_CHAM','NOEUD_CHOC','GROUP_NO_CHOC'),),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',into=("DEPL","VITE","ACCE","PTEM") ),
+             NOEUD_CHOC      =SIMP(statut='f',typ=no),
+             GROUP_NO_CHOC   =SIMP(statut='f',typ=grno),
+           b_cham = BLOC ( condition = "(NOM_CHAM=='DEPL') or (NOM_CHAM=='VITE') or (NOM_CHAM=='ACCE')",
+                           regles=(UN_PARMI('GROUP_NO','NOEUD','NUME_CMP_GENE',),
+                                   UN_PARMI('NOM_CMP','NUME_CMP_GENE',),
+                                   EXCLUS('MULT_APPUI','CORR_STAT'),),
+             NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+             NUME_CMP_GENE   =SIMP(statut='f',typ='I' ),
+             NOEUD           =SIMP(statut='f',typ=no),
+             GROUP_NO        =SIMP(statut='f',typ=grno),
+             MULT_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             CORR_STAT       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             ACCE_MONO_APPUI =SIMP(statut='f',typ=(fonction_sdaster,formule)),
+           ),
+           b_choc = BLOC ( condition = "(NOEUD_CHOC != None) or (GROUP_NO_CHOC != None)",
+                           regles=(PRESENT_PRESENT('SOUS_STRUC','INTITULE'),),
+             PARA_X          =SIMP(statut='o',typ='TXM',
+                              into=("INST","FN","FT1","FT2","VN","VT1","VT2","DXLOC","DYLOC","DZLOC") ),
+             PARA_Y          =SIMP(statut='o',typ='TXM',
+                              into=("INST","FN","FT1","FT2","VN","VT1","VT2","DXLOC","DYLOC","DZLOC") ),
+             LIST_PARA       =SIMP(statut='f',typ=listr8_sdaster ),
+             INTITULE        =SIMP(statut='f',typ='TXM' ),
+             SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),
+           ),
+         ),
+         b_harm_gene = BLOC ( condition = "AsType(RESU_GENE)==harm_gene",
+                              fr="Récupération d'une fonction à partir d un concept HARM_GENE",
+                              regles=(UN_PARMI('NOM_CHAM','NOM_PARA_RESU'),),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+             NOM_PARA_RESU   =SIMP(statut='f',typ='TXM' ),
+           b_cham = BLOC ( condition = "NOM_CHAM != None",
+                           regles=(UN_PARMI('NUME_CMP_GENE','NOM_CMP'),),
+             NUME_CMP_GENE   =SIMP(statut='f',typ='I' ),
+             NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+             b_cmp = BLOC ( condition = "NOM_CMP != None",
+                            regles=(UN_PARMI('NOEUD','GROUP_NO'),),
+               NOEUD         =SIMP(statut='f',typ=no),
+               GROUP_NO      =SIMP(statut='f',typ=grno),
+             ),
+           ),
+         ),
+         b_mode_gene = BLOC ( condition = "AsType(RESU_GENE)==mode_gene",
+                              fr="Récupération d'une fonction à partir d un concept MODE_GENE",
+                              regles=(UN_PARMI('NOM_CHAM','NOM_PARA_RESU'),),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+             NOM_PARA_RESU   =SIMP(statut='f',typ='TXM' ),
+           b_cham = BLOC ( condition = "NOM_CHAM != None",
+                           regles=(UN_PARMI('NUME_CMP_GENE','NOM_CMP'),),
+             NUME_CMP_GENE   =SIMP(statut='f',typ='I' ),
+             NOM_CMP         =SIMP(statut='f',typ='TXM' ),
+             b_cmp = BLOC ( condition = "NOM_CMP != None",
+                            regles=(UN_PARMI('NOEUD','GROUP_NO'),
+                                    UN_PARMI('SQUELETTE','SOUS_STRUC'),),
+               NOEUD         =SIMP(statut='f',typ=no),
+               GROUP_NO      =SIMP(statut='f',typ=grno),
+               SQUELETTE     =SIMP(statut='f',typ=squelette ),
+               SOUS_STRUC    =SIMP(statut='f',typ='TXM' ),  
+             ),
+           ),
+         ),
+
+# ======= CHAM_GD =================================================
+         b_cham_gd = BLOC ( condition = "(CHAM_GD != None)", fr="Opérandes en cas de CHAM_GD",
+                            regles=(AU_MOINS_UN('MAILLE','GROUP_MA','GROUP_NO','NOEUD'),
+                                    PRESENT_ABSENT('POINT','NOEUD','GROUP_NO'),
+                                    PRESENT_ABSENT('SOUS_POINT','NOEUD','GROUP_NO'),
+                                    EXCLUS('GROUP_MA','MAILLE'),
+                                    EXCLUS('GROUP_NO','NOEUD'),),
+           NOM_CMP         =SIMP(statut='o',typ='TXM' ),
+           MAILLE          =SIMP(statut='f',typ=ma),
+           GROUP_MA        =SIMP(statut='f',typ=grma),
+           NOEUD           =SIMP(statut='f',typ=no),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+           POINT           =SIMP(statut='f',typ='I' ),
+           SOUS_POINT      =SIMP(statut='f',typ='I' ),
+         ),
+
+# ======= NAPPE =================================================
+         b_nappe = BLOC ( condition = "(NAPPE != None)", fr="Opérandes en cas de NAPPE",
+         VALE_PARA_FONC  =SIMP(statut='o',typ='R' ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         ),
+
+# ======= SURCHARGE DES ATTRIBUTS =================================================
+         NOM_PARA        =SIMP(statut='f',typ='TXM', into=C_PARA_FONCTION() ),
+         NOM_RESU        =SIMP(statut='f',typ='TXM' ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',max=2,into=("NON","LIN","LOG") ),
+         PROL_DROITE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+         PROL_GAUCHE     =SIMP(statut='f',typ='TXM',into=("CONSTANT","LINEAIRE","EXCLU") ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2 ) ),
+)  ;
+#& MODIF COMMANDE  DATE 30/09/2008   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE BOYERE E.BOYERE
+RECU_GENE=OPER(nom="RECU_GENE",op=  76,sd_prod=vect_asse_gene,reentrant='n',
+            UIinfo={"groupes":("Résultats et champs",)},
+               fr="Extraire d'un champ de grandeur (déplacements, vitesses ou accélérations) à partir de résultats"
+                  +" en coordonnées généralisées",
+         RESU_GENE       =SIMP(statut='o',typ=tran_gene ),
+         INST            =SIMP(statut='o',typ='R' ),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',defaut="DEPL",into=("DEPL","VITE","ACCE") ),
+         INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU",),),
+         b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+         b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+             PRECISION       =SIMP(statut='o',typ='R',),),
+)  ;
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+RECU_TABLE=OPER(nom="RECU_TABLE",op= 174,sd_prod=table_sdaster,
+         fr="Récupérer dans une table les valeurs d'un paramètre d'une SD Résultat ou d'extraire une table contenue"
+            +" dans une autre SD pour celles qui le permettent",
+         UIinfo={"groupes":("Résultats et champs",)},reentrant='n',
+         CO              =SIMP(statut='o',typ=assd),
+         regles=(UN_PARMI('NOM_TABLE','NOM_PARA')),
+         NOM_TABLE       =SIMP(statut='f',typ='TXM' ),
+         NOM_PARA        =SIMP(statut='f',typ='TXM',max='**'),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),  
+)  ;
+#& MODIF COMMANDE  DATE 11/08/2009   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE PELLET J.PELLET
+
+RESOUDRE=OPER(nom="RESOUDRE",op=15,sd_prod=cham_no_sdaster,reentrant='f',
+               fr="Résolution par méthode directe un système d'équations linéaires préalablement factorisé par FACT_LDLT"+
+                  "ou Résolution d'un système linéaire par la méthode du gradient conjugué préconditionné",
+               UIinfo={"groupes":("Résolution",)},
+         MATR           =SIMP(statut='o',typ=(matr_asse_depl_r,matr_asse_depl_c,matr_asse_temp_r,
+                                               matr_asse_temp_c,matr_asse_pres_r,matr_asse_pres_c) ),
+         CHAM_NO         =SIMP(statut='o',typ=cham_no_sdaster),
+         CHAM_CINE       =SIMP(statut='f',typ=cham_no_sdaster),
+
+         # mot-clé commun aux solveurs MUMPS, GCPC et PETSc:
+         RESI_RELA       =SIMP(statut='f',typ='R',defaut=1.E-6),
+         
+         # mot-clé pour les posttraitements de la phase de solve de MUMPS
+         POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),
+         
+         # mot-clé commun aux solveurs GCPC et PETSc:
+         NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+         MATR_PREC       =SIMP(statut='f',typ=(matr_asse_depl_r,matr_asse_temp_r,matr_asse_pres_r ) ),
+
+         # mots-clés pour solveur PETSc:
+         ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+def rest_cond_tran_prod(RESULTAT,**args ):
+  if AsType(RESULTAT) == evol_noli  : return dyna_trans
+  if AsType(RESULTAT) == dyna_trans : return dyna_trans
+
+  raise AsException("type de concept resultat non prevu")
+
+REST_COND_TRAN=OPER(nom="REST_COND_TRAN",op=  78,sd_prod=rest_cond_tran_prod,
+                    fr="Restituer dans la base physique des résultats issus d'un calcul" 
+                        +"non-lineaire avec projection modale ou d'un calcul transitoire linear"
+                        +"avec condensation dynamique",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+        regles=(
+                EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','TOUT_INST'),
+                EXCLUS('MACR_ELEM_DYNA','BASE_MODALE'),),
+         RESULTAT        =SIMP(statut='f',typ=(evol_noli,dyna_trans) ),
+         BASE_MODALE     =SIMP(statut='f',typ=mode_meca),
+#         NUME_DDL        =SIMP(statut='f',typ=nume_ddl_sdaster ),
+         MACR_ELEM_DYNA  =SIMP(statut='f',typ=macr_elem_dyna),
+         TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),  
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("ABSOLU","RELATIF") ),
+         b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+         b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+             PRECISION       =SIMP(statut='o',typ='R',),),
+         INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+         TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         b_nom_cham=BLOC(condition="TOUT_CHAM == None",
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=3,defaut="ACCE",   
+                               into=("DEPL","VITE","ACCE",) ),),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# RESPONSABLE BOYERE E.BOYERE
+
+def rest_gene_phys_prod(RESU_GENE,**args ):
+  if AsType(RESU_GENE) == tran_gene : return dyna_trans
+  if AsType(RESU_GENE) == mode_gene : return mode_meca
+  if AsType(RESU_GENE) == harm_gene : return dyna_harmo
+  
+  raise AsException("type de concept resultat non prevu")
+
+REST_GENE_PHYS=OPER(nom="REST_GENE_PHYS",op=  75,sd_prod=rest_gene_phys_prod,
+                    fr="Restituer dans la base physique des résultats en coordonnées généralisées",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+        regles=(
+                EXCLUS('INST','LIST_INST','TOUT_INST',
+                       'TOUT_ORDRE','NUME_ORDRE','NUME_MODE',),
+                EXCLUS('FREQ','LIST_FREQ'),
+                EXCLUS('MULT_APPUI','CORR_STAT'),
+                EXCLUS('MULT_APPUI','NOEUD','GROUP_NO'),
+                EXCLUS('CORR_STAT','NOEUD','GROUP_NO'),             
+                EXCLUS('NOEUD','GROUP_NO'),
+                EXCLUS('MAILLE','GROUP_MA'),
+                PRESENT_PRESENT('ACCE_MONO_APPUI','DIRECTION'),),
+         RESU_GENE       =SIMP(statut='f',typ=(tran_gene,mode_gene,harm_gene) ), 
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         NUME_DDL        =SIMP(statut='f',typ=nume_ddl_sdaster ),
+         TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ), 
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),  
+         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ), 
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),  
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("ABSOLU","RELATIF") ),
+         b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+         b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+             PRECISION       =SIMP(statut='o',typ='R',),),
+         INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+         MULT_APPUI      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         CORR_STAT       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         b_nom_cham=BLOC(condition="TOUT_CHAM == None",
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=8,defaut="ACCE",   
+                               into=("DEPL","VITE","ACCE","ACCE_ABSOLU","EFGE_ELNO_DEPL","SIPO_ELNO_DEPL",                 
+                                     "SIGM_ELNO_DEPL","FORC_NODA",) ),),
+         GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+         NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+         GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+         ACCE_MONO_APPUI =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+         DIRECTION       =SIMP(statut='f',typ='R',min=3,max=3 ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+# RESPONSABLE CORUS M.CORUS
+def rest_sous_struc_prod(RESU_GENE,RESULTAT,**args ):
+  if AsType(RESU_GENE) == tran_gene : return dyna_trans
+  if AsType(RESU_GENE) == mode_gene : return mode_meca
+  if AsType(RESU_GENE) == mode_cycl : return mode_meca
+  if AsType(RESU_GENE) == harm_gene : return dyna_harmo
+  if AsType(RESULTAT)  == evol_noli      : return evol_noli
+  if AsType(RESULTAT)  == dyna_trans     : return dyna_trans
+  if AsType(RESULTAT)  == mode_meca      : return mode_meca
+  raise AsException("type de concept resultat non prevu")
+
+REST_SOUS_STRUC=OPER(nom="REST_SOUS_STRUC",op=  77,sd_prod=rest_sous_struc_prod,
+          fr="Restituer dans la base physique des résultats obtenus par sous-structuration",
+                    reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+        regles=(UN_PARMI('RESU_GENE','RESULTAT'),
+# ajout d'une regle de Ionel et Nicolas:
+#                UN_PARMI('NOM_CHAM','TOUT_CHAM'),
+#
+              EXCLUS('TOUT_ORDRE','NUME_ORDRE','INST','LIST_INST','TOUT_INST','NUME_MODE',
+                     'FREQ', 'LIST_FREQ'),
+#  Doc U à revoir
+              EXCLUS('NOEUD','GROUP_NO'),
+              EXCLUS('MAILLE','GROUP_MA'),
+              PRESENT_PRESENT('RESULTAT','SQUELETTE'),
+
+                ),
+         RESULTAT        =SIMP(statut='f',typ=(evol_noli,dyna_trans,
+                                            mode_meca) ),
+         RESU_GENE       =SIMP(statut='f',typ=(tran_gene,mode_gene,mode_cycl,harm_gene) ),
+         NUME_DDL        =SIMP(statut='f',typ=nume_ddl_sdaster ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca ),
+         TOUT_ORDRE      =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         NUME_ORDRE      =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),  
+         NUME_MODE       =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**' ),  
+         TOUT_INST       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),  
+         LIST_INST       =SIMP(statut='f',typ=listr8_sdaster ),
+         FREQ            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),  
+         LIST_FREQ       =SIMP(statut='f',typ=listr8_sdaster ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("ABSOLU","RELATIF") ),
+         b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+             PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+         b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+             PRECISION       =SIMP(statut='o',typ='R',),),
+         INTERPOL        =SIMP(statut='f',typ='TXM',defaut="NON",into=("NON","LIN") ),
+         TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+         b_nom_cham=BLOC(condition="TOUT_CHAM == None",
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=8,defaut="ACCE",   
+                               into=("DEPL","VITE","ACCE","ACCE_ABSOLU","EFGE_ELNO_DEPL","SIPO_ELNO_DEPL",                 
+                                     "SIGM_ELNO_DEPL","FORC_NODA",) ),),
+         GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+         NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+         GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+         CYCLIQUE    =FACT(statut='f',max='**',
+           NB_SECTEUR      =SIMP(statut='f',typ='I',validators=NoRepeat(),max=1 ),
+           NUME_DIAMETRE    =SIMP(statut='f',typ='I',validators=NoRepeat(),max=1 ),
+           RESULTAT2       =SIMP(statut='f',typ=(evol_elas,evol_noli,dyna_trans,evol_char,
+                                               mode_meca) ),
+         ),
+
+         SQUELETTE       =SIMP(statut='f',typ=squelette ),
+         SOUS_STRUC      =SIMP(statut='f',typ='TXM' ),  
+         SECTEUR         =SIMP(statut='f',typ='I',defaut= 1 ),  
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 11/05/2009   AUTEUR NISTOR I.NISTOR 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE ADOBES A.ADOBES
+REST_SPEC_PHYS=OPER(nom="REST_SPEC_PHYS",op= 148,sd_prod=table_fonction,
+                    reentrant='n',
+            fr="Calculer la réponse d'une structure dans la base physique",
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         regles=(AU_MOINS_UN('BASE_ELAS_FLUI','MODE_MECA'),),        
+         BASE_ELAS_FLUI  =SIMP(statut='f',typ=melasflu_sdaster ),
+         MODE_MECA       =SIMP(statut='f',typ=mode_meca,),
+         BANDE           =SIMP(statut='f',typ='R',min=2,validators=NoRepeat(),max=2    ),  
+         NUME_ORDRE      =SIMP(statut='f',typ='I'      ,validators=NoRepeat(),max='**' ),
+         TOUT_ORDRE       =SIMP(statut='f',typ='TXM',defaut="NON",  into=("OUI","NON")  ),
+         INTE_SPEC_GENE  =SIMP(statut='o',typ=table_fonction),
+         NOEUD           =SIMP(statut='o',typ=no   ,max='**'),
+         MAILLE          =SIMP(statut='f',typ=ma   ,max='**'),
+         NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),  
+         NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=7,    
+                               into=("DEPL","VITE","ACCE","EFGE_ELNO_DEPL",
+                                     "SIPO_ELNO_DEPL","SIGM_ELNO_DEPL","FORC_NODA") ),
+         MODE_STAT       =SIMP(statut='f',typ=mode_meca ),
+         EXCIT           =FACT(statut='f',
+           NOEUD           =SIMP(statut='o',typ=no   ,max='**'),
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),  
+         ),
+         MOUVEMENT       =SIMP(statut='f',typ='TXM',defaut="ABSOLU",into=("RELATIF","ABSOLU","DIFFERENTIEL") ),
+         OPTION          =SIMP(statut='f',typ='TXM',defaut="DIAG_DIAG",    
+                               into=("DIAG_TOUT","DIAG_DIAG","TOUT_TOUT","TOUT_DIAG") ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),  
+)  ;
+#& MODIF COMMANDE  DATE 06/10/2008   AUTEUR DEVESA G.DEVESA 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE DEVESA G.DEVESA
+def rest_spec_temp_prod(RESU_GENE,RESULTAT,**args):
+  if AsType(RESULTAT) == dyna_harmo    : return dyna_trans
+  if AsType(RESU_GENE) == harm_gene    : return tran_gene
+  if AsType(RESULTAT) == dyna_trans    : return dyna_harmo
+  if AsType(RESU_GENE) == tran_gene    : return harm_gene
+  raise AsException("type de concept resultat non prevu")
+
+
+REST_SPEC_TEMP=OPER(nom="REST_SPEC_TEMP",op=181,sd_prod=rest_spec_temp_prod,
+              fr="Transformée de Fourier d'un résultat",
+              reentrant='n',
+            UIinfo={"groupes":("Matrices/vecteurs",)},
+         regles=UN_PARMI('RESU_GENE','RESULTAT'),
+         RESU_GENE       =SIMP(statut='f',typ=(harm_gene,tran_gene,) ),
+         RESULTAT        =SIMP(statut='f',typ=(dyna_harmo,dyna_trans,) ),
+         METHODE         =SIMP(statut='f',typ='TXM',defaut="PROL_ZERO",into=("PROL_ZERO","TRONCATURE") ),
+         SYMETRIE        =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         TOUT_CHAM       =SIMP(statut='f',typ='TXM',into=("OUI",)),
+         NOM_CHAM        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=3,into=("DEPL","VITE","ACCE") ),
+);
+#& MODIF COMMANDE  DATE 03/05/2010   AUTEUR PROIX J-M.PROIX 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE PROIX J.M.PROIX
+# -*- coding: iso-8859-1 -*-
+
+from Macro.simu_point_mat_ops import simu_point_mat_ops
+
+SIMU_POINT_MAT=MACRO(nom="SIMU_POINT_MAT", op=simu_point_mat_ops,sd_prod=table_sdaster,
+                   UIinfo={"groupes":("Résolution",)},
+                   fr="Calcul de l'évolution mécanique, en quasi-statique,"
+                      +" d'un point matériel en non linéaire",
+   COMP_INCR       =C_COMP_INCR(),
+   COMP_ELAS       =FACT(statut='f',max='**',
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+           RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
+                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS","ELAS_HYPER")),
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
+         ),
+   MATER           =SIMP(statut='o',typ=mater_sdaster,max=30),
+   
+## ANGLE : rotation de ANGLE autour de Z uniquement, et seulement pour les déformations imposées.
+   ANGLE      =SIMP(statut='f',typ='R',max=1, defaut=0.),
+# --MASSIF : orientation du materiau (monocristal, orthotropie)
+   MASSIF          =FACT(statut='f',max='**',
+     regles=(UN_PARMI('ANGL_REP','ANGL_EULER'),),
+     ANGL_REP        =SIMP(statut='f',typ='R',min=1,max=3),
+     ANGL_EULER      =SIMP(statut='f',typ='R',min=1,max=3),
+   ),
+   INCREMENT       =C_INCREMENT(),
+   NEWTON          =C_NEWTON(),
+   CONVERGENCE     =C_CONVERGENCE(),
+      
+   SUPPORT= SIMP(statut='f',typ='TXM',max=1,into=("POINT","ELEMENT",)),
+   
+   b_PM = BLOC(condition="SUPPORT !=  'ELEMENT'",fr="Simulation sans élément fini",
+      NB_VARI_TABLE  =SIMP(statut='f',typ='I',max=1,),
+      ARCHIVAGE       =FACT(statut='f',
+       LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
+       PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+                           ),
+               ),        
+   b_EF = BLOC(condition="SUPPORT ==  'ELEMENT'",fr="Simulation sur un élément fini",                    
+      MODELISATION  =SIMP(statut='f',typ='TXM',max=1,into=("3D","C_PLAN","D_PLAN",)),
+      RECH_LINEAIRE   =C_RECH_LINEAIRE(),                                      
+      ARCHIVAGE       =FACT(statut='f',
+       LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
+       INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+       PAS_ARCH        =SIMP(statut='f',typ='I' ),
+       PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+       ARCH_ETAT_INIT  =SIMP(statut='f',typ='TXM',into=("OUI",),defaut="OUI"),
+       NUME_INIT       =SIMP(statut='f',typ='I'),
+       DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+       CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                                    into=("DEPL","SIEF_ELGA","VARI_ELGA",)),
+        ),
+                 ),                                            
+   # on permet certaines variables de commandes scalaires, définies par une fonction du temps
+   b_EFV = BLOC(condition="SUPPORT ==  'ELEMENT'",fr="variables de commande sur un élément fini",                    
+         # un mot clé caché qui ne sert qu'à boucler sur les VARC possibles :
+         LIST_NOM_VARC =SIMP(statut='c',typ='TXM', defaut=("TEMP",)),
+         AFFE_VARC    = FACT(statut='f',max='**',
+          NOM_VARC    = SIMP(statut='o',typ='TXM', into=("TEMP",)),
+          VALE_FONC   = SIMP(statut='o',typ=(fonction_sdaster,formule) ),
+          VALE_REF    = SIMP(statut='f',typ='R'),
+         ),
+         #  mots clés cachés pour variable de commande TEMP :
+         #  --------------------------------------------------
+         VARC_TEMP    =FACT(statut='d',
+           NOM_VARC        =SIMP(statut='c',typ='TXM',defaut="TEMP"),
+           GRANDEUR        =SIMP(statut='c',typ='TXM',defaut="TEMP_R"),
+           CMP_GD          =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("TEMP",)),
+           CMP_VARC        =SIMP(statut='c',typ='TXM',max=1,min=1,defaut=("TEMP",)),
+           VALE_DEF        =SIMP(statut='c',typ='R',max=1,min=1,defaut=(0.,)),
+                           ),
+               ),
+               
+   SIGM_IMPOSE=FACT(statut='f',
+         SIXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         SIYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         SIZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         SIXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         SIXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         SIYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+                    ),
+   EPSI_IMPOSE=FACT(statut='f',
+         EPXX = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         EPYY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         EPZZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         EPXY = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         EPXZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         EPYZ = SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+                    ),            
+   SIGM_INIT=FACT(statut='f',
+          SIXX = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+          SIYY = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+          SIZZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+          SIXY = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+          SIXZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+          SIYZ = SIMP(statut='f',typ='R',max=1,defaut=0.0E+0),
+                     ),
+   EPSI_INIT=FACT(statut='f',
+          EPXX = SIMP(statut='o',typ='R',max=1),
+          EPYY = SIMP(statut='o',typ='R',max=1),
+          EPZZ = SIMP(statut='o',typ='R',max=1),
+          EPXY = SIMP(statut='o',typ='R',max=1),
+          EPXZ = SIMP(statut='o',typ='R',max=1),
+          EPYZ = SIMP(statut='o',typ='R',max=1),
+                     ),
+   VARI_INIT=FACT(statut='f',
+          VALE = SIMP(statut='o',typ='R',max='**'),
+                     ),
+   INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+
+#& MODIF COMMANDE  DATE 22/09/2009   AUTEUR SELLENET N.SELLENET 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE ASSIRE A.ASSIRE
+
+from Macro.stanley_ops import stanley_ops
+
+STANLEY=MACRO(nom="STANLEY",op=stanley_ops,sd_prod=None,
+                       reentrant='n',
+              UIinfo={"groupes":("Outils métier",)},
+                       fr="Outil de post-traitement interactif Stanley ",
+         RESULTAT        =SIMP(statut='f',typ=(evol_elas,evol_noli,evol_ther,mode_meca,dyna_harmo,dyna_trans) ),
+         MODELE          =SIMP(statut='f',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         DISPLAY         =SIMP(statut='f',typ='TXM'),
+         UNITE_VALIDATION=SIMP(statut='f',typ='I',val_min=10,val_max=90,
+                               fr="Unité logique définissant le fichier (fort.N) dans lequel on écrit les md5"),
+
+)  ;
+#& MODIF COMMANDE  DATE 12/04/2010   AUTEUR MICHEL S.MICHEL 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE ABBAS M.ABBAS
+#
+STAT_NON_LINE=OPER(nom="STAT_NON_LINE",op=70,sd_prod=evol_noli,
+                   fr="Calcul de l'évolution mécanique ou thermo-hydro-mécanique couplée, en quasi-statique,"
+                      +" d'une structure en non linéaire",
+                   reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
+         regles=(AU_MOINS_UN('COMP_INCR','COMP_ELAS'),
+                 CONCEPT_SENSIBLE('ENSEMBLE'),),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         EXCIT           =FACT(statut='o',max='**',
+           CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                 into=("FIXE_CSTE","FIXE_PILO","SUIV","DIDI")),
+         ),
+         CONTACT         =SIMP(statut='f',typ=char_contact),
+         SOUS_STRUC      =FACT(statut='f',min=01,max='**',
+                regles=(UN_PARMI('TOUT','SUPER_MAILLE'),),
+                CAS_CHARGE  =SIMP(statut='o',typ='TXM' ),
+                TOUT        =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+                SUPER_MAILLE=SIMP(statut='f',typ=ma,validators=NoRepeat(),max='**',),
+                FONC_MULT   =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+              ),
+         COMP_INCR       =C_COMP_INCR(),
+         COMP_ELAS       =FACT(statut='f',max='**',
+           RESI_INTE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           ITER_INTE_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+           ITER_INTE_PAS   =SIMP(statut='f',typ='I',defaut= 0 ),
+           RESO_INTE       =SIMP(statut='f',typ='TXM',defaut="IMPLICITE",
+                                 into=("IMPLICITE",)),
+           RELATION        =SIMP(statut='o',typ='TXM',defaut="ELAS",
+                                 into=("ELAS","ELAS_VMIS_LINE","ELAS_VMIS_TRAC","ELAS_VMIS_PUIS",
+                                      "ELAS_POUTRE_GR","CABLE","ELAS_HYPER")),
+          
+           DEFORMATION     =SIMP(statut='f',typ='TXM',defaut="PETIT" ,into=("PETIT","GROT_GDEP",) ),
+      regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+         ),
+         b_reuse =BLOC(condition = "reuse",fr="en mode concept reentrant : ETAT_INIT obligatoire",
+           ETAT_INIT       =FACT(statut='o',
+             regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI',),
+                     EXCLUS('EVOL_NOLI','DEPL',),
+                     EXCLUS('EVOL_NOLI','SIGM',),
+                     EXCLUS('EVOL_NOLI','VARI',),
+                     EXCLUS('NUME_ORDRE','INST'), ),
+             DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
+             SIGM            =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
+             VARI            =SIMP(statut='f',typ=cham_elem),
+             EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+             NUME_ORDRE      =SIMP(statut='f',typ='I'),
+             INST            =SIMP(statut='f',typ='R'),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+             NUME_DIDI       =SIMP(statut='f',typ='I'),
+             INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),),
+         b_not_reuse =BLOC(condition = "not reuse",fr="en mode concept non reentrant : ETAT_INIT facultatif",
+           ETAT_INIT       =FACT(statut='f',
+             regles=(AU_MOINS_UN('EVOL_NOLI','DEPL','SIGM','VARI',),
+                     EXCLUS('EVOL_NOLI','DEPL',),
+                     EXCLUS('EVOL_NOLI','SIGM',),
+                     EXCLUS('EVOL_NOLI','VARI',),
+                     EXCLUS('NUME_ORDRE','INST'), ),
+             DEPL            =SIMP(statut='f',typ=cham_no_sdaster),
+             SIGM            =SIMP(statut='f',typ=(cham_elem,carte_sdaster)),
+             VARI            =SIMP(statut='f',typ=cham_elem),
+             EVOL_NOLI       =SIMP(statut='f',typ=evol_noli),
+             NUME_ORDRE      =SIMP(statut='f',typ='I'),
+             INST            =SIMP(statut='f',typ='R'),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                 PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                 PRECISION       =SIMP(statut='o',typ='R',),),
+             NUME_DIDI       =SIMP(statut='f',typ='I'),
+             INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),),
+         INCREMENT       =C_INCREMENT(),
+#         **C_ALGO_RESOLUTION()
+         METHODE = SIMP(statut='d',typ='TXM',defaut="NEWTON",into=("NEWTON","IMPL_EX")),
+         b_meth_newton = BLOC(condition = "METHODE == 'NEWTON'",
+                           NEWTON = C_NEWTON(),
+                        ),
+         b_meth_impl_ex = BLOC(condition = "METHODE == 'IMPL_EX'",
+                           IMPL_EX = C_IMPL_EX(),
+                        ),
+         RECH_LINEAIRE   =C_RECH_LINEAIRE(),
+         
+         PILOTAGE        =FACT(statut='f',
+           regles=(EXCLUS('NOEUD','GROUP_NO'),PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TYPE    =SIMP(statut='o',typ='TXM',into=("DDL_IMPO","LONG_ARC","PRED_ELAS","DEFORMATION","ANA_LIM") ),
+           COEF_MULT       =SIMP(statut='f',typ='R',defaut= 1.0E+0),
+           EVOL_PARA       =SIMP(statut='f',typ='TXM',defaut="SANS", into=("SANS","CROISSANT","DECROISSANT") ),
+           
+           
+           ETA_PILO_MAX    =SIMP(statut='f',typ='R'),
+           ETA_PILO_MIN    =SIMP(statut='f',typ='R'),
+           ETA_PILO_R_MAX  =SIMP(statut='f',typ='R'),
+           ETA_PILO_R_MIN  =SIMP(statut='f',typ='R'),
+           PROJ_BORNES     =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           SELECTION       =SIMP(statut='f',typ='TXM',defaut="NORM_INCR_DEPL", into=("RESIDU","ANGL_INCR_DEPL","NORM_INCR_DEPL") ),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma ,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma   ,validators=NoRepeat(),max='**'),
+           NOEUD           =SIMP(statut='f',typ=no   ,validators=NoRepeat(),max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno ,validators=NoRepeat(),max='**'),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+                         ),
+                         
+         CONVERGENCE     =C_CONVERGENCE(),
+         SOLVEUR         =C_SOLVEUR(),
+          
+         ARCHIVAGE       =FACT(statut='f',
+           regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
+                   EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
+           LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           ARCH_ETAT_INIT  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+           DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                                 into=("DEPL","SIEF_ELGA","VARI_ELGA",)),
+         ),
+         OBSERVATION     =FACT(statut='f',max='**',
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**'),
+           SUIVI_DDL       =SIMP(statut='f',typ='TXM',defaut="NON",max=1,into=("OUI","NON")),
+         b_suivi          =BLOC(condition = "SUIVI_DDL == 'OUI' ",
+                                regles=(UN_PARMI('NOEUD','MAILLE','GROUP_NO','GROUP_MA','VALE_MIN','VALE_MAX'),
+                                                  PRESENT_PRESENT('MAILLE','POINT'),),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             POINT           =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max=1,
+                                   into=("DEPL","VITE","ACCE","SIEF_ELGA",
+                                         "VARI_ELGA","FORC_NODA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU",)),
+             GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+             NUME_SUIVI      =SIMP(statut='o',typ='I' ,min=1,max=4),
+             VALE_MAX        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,into=("OUI",) ),
+             VALE_MIN        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=1,into=("OUI",) ),),
+         b_non_suivi      =BLOC(condition = "SUIVI_DDL == 'NON' ",
+                                regles=(UN_PARMI('NOEUD','GROUP_NO','MAILLE'),PRESENT_PRESENT('MAILLE','POINT'),),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             POINT           =SIMP(statut='f',typ='I' ,validators=NoRepeat(),max='**'),
+             MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("DEPL","VITE","ACCE","SIEF_ELGA",
+                                              "VARI_ELGA","DEPL_ABSOLU","VITE_ABSOLU","ACCE_ABSOLU","VALE_CONT")),
+             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+             LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+             PAS_OBSE        =SIMP(statut='f',typ='I'),
+             LIST_ARCH       =SIMP(statut='f',typ=listis_sdaster),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                PRECISION       =SIMP(statut='o',typ='R',),),),
+         ),
+
+         AFFICHAGE      = FACT(statut='f',max=16,
+
+            UNITE       = SIMP(statut='f',typ='I',val_min=1),
+
+            LONG_R      = SIMP(statut='f',typ='I',defaut=12,val_min=1,val_max=12),
+            PREC_R      = SIMP(statut='f',typ='I',defaut=5, val_min=1,val_max=8),
+            LONG_I      = SIMP(statut='f',typ='I',defaut=6, val_min=1,val_max=12),
+
+            NOM_COLONNE = SIMP(statut='o',typ='TXM',defaut="STANDARD",
+                                into=("STANDARD","MINIMUM",
+                                      "ITER_NEWT",
+                                      "INCR_TPS",
+                                      "RESI_RELA","RELA_NOEU",
+                                      "RESI_MAXI","MAXI_NOEU",
+                                      "RESI_REFE","REFE_NOEU",
+                                      "RELI_ITER","RELI_COEF",
+                                      "RESI_COMP","COMP_NOEU",
+                                      "PILO_PARA",
+                                      "MATR_ASSE",
+                                      "ITER_DEBO",
+                                      "CTCD_ITER","CTCD_GEOM","CTCD_NOEU",
+                                      "CTCC_GEOM","CTCC_FROT","CTCC_CONT",
+                                      "SUIV_1","SUIV_2","SUIV_3","SUIV_4","ITER_FETI",
+                                     ),
+                               ),
+            b_residu    = BLOC(condition = " NOM_COLONNE == 'RESI_RELA' or \
+                    NOM_COLONNE == 'RESI_MAXI' or\
+                    NOM_COLONNE == 'RESI_REFE' or\
+                    NOM_COLONNE == 'CTCD_GEOM' or\
+                    NOM_COLONNE == 'STANDARD' ",
+                            INFO_RESIDU = SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+                          ),
+         ),
+
+
+
+         CRIT_FLAMB     =FACT(statut='f',min=1,max=1,
+           NB_FREQ         =SIMP(statut='f',typ='I',max=1,defaut=3),
+           CHAR_CRIT       =SIMP(statut='f',typ='R',min=2,max=2,defaut=(-10.0,10),
+                            fr="Valeur des deux charges critiques délimitant la bande de recherche en HPP"),
+           RIGI_GEOM   =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+           b_ddl_exclus=BLOC(condition="(RIGI_GEOM=='NON')",
+              DDL_EXCLUS      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=40,
+                                    into=('DX','DY','DZ','DRX','DRY','DRZ','GRX','PRES','PHI',
+                                          'TEMP','PRE1','PRE2','UI2','UI3','VI2','VI3','WI2','WI3','UO2',
+                                          'UO3','VO2','VO3','WO2','WO3','UI4','UI5','VI4','VI5','WI4',
+                                          'WI5','UO4','UO5','VO4','VO5','WO4','WO5','UI6','UO6','VI6',
+                                          'VO6','WI6','WO6','WO','WI1','WO1','GONF','LIAISON','DCX',
+                                          'DCY','DCZ','H1X','H1Y','H1Z','E1X','E1Y','E1Z','E2X','E2Y','E2Z',
+                                          'E3X','E3Y','E3Z','E4X','E4Y','E4Z','LAGS_C','V11','V12','V13','V21','V22',
+                                          'V23','V31','V32','V33','PRES11','PRES12','PRES13','PRES21','PRES22','PRES23',
+                                          'PRES31','PRES32','PRES33','VARI','LAG_GV')),),
+           INST_CALCUL       =SIMP(statut='f',typ='TXM',defaut="LISTE_ARCHIVAGE",into=("LISTE_ARCHIVAGE","TOUT_PAS",) ),
+         ),
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramètres de sensibilité",
+                               ang="List of sensitivity parameters"),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+ )
+
+#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+from Macro.test_fichier_ops import test_fichier_ops
+
+TEST_FICHIER=MACRO(nom="TEST_FICHIER", op=test_fichier_ops,
+                   UIinfo={"groupes":("Impression",)},
+                   fr="Tester la non régression de fichiers produits par des commandes aster",
+   FICHIER          =SIMP(statut='o',typ='TXM',validators=LongStr(1,255)),
+   EXPR_IGNORE      =SIMP(statut='f',typ='TXM',max='**',
+                          fr="Liste d'expressions régulières permettant d'ignorer certaines lignes"),
+
+   TYPE_TEST       =SIMP(statut='f',typ='TXM',defaut='SOMM',into=("SOMM_ABS","SOMM","MAXI","MINI","MAXI_ABS","MINI_ABS")),
+   NB_VALE         =SIMP(statut='o',typ='I',),
+   VALE            =SIMP(statut='f',typ='R',max='**'),
+   VALE_K          =SIMP(statut='f',typ='TXM'),
+
+   CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+   PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+
+   REFERENCE       =SIMP(statut='f',typ='TXM',
+                         into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+
+   b_version       =BLOC(condition = "REFERENCE == 'NON_REGRESSION'",
+      VERSION         =SIMP(statut='f',typ='TXM' ),
+   ),
+
+   INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+#& MODIF COMMANDE  DATE 01/02/2010   AUTEUR REZETTE C.REZETTE 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE SELLENET N.SELLENET
+from Macro.test_fonction_ops import test_fonction_ops
+
+TEST_FONCTION=MACRO(nom="TEST_FONCTION",op=test_fonction_ops,sd_prod=None,
+            fr="Extraction d'une valeur numérique ou d'un attribut de fonction pour comparaison à une valeur de référence",
+            UIinfo={"groupes":("Impression",)},
+         TEST_NOOK       =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         VALEUR          =FACT(statut='f',max='**',
+                               fr="Tester la valeur d une fonction ou d une nappe",
+           regles=(UN_PARMI('VALE_REFE','VALE_REFE_C',),
+                   UN_PARMI('VALE_PARA','INTERVALLE'),
+                   DERIVABLE('FONCTION'),),
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,fonction_c,nappe_sdaster,formule) ),
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),
+                                 fr="Paramètre de sensibilité.",
+                                 ang="Sensitivity parameter"),
+           NOM_PARA        =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=2),
+           VALE_PARA       =SIMP(statut='f',typ='R'  ,validators=NoRepeat(),max=2),
+           INTERVALLE      =SIMP(statut='f',typ='R'  ,validators=NoRepeat(),min=2,max=2),
+           VALE_REFE       =SIMP(statut='f',typ='R',max='**' ),
+           VALE_REFE_C     =SIMP(statut='f',typ='C',max='**' ),
+           VALE_ABS        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           LEGENDE         =SIMP(statut='f',typ='TXM'),
+           CRITERE         =SIMP(statut='f',typ='TXM',fr="Critère de comparaison avec la solution de référence",
+                                 defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',fr="Ecart maximal autorisé avec la solution de référence",
+                                 defaut= 1.E-3 ),
+           REFERENCE       =SIMP(statut='f',typ='TXM',
+                                 into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+           b_version = BLOC (condition = "REFERENCE == 'NON_REGRESSION'",
+             VERSION         =SIMP(statut='f',typ='TXM' ),
+           ),
+         ),
+         ATTRIBUT        =FACT(statut='f',max='**',
+                               fr="Tester la valeur d un attribut d une fonction ou d''une nappe",
+           FONCTION        =SIMP(statut='o',typ=(fonction_sdaster,fonction_c,nappe_sdaster,formule) ),
+           PARA            =SIMP(statut='f',typ='R' ),
+           CRIT_PARA       =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PREC_PARA       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           ATTR            =SIMP(statut='o',typ='TXM',
+                                 into=("NOM_PARA","NOM_RESU","PROL_DROITE","PROL_GAUCHE","INTERPOL",
+                                       "PROL_GAUCHE_FONC","PROL_DROITE_FONC","INTERPOL_FONC","NOM_PARA_FONC") ),
+           ATTR_REFE       =SIMP(statut='o',typ='TXM' ),
+           REFERENCE       =SIMP(statut='f',typ='TXM',
+                                 into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+           b_version       =BLOC(condition = "REFERENCE == 'NON_REGRESSION'",
+             VERSION         =SIMP(statut='f',typ='TXM' ),
+           ),
+         ),
+         TABL_INTSP      =FACT(statut='f',max='**',
+                               fr="Tester la valeur d une fonction contenue dans une table interspectrale",
+           regles=(UN_PARMI('NUME_ORDRE_I','NOEUD_I'),),
+           INTE_SPEC       =SIMP(statut='o',typ=table_fonction),
+           NOEUD_I         =SIMP(statut='f',typ=no),
+           NUME_ORDRE_I    =SIMP(statut='f',typ='I' ),
+           b_nume_ordre_i = BLOC (condition = "NUME_ORDRE_I != None",
+             NUME_ORDRE_J    =SIMP(statut='o',typ='I' ),
+           ),
+           b_noeud_i = BLOC (condition = "NOEUD_I != None",
+             NOEUD_J         =SIMP(statut='o',typ=no),
+             NOM_CMP_I       =SIMP(statut='o',typ='TXM' ),
+             NOM_CMP_J       =SIMP(statut='o',typ='TXM' ),
+           ),
+           NUME_VITE_FLUI  =SIMP(statut='f',typ='I' ),
+           VALE_PARA       =SIMP(statut='o',typ='R' ),
+           VALE_REFE_C     =SIMP(statut='o',typ='C',max='**' ),
+           CRITERE         =SIMP(statut='f',typ='TXM',fr="Critère de comparaison avec la solution de référence",
+                                 defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',fr="Ecart maximal autorisé avec la solution de référence",
+                                 defaut= 1.E-3 ),
+           LEGENDE         =SIMP(statut='f',typ='TXM'),
+           REFERENCE       =SIMP(statut='f',typ='TXM',
+                                 into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+           b_version       =BLOC(condition = "REFERENCE == 'NON_REGRESSION'",
+             VERSION         =SIMP(statut='f',typ='TXM' ),
+           ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 01/02/2010   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# RESPONSABLE LEFEBVRE J.P.LEFEBVRE
+TEST_RESU=PROC(nom="TEST_RESU",op=23,
+            UIinfo={"groupes":("Impression",)},
+         fr="Extraction d'une valeur d'une structure de donnée et comparaison à une valeur de référence",
+         regles=(AU_MOINS_UN('CHAM_NO','CHAM_ELEM','RESU','GENE','OBJET','TEST_NAN',)),
+
+         CHAM_NO         =FACT(statut='f',max='**',
+           regles=(UN_PARMI('NOEUD','GROUP_NO','TYPE_TEST'),
+                   EXCLUS('NOEUD','GROUP_NO'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                   PRESENT_PRESENT( 'GROUP_NO','NOM_CMP'),
+                   UN_PARMI('VALE','VALE_I','VALE_C'),),
+           CHAM_GD         =SIMP(statut='o',typ=cham_no_sdaster),
+           NOEUD           =SIMP(statut='f',typ=no   ),
+           GROUP_NO        =SIMP(statut='f',typ=grno ),
+           NOM_CMP         =SIMP(statut='f',typ='TXM'),
+           TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN")),
+           VALE            =SIMP(statut='f',typ='R',max='**'),
+           VALE_I          =SIMP(statut='f',typ='I',max='**'),
+           VALE_C          =SIMP(statut='f',typ='C',max='**'),
+           VALE_ABS        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3),
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+                                                            "NON_REGRESSION","AUTRE_ASTER")),
+           VERSION         =SIMP(statut='f',typ='TXM'),
+           LEGENDE         =SIMP(statut='f',typ='TXM'),
+         ),
+
+         CHAM_ELEM       =FACT(statut='f',max='**',
+           regles=(UN_PARMI('MAILLE','TYPE_TEST',),
+                   EXCLUS('NOEUD','GROUP_NO','POINT'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+                   PRESENT_PRESENT('POINT','NOM_CMP'),
+                   UN_PARMI('VALE','VALE_I','VALE_C'), ),
+           CHAM_GD         =SIMP(statut='o',typ=cham_elem),
+           MAILLE          =SIMP(statut='f',typ=ma),
+           POINT           =SIMP(statut='f',typ='I' ),
+           SOUS_POINT      =SIMP(statut='f',typ='I'),
+           NOEUD           =SIMP(statut='f',typ=no),
+           GROUP_NO        =SIMP(statut='f',typ=grno),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN") ),
+           VALE            =SIMP(statut='f',typ='R',max='**' ),
+           VALE_I          =SIMP(statut='f',typ='I',max='**' ),
+           VALE_C          =SIMP(statut='f',typ='C',max='**' ),
+           VALE_ABS        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+                                                            "NON_REGRESSION","AUTRE_ASTER") ),
+           VERSION         =SIMP(statut='f',typ='TXM' ),
+           LEGENDE         =SIMP(statut='f',typ='TXM'),
+         ),
+
+         RESU            =FACT(statut='f',max='**',
+           regles=(UN_PARMI('NUME_ORDRE','INST','FREQ','NUME_MODE','NOEUD_CMP','NOM_CAS','ANGL'),
+                   UN_PARMI('NOM_CHAM','PARA'),
+                   PRESENT_ABSENT('PARA','NOEUD','GROUP_NO','POINT','NOM_CMP','TYPE_TEST'),
+                   PRESENT_PRESENT('NOM_CMP','NOM_CHAM'),
+                   EXCLUS('NOEUD','GROUP_NO','POINT','TYPE_TEST'),
+                   PRESENT_PRESENT('NOEUD','NOM_CMP'),
+                   PRESENT_PRESENT('GROUP_NO','NOM_CMP'),
+                   PRESENT_PRESENT('POINT','NOM_CMP'),
+                   UN_PARMI('VALE','VALE_I','VALE_C'),
+                   DERIVABLE('RESULTAT'),),
+           RESULTAT        =SIMP(statut='o',typ=resultat_sdaster),
+           SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),
+                                 fr="Paramètre de sensibilité.",
+                                 ang="Sensitivity parameter"),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           FREQ            =SIMP(statut='f',typ='R'),
+           NUME_MODE       =SIMP(statut='f',typ='I'),
+           NOEUD_CMP       =SIMP(statut='f',typ='TXM',min=2,max=2),
+           NOM_CAS         =SIMP(statut='f',typ='TXM'),
+           ANGL            =SIMP(statut='f',typ='R'),
+           PARA            =SIMP(statut='f',typ='TXM'),
+           NOM_CHAM        =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+           NOM_CMP         =SIMP(statut='f',typ='TXM',max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma   ,max='**'),
+           NOEUD           =SIMP(statut='f',typ=no   ,max='**'),
+           GROUP_NO        =SIMP(statut='f',typ=grno ,max='**'),
+           POINT           =SIMP(statut='f',typ='I'),
+           SOUS_POINT      =SIMP(statut='f',typ='I'),
+           TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN")),
+           VALE            =SIMP(statut='f',typ='R',max='**'),
+           VALE_I          =SIMP(statut='f',typ='I',max='**'),
+           VALE_C          =SIMP(statut='f',typ='C',max='**'),
+           VALE_ABS        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           CRITERE         =SIMP(statut='f',typ='TXM',into=("RELATIF","ABSOLU"),max=2),
+           PRECISION       =SIMP(statut='f',typ='R',max=2),
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+                                                            "NON_REGRESSION","AUTRE_ASTER",) ),
+           VERSION         =SIMP(statut='f',typ='TXM' ),
+           LEGENDE         =SIMP(statut='f',typ='TXM'),
+         ),
+
+         GENE            =FACT(statut='f',max='**',
+           regles=(UN_PARMI('VALE','VALE_I','VALE_C') ,),
+           RESU_GENE       =SIMP(statut='o',typ=(vect_asse_gene, tran_gene, mode_gene, harm_gene)),
+           b_vect_asse     =BLOC(condition = "AsType(RESU_GENE) == vect_asse_gene",
+             NUME_CMP_GENE   =SIMP(statut='o',typ='I'),
+           ),
+           b_mode          =BLOC(condition = "(AsType(RESU_GENE) == harm_gene) or (AsType(RESU_GENE) == mode_gene)",
+                            regles=(UN_PARMI('NUME_ORDRE','FREQ','NUME_MODE'),
+                                    UN_PARMI('NOM_CHAM','PARA'),
+                                    PRESENT_PRESENT('NOM_CHAM','NUME_CMP_GENE'),),
+             NOM_CHAM        =SIMP(statut='f',typ='TXM',into=C_NOM_CHAM_INTO()),
+             NUME_CMP_GENE   =SIMP(statut='f',typ='I'),
+             PARA            =SIMP(statut='f',typ='TXM'),
+             NUME_ORDRE      =SIMP(statut='f',typ='I'),
+             NUME_MODE       =SIMP(statut='f',typ='I'),
+             FREQ            =SIMP(statut='f',typ='R'),
+           ),
+           b_tran          =BLOC(condition = "AsType(RESU_GENE) == tran_gene",
+                            regles=(UN_PARMI('NUME_ORDRE','INST') ,),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO()),
+             NUME_CMP_GENE   =SIMP(statut='o',typ='I'),
+             NUME_ORDRE      =SIMP(statut='f',typ='I'),
+             INST            =SIMP(statut='f',typ='R'),
+           ),
+           VALE            =SIMP(statut='f',typ='R',max='**'),
+           VALE_I          =SIMP(statut='f',typ='I',max='**'),
+           VALE_C          =SIMP(statut='f',typ='C',max='**'),
+           VALE_ABS        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           CRITERE         =SIMP(statut='f',typ='TXM',into=("RELATIF","ABSOLU"),max=2),
+           PRECISION       =SIMP(statut='f',typ='R',max=2),
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+                                                            "NON_REGRESSION","AUTRE_ASTER",) ),
+           VERSION         =SIMP(statut='f',typ='TXM' ),
+           LEGENDE         =SIMP(statut='f',typ='TXM'),
+         ),
+
+         OBJET           =FACT(statut='f',max='**',
+           regles=(UN_PARMI('S_I','S_R',),
+                   UN_PARMI('VALE','VALE_I','VALE_C','S_R','S_I'),),
+           NOM             =SIMP(statut='o',typ='TXM'),
+           S_R             =SIMP(statut='f',typ='R'),
+           S_I             =SIMP(statut='f',typ='I'),
+           VALE            =SIMP(statut='f',typ='R'),
+           VALE_I          =SIMP(statut='f',typ='I'),
+           VALE_C          =SIMP(statut='f',typ='C'),
+           VALE_ABS        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU")),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-3 ),
+           REFERENCE       =SIMP(statut='f',typ='TXM',into=("ANALYTIQUE","SOURCE_EXTERNE",
+                                                            "NON_REGRESSION","AUTRE_ASTER",) ),
+           VERSION         =SIMP(statut='f',typ='TXM' ),
+           LEGENDE         =SIMP(statut='f',typ='TXM'),
+         ),
+
+         TEST_NAN        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+)  ;
+#& MODIF COMMANDE  DATE 01/02/2010   AUTEUR REZETTE C.REZETTE 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+TEST_TABLE=PROC(nom="TEST_TABLE",op= 177,
+            UIinfo={"groupes":("Impression",)},
+         fr="Tester une cellule ou une colonne d'une table",
+         regles=(UN_PARMI('VALE','VALE_I','VALE_C', ),
+                 DERIVABLE('TABLE'),),
+#  concept table_sdaster à tester
+         TABLE           =SIMP(statut='o',typ=table_sdaster),
+
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),
+                                 fr="Paramètre de sensibilité.",
+                                 ang="Sensitivity parameter"),
+         FILTRE          =FACT(statut='f',max='**',
+           NOM_PARA        =SIMP(statut='o',typ='TXM' ),
+           CRIT_COMP       =SIMP(statut='f',typ='TXM',defaut="EQ",
+                                 into=("EQ","LT","GT","NE","LE","GE","VIDE",
+                                       "NON_VIDE","MAXI","ABS_MAXI","MINI","ABS_MINI") ),
+           b_vale          =BLOC(condition = "(CRIT_COMP in ('EQ','NE','GT','LT','GE','LE'))",
+              regles=(UN_PARMI('VALE','VALE_I','VALE_K','VALE_C',),),
+              VALE            =SIMP(statut='f',typ='R',),
+              VALE_I          =SIMP(statut='f',typ='I',),
+              VALE_C          =SIMP(statut='f',typ='C',),
+              VALE_K          =SIMP(statut='f',typ='TXM' ),),
+
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+         ),
+         TYPE_TEST       =SIMP(statut='f',typ='TXM',into=("SOMM_ABS","SOMM","MAX","MIN") ),
+         NOM_PARA        =SIMP(statut='o',typ='TXM' ),
+         VALE            =SIMP(statut='f',typ='R',max='**' ),
+         VALE_I          =SIMP(statut='f',typ='I',max='**' ),
+         VALE_C          =SIMP(statut='f',typ='C',max='**' ),
+         VALE_ABS        =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+         PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+         LEGENDE         =SIMP(statut='f',typ='TXM'),
+         REFERENCE       =SIMP(statut='f',typ='TXM',
+                               into=("ANALYTIQUE","SOURCE_EXTERNE","NON_REGRESSION","AUTRE_ASTER") ),
+         b_version       =BLOC(condition = "REFERENCE == 'NON_REGRESSION'",
+             VERSION         =SIMP(statut='f',typ='TXM' ),
+         INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+         ),
+)  ;
+#& MODIF COMMANDE  DATE 05/09/2008   AUTEUR COURTOIS M.COURTOIS 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
+
+
+from Macro.test_temps_ops import test_temps_ops
+
+TEST_TEMPS=MACRO(nom="TEST_TEMPS",op=test_temps_ops, sd_prod=None,
+                 fr="Permet de vérifier le temps passé dans les commandes",
+                 reentrant='n',
+
+   RESU = FACT(statut='o',max='**',
+      COMMANDE   = SIMP(statut='o', typ='TXM',
+            fr="Nom de la commande testee"),
+      NUME_ORDRE = SIMP(statut='f', typ='I', defaut=1, val_min=1,
+            fr="Numero de l'occurrence de la commande testee"),
+      MACHINE    = SIMP(statut='o', typ='TXM', max='**',
+            fr="Liste des machines dont on a la référence"),
+      VALE       = SIMP(statut='o', typ='R', max='**',
+            fr="Temps CPU sur les machines listees en secondes"),
+      CRITERE    = SIMP(statut='f', typ='TXM', defaut='RELATIF', into=('ABSOLU', 'RELATIF')),
+      PRECISION  = SIMP(statut='f', typ='R', defaut=0.01, max='**',
+            fr="Ecart admissible pour chaque machine"),
+      TYPE_TEST  = SIMP(statut='o', typ='TXM', into=('USER', 'SYSTEM', 'USER+SYS', 'ELAPSED'),
+            defaut='USER+SYS',
+            fr="Valeur testee parmi 'USER', 'SYSTEM', 'USER+SYS', 'ELAPSED'"),
+   ),
+
+   INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
+)
+
+#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DURAND C.DURAND
+THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
+                   fr="Résoudre un problème thermique linéaire stationnaire ou transitoire",
+         regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
+         MODELE          =SIMP(statut='o',typ=modele_sdaster),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
+         EXCIT           =FACT(statut='o',max='**',
+           CHARGE          =SIMP(statut='o',typ=(char_ther,char_cine_ther)),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+         ),
+         INCREMENT       =FACT(statut='f',
+           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
+           LIST_INST       =SIMP(statut='o',typ=listr8_sdaster),
+           NUME_INST_INIT  =SIMP(statut='f',typ='I'),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           NUME_INST_FIN   =SIMP(statut='f',typ='I'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6 ),
+         ),
+         ETAT_INIT       =FACT(statut='f',
+           regles=(EXCLUS('STATIONNAIRE','EVOL_THER','CHAM_NO','VALE'),),
+           STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           EVOL_THER       =SIMP(statut='f',typ=evol_ther),
+           CHAM_NO         =SIMP(statut='f',typ=cham_no_sdaster),
+           VALE            =SIMP(statut='f',typ='R'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+              PRECISION       =SIMP(statut='o',typ='R',),),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters",
+         ),
+           SENS_INIT       =FACT(statut='f',
+             regles=(EXCLUS('STATIONNAIRE','EVOL_THER', ),),
+             STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+             EVOL_THER       =SIMP(statut='f',typ=evol_ther),
+             NUME_INIT       =SIMP(statut='f',typ='I'),
+           ),
+         SOLVEUR         =FACT(statut='d',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+             b_ldltinc       =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+               NIVE_REMPLISSAGE    =SIMP(statut='f',typ='I',defaut= 0 ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+               ),
+             b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),             
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             ),
+
+           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+             ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+               NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+               REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+             ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
+           ),
+         ),
+         PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57),
+         ARCHIVAGE       =FACT(statut='f',
+           regles=EXCLUS('PAS_ARCH','LIST_INST','INST'),
+           LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+           DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                                 into=("VARI",)),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2)),
+)  ;
+#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DURAND C.DURAND
+THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f',
+            UIinfo={"groupes":("Résolution",)},
+                   fr="Résoudre un problème thermique non linéaire (conditions limites ou comportement matériau)"
+                      +" stationnaire ou transitoire" ,
+         regles=(CONCEPT_SENSIBLE('ENSEMBLE'),),
+         MODELE          =SIMP(statut='o',typ=(modele_sdaster) ),
+         CHAM_MATER      =SIMP(statut='o',typ=(cham_mater) ),
+         CARA_ELEM       =SIMP(statut='c',typ=(cara_elem) ),
+         COMP_THER_NL    =FACT(statut='d',max='**',
+           RELATION        =SIMP(statut='f',typ='TXM',defaut="THER_NL",
+                                 into=("THER_NL",
+                                       "THER_HYDR",
+                                       "SECH_GRANGER",
+                                       "SECH_MENSI",
+                                       "SECH_BAZANT",
+                                       "SECH_NAPPE"
+                                       ) ),
+         regles=(PRESENT_ABSENT('TOUT','GROUP_MA','MAILLE'),),
+           TOUT            =SIMP(statut='f',typ='TXM',into=("OUI",) ),
+           GROUP_MA        =SIMP(statut='f',typ=grma,validators=NoRepeat(),max='**'),
+           MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
+         ),
+         EVOL_THER_SECH  =SIMP(statut='f',typ=evol_ther),
+         EXCIT           =FACT(statut='o',max='**',
+           CHARGE          =SIMP(statut='o',typ=char_ther),
+           FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+         ),
+         INCREMENT       =FACT(statut='f',
+           regles=(EXCLUS('NUME_INST_INIT','INST_INIT'),
+                   EXCLUS('NUME_INST_FIN','INST_FIN'),),
+           LIST_INST       =SIMP(statut='o',typ=listr8_sdaster),
+           NUME_INST_INIT  =SIMP(statut='f',typ='I'),
+           INST_INIT       =SIMP(statut='f',typ='R'),
+           NUME_INST_FIN   =SIMP(statut='f',typ='I'),
+           INST_FIN        =SIMP(statut='f',typ='R'),
+           PRECISION       =SIMP(statut='f',typ='R',defaut=1.0E-6 ),
+         ),
+         ETAT_INIT       =FACT(statut='f',
+           regles=(EXCLUS('STATIONNAIRE','EVOL_THER','CHAM_NO','VALE'),),
+           STATIONNAIRE    =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           EVOL_THER       =SIMP(statut='f',typ=evol_ther),
+           CHAM_NO         =SIMP(statut='f',typ=cham_no_sdaster),
+           VALE            =SIMP(statut='f',typ='R'),
+           NUME_ORDRE      =SIMP(statut='f',typ='I'),
+           INST            =SIMP(statut='f',typ='R'),
+           CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+           b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+              PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+           b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+              PRECISION       =SIMP(statut='o',typ='R',),),
+           INST_ETAT_INIT  =SIMP(statut='f',typ='R'),
+         ),
+         NEWTON          =FACT(statut='d',
+           REAC_ITER       =SIMP(statut='f',typ='I',defaut= 0 ,val_min=0),
+           RESI_LINE_RELA  =SIMP(statut='f',typ='R',defaut= 1.0E-3 ),
+           ITER_LINE_MAXI  =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+         CONVERGENCE     =FACT(statut='d',
+           RESI_GLOB_MAXI  =SIMP(statut='f',typ='R'),
+           RESI_GLOB_RELA  =SIMP(statut='f',typ='R'),
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+         ),
+         SENSIBILITE     =SIMP(statut='f',typ=(para_sensi,theta_geom),validators=NoRepeat(),max='**',
+                               fr="Liste des paramètres de sensibilité.",
+                               ang="List of sensitivity parameters",
+         ),
+         SOLVEUR         =FACT(statut='d',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS","PETSC") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Parametres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Parametres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+             b_ldltinc       =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+               NIVE_REMPLISSAGE    =SIMP(statut='f',typ='I',defaut= 0 ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+               ),
+             b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),           
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             FILTRAGE_MATRICE=SIMP(statut='f',typ='R',defaut=-1.0,),
+             MIXER_PRECISION =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             ),
+
+           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+             ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+               NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+               REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+             ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
+           ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON",) ),
+         ),
+         PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57 ),
+         ARCHIVAGE       =FACT(statut='f',
+           regles=EXCLUS('PAS_ARCH','LIST_INST','INST'),
+           LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
+           INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+           PAS_ARCH        =SIMP(statut='f',typ='I' ),
+           PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-6),
+           NUME_INIT       =SIMP(statut='f',typ='I'),
+           DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
+           CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
+                                 into=("VARI",)),
+         ),
+         OBSERVATION     =FACT(statut='f',max='**',
+           NOM_CMP         =SIMP(statut='o',typ='TXM',max='**' ),
+           SUIVI_DDL       =SIMP(statut='c',typ='TXM',defaut="NON",max=1,into=("NON",)),
+         b_non_suivi      =BLOC(condition = "SUIVI_DDL == 'NON' ",
+                                regles=(UN_PARMI('NOEUD','GROUP_NO')),
+             NOEUD           =SIMP(statut='f',typ=no  ,validators=NoRepeat(),max='**'),
+             GROUP_NO        =SIMP(statut='f',typ=grno,validators=NoRepeat(),max='**'),
+             NOM_CHAM        =SIMP(statut='o',typ='TXM',validators=NoRepeat(),max='**',into=("TEMP",)),
+             INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
+             LIST_INST       =SIMP(statut='f',typ=listr8_sdaster),
+             PAS_OBSE        =SIMP(statut='f',typ='I'),
+             LIST_ARCH       =SIMP(statut='f',typ=listis_sdaster),
+             CRITERE         =SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
+             b_prec_rela=BLOC(condition="(CRITERE=='RELATIF')",
+                PRECISION       =SIMP(statut='f',typ='R',defaut= 1.E-6,),),
+             b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
+                PRECISION       =SIMP(statut='o',typ='R',),),),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**'),
+         OPTION          =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max=2,
+                               into=("FLUX_ELGA_TEMP","FLUX_ELNO_TEMP") ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+
+)  ;
+#& MODIF COMMANDE  DATE 18/01/2010   AUTEUR TARDIEU N.TARDIEU 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+# RESPONSABLE DURAND C.DURAND
+THER_NON_LINE_MO=OPER(nom="THER_NON_LINE_MO",op= 171,sd_prod=evol_ther,
+                     fr="Résoudre un problème thermique non linéaire (conditions limites ou comportement matériau)"
+                        +" stationnaire avec chargement mobile",
+                     reentrant='n',
+            UIinfo={"groupes":("Résolution",)},
+         MODELE          =SIMP(statut='o',typ=modele_sdaster ),
+         CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+         CARA_ELEM       =SIMP(statut='c',typ=cara_elem ),
+         EXCIT           =FACT(statut='o',max='**',
+           CHARGE          =SIMP(statut='o',typ=char_ther ),
+           FONC_MULT       =SIMP(statut='c',typ=(fonction_sdaster,nappe_sdaster,formule) ),
+         ),
+         ETAT_INIT       =FACT(statut='f',
+           EVOL_THER       =SIMP(statut='f',typ=evol_ther ),
+           NUME_ORDRE      =SIMP(statut='f',typ='I',defaut= 0 ),
+         ),
+         CONVERGENCE     =FACT(statut='d',
+           CRIT_TEMP_RELA  =SIMP(statut='f',typ='R',defaut= 1.E-3 ),
+           CRIT_ENTH_RELA  =SIMP(statut='f',typ='R',defaut= 1.E-2 ),
+           ITER_GLOB_MAXI  =SIMP(statut='f',typ='I',defaut= 10 ),
+           ARRET           =SIMP(statut='c',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+         ),
+         SOLVEUR         =FACT(statut='d',
+           METHODE         =SIMP(statut='f',typ='TXM',defaut="MULT_FRONT",into=("MULT_FRONT","LDLT","GCPC","MUMPS") ),
+           b_mult_front    =BLOC(condition = "METHODE == 'MULT_FRONT' ",fr="Paramètres de la méthode multi frontale",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="METIS",into=("MD","MDA","METIS") ),
+           ),
+           b_ldlt          =BLOC(condition = "METHODE == 'LDLT' ",fr="Paramètres de la méthode LDLT",
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("RCMK","SANS") ),
+           ),
+           b_ldlt_mult_mumps =BLOC( condition = "METHODE=='LDLT' or METHODE=='MULT_FRONT' or METHODE=='MUMPS' ",
+                                   fr="Paramètres relatifs à la non inversibilité de la matrice à factoriser",
+             NPREC           =SIMP(statut='f',typ='I',defaut= 8 ),
+             STOP_SINGULIER  =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON") ),
+           ),
+           b_gcpc         =BLOC(condition = "METHODE == 'GCPC' ", fr="Paramètres de la méthode du gradient conjugué",
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","LDLT_SP",),defaut="LDLT_INC" ),
+             b_ldltinc       =BLOC(condition = "PRE_COND == 'LDLT_INC' ", fr="Paramètres de la factorisation incomplète",
+               NIVE_REMPLISSAGE    =SIMP(statut='f',typ='I',defaut= 0 ),
+               RENUM               =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+               ),
+             b_simple        =BLOC(condition = "PRE_COND == 'LDLT_SP' ", fr="Paramètres de la factorisation simple précision",
+               REAC_PRECOND        =SIMP(statut='f',typ='I',defaut=5, ),
+               ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= 0 ),
+           ),
+           b_mumps        =BLOC(condition = "METHODE == 'MUMPS' ",fr="Paramètres de la méthode MUMPS",
+             TYPE_RESOL      =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("NONSYM","SYMGEN","SYMDEF","AUTO")),
+             PRETRAITEMENTS  =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO")),
+             POSTTRAITEMENTS =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("SANS","AUTO","FORCE")),             
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="AUTO",into=("AMD","AMF","PORD","METIS","QAMD","AUTO")),
+             ELIM_LAGR2      =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+             PCENT_PIVOT     =SIMP(statut='f',typ='I',defaut=10,),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut=-1.0,),
+             OUT_OF_CORE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON")),
+             ),
+           b_petsc          =BLOC(condition = "METHODE == 'PETSC' ",fr="Paramètres de la méthode PETSC",
+             ALGORITHME      =SIMP(statut='f',typ='TXM',into=("BCGS","BICG","CG","CR","GMRES","TFQMR",),defaut="CG" ),
+             PRE_COND        =SIMP(statut='f',typ='TXM',into=("LDLT_INC","JACOBI","SOR"),defaut="LDLT_INC" ),
+             b_petsc_ilu     =BLOC(condition = "PRE_COND == 'LDLT_INC' ",
+               NIVE_REMPLISSAGE = SIMP(statut='f',typ='I',defaut= 0 ),
+               REMPLISSAGE      = SIMP(statut='f',typ='R',defaut= 1.0),
+             ),
+             RENUM           =SIMP(statut='f',typ='TXM',defaut="RCMK",into=("SANS","RCMK") ),
+             RESI_RELA       =SIMP(statut='f',typ='R',defaut= 1.E-6 ),
+             NMAX_ITER       =SIMP(statut='f',typ='I',defaut= -1 ),
+           ),
+           SYME            =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
+         ),
+         TITRE           =SIMP(statut='f',typ='TXM',max='**' ),
+         INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
+)  ;
+
+
+
diff --git a/Aster/Cata/cataSTA10/ops.py b/Aster/Cata/cataSTA10/ops.py
new file mode 100644 (file)
index 0000000..2586627
--- /dev/null
@@ -0,0 +1,502 @@
+#@ MODIF ops Cata  DATE 23/03/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+
+
+# Modules Python
+import types
+import string,linecache,os,traceback,re
+import pickle
+import re
+
+# Modules Eficas
+import Accas
+from Accas import ASSD
+from Noyau.ascheckers     import CheckLog
+
+try:
+   import aster
+   aster_exists = True
+   # Si le module aster est présent, on le connecte
+   # au JDC
+   import Build.B_CODE
+   Build.B_CODE.CODE.codex=aster
+   
+   from Utilitai.Utmess   import UTMESS
+   from Build.B_SENSIBILITE_MEMO_NOM_SENSI import MEMORISATION_SENSIBILITE
+   from Execution.E_Global import MessageLog
+except:
+   aster_exists = False
+
+
+def commun_DEBUT_POURSUITE(jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM):
+   """Fonction sdprod partie commune à DEBUT et POURSUITE.
+   (on stocke un entier au lieu du logique)
+   """
+   jdc.par_lot    = PAR_LOT
+   jdc.impr_macro = int(IMPR_MACRO == 'OUI')
+   jdc.jxveri     = int(CODE != None or (DEBUG != None and DEBUG['JXVERI'] == 'OUI'))
+   jdc.sdveri     = int(DEBUG != None and DEBUG['SDVERI'] == 'OUI')
+   jdc.fico       = None
+   jdc.sd_checker = CheckLog()
+   if CODE != None:
+      jdc.fico = CODE['NOM']
+   if aster_exists:
+      # en POURSUITE, ne pas écraser la mémorisation existante.
+      if not hasattr(jdc, 'memo_sensi'):
+         jdc.memo_sensi = MEMORISATION_SENSIBILITE()
+      jdc.memo_sensi.reparent(jdc)
+
+      # ne faire qu'une fois
+      if not hasattr(jdc, 'msg_init'):
+         # messages d'alarmes désactivés
+         if IGNORE_ALARM:
+            if not type(IGNORE_ALARM) in (list, tuple):
+               IGNORE_ALARM = [IGNORE_ALARM]
+            for idmess in IGNORE_ALARM:
+               MessageLog.disable_alarm(idmess)
+               
+      # en POURSUITE, conserver le catalogue de comportement picklé
+      if not hasattr(jdc, 'catalc'):
+         from Comportement import catalc
+         jdc.catalc = catalc
+
+      jdc.msg_init = True
+
+
+def DEBUT(self, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM, **args):
+   """
+       Fonction sdprod de la macro DEBUT
+   """
+   # La commande DEBUT ne peut exister qu'au niveau jdc
+   if self.jdc is not self.parent :
+      raise Accas.AsException("La commande DEBUT ne peut exister qu'au niveau jdc")
+
+   commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM)
+
+
+def build_debut(self,**args):
+   """
+   Fonction ops pour la macro DEBUT
+   """
+   self.jdc.UserError=self.codex.error
+
+   if self.jdc.par_lot == 'NON' :
+      self.jdc._Build()
+   # On execute la fonction debut pour initialiser les bases
+   # Cette execution est indispensable avant toute autre action sur ASTER
+   # op doit etre un entier car la fonction debut appelle GCECDU qui demande
+   # le numero de l'operateur associé (getoper)
+   self.definition.op=0
+   self.set_icmd(1)
+   lot,ier=self.codex.debut(self,1)
+   # On remet op a None juste apres pour eviter que la commande DEBUT
+   # ne soit executée dans la phase d'execution
+   self.definition.op=None
+   return ier
+
+def POURSUITE(self, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM, **args):
+   """
+       Fonction sdprod de la macro POURSUITE
+   """
+   # La commande POURSUITE ne peut exister qu'au niveau jdc
+   if self.jdc is not self.parent :
+      raise Accas.AsException("La commande POURSUITE ne peut exister qu'au niveau jdc")
+
+   commun_DEBUT_POURSUITE(self.jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM)
+   
+   if (self.codex and os.path.isfile("glob.1") or os.path.isfile("bhdf.1")):
+     # Le module d'execution est accessible et glob.1 est present
+     # Pour eviter de rappeler plusieurs fois la sequence d'initialisation
+     # on memorise avec l'attribut fichier_init que l'initialisation
+     # est réalisée
+     if hasattr(self,'fichier_init'):return
+     self.fichier_init='glob.1'
+     self.jdc.initexec()
+     # le sous programme fortran appelé par self.codex.poursu demande le numero
+     # de l'operateur (GCECDU->getoper), on lui donne la valeur 0
+     self.definition.op=0
+     lot,ier,lonuti,concepts=self.codex.poursu(self,1)
+     # Par la suite pour ne pas executer la commande pendant la phase
+     # d'execution on le remet à None
+     self.definition.op=None
+     # On demande la numerotation de la commande POURSUITE avec l'incrément
+     # lonuti pour qu'elle soit numérotée à la suite des commandes existantes.
+####CD     self.set_icmd(lonuti)    Non : on repart à zéro
+     pos=0
+     d={}
+     while pos+80 < len(concepts)+1:
+       nomres=concepts[pos:pos+8]
+       concep=concepts[pos+8:pos+24]
+       nomcmd=concepts[pos+24:pos+40]
+       statut=concepts[pos+40:pos+48]
+       print nomres,concep,nomcmd,statut
+       if nomres[0] not in (' ','.','&') and statut != '&DETRUIT':
+          exec nomres+'='+string.lower(concep)+'()' in self.parent.g_context,d
+       elif statut == '&DETRUIT' : self.jdc.nsd = self.jdc.nsd+1
+       pos=pos+80
+     # ces ASSD seront écrasées par le pick.1,
+     # on vérifiera la cohérence de type entre glob.1 et pick.1
+     for k,v in d.items():
+       self.parent.NommerSdprod(v,k)
+     self.g_context=d
+
+     # Il peut exister un contexte python sauvegardé sous forme  pickled
+     # On récupère ces objets après la restauration des concepts pour que
+     # la récupération des objets pickled soit prioritaire.
+     # On vérifie que les concepts relus dans glob.1 sont bien tous
+     # presents sous le meme nom et du meme type dans pick.1
+     # Le contexte est ensuite updaté (surcharge) et donc enrichi des
+     # variables qui ne sont pas des concepts.
+     # On supprime du pickle_context les concepts valant None, ca peut 
+     # etre le cas des concepts non executés, placés après FIN.
+     pickle_context=get_pickled_context()
+     if pickle_context==None :
+        UTMESS('F','SUPERVIS_86')
+        return
+     self.jdc.restore_pickled_attrs(pickle_context)
+     from Cata.cata  import ASSD,entier
+     from Noyau.N_CO import CO
+     for elem in pickle_context.keys():
+         if isinstance(pickle_context[elem], ASSD):
+            pickle_class=pickle_context[elem].__class__
+            # on rattache chaque assd au nouveau jdc courant (en poursuite)
+            pickle_context[elem].jdc=self.jdc
+            pickle_context[elem].parent=self.jdc
+            # le marquer comme 'executed'
+            pickle_context[elem].executed = 1
+            # pour que sds_dict soit cohérent avec g_context
+            self.jdc.sds_dict[elem] = pickle_context[elem]
+            if elem != pickle_context[elem].nom:
+               name = re.sub('_([0-9]+)$', '[\\1]', pickle_context[elem].nom)
+               UTMESS('A', 'SUPERVIS_93', valk=(elem, name))
+               del pickle_context[elem]
+               continue
+            # rétablir le parent pour les attributs de la SD
+            pickle_context[elem].reparent_sd()
+            if elem in self.g_context.keys():
+               poursu_class=self.g_context[elem].__class__
+               if poursu_class!=pickle_class :
+                  UTMESS('F','SUPERVIS_87',valk=[elem])
+                  return
+            elif isinstance(pickle_context[elem],ASSD) and pickle_class not in (CO,entier) : 
+            # on n'a pas trouvé le concept dans la base et sa classe est ASSD : ce n'est pas normal
+            # sauf dans le cas de CO : il n'a alors pas été typé et c'est normal qu'il soit absent de la base
+            # meme situation pour le type 'entier' produit uniquement par DEFI_FICHIER
+               UTMESS('F','SUPERVIS_88',valk=[elem,str(pickle_class)])
+               return
+         if pickle_context[elem]==None : del pickle_context[elem]
+     self.g_context.update(pickle_context)
+     return
+
+   else:
+     # Si le module d'execution n est pas accessible ou glob.1 absent on 
+     # demande un fichier (EFICAS)
+     # Il faut éviter de réinterpréter le fichier à chaque appel de
+     # POURSUITE
+     if hasattr(self,'fichier_init'):
+        return
+     self.make_poursuite()
+
+def get_pickled_context():
+    """
+       Cette fonction permet de réimporter dans le contexte courant du jdc (jdc.g_context)
+       les objets python qui auraient été sauvegardés, sous forme pickled, lors d'une 
+       précédente étude. Un fichier pick.1 doit etre présent dans le répertoire de travail
+    """
+    fpick = 'pick.1'
+    if not os.path.isfile(fpick):
+       return None
+   
+    # Le fichier pick.1 est présent. On essaie de récupérer les objets python sauvegardés
+    context={}
+    try:
+       file=open(fpick,'r')
+       # Le contexte sauvegardé a été picklé en une seule fois. Il est seulement
+       # possible de le récupérer en bloc. Si cette opération echoue, on ne récupère
+       # aucun objet.
+       context=pickle.load(file)
+       file.close()
+    except:
+       # En cas d'erreur on ignore le contenu du fichier
+       traceback.print_exc()
+       return None
+
+    return context
+
+def POURSUITE_context(self,d):
+   """
+       Fonction op_init de la macro POURSUITE
+   """
+   # self représente la macro POURSUITE ...
+   d.update(self.g_context)
+   # Une commande POURSUITE n'est possible qu'au niveau le plus haut
+   # On ajoute directement les concepts dans le contexte du jdc
+   # XXX est ce que les concepts ne sont pas ajoutés plusieurs fois ??
+   for v in self.g_context.values():
+      if isinstance(v,ASSD) :
+         self.jdc.sds.append(v)
+
+def build_poursuite(self,**args):
+   """
+   Fonction ops pour la macro POURSUITE
+   """
+   # Pour POURSUITE on ne modifie pas la valeur initialisee dans ops.POURSUITE
+   # Il n y a pas besoin d executer self.codex.poursu (c'est deja fait dans
+   # la fonction sdprod de la commande (ops.POURSUITE))
+   self.set_icmd(1)
+   self.jdc.UserError=self.codex.error
+   return 0
+
+def INCLUDE(self,UNITE,**args):
+   """ 
+       Fonction sd_prod pour la macro INCLUDE
+   """
+   if not UNITE : return
+   if hasattr(self,'unite'):return
+   self.unite=UNITE
+
+   if self.jdc and self.jdc.par_lot == 'NON':
+      # On est en mode commande par commande, on appelle la methode speciale
+      self.Execute_alone()
+
+   self.make_include(unite=UNITE)
+
+def INCLUDE_context(self,d):
+   """ 
+       Fonction op_init pour macro INCLUDE
+   """
+   for k,v in self.g_context.items():
+      d[k]=v
+
+def build_include(self,**args):
+   """
+   Fonction ops de la macro INCLUDE appelée lors de la phase de Build
+   """
+   # Pour presque toutes les commandes (sauf FORMULE et POURSUITE)
+   # le numero de la commande n est pas utile en phase de construction
+   # La macro INCLUDE ne sera pas numérotée (incrément=None)
+   ier=0
+   self.set_icmd(None)
+   icmd=0
+   # On n'execute pas l'ops d'include en phase BUILD car il ne sert a rien.
+   #ier=self.codex.opsexe(self,icmd,-1,1)
+   return ier
+
+def detruire(self,d):
+   """
+       Cette fonction est la fonction op_init de la PROC DETRUIRE
+   """
+   list_co = set()
+   sd = []
+   # par nom de concept (typ=assd)
+   if self["CONCEPT"] != None:
+      for mc in self["CONCEPT"]:
+         mcs = mc["NOM"]
+         if type(mcs) not in (list, tuple):
+            mcs = [mcs]
+         list_co.update(mcs)
+   # par chaine de caractères (typ='TXM')
+   if self["OBJET"] != None:
+      for mc in self["OBJET"]:
+         mcs = mc["CHAINE"]
+         if type(mcs) not in (list, tuple):
+            mcs = [mcs]
+         # longueur <= 8, on cherche les concepts existants
+         for nom in mcs:
+            assert type(nom) in (str, unicode), 'On attend une chaine de caractères : %s' % nom
+            if len(nom.strip()) <= 8:
+               if self.jdc.sds_dict.get(nom) != None:
+                  list_co.add(self.jdc.sds_dict[nom])
+               elif d.get(nom) != None:
+                  list_co.add(d[nom])
+            #else uniquement destruction des objets jeveux
+   
+   for co in list_co:
+      assert isinstance(co, ASSD), 'On attend un concept : %s (type=%s)' % (co, type(co))
+      nom = co.nom
+      # traitement particulier pour les listes de concepts, on va mettre à None
+      # le terme de l'indice demandé dans la liste :
+      # nomconcept_i est supprimé, nomconcept[i]=None
+      i = nom.rfind('_')
+      if i > 0 and not nom.endswith('_'):
+         concept_racine = nom[:i]
+         if d.has_key(concept_racine) and type(d[concept_racine]) is list:
+            try:
+               num = int(nom[i+1:])
+               d[concept_racine][num] = None
+            except (ValueError, IndexError):
+               # cas : RESU_aaa ou (RESU_8 avec RESU[8] non initialisé)
+               pass
+      # pour tous les concepts :
+      if d.has_key(nom):
+         del d[nom]
+      if self.jdc.sds_dict.has_key(nom):
+         del self.jdc.sds_dict[nom]
+      # On signale au parent que le concept s n'existe plus apres l'étape self 
+      self.parent.delete_concept_after_etape(self, co)
+      # marque comme détruit == non executé
+      co.executed = 0
+
+
+def subst_materiau(text,NOM_MATER,EXTRACTION,UNITE_LONGUEUR):
+   """
+       Cette fonction retourne un texte obtenu à partir du texte passé en argument (text)
+       en substituant le nom du materiau par NOM_MATER 
+       et en réalisant les extractions spéciifées dans EXTRACTION
+   """
+   lines=string.split(text,'\n')
+
+##### traitement de UNIT : facteur multiplicatif puissance de 10
+   regmcsu=re.compile(r" *(.*) *= *([^ ,]*) *## +([^ ]*) *([^ ]*)")
+   ll_u=[]
+   for l in lines:
+       m=regmcsu.match(l)
+       if m:
+          if m.group(3) == "UNIT":
+             if   UNITE_LONGUEUR=='M'  : coef = '0'
+             elif UNITE_LONGUEUR=='MM' : coef = m.group(4)
+             ll_u.append(m.group(1)+" = "+m.group(2)+coef)
+          else : ll_u.append(l)
+       else : ll_u.append(l)
+
+##### traitement de EXTRACTION
+   if EXTRACTION:
+     regmcf=re.compile(r" *(.*) *= *_F\( *## +(.*) +(.*)")
+     regmcs=re.compile(r" *(.*) *= *([^ ,]*) *, *## +([^ ]*) *([^ ]*)")
+     regfin=re.compile(r" *\) *")
+     ll=[]
+     temps={};lmcf=[]
+     for e in EXTRACTION:
+       mcf=e['COMPOR']
+       lmcf.append(mcf)
+       temps[mcf]=e['TEMP_EVAL']
+     FLAG=0
+     for l in ll_u:
+       m=regmcf.match(l)
+       if m: # On a trouve un mot cle facteur "commentarise"
+         if m.group(2) == "SUBST": # il est de plus substituable
+           if temps.has_key(m.group(3)): # Il est a substituer
+             ll.append(" "+m.group(3)+"=_F(")
+             mcf=m.group(3)
+             TEMP=temps[mcf]
+             FLAG=1 # Indique que l'on est en cours de substitution
+           else: # Il n est pas a substituer car il n est pas dans la liste demandee
+             ll.append(l)
+         else: # Mot cle facteur commentarise non substituable
+           ll.append(l)
+       else:  # La ligne ne contient pas un mot cle facteur commentarise
+         if FLAG == 0: # On n est pas en cours de substitution
+           ll.append(l)
+         else: # On est en cours de substitution. On cherche les mots cles simples commentarises
+           m=regmcs.match(l)
+           if m: # On a trouve un mot cle simple commentarise
+             if m.group(3) == "EVAL":
+               ll.append("  "+m.group(1)+' = '+m.group(4)+"("+str(TEMP)+'),')
+             elif m.group(3) == "SUPPR":
+               pass
+             else:
+               ll.append(l)
+           else: # On cherche la fin du mot cle facteur en cours de substitution
+             m=regfin.match(l)
+             if m: # On l a trouve. On le supprime de la liste
+               FLAG=0
+               del temps[mcf]
+             ll.append(l)
+   else:
+     ll=ll_u
+
+   lines=ll
+   ll=[]
+   for l in lines:
+     l=re.sub(" *MAT *= *",NOM_MATER+" = ",l,1)
+     ll.append(l)
+   text=string.join(ll,'\n')
+   return text
+
+def post_INCLUDE(self):
+  """
+      Cette fonction est executée apres toutes les commandes d'un INCLUDE (RETOUR)
+      Elle sert principalement pour les INCLUDE_MATERIAU : remise a blanc du prefixe Fortran
+  """
+  self.codex.opsexe(self,0,-1,2)
+
+def INCLUDE_MATERIAU(self,NOM_AFNOR,TYPE_MODELE,VARIANTE,TYPE_VALE,NOM_MATER,
+                    EXTRACTION,UNITE_LONGUEUR,INFO,**args):
+  """ 
+      Fonction sd_prod pour la macro INCLUDE_MATERIAU
+  """
+  mat=string.join((NOM_AFNOR,'_',TYPE_MODELE,'_',VARIANTE,'.',TYPE_VALE),'')
+  if not hasattr(self,'mat') or self.mat != mat or self.nom_mater != NOM_MATER :
+    # On récupère le répertoire des matériaux dans les arguments 
+    # supplémentaires du JDC
+    rep_mat=self.jdc.args.get("rep_mat","NOrep_mat")
+    f=os.path.join(rep_mat,mat)
+    self.mat=mat
+    self.nom_mater=NOM_MATER
+    if not os.path.isfile(f):
+       del self.mat
+       self.make_contexte(f,"#Texte sans effet pour reinitialiser le contexte a vide\n")
+       raise "Erreur sur le fichier materiau: "+f
+    # Les materiaux sont uniquement disponibles en syntaxe Python
+    # On lit le fichier et on supprime les éventuels \r
+    text=string.replace(open(f).read(),'\r\n','\n')
+    # On effectue les substitutions necessaires
+    self.text= subst_materiau(text,NOM_MATER,EXTRACTION,UNITE_LONGUEUR)
+    if INFO == 2:
+      print "INCLUDE_MATERIAU: ", self.mat,' ',NOM_MATER,'\n'
+      print self.text
+    # on execute le texte fourni dans le contexte forme par
+    # le contexte de l etape pere (global au sens Python)
+    # et le contexte de l etape (local au sens Python)
+    # Il faut auparavant l'enregistrer aupres du module linecache (utile pour nommage.py)
+    linecache.cache[f]=0,0,string.split(self.text,'\n'),f
+
+    self.postexec=post_INCLUDE
+
+    if self.jdc.par_lot == 'NON':
+      # On est en mode commande par commande, on appelle la methode speciale
+      self.Execute_alone()
+
+    self.make_contexte(f,self.text)
+    for k,v in self.g_context.items() :
+        if isinstance(v,ASSD) and k!=v.nom : del self.g_context[k]
+
+def build_procedure(self,**args):
+    """
+    Fonction ops de la macro PROCEDURE appelée lors de la phase de Build
+    """
+    ier=0
+    # Pour presque toutes les commandes (sauf FORMULE et POURSUITE)
+    # le numero de la commande n est pas utile en phase de construction
+    # On ne numérote pas une macro PROCEDURE (incrément=None)
+    self.set_icmd(None)
+    icmd=0
+    #ier=self.codex.opsexe(self,icmd,-1,3)
+    return ier
+
+def build_DEFI_FICHIER(self,**args):
+    """
+    Fonction ops de la macro DEFI_FICHIER
+    """
+    ier=0
+    self.set_icmd(1)
+    icmd=0
+    ier=self.codex.opsexe(self,icmd,-1,26)
+    return ier
diff --git a/Aster/Cata/cataSTA9/Macro/calc_ecrevisse_ops.py b/Aster/Cata/cataSTA9/Macro/calc_ecrevisse_ops.py
new file mode 100644 (file)
index 0000000..520bf6f
--- /dev/null
@@ -0,0 +1,1101 @@
+#@ MODIF calc_ecrevisse_ops Macro  DATE 05/05/2010   AUTEUR MACOCCO K.MACOCCO 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+
+# ------------------OUTILS ------------------------------
+
+# Determination de la direction de la fissure
+#   a partir du points initial et final :
+# theta : angle par rapport a la verticale ascendente (degres)
+#         positif si sens horaire
+#   -180< theta <=180
+# beta : angle par rapport a la horizontale (degres)
+#         positif si sens anti-horaire
+#         -180< beta <=180
+def dirfiss(Xa,Ya,Xb,Yb) :
+    from math import atan2, degrees
+
+    xia = Xa[0]
+    yia = Ya[0]
+    xea = Xa[-1]
+    yea = Ya[-1]
+    xib = Xb[0]
+    yib = Yb[0]
+    xeb = Xb[-1]
+    yeb = Yb[-1]
+
+    xi = (xia+xib)/2.
+    yi = (yia+yib)/2.
+    xe = (xea+xeb)/2.
+    ye = (yea+yeb)/2.
+
+    dx = xe -xi
+    dy = ye -yi
+
+    try :
+        tangA= dy/dx
+    except ZeroDivisionError :
+        if (dy>0.) :
+            theta = 0.
+            beta  = 90.
+        else :
+            theta = 180.
+            beta  = -90.
+    else :
+        beta = atan2(dy,dx)
+        beta = degrees(beta)
+        theta = 90.-beta
+        if (theta>180.):
+            theta=theta-360.
+
+    if (abs(beta)<45. or abs(beta)>135.) :
+        DIR_PREV = 'X'
+    else:
+        DIR_PREV = 'Y'
+
+    if (round(abs(beta))==0. or round(abs(beta))==180.):
+        DIR_FISS = 'X'
+    elif (round(abs(beta))==90.):
+        DIR_FISS = 'Y'
+    else :
+        DIR_FISS = 'GEN'
+
+    return DIR_FISS, DIR_PREV, beta, theta, xi, yi
+
+
+# Determination de l ouverture de la fissure
+def ouvFiss(DIR_FISS,beta,Xa,Ya,Xb,Yb) :
+    from math import sin, cos, sqrt, radians
+
+    if DIR_FISS=='X' :
+        Ouv = map(lambda y1,y2: abs(y2-y1),Ya,Yb)
+        Gli = map(lambda x1,x2: abs(x2-x1),Xa,Xb)
+    elif DIR_FISS=='Y' :
+        Ouv = map(lambda x1,x2: abs(x2-x1),Xa,Xb)
+        Gli = map(lambda y1,y2: abs(y2-y1),Ya,Yb)
+    else :
+        xi  = (Xa[0]+Xb[0])*0.5
+        yi  = (Ya[0]+Yb[0])*0.5
+        Xa1 = [x-y for (x,y) in zip(Xa,[xi]*len(Xa))]
+        Ya1 = [x-y for (x,y) in zip(Ya,[yi]*len(Ya))]
+        Xb1 = [x-y for (x,y) in zip(Xb,[xi]*len(Xb))]
+        Yb1 = [x-y for (x,y) in zip(Yb,[yi]*len(Yb))]
+        Xa2 = [ x*cos(radians(beta)) + y*sin(radians(beta)) for (x,y) in zip(Xa,Ya)]
+        Ya2 = [-x*sin(radians(beta)) + y*cos(radians(beta)) for (x,y) in zip(Xa,Ya)]
+        Xb2 = [ x*cos(radians(beta)) + y*sin(radians(beta)) for (x,y) in zip(Xb,Yb)]
+        Yb2 = [-x*sin(radians(beta)) + y*cos(radians(beta)) for (x,y) in zip(Xb,Yb)]
+        Ouv = map(lambda x,y: abs(y-x), Ya2, Yb2)
+        Gli = map(lambda x,y: abs(y-x), Xa2, Xb2)
+    return Ouv, Gli
+
+
+
+
+
+# ------------------DEBUT MACRO ------------------------------
+# Debut de la macro, on impose en parametre les donnees placer
+#     dans T_EC, l'appel a ecrevisse
+def calc_ecrevisse_ops(self,
+    CHARGE_MECA,
+    CHARGE_THER1,
+    CHARGE_THER2,
+    TABLE,
+    DEBIT,
+    MODELE_MECA,
+    MODELE_THER,
+    RESULTAT,
+    FISSURE,
+    ECOULEMENT,
+    MODELE_ECRE,
+    CONVERGENCE,
+    LOGICIEL,
+    VERSION,
+    ENTETE,
+    IMPRESSION,
+    INFO,
+    COURBES,
+    **args):
+
+    """
+        Procedure de couplage Aster-Ecrevisse
+        Recuperation du profil de la fissure , appel de MACR_ECRE_CALC,
+        creation des tableaux de resultats et des chargements pour AsterGeneration par Aster
+    """
+
+    import os, string, types, shutil
+    import aster
+    from Accas import _F
+    from Noyau.N_utils import AsType
+    from Utilitai.Utmess import UTMESS, MasquerAlarme, RetablirAlarme
+    from Utilitai.Table import Table, merge
+    from copy import copy
+    from math import atan, pi, sqrt, atan2, degrees, sin, cos
+
+    ier=0
+
+    # Concepts sortant
+    self.DeclareOut('__TAB',TABLE)
+    self.DeclareOut('__ECR_F1',CHARGE_THER1)
+    self.DeclareOut('__ECR_F2',CHARGE_THER2)
+    self.DeclareOut('__ECR_P',CHARGE_MECA)
+    self.DeclareOut('__DEB',DEBIT)
+
+    # La macro compte pour 1 dans la numerotation des commandes
+    self.set_icmd(1)
+
+    # Parametres debug
+    debug = False
+
+    # Fonctionnalitees cachees :
+    # 1- oldVersion : "=True" permet de retourner un chargement thermique defini selon l'ancien mode (flux thermique)
+    #                 ATTENTION!! L'ancienne version ne marche que avec la fissure orientee dans la direction Y,
+    #                 et avec le point initila en y=0!!
+    # 2- chargeLin : "=True" permet d'appliquer le chargement d'Ecrevisse avec interpolation lineaire sur le mailles,
+    #                 et non constant par maille, comme c'est par defaut
+    oldVersion = False
+    chargeLin  = False
+
+
+    # Parametres developpeur
+    tmp_ecrevisse = "tmp_ecrevisse"
+
+    # Info
+    info2 = (INFO==2)
+    InfoAster = 1
+    if debug :
+        info2=True
+
+    # IMPORTATION DE COMMANDES ASTER
+    DEFI_GROUP       = self.get_cmd("DEFI_GROUP")
+    POST_RELEVE_T    = self.get_cmd("POST_RELEVE_T")
+    MACR_ECRE_CALC   = self.get_cmd("MACR_ECRE_CALC")
+    IMPR_TABLE       = self.get_cmd("IMPR_TABLE")
+    DETRUIRE         = self.get_cmd("DETRUIRE")
+    IMPR_CO          = self.get_cmd("IMPR_CO")
+    DEFI_FONCTION    = self.get_cmd("DEFI_FONCTION")
+    CREA_TABLE       = self.get_cmd("CREA_TABLE")
+    IMPR_TABLE       = self.get_cmd("IMPR_TABLE")
+    CO               = self.get_cmd("CO")
+    AFFE_CHAR_THER_F = self.get_cmd("AFFE_CHAR_THER_F")
+    AFFE_CHAR_MECA_F = self.get_cmd("AFFE_CHAR_MECA_F")
+    DEFI_FICHIER     = self.get_cmd("DEFI_FICHIER")
+    DEFI_CONSTANTE   = self.get_cmd("DEFI_CONSTANTE")
+
+    # RECUPERATION DES MOTS-CLES FACTEURS
+    dRESULTAT=RESULTAT[0].cree_dict_valeurs(RESULTAT[0].mc_liste)
+    for i in dRESULTAT.keys():
+        if dRESULTAT[i]==None : del dRESULTAT[i]
+
+    dECOULEMENT=ECOULEMENT[0].cree_dict_valeurs(ECOULEMENT[0].mc_liste)
+    for i in dECOULEMENT.keys():
+        if dECOULEMENT[i]==None : del dECOULEMENT[i]
+
+    dMODELE_ECRE=MODELE_ECRE[0].cree_dict_valeurs(MODELE_ECRE[0].mc_liste)
+    for i in dMODELE_ECRE.keys():
+        if dMODELE_ECRE[i]==None : dMODELE_ECRE[i]=None #del dMODELE_ECRE[i]
+
+    dCONVERGENCE=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
+    for i in dCONVERGENCE.keys():
+        if dCONVERGENCE[i]==None : del dCONVERGENCE[i]
+
+
+    # INSTANTS
+    _l_inst = dRESULTAT['MECANIQUE'].LIST_VARI_ACCES()
+    if dRESULTAT.has_key('INST'):
+        Inst_Ecrevisse = dRESULTAT['INST']
+    else:
+        pass
+
+
+    # INITIATION DES CHARGEMENTS ECREVISSE --> ASTER :
+    #     liste des mots cles facteurs de PRES_REP pour chaque fissure
+    l_PRES_REP = []
+    if oldVersion :
+        # liste des mots cles facteurs de FLUX_REP pour le flux F1/F2
+        #     de chaque fissure (soit sur les deux levres :GROUP_MA[0], GROUP_MA[1])
+        l_FLUX_REP_F1 = []
+        l_FLUX_REP_F2 = []
+    else :
+        # liste des mots cles facteurs de ECHANGE pour le flux F1/F2
+        #     de chaque fissure (soit sur les deux levres :GROUP_MA[0], GROUP_MA[1])
+        l_ECHANGE_F1 = []
+        l_ECHANGE_F2 = []
+
+
+
+    # ON CREE LES GROUP_NO ORDONNES DES LEVRES DE FISSURE
+    #     Liste des noms des groupes de noeuds du maillage :
+    _lgno = map(lambda x: x[0], MODELE_MECA['MAILLAGE'].LIST_GROUP_NO() )
+
+    for k, fissure in enumerate(FISSURE):
+        dFISSURE=fissure.cree_dict_valeurs(fissure.mc_liste)
+        for i in dFISSURE.keys():
+            if dFISSURE[i]==None : del dFISSURE[i]
+
+        # On cree les group_no correspondant aux group_ma des levres de la fissure dans le cas ou ils n'existent pas deja
+        if not dFISSURE['GROUP_MA'][0] in _lgno:
+            DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
+                       MAILLAGE=MODELE_MECA['MAILLAGE'],
+                       CREA_GROUP_NO=_F(GROUP_MA=(dFISSURE['GROUP_MA'][0]),),);
+
+        if not dFISSURE['GROUP_MA'][1] in _lgno:
+            DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
+                       MAILLAGE=MODELE_MECA['MAILLAGE'],
+                       CREA_GROUP_NO=_F(GROUP_MA=(dFISSURE['GROUP_MA'][1]),),);
+
+        # Test sur le nombre de caracteres du nom des group_ma
+        if (len(dFISSURE['GROUP_MA'][0]) >7 or len(dFISSURE['GROUP_MA'][1]) >7):
+            sys.exit(1)
+
+        # Creation des group_no ordonnes des levres des fissures
+        _nom_gno_1 = '_' + dFISSURE['GROUP_MA'][0]
+        if not _nom_gno_1 in _lgno:
+            DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
+                       MAILLAGE=MODELE_MECA['MAILLAGE'],
+                       CREA_GROUP_NO=_F(OPTION='SEGM_DROI_ORDO',
+                                        NOM=_nom_gno_1,
+                                        GROUP_NO=dFISSURE['GROUP_MA'][0],
+                                        GROUP_NO_ORIG=dFISSURE['GROUP_NO_ORIG'][0],
+                                        GROUP_NO_EXTR=dFISSURE['GROUP_NO_EXTR'][0],
+                                        PRECISION=0.01,
+                                        CRITERE='RELATIF',),
+                       INFO=InfoAster,);
+
+        _nom_gno_2 = '_' + dFISSURE['GROUP_MA'][1]
+        if not _nom_gno_2 in _lgno:
+            DEFI_GROUP(reuse = MODELE_MECA['MAILLAGE'],
+                        MAILLAGE=MODELE_MECA['MAILLAGE'],
+                        CREA_GROUP_NO=_F(OPTION='SEGM_DROI_ORDO',
+                                        NOM=_nom_gno_2,
+                                        GROUP_NO=dFISSURE['GROUP_MA'][1],
+                                        GROUP_NO_ORIG=dFISSURE['GROUP_NO_ORIG'][1],
+                                        GROUP_NO_EXTR=dFISSURE['GROUP_NO_EXTR'][1],
+                                        PRECISION=0.01,
+                                        CRITERE='RELATIF',),
+                        INFO=InfoAster,);
+
+
+
+        # EXTRACTIONS DE QUANTITES NECESSAIRES DES RESULTATS THERMIQUE ET MECANIQUE
+        #  On cree les chargements Aster --> Ecrevisse :
+        #     ouverture de fissure et temperature sur le materiau
+
+        # premiere levre de fissure
+        _T_DPL=POST_RELEVE_T(ACTION=_F(INTITULE='DEP_FIS1',
+                                      GROUP_NO=_nom_gno_1,
+                                      RESULTAT=dRESULTAT['MECANIQUE'],
+                                      NOM_CHAM='DEPL',
+                                      NOM_CMP=('DX','DY',),
+                                      INST = Inst_Ecrevisse,
+                                      OPERATION='EXTRACTION',),
+                                      );
+
+        _T_TEMP=POST_RELEVE_T(ACTION=_F(INTITULE='TEMP_FI1',
+                                        GROUP_NO=_nom_gno_1,
+                                        RESULTAT=dRESULTAT['THERMIQUE'],
+                                        NOM_CHAM='TEMP',
+                                        TOUT_CMP='OUI',
+                                        INST = Inst_Ecrevisse,
+                                        OPERATION='EXTRACTION',),);
+
+        # deuxieme levre de la fissure
+        _T_DPL_B=POST_RELEVE_T(ACTION=_F(INTITULE='DEP_FIS2',
+                                        GROUP_NO=_nom_gno_2,
+                                        RESULTAT=dRESULTAT['MECANIQUE'],
+                                        NOM_CHAM='DEPL',
+                                        NOM_CMP=('DX','DY',),
+                                        INST = Inst_Ecrevisse,
+                                        OPERATION='EXTRACTION',),);
+
+        _T_TEMPB=POST_RELEVE_T(ACTION=_F(INTITULE='TEMP_FI2',
+                                          GROUP_NO=_nom_gno_2,
+                                          RESULTAT=dRESULTAT['THERMIQUE'],
+                                          NOM_CHAM='TEMP',
+                                          TOUT_CMP='OUI',
+                                          INST = Inst_Ecrevisse,
+                                          OPERATION='EXTRACTION',),);
+
+        if ( debug ) :
+            print '_T_DPL ==================================================='
+            print  _T_DPL.EXTR_TABLE()
+            print '_T_DPL_B ================================================='
+            print  _T_DPL_B.EXTR_TABLE()
+            print '_T_TEMP ================================================='
+            print  _T_TEMP.EXTR_TABLE()
+            print '_T_TEMP_B ==============================================='
+            print  _T_TEMPB.EXTR_TABLE()
+
+        # Extraction des tables Temperatures + deplacement levres fissure
+        _tbl_temp = _T_TEMP.EXTR_TABLE()
+        _tbl_dpl   = _T_DPL.EXTR_TABLE()
+        DETRUIRE(CONCEPT=_F(NOM=(_T_DPL,_T_TEMP,)),INFO=1,ALARME='NON')
+        _tbl_dpl_b  = _T_DPL_B.EXTR_TABLE()
+        _tbl_temp_b = _T_TEMPB.EXTR_TABLE()
+        DETRUIRE(CONCEPT=_F(NOM=(_T_DPL_B,_T_TEMPB,)),INFO=1,ALARME='NON')
+
+
+        # --Determination des cotes a donner a ecrevisse--
+        #   a partir des resultats mecanique et thermique :
+        _l_tang   = _tbl_dpl.values()['ABSC_CURV']
+        _l_tang_b = _tbl_dpl_b.values()['ABSC_CURV']
+        try :
+            _l_absz_m   = map(lambda x,y: 0.5*(x+y), _l_tang,_l_tang_b)
+        except TypeError :
+            UTMESS('F','ECREVISSE0_40')
+        #
+        _l_tang_t  = _tbl_temp.values()['ABSC_CURV']
+        _l_tang_t_b  = _tbl_temp_b.values()['ABSC_CURV']
+        _l_absz_t   = map(lambda x,y: 0.5*(x+y), _l_tang_t,_l_tang_t_b)
+
+
+       # Coordonnees des points des levres (initiales et a l instant actuel
+        _X0    = _tbl_dpl.values()['COOR_X']
+        _Y0    = _tbl_dpl.values()['COOR_Y']
+        _X0_b  = _tbl_dpl_b.values()['COOR_X']
+        _Y0_b  = _tbl_dpl_b.values()['COOR_Y']
+        _X    = [x + y for (x,y) in zip(_tbl_dpl.values()['DX'],_X0)]
+        _Y    = [x + y for (x,y) in zip(_tbl_dpl.values()['DY'],_Y0)]
+        _X_b    = [x + y for (x,y) in zip(_tbl_dpl_b.values()['DX'],_X0_b)]
+        _Y_b    = [x + y for (x,y) in zip(_tbl_dpl_b.values()['DY'],_Y0_b)]
+
+
+        # Determination de la direction de la fissure
+        (DIR_FISS, DIR_PREV, beta, theta, _xi, _yi) = dirfiss(_X,_Y,_X_b,_Y_b)
+        if oldVersion :
+            (DIR_FISS, DIR_PREV, beta, theta, _xi, _yi) = dirfiss(_X0,_Y0,_X0_b,_Y0_b)
+
+        if (DIR_FISS == 'GEN') and oldVersion :
+            UTMESS('F','ECREVISSE0_23', valr=[theta])
+
+        # --Calcul de l ouverture de fissure--
+        #     une fissure refermee a une ouverture
+        #     egale a l'ouverture remanente
+        (_l_ouv0,_l_gli0) = ouvFiss(DIR_FISS,beta,_X0,_Y0,_X0_b,_Y0_b)
+        for i in range(len(_l_ouv0)) :
+            if _l_ouv0[i] < dFISSURE['OUVERT_REMANENTE'] :
+                UTMESS('A','ECREVISSE0_39')
+
+
+        (_l_ouv,_l_gli)   = ouvFiss(DIR_FISS,beta,_X,_Y,_X_b,_Y_b)
+        if dFISSURE['OUVERT_REMANENTE'] :
+            _l_ouv = map(lambda x: max(dFISSURE['OUVERT_REMANENTE'],x), _l_ouv)
+            if info2 :
+                nbOuvRem = _l_ouv.count(dFISSURE['OUVERT_REMANENTE'])
+                if nbOuvRem != 0 :
+                    UTMESS('I', 'ECREVISSE0_41',valr=[nbOuvRem])
+
+
+
+        # Controle sur l entite du glissement entre les levres
+        DeltaMaille = [abs(y-x) for (x,y) in zip(_l_absz_m[1:len(_l_absz_m)], _l_absz_m[0:len(_l_absz_m)-1])]
+        for i in range(len(DeltaMaille)) :
+            deltamai = DeltaMaille[i]
+            if (deltamai <= _l_gli[i]) or (deltamai <= _l_gli[i+1]) :
+                UTMESS('A', 'ECREVISSE0_38')
+                break
+
+
+        # -- Calcul de la temperature sur le materiau (levres de la fissure) --
+        #     on fait la moyenne des temperatures des deux levres
+        _l_t2  = _tbl_temp.values()['TEMP']
+        _l_t2_b  = _tbl_temp_b.values()['TEMP']
+        _l_temp_aster  = map(lambda x,y: 0.5*(x+y), _l_t2_b,_l_t2)
+
+
+        # Infos / Debug : fichier .mess ou .resu
+        if (info2) :
+            UTMESS('I', 'ECREVISSE0_1', valk=["Premiere levre"],
+                valr=[Inst_Ecrevisse, min(_l_tang_t), max(_l_tang_t), min(_l_t2), max(_l_t2), min(_l_tang), max(_l_tang)])
+            UTMESS('I', 'ECREVISSE0_1',valk=["Deuxieme levre"],
+                    valr=[Inst_Ecrevisse,min(_l_tang_t_b), max(_l_tang_t_b), min(_l_t2_b), max(_l_t2_b), min(_l_tang_b), max(_l_tang_b)])
+            UTMESS('I', 'ECREVISSE0_2',
+                    valr=[Inst_Ecrevisse, min(_l_absz_t), max(_l_absz_t), min(_l_temp_aster), max(_l_temp_aster), min(_l_absz_m), max(_l_absz_m), min(_l_ouv), max(_l_ouv), min(_l_gli),max(_l_gli)])
+
+
+        if ( debug ) :
+            print "\n INFORMATIONS DE DEBUG: "
+            print 'Inst_Ecrevisse=', Inst_Ecrevisse
+            print 'theta:', theta
+            print 'beta:', beta
+            print 'DIR_FISS:', DIR_FISS
+            print 'DIR_PREV:', DIR_PREV
+            print 'point initial de la fissure: (xi,yi) :', _xi,_yi
+            print len(_X0),   '_X0  =', _X0
+            print len(_X0_b), '_X0_b=', _X0_b
+            print len(_Y0),   '_Y0  =', _Y0
+            print len(_Y0_b), '_Y0_b=', _Y0_b
+            print len(_X),    '_X   =', _X
+            print len(_Y),    '_Y   =', _Y
+            print len(_X_b),  '_X_b =', _X_b
+            print len(_Y_b),  '_Y_b =', _Y_b
+            print 'Controle sur les abszisses curvilignes (mecaniques/thermiques) '
+            print '_l_absz_m==_l_absz_t?', _l_absz_m==_l_absz_t
+            print '_l_absz_m=', len(_l_absz_m),_l_absz_m
+            print '_l_absz_t=', len(_l_absz_t),_l_absz_t
+            print '_l_temp_aster=', len(_l_temp_aster),_l_temp_aster
+            print '_l_ouv=', len(_l_ouv),_l_ouv
+            print '_l_gli=', len(_l_gli),_l_gli
+            print '_l_tang=', _l_tang
+            print '_l_tang_b=', _l_tang
+
+
+# ----------------------------------------------------------------------------
+#       PREPARATION ET LANCEMENT D ECREVISSE
+
+        # TESTS de non divergence, les messages sont assez explicites :
+        # Si toutes les listes sont bien definies
+        if len(_l_absz_m)*len(_l_ouv)*len(_l_absz_t)*len(_l_temp_aster) == 0:
+            UTMESS('F','ECREVISSE0_3', valr=[Inst_Ecrevisse])
+            __TAB = None
+            break
+        # Si les ouvertures ne sont pas trop faibles
+        elif min(_l_ouv) < 1e-20:
+            UTMESS('F','ECREVISSE0_4', valr=[Inst_Ecrevisse, min(_l_ouv)])
+            __TAB = None
+            break
+        elif max(_l_t2) > 700:
+            UTMESS('F','ECREVISSE0_5', valr=[Inst_Ecrevisse, max(_l_t2)])
+            __TAB = None
+            break
+        elif max(_l_t2_b) > 700:
+            UTMESS('F','ECREVISSE0_5', valr=[Inst_Ecrevisse, max(_l_t2_b )])
+            __TAB = None
+            break
+        elif min(_l_t2) < 0:
+            UTMESS('F','ECREVISSE0_6', valr=[Inst_Ecrevisse, min(_l_t2 )])
+            __TAB = None
+            break
+        elif min(_l_t2_b) < 0:
+            UTMESS('F','ECREVISSE0_6', valr=[Inst_Ecrevisse, min(_l_t2_b )])
+            __TAB = None
+            break
+        elif abs( float(dECOULEMENT['PRES_ENTREE']) - float(dECOULEMENT['PRES_SORTIE']) )< 5:
+            UTMESS('F','ECREVISSE0_7', valr=[Inst_Ecrevisse, abs( float(dECOULEMENT['PRES_ENTREE']) - float(dECOULEMENT['PRES_SORTIE']) ) ] )
+            __TAB = None
+            break
+        # On lance Ecrevisse!
+        else:
+            UTMESS('I','ECREVISSE0_8', valr=[Inst_Ecrevisse])
+
+            # On efface le rep
+            try:
+                for fic in os.listdir(os.path.join(os.getcwd(),tmp_ecrevisse)):
+                    try:
+                        os.remove( os.path.join(os.getcwd(),tmp_ecrevisse) + '/' + fic )
+                    except:
+                        pass
+            except:
+                pass
+
+            # Recalcul des cotes par rapport a la tortuoiste
+            tort = dFISSURE['TORTUOSITE']
+            try :
+                _l_absz_m = [x/tort for x in _l_absz_m]
+                _l_absz_t = [x/tort for x in _l_absz_t]
+            except ZeroDivisionError :
+                UTMESS('F','ECREVISSE0_42')
+
+
+            if dFISSURE.has_key('LISTE_COTES_BL'):
+                __LISTE_COTES_BL = dFISSURE['LISTE_COTES_BL']
+            else:
+                __LISTE_COTES_BL = (0., max(_l_absz_m))
+
+            # Mot-cle ECOULEMENT
+            txt = {}
+            txt = { 'PRES_ENTREE' : dECOULEMENT['PRES_ENTREE'],
+                    'PRES_SORTIE' : dECOULEMENT['PRES_SORTIE'],
+                    'FLUIDE_ENTREE'   : dECOULEMENT['FLUIDE_ENTREE'],
+                    }
+            if int(dECOULEMENT['FLUIDE_ENTREE']) in [1, 3, 4, 6]:
+                txt['TEMP_ENTREE'] = dECOULEMENT['TEMP_ENTREE']
+            if int(dECOULEMENT['FLUIDE_ENTREE']) in [2, 5]:
+                txt['TITR_MASS'] = dECOULEMENT['TITR_MASS']
+            if int(dECOULEMENT['FLUIDE_ENTREE']) in [4, 5]:
+                txt['PRES_PART'] = dECOULEMENT['PRES_PART']
+
+
+            # Traitement des cas ou les mots cles reynold, xminch, etc... ne doivent pas apparaitre
+            # Mot-cle MODELE_ECRE
+            txt2 = {}
+            txt2['ECOULEMENT'] = dMODELE_ECRE['ECOULEMENT']
+            if dMODELE_ECRE['ECOULEMENT'] == 'GELE' :
+                txt2['PRESS_EBULLITION'] = dMODELE_ECRE['PRESS_EBULLITION']
+
+            txt2['FROTTEMENT'] = dMODELE_ECRE['FROTTEMENT']
+
+            if int(dMODELE_ECRE['FROTTEMENT']) in [-4,-3,-2,-1] :
+                txt2['REYNOLDS_LIM'] = dMODELE_ECRE['REYNOLDS_LIM']
+                txt2['FROTTEMENT_LIM'] = dMODELE_ECRE['FROTTEMENT_LIM']
+
+            txt2['TRANSFERT_CHAL'] = dMODELE_ECRE['TRANSFERT_CHAL']
+            if int(dMODELE_ECRE['TRANSFERT_CHAL']) in [-2,-1] :
+                txt2['XMINCH'] = dMODELE_ECRE['XMINCH']
+                txt2['XMAXCH'] = dMODELE_ECRE['XMAXCH']
+
+            try :
+                if dMODELE_ECRE['IVENAC'] in [0, 1]:
+                    txt2['IVENAC'] = dMODELE_ECRE['IVENAC']
+                else :
+                    txt2['IVENAC'] = 0
+            except :
+                txt2['IVENAC'] = 0
+
+            motscle2= {'ECOULEMENT': txt, 'MODELE_ECRE' : txt2 }
+
+            DETRUIRE(OBJET=_F(CHAINE = '_TAB2' ),INFO=1,ALARME='NON')
+            DETRUIRE(OBJET=_F(CHAINE = '_DEB2' ),INFO=1,ALARME='NON')
+            __TAB_i = CO('_TAB2')
+            __DEB_i = CO('_DEB2')
+
+            MACR_ECRE_CALC(TABLE      = __TAB_i,
+                           DEBIT      = __DEB_i,
+                           ENTETE     = ENTETE,
+                           COURBES    = COURBES,
+                           IMPRESSION = IMPRESSION,
+                           INFO       = INFO,
+                           LOGICIEL   = LOGICIEL,
+                           VERSION    = VERSION,
+                           FISSURE    = _F(LONGUEUR        = max(_l_absz_m),
+                                            ANGLE              = theta,
+                                            RUGOSITE           = dFISSURE['RUGOSITE'],
+                                            ZETA               = dFISSURE['ZETA'],
+                                            SECTION            = dFISSURE['SECTION'],
+                                            LISTE_COTES_AH     = _l_absz_m,
+                                            LISTE_VAL_AH       = _l_ouv,
+                                            LISTE_COTES_BL     = __LISTE_COTES_BL,
+                                            LISTE_VAL_BL       = dFISSURE['LISTE_VAL_BL'],
+                                            ),
+                           TEMPERATURE=_F(GRADIENT       = 'FOURNI',
+                                        LISTE_COTES_TEMP = _l_absz_t,
+                                        LISTE_VAL_TEMP   = _l_temp_aster,
+                                       ),
+                           CONVERGENCE=_F(KGTEST         = dCONVERGENCE['KGTEST'],
+                                          ITER_GLOB_MAXI = dCONVERGENCE['ITER_GLOB_MAXI'],
+                                          CRIT_CONV_DEBI = dCONVERGENCE['CRIT_CONV_DEBI'],
+                                       ),
+                           **motscle2
+                           );
+
+
+#-------------------------------------------------------------
+#           EXTRACTION DES RESULTATS D ECREVISSE
+
+
+
+            # Creation de la table
+            __TABFISS_i = __TAB_i.EXTR_TABLE()
+
+            nb_lignes_table = len(__TABFISS_i["COTES"])
+            # Re-definition des cotes utilisateur (on elimine l effet de la tortuosite)
+            _lst_c   =  __TABFISS_i.COTES.values()
+            _l_cotes = [x*tort for x in _lst_c]
+            dictTab =  __TABFISS_i.dict_CREA_TABLE()['LISTE']
+
+            __TABFISS_i = CREA_TABLE(LISTE = (
+                            _F(PARA = "COTES",     LISTE_R = _l_cotes,),
+                            _F(PARA = "FLUX",      LISTE_R = dictTab[1]['LISTE_R'],),
+                            _F(PARA = "PRESSION",  LISTE_R = dictTab[2]['LISTE_R'],),
+                            _F(PARA = "TEMP",      LISTE_R = dictTab[3]['LISTE_R'],),
+                            _F(PARA = "COEF_CONV", LISTE_R = dictTab[4]['LISTE_R'],),
+                            ),)
+
+            DETRUIRE(OBJET=_F(CHAINE = '__TAB_i' ),INFO=1,ALARME='NON')
+            DETRUIRE(OBJET=_F(CHAINE = '__DEB_i' ),INFO=1,ALARME='NON')
+
+            if ( debug ):
+               os.system('ls -al ' + os.path.join(os.getcwd(),tmp_ecrevisse) )
+
+            if dFISSURE['PREFIXE_FICHIER'] :
+                pref_fic = dFISSURE['PREFIXE_FICHIER']
+            else :
+                pref_fic = 'FISSURE'+str(k+1)
+
+            ## Ecriture du fichier debits en fonction du temps:
+            #try:
+                ## on lit le fichier debit produit par ecrevisse
+                #f_ast = open(os.path.join(tmp_ecrevisse, 'debits'),'r')
+                #_txt = f_ast.read()
+                #f_ast.close()
+                #nomfic = str(pref_fic) + '_debits'
+                ## on concatene
+                #fw = open( os.getcwd() + os.sep + 'REPE_OUT' + os.sep + nomfic, 'a')
+                #fw.write( str(Inst_Ecrevisse) + ' ' + _txt )
+                #fw.close()
+                ## On recopie le fichier debits pour reprise ulterieure
+                #nomfic2 = 'debits_dernier'
+                #fw = open( os.getcwd() + os.sep + 'REPE_OUT' + os.sep + nomfic2, 'w')
+                #fw.write( _txt )
+                #fw.close()
+            #except Exception, e:
+                #print e
+
+            # CREATION DES COURBES:
+            if COURBES != "AUCUNE":
+                # Pour masquer certaines alarmes
+
+                MasquerAlarme('TABLE0_6')
+
+                nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_flux'+ '_' + str(Inst_Ecrevisse))
+                if not os.path.isfile(nomfic): acces='NEW'
+                else: acces='APPEND'
+
+                DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
+                IMPR_TABLE(FORMAT='XMGRACE',
+                          TABLE=__TABFISS_i,
+                          UNITE=55,
+                          PILOTE=COURBES,
+                          NOM_PARA=('COTES','FLUX',),
+                          TITRE='Flux de chaleur a l\'instant %s' % Inst_Ecrevisse,
+                          LEGENDE_X='Abscisse curviligne (m)',
+                          LEGENDE_Y='Flux (W/m2)',
+                          COULEUR  = 1,
+                          MARQUEUR = 1,
+                          );
+                DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
+
+                nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_temperature'+ '_' + str(Inst_Ecrevisse))
+                if not os.path.isfile(nomfic): acces='NEW'
+                else: acces='APPEND'
+
+                DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
+                IMPR_TABLE(FORMAT='XMGRACE',
+                          TABLE=__TABFISS_i,
+                          UNITE=55,
+                          PILOTE=COURBES,
+                          NOM_PARA=('COTES','TEMP',),
+                          TITRE='Temperature a l\'instant %s' % Inst_Ecrevisse,
+                          LEGENDE_X='Abscisse curviligne (m)',
+                          LEGENDE_Y='Temperature (degres C)',
+                          COULEUR  = 2,
+                          MARQUEUR = 2,
+                          );
+                DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
+
+                nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_coeffconv'+ '_' + str(Inst_Ecrevisse))
+                if not os.path.isfile(nomfic): acces='NEW'
+                else: acces='APPEND'
+
+                DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
+                IMPR_TABLE(FORMAT='XMGRACE',
+                          TABLE=__TABFISS_i,
+                          UNITE=55,
+                          PILOTE=COURBES,
+                          NOM_PARA=('COTES','COEF_CONV',),
+                          TITRE='Coefficient de convection a l\'instant %s' % Inst_Ecrevisse,
+                          LEGENDE_X='Abscisse curviligne (m)',
+                          LEGENDE_Y='Coefficient de convection (W/m2/K)',
+                          COULEUR  = 3,
+                          MARQUEUR = 3,
+                          );
+                DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
+
+
+                nomfic = os.path.join( os.getcwd(), 'REPE_OUT', str(pref_fic) + '_pression'+ '_' + str(Inst_Ecrevisse))
+                if not os.path.isfile(nomfic): acces='NEW'
+                else: acces='APPEND'
+
+                DEFI_FICHIER(ACTION='ASSOCIER', UNITE=55, TYPE='ASCII', ACCES=acces, FICHIER=nomfic)
+                IMPR_TABLE(FORMAT='XMGRACE',
+                          TABLE=__TABFISS_i,
+                          UNITE=55,
+                          PILOTE=COURBES,
+                          NOM_PARA=('COTES','PRESSION',),
+                          TITRE='Pression a l\'instant %s' % Inst_Ecrevisse,
+                          LEGENDE_X='Abscisse curviligne (m)',
+                          LEGENDE_Y='Pression (Pa)',
+                          COULEUR  = 4,
+                          MARQUEUR = 4,
+                          );
+                DEFI_FICHIER(ACTION='LIBERER', UNITE=55)
+
+                # Pour la gestion des alarmes
+                RetablirAlarme('TABLE0_6')
+
+
+
+            # On recopie dans REPE_OUT les fichiers resultats d'Ecrevisse
+            tmp_ecrevisse_absolu = os.path.join(os.getcwd(),tmp_ecrevisse)
+            repe_out_absolu = os.path.join(os.getcwd(),'REPE_OUT')
+            for file in os.listdir(tmp_ecrevisse_absolu):
+                if not file in ['ecrevisse', 'ecrevisse.sh']:
+                    old_file = os.path.join(tmp_ecrevisse_absolu, file)
+                    new_file = os.path.join(repe_out_absolu, str(pref_fic) + '_' + file + '_' + str(Inst_Ecrevisse))
+                    shutil.copy(old_file, new_file)
+
+            # Creation de la table resultat sur toutes les fissures :
+            #  Nom de la fissure
+            nom_fiss = dFISSURE['GROUP_MA'][0] + "-" + dFISSURE['GROUP_MA'][1]
+            __TABFISS_i = __TABFISS_i.EXTR_TABLE()
+            __DEBFISS_i = __DEB_i.EXTR_TABLE()
+            __TABFISS_i["FISSURE"] = [nom_fiss]*nb_lignes_table
+            __DEBFISS_i["FISSURE"] = [nom_fiss]
+
+            if k==0 :
+                __TABFISS_tot = __TABFISS_i
+                __DEBFISS_tot = __DEBFISS_i
+            else :
+                __TABFISS_tot = merge(__TABFISS_tot, __TABFISS_i)
+                __DEBFISS_tot = merge(__DEBFISS_tot, __DEBFISS_i)
+
+
+            if ( debug ):
+                os.system('ls -al ' + os.path.join(os.getcwd(),tmp_ecrevisse) )
+
+#--------------------------------------------------------------
+#           CREATIONS DES CHARGEMENTS ASTER
+
+            # Recuperation des valeurs dans la table (voir si il y a plus simple)
+            _lst_c  = __TABFISS_i.COTES.values()
+            _lst_f  = __TABFISS_i.FLUX.values()
+            _lst_p  = __TABFISS_i.PRESSION.values()
+            _lst_t  = __TABFISS_i.TEMP.values()
+            _lst_cc = __TABFISS_i.COEF_CONV.values()
+
+
+            try:
+                a=len(_lst_c)
+            except:
+                _lst_c = []
+                _lst_f = []
+                _lst_p = []
+                _lst_t = []
+                _lst_cc = []
+            try:
+                if _lst_c[1]==0:
+                    _lst_c = []
+                    _lst_f = []
+                    _lst_p = []
+                    _lst_t = []
+                    _lst_cc = []
+            except:
+                pass
+
+
+
+            # ------------------------------------------------------
+            # Extraction des conditions limites du calcul Ecrevisse
+            #
+            if len(_lst_c)>=2:
+                if not chargeLin :
+                    nbCotes     = len(_l_absz_m)
+                    nbCotesEcre = nbCotes-1
+
+                    # epsilon pour le decalage :
+                    #   le chargement est uniforme par maille
+                    if _X0[1]>=_X0[0] :
+                        epsx = 1.e-8
+                    else :
+                        epsx = -1.e-8
+                    if _Y0[1]>=_Y0[0] :
+                        epsy = 1.e-8
+                    else :
+                        epsy = -1.e-8
+
+                    _lst_x0   = []
+                    _lst_y0   = []
+                    _lst_x0_b = []
+                    _lst_y0_b = []
+                    ly        = []
+                    ly2       = []
+                    ly3       = []
+                    ly4       = []
+
+                    _lst_x0.append(_X0[0])
+                    _lst_y0.append(_Y0[0])
+                    _lst_x0_b.append(_X0_b[0])
+                    _lst_y0_b.append(_Y0_b[0])
+                    ly.append( _lst_f[0] )
+                    ly2.append( _lst_p[0] )
+                    ly3.append( _lst_t[0] )
+                    ly4.append( _lst_cc[0] )
+
+                    for i in range(nbCotes-2):
+                        x = _X0[i+1]
+                        y = _Y0[i+1]
+                        toto1 =  x - epsx
+                        toto2 =  x + epsx
+
+                        _lst_x0.append( x - epsx )
+                        _lst_x0.append( x + epsx )
+                        _lst_y0.append( y - epsy )
+                        _lst_y0.append( y + epsy )
+                        x = _X0_b[i+1]
+                        y = _Y0_b[i+1]
+                        _lst_x0_b.append( x - epsx )
+                        _lst_x0_b.append( x + epsx )
+                        _lst_y0_b.append( y - epsy )
+                        _lst_y0_b.append( y + epsy )
+                        ly.append( _lst_f[i] )
+                        ly.append( _lst_f[i+1] )
+                        ly2.append( _lst_p[i] )
+                        ly2.append( _lst_p[i+1] )
+                        ly3.append( _lst_t[i] )
+                        ly3.append( _lst_t[i+1] )
+                        ly4.append( _lst_cc[i] )
+                        ly4.append( _lst_cc[i+1] )
+
+                    _lst_x0.append( _X0[nbCotes-1] )
+                    _lst_y0.append( _Y0[nbCotes-1] )
+                    _lst_x0_b.append( _X0_b[nbCotes-1] )
+                    _lst_y0_b.append( _Y0_b[nbCotes-1] )
+                    ly.append( _lst_f[nbCotesEcre-1] )
+                    ly2.append( _lst_p[nbCotesEcre-1] )
+                    ly3.append( _lst_t[nbCotesEcre-1] )
+                    ly4.append( _lst_cc[nbCotesEcre-1] )
+                    _lst_f = ly
+                    _lst_p = ly2
+                    _lst_t = ly3
+                    _lst_cc = ly4
+                else :
+                    _lst_x0   = [(x1+x2)*0.5 for (x1,x2) in zip(_X0[0:len(_X0)-1],_X0[1:len(_X0)])]
+                    _lst_y0   = [(x1+x2)*0.5 for (x1,x2) in zip(_Y0[0:len(_Y0)-1],_Y0[1:len(_Y0)])]
+                    _lst_x0_b = [(x1+x2)*0.5 for (x1,x2) in zip(_X0_b[0:len(_X0_b)-1],_X0_b[1:len(_X0_b)])]
+                    _lst_y0_b = [(x1+x2)*0.5 for (x1,x2) in zip(_Y0_b[0:len(_Y0_b)-1],_Y0_b[1:len(_Y0_b)])]
+                    _lst_x0.append(_X0[-1])
+                    _lst_x0_b.append(_X0_b[-1])
+                    _lst_y0.append(_Y0[-1])
+                    _lst_y0_b.append(_Y0_b[-1])
+
+                # ANCIENNE VERSION (TRANSMISSION DES FLUX THERMIQUES
+                if(oldVersion) :
+                    alpha = round(theta)
+                    if DIR_FISS == 'X' :
+                        levre1pos = ((_Y0[0]-_yi)>=0.)
+                        if alpha == -90. :
+                            _lst_x0.reverse()
+                            _lst_p.reverse()
+                            _lst_f.reverse()
+                        _lst_dir = _lst_x0
+                    else :
+                        levre1pos = ((_X0[0]-_xi)>=0.)
+                        if abs(alpha) == 180. :
+                            _lst_y0.reverse()
+                            _lst_p.reverse()
+                            _lst_f.reverse()
+                        _lst_dir = _lst_y0
+
+                    # Creation des listes pour les chargements aster :
+                    #     (x1, y1, x2, y2, ...)
+                    _tmp1=[]
+                    _tmp2=[]
+                    _tmp3=[]
+
+                    for i in range(len(_lst_p)) :
+                        _tmp1.append( _lst_dir[i] )
+                        _tmp2.append( _lst_dir[i] )
+                        _tmp3.append( _lst_dir[i] )
+
+                        _tmp2.append( _lst_p[i] )
+                        if levre1pos :
+                            #_tmp1.append( -1*_lst_f[i] )
+                            #_tmp3.append( _lst_f[i] )
+                            _tmp1.append( _lst_f[i] )
+                            _tmp3.append( -1*_lst_f[i] )
+                        else :
+                            #_tmp1.append( _lst_f[i] )
+                            #_tmp3.append( -1*_lst_f[i] )
+                            _tmp1.append( -1*_lst_f[i] )
+                            _tmp3.append( _lst_f[i] )
+
+
+
+                    # Flux en provenance d'Ecrevisse
+                    _L_F1=DEFI_FONCTION(NOM_PARA=DIR_FISS,
+                                        VALE=_tmp1,
+                                        PROL_GAUCHE='LINEAIRE',
+                                        PROL_DROITE='LINEAIRE');
+
+                    _L_F2=DEFI_FONCTION(NOM_PARA=DIR_FISS,
+                                        VALE=_tmp3,
+                                        PROL_GAUCHE='LINEAIRE',
+                                        PROL_DROITE='LINEAIRE' );
+
+                    if DIR_FISS == 'X':
+                        l_FLUX_REP_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
+                                                                FLUX_Y=_L_F1,))
+                        l_FLUX_REP_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
+                                                                FLUX_Y=_L_F2,))
+                    else :
+                        l_FLUX_REP_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
+                                                                FLUX_X=_L_F1,))
+                        l_FLUX_REP_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
+                                                                FLUX_X=_L_F2,))
+
+                    # Pressions en provenance d'Ecrevisse
+                    _L_P=DEFI_FONCTION(NOM_PARA = DIR_FISS,
+                                        VALE    = _tmp2,
+                                        PROL_GAUCHE = 'LINEAIRE',
+                                        PROL_DROITE = 'LINEAIRE');
+
+                    l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][0],dFISSURE['GROUP_MA'][1]),
+                                                            PRES=_L_P,))
+
+
+
+                # NOUVELLE VERSION
+                else :
+                    # Creation des deux listes (x1, y1, x2, y2, ...)
+                    # On cree trois/six listes :
+                    # Les valeurs sont constant par maille sur les levres de la fissure,
+                    #  _tmp1/_tmp2 = temperature
+                    #  _tmp3/_tmp4 = coefficient d echange
+                    #  _tmp5/_tmp6 = pression
+                    _tmp1=[]
+                    _tmp2=[]
+                    _tmp3=[]
+                    _tmp4=[]
+                    _tmp5=[]
+                    _tmp6=[]
+
+                    for i in range(len(_lst_f)) :
+                        ix = copy(i)
+                        iy = copy(i)
+                        if _X0[1]<_X0[0] :
+                            ix = len(_lst_f)-1-i
+                        if _Y0[1]<_Y0[0] :
+                            iy = len(_lst_f)-1-i
+
+                        if (DIR_PREV=='X'):
+                            _tmp1.append( _lst_x0[ix] )
+                            _tmp1.append( _lst_t[ix] )
+                            _tmp3.append( _lst_x0[ix] )
+                            _tmp3.append( _lst_cc[ix] )
+                            _tmp5.append( _lst_x0[ix] )
+                            _tmp5.append( _lst_p[ix] )
+                            _tmp2.append( _lst_x0_b[ix] )
+                            _tmp2.append( _lst_t[ix] )
+                            _tmp4.append( _lst_x0_b[ix] )
+                            _tmp4.append( _lst_cc[ix] )
+                            _tmp6.append( _lst_x0_b[ix] )
+                            _tmp6.append( _lst_p[ix] )
+                        else :
+                            _tmp1.append( _lst_y0[iy] )
+                            _tmp1.append( _lst_t[iy] )
+                            _tmp3.append( _lst_y0[iy] )
+                            _tmp3.append( _lst_cc[iy] )
+                            _tmp5.append( _lst_y0[iy] )
+                            _tmp5.append( _lst_p[iy] )
+                            _tmp2.append( _lst_y0_b[iy] )
+                            _tmp2.append( _lst_t[iy] )
+                            _tmp4.append( _lst_y0_b[iy] )
+                            _tmp4.append( _lst_cc[iy] )
+                            _tmp6.append( _lst_y0_b[iy] )
+                            _tmp6.append( _lst_p[iy] )
+
+
+
+
+
+                    # Couplage thermique : Temperature et coefficients d'echange en provenance d'Ecrevisse
+                    _L_T1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+                                        VALE=_tmp1,
+                                        PROL_GAUCHE='LINEAIRE',
+                                        PROL_DROITE='LINEAIRE')
+
+                    _L_T2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+                                        VALE=_tmp2,
+                                        PROL_GAUCHE='LINEAIRE',
+                                        PROL_DROITE='LINEAIRE')
+
+                    _L_CC1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+                                        VALE=_tmp3,
+                                        PROL_GAUCHE='LINEAIRE',
+                                        PROL_DROITE='LINEAIRE')
+
+                    _L_CC2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+                                        VALE=_tmp4,
+                                        PROL_GAUCHE='LINEAIRE',
+                                        PROL_DROITE='LINEAIRE')
+
+                    l_ECHANGE_F1.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][0],
+                                                            TEMP_EXT=_L_T1,
+                                                            COEF_H=_L_CC2))
+
+                    l_ECHANGE_F2.append(_F(GROUP_MA=dFISSURE['GROUP_MA'][1],
+                                                            TEMP_EXT=_L_T2,
+                                                            COEF_H=_L_CC2))
+
+                    # Couplage mecanique : Pressions en provenance d'Ecrevisse
+                    _L_P1=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+                                        VALE=_tmp5,
+                                        PROL_GAUCHE='LINEAIRE',
+                                        PROL_DROITE='LINEAIRE')
+
+                    _L_P2=DEFI_FONCTION(NOM_PARA=DIR_PREV,
+                                        VALE=_tmp6,
+                                        PROL_GAUCHE='LINEAIRE',
+                                        PROL_DROITE='LINEAIRE')
+
+                    l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][0]),
+                                                            PRES=_L_P1,))
+                    l_PRES_REP.append(_F(GROUP_MA=(dFISSURE['GROUP_MA'][1]),
+                                                            PRES=_L_P2,))
+
+            # Fin extraction des conditions limites du calcul Ecrevisse
+            # ----------------------------------------------------------
+
+        if debug :
+            print ('FISSURE-'+str(k+1))
+            print  '_lst_c:', len(_lst_c),        _lst_c
+            print  '_lst_f:', len(_lst_f),        _lst_f
+            print  '_lst_p:', len(_lst_p),        _lst_p
+            print  '_lst_t:',  len(_lst_t),       _lst_t
+            print  '_lst_cc:', len(_lst_cc),      _lst_cc
+            print  '_lst_x0:', len(_lst_x0),      _lst_x0
+            print  '_lst_x0_b :', len(_lst_x0_b), _lst_x0_b
+            print  '_lst_y0:', len(_lst_y0),      _lst_y0
+            print  '_lst_y0_b :', len(_lst_y0_b), _lst_y0_b
+            print  '_tmp1 :', len(_tmp1),     _tmp1
+            print  '_tmp2 :', len(_tmp2),     _tmp2
+            print  '_tmp3 :', len(_tmp3),     _tmp3
+            if (not oldVersion) :
+                print '_tmp4 :', len(_tmp4),  _tmp4
+                print '_tmp5 :', len(_tmp5),  _tmp5
+                print '_tmp6 :', len(_tmp6),  _tmp6
+
+        #Fin du boucle sur la fissure for k
+
+
+    # Assemblage des concepts sortants
+    if(oldVersion) :
+        __ECR_F1=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
+                                  FLUX_REP=l_FLUX_REP_F1);
+
+        __ECR_F2=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
+                                  FLUX_REP=l_FLUX_REP_F2);
+    else:
+        __ECR_F1=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
+                                  ECHANGE=l_ECHANGE_F1);
+
+        __ECR_F2=AFFE_CHAR_THER_F(MODELE=MODELE_THER,
+                                  ECHANGE=l_ECHANGE_F2);
+
+    __ECR_P=AFFE_CHAR_MECA_F(MODELE=MODELE_MECA,
+                             PRES_REP=l_PRES_REP);
+
+    # Table resultat
+    try:
+       dprod = __TABFISS_tot.dict_CREA_TABLE()
+       __TAB = CREA_TABLE(**dprod)
+       debprod = __DEBFISS_tot.dict_CREA_TABLE()
+       __DEB = CREA_TABLE(**debprod)
+    except:
+       UTMESS('F','ECREVISSE0_9', valr=[Inst_Ecrevisse])
index 7fdadf8d23cc0ee792c6e43712ef970cb0d5d118..06c2a912979d109cc5faf472c21f282d939be1f4 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF calc_essai_ops Macro  DATE 21/10/2008   AUTEUR NISTOR I.NISTOR 
+#@ MODIF calc_essai_ops Macro  DATE 09/02/2010   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 
 def calc_essai_ops( self,
                     INTERACTIF          = None,
-                    UNITE_FIMEN         = None,
-                    UNITE_RESU          = None,
                     EXPANSION           = None,
-                    MEIDEE_FLUDELA      = None,
-                    MEIDEE_TURBULENT    = None,
                     IDENTIFICATION      = None,
                     MODIFSTRUCT         = None,
                     GROUP_NO_CAPTEURS   = None,
                     GROUP_NO_EXTERIEUR  = None,
-                    RESU_FLUDELA        = None,
-                    RESU_TURBULENT      = None,
                     RESU_IDENTIFICATION = None,
                     RESU_MODIFSTRU      = None,
                     **args):
@@ -74,37 +68,16 @@ def calc_essai_ops( self,
                           "ComptTable" : 0,
                           "TablesOut"  : table_fonction}
 
-    if not RESU_FLUDELA:
-        RESU_FLUDELA = []
-    else:
-        for res in RESU_FLUDELA:
-            table.append(res['TABLE'])
-    out_fludela = {"DeclareOut" : self.DeclareOut,
-                   "TypeTables" : 'TABLE',
-                   "ComptTable" : 0,
-                   "TablesOut" : table}
-
-    if not RESU_TURBULENT:
-        RESU_TURBULENT = []
-    else:
-        for res in RESU_TURBULENT:
-            table.append(res['FONCTION'])
-    out_meideeturb = {"DeclareOut" : self.DeclareOut,
-                      "FoncOut" : table}
-        
     
     # Mode interactif : ouverture d'une fenetre Tk
     if INTERACTIF == "OUI":
         create_interactive_window(self,
-                                  UNITE_FIMEN,
-                                  UNITE_RESU,
-                                  out_fludela,
-                                  out_meideeturb,
                                   out_identification,
                                   out_modifstru)
     else:
         from Meidee.meidee_calcul import MessageBox
         from Meidee.meidee_test import TestMeidee
+        UNITE_RESU=7
         mess = MessageBox(UNITE_RESU)
         mess.disp_mess("Mode non intéractif")
         
@@ -113,14 +86,10 @@ def calc_essai_ops( self,
         # importation des concepts aster existants de la memoire jeveux
         TestMeidee(self,
                    mess,
-                   out_fludela,
-                   out_meideeturb,
                    out_identification,
                    out_modifstru,
                    objects,
                    EXPANSION,
-                   MEIDEE_FLUDELA,
-                   MEIDEE_TURBULENT,
                    IDENTIFICATION,
                    MODIFSTRUCT,
                    GROUP_NO_CAPTEURS,
@@ -162,8 +131,6 @@ def create_tab_mess_widgets(tk, UNITE_RESU):
     
     tabs = TabbedWindow(tabsw, ["Expansion de modeles",
                                 "Modification structurale",
-                                "MEIDEE mono-modal fludela",
-                                "MEIDEE mono-modal turbulent",
                                 "Identification de chargement",
                                 "Parametres de visualisation"])
 
@@ -215,10 +182,6 @@ class FermetureCallback:
 
 
 def create_interactive_window(macro,
-                              UNITE_FIMEN,
-                              UNITE_RESU,
-                              out_fludela,
-                              out_meideeturb,
                               out_identification,
                               out_modifstru):
     """Construit la fenêtre interactive comprenant une table pour 
@@ -228,8 +191,6 @@ def create_interactive_window(macro,
     from Meidee.meidee_cata import MeideeObjects
     from Meidee.meidee_correlation import InterfaceCorrelation
     from Meidee.meidee_modifstruct import InterfaceModifStruct
-    from Meidee.meidee_fludela import InterfaceFludela, InterfaceTurbMonomod
-    from Meidee.meidee_turbulent import InterfaceTurbulent
     from Meidee.meidee_parametres import InterfaceParametres
     
     # fenetre principale
@@ -249,15 +210,10 @@ def create_interactive_window(macro,
     iface = InterfaceCorrelation(main, objects, macro, mess, param_visu)
     imodifstruct = InterfaceModifStruct(main, objects, macro,
                                         mess, out_modifstru, param_visu)
-    fludelamonomod = InterfaceFludela(main, objects,
-                                      get_fimen_files(UNITE_FIMEN), mess, out_fludela, param_visu)
-    turbmonomod = InterfaceTurbMonomod(main, objects,get_fimen_files(UNITE_FIMEN) ,mess, out_meideeturb, param_visu)
     turbulent = InterfaceTurbulent(main, objects, mess, out_identification, param_visu)
     
     tabs.set_tab("Expansion de modeles", iface.main)
     tabs.set_tab("Modification structurale", imodifstruct.main)
-    tabs.set_tab("MEIDEE mono-modal fludela", fludelamonomod )
-    tabs.set_tab("MEIDEE mono-modal turbulent", turbmonomod )
     tabs.set_tab("Identification de chargement", turbulent)
     tabs.set_tab("Parametres de visualisation", param_visu)
     
index ba32578ab19c4e4a99fba5024a2bcd9132a8784a..68b6c630aa95af6e51db6d64cad743d6747114d8 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF calc_europlexus_ops Macro  DATE 28/04/2009   AUTEUR ASSIRE A.ASSIRE 
+#@ MODIF calc_europlexus_ops Macro  DATE 18/11/2009   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -2315,7 +2315,8 @@ class EUROPLEXUS:
   def lancer_calcul(self,fichier_med='auto'):
 
      fichier_epx = self.nom_fichiers['COMMANDE']
-     EXEC_LOGICIEL(LOGICIEL='cd %s ; %s %s ; iret=$? ; cd %s ; exit $iret' % (self.pwd + self.REPE, self.EXEC, fichier_epx, self.pwd),
+     EXEC_LOGICIEL(LOGICIEL='cd %s ; unset TMPDIR ; %s -usetmpdir %s ; iret=$? ; cd %s ; echo "Code_Retour Europlexus : $iret" ; exit 0' % (self.pwd + self.REPE, self.EXEC, fichier_epx, self.pwd),
+                   CODE_RETOUR_MAXI=-1,
                    INFO=2)
 
 
index 2f1353bb917456ab85e20333b3db562bbcbc037e..dabeeb7b11688ba3a1d163cfec1d8f1057870329 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF calc_table_ops Macro  DATE 19/02/2008   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF calc_table_ops Macro  DATE 05/01/2010   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -123,9 +123,9 @@ def calc_table_ops(self, TABLE, ACTION, INFO, **args):
                lpar = [lpar]
             for p in lpar:
                if not p in tab.para:
-                  UTMESS('F','TABLE0_4',valk=[p, TABLE.nom])
+                  UTMESS('F','TABLE0_2',valk=[p, TABLE.nom])
                if not p in tab2.para:
-                  UTMESS('F','TABLE0_5',valk=[p,occ['TABLE'].nom] )
+                  UTMESS('F','TABLE0_2',valk=[p,occ['TABLE'].nom] )
             opts.append(lpar)
          tab = merge(*opts)
    
diff --git a/Aster/Cata/cataSTA9/Macro/defi_fonc_elec_ops.py b/Aster/Cata/cataSTA9/Macro/defi_fonc_elec_ops.py
new file mode 100644 (file)
index 0000000..32daba7
--- /dev/null
@@ -0,0 +1,192 @@
+#@ MODIF defi_fonc_elec_ops Macro  DATE 09/02/2010   AUTEUR MACOCCO K.MACOCCO 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+from math import cos,exp,pi
+
+def FcompletGR1(T,I1,I2,FR,TR,PHI1,PHI2,TAU1,TAU2) :
+    fxt= 4.E-7 * I1 * I2
+    fxt= fxt * (cos(2*pi*FR*(T-TR)+PHI1*pi/180.)-exp(-(T-TR)/TAU1)*cos(PHI1*pi/180.))
+    fxt= fxt * (cos(2*pi*FR*(T-TR)+PHI2*pi/180.)-exp(-(T-TR)/TAU2)*cos(PHI2*pi/180.))
+    return fxt
+
+def FcontinuGR1(T,I1,I2,TR,PHI1,PHI2,TAU1,TAU2) :
+    ft1= exp(-(T-TR)*(1./TAU1+1./TAU2))
+    ft1= ft1*cos(PHI1*pi/180.)*cos(PHI2*pi/180.)
+    ft1= ft1+0.5*cos(PHI2*pi/180.-PHI1*pi/180.)
+    fxt= 4.E-7 * I1 * I2 * ft1
+    return fxt
+
+def FcompletGR2(T,I1,I2,FR,TR,PHI1,PHI2,TAU1,TAU2,D) :
+    fxt= 4.E-7 * I1 * I2 / D
+    fxt= fxt * (cos(2*pi*FR*(T-TR)+PHI1*pi/180.)-exp(-(T-TR)/TAU1)*cos(PHI1*pi/180.))
+    fxt= fxt * (cos(2*pi*FR*(T-TR)+PHI2*pi/180.)-exp(-(T-TR)/TAU2)*cos(PHI2*pi/180.))
+    return fxt
+
+def FcontinuGR2(T,I1,I2,TR,PHI1,PHI2,TAU1,TAU2,D) :
+    ft1= exp(-(T-TR)*(1./TAU1+1./TAU2))
+    ft1= ft1*cos(PHI1*pi/180.)*cos(PHI2*pi/180.)
+    ft1= ft1+0.5*cos(PHI2*pi/180.-PHI1*pi/180.)
+    fxt= 4.E-7 * I1 * I2 * ft1 / D
+    return fxt
+
+## fonction post réenclenchement, valable entre l'instant de réenclenchement et l'instant de fin de réenclenchement. Sinon 0.
+def FcompletGR2R(T,I1R,I2R,FR,TRR,PHIR1,PHI2R,TAU1R,TAU2R,D) :
+    fxt= 4.E-7 * I1R * I2R / D
+    fxt= fxt * (cos(2*pi*FR*(T-TRR)+PHI1R*pi/180.)-exp(-(T-TRR)/TAU1R)*cos(PHI1R*pi/180.))
+    fxt= fxt * (cos(2*pi*FR*(T-TRR)+PHI2R*pi/180.)-exp(-(T-TRR)/TAU2R)*cos(PHI2R*pi/180.))
+    return fxt
+
+## fonction post réenclenchement, valable entre l'instant de réenclenchement et l'instant de fin de réenclenchement. Sinon 0.
+def FcontinuGR2R(T,I1R,I2R,TRR,PHI1R,PHI2R,TAU1R,TAU2R,D) :
+    ft1= exp(-(T-TRR)*(1./TAU1R+1./TAU2R))
+    ft1= ft1*cos(PHI1R*pi/180.)*cos(PHI2R*pi/180.)
+    ft1= ft1+0.5*cos(PHI2R*pi/180.-PHI1R*pi/180.)
+    fxt= 4.E-7 * I1R * I2R * ft1 / D
+    return fxt
+
+
+
+def defi_fonc_elec_ops(self,FREQ,SIGNAL,COUR,COUR_PRIN,COUR_SECO,**args):
+        ier=0
+        from Utilitai.Utmess     import  UTMESS
+        import Numeric
+
+        # On importe les definitions des commandes a utiliser dans la macro
+        # Le nom de la variable doit etre obligatoirement le nom de la commande
+        DEFI_FONCTION     =self.get_cmd('DEFI_FONCTION')
+        FORMULE           =self.get_cmd('FORMULE')
+        CALC_FONC_INTERP  =self.get_cmd('CALC_FONC_INTERP')
+
+        ### Comptage commandes + déclaration concept sortant
+        self.set_icmd(1)
+        self.DeclareOut('C_out',self.sd)
+#
+        if COUR : 
+                TINI =COUR[ 0]['INST_CC_INIT']
+                TFIN =COUR[-1]['INST_CC_FIN']
+                pas_t=1./(40.*FREQ)
+#
+                temps   = []
+                fff     = []
+#
+                T2moins = COUR[0]['INST_CC_FIN']
+                TR      = COUR[0]['INST_CC_INIT']
+                premier = 1
+                for k_cour in COUR :
+                        I1   = k_cour['INTE_CC_1']
+                        I2   = k_cour['INTE_CC_2']
+                        PHI1 = k_cour['PHI_CC_1']
+                        PHI2 = k_cour['PHI_CC_2']
+                        TAU1 = k_cour['TAU_CC_1']
+                        TAU2 = k_cour['TAU_CC_2']
+                        T1   = k_cour['INST_CC_INIT']
+                        T2   = k_cour['INST_CC_FIN']
+                        if (abs(T1-T2moins)<1.E-7) : pass
+                        elif (premier==1)          : pass
+                        else :
+                                TR=T1
+                                temps.append(T2moins)
+                                fff.append(0.)
+                                T2moins=T2
+                        premier=0
+                        t_k_cour=Numeric.arange((T2-T1)/pas_t)
+                        t_k_cour=t_k_cour*pas_t
+                        t_k_cour=t_k_cour+T1
+                        t_k_cour=t_k_cour.tolist()
+                        print T1,T2,FREQ
+                        temps=temps+t_k_cour
+                        if   SIGNAL=='CONTINU' :
+                                for t in t_k_cour :
+                                  fff.append( FcontinuGR1(t,I1,I2,TR,PHI1,PHI2,TAU1,TAU2) )
+                        elif SIGNAL=='COMPLET' :
+                                for t in t_k_cour :
+                                  fff.append(FcompletGR1(t,I1,I2,FREQ,TR,PHI1,PHI2,TAU1,TAU2))
+#
+        elif COUR_PRIN :
+                TINI =COUR_PRIN[0]['INST_CC_INIT']
+                TFIN =COUR_PRIN[0]['INST_CC_FIN']
+#
+                TINIR = COUR_PRIN[0]['INST_RENC_INIT']
+                TFINR = COUR_PRIN[0]['INST_RENC_FIN']
+#
+                pas_t=1./(40.*FREQ)
+#
+                temps   = []
+                fff     = []
+                T2moins = max(TFIN,TFINR)
+                TR      = COUR_PRIN[0]['INST_CC_INIT']
+                TRR     = COUR_PRIN[0]['INST_RENC_INIT']
+                I1      = COUR_PRIN[0]['INTE_CC_1']
+                I1R     = COUR_PRIN[0]['INTE_RENC_1']
+                PHI1    = COUR_PRIN[0]['PHI_CC_1']
+                PHI1R   = COUR_PRIN[0]['PHI_RENC_1']
+                TAU1    = COUR_PRIN[0]['TAU_CC_1']
+                TAU1R   = COUR_PRIN[0]['TAU_RENC_1']
+#
+                fff.append(0.)
+#
+                if (abs(TR-T2moins)<1.E-7) : pass
+                else :
+                        temps.append(0)
+                        t_k_cour=Numeric.arange((T2moins-TR)/pas_t)
+                        t_k_cour=t_k_cour*pas_t
+                        t_k_cour=t_k_cour+TR
+                        t_k_cour=t_k_cour.tolist()
+                        temps=temps+t_k_cour
+#
+                for k_cour in COUR_SECO :
+                        I2    = k_cour['INTE_CC_2']
+                        PHI2  = k_cour['PHI_CC_2']
+                        TAU2  = k_cour['TAU_CC_2']
+                        I2R   = k_cour['INTE_RENC_2']
+                        PHI2R = k_cour['PHI_RENC_2']
+                        TAU2R = k_cour['TAU_RENC_2']
+                        DIST  = k_cour['DIST']
+#
+                        if SIGNAL=='CONTINU' :
+                           for i in range(len(temps)) :
+                               if temps[i]>TINI :
+                                  if temps[i]<TFIN :
+                                     fff[i]=fff[i]+FcontinuGR2(temps[i],I1,I2,TR,PHI1,PHI2,TAU1,TAU2,DIST)
+                               if temps[i]>TINIR :
+                                  if temps[i]<TFINR : 
+                                     fff[i]=fff[i]+FcontinuGR2R(temps[i],I1R,I2R,TRR,PHI1R,PHI2R,TAU1R,TAU2R,DIST)
+#
+                        if SIGNAL=='COMPLET' :
+                           for i in range(len(temps)) :
+                               if temps[i]>TINI :
+                                  if temps[i]<TFIN :
+                                     fff[i]=fff[i]+FcompletGR2(temps[i],I1,I2,TR,PHI1,PHI2,TAU1,TAU2,DIST)
+                               if temps[i]>TINIR :
+                                  if temps[i]<TFINR : 
+                                     fff[i]=fff[i]+FcompletGR2R(temps[i],I1R,I2R,TRR,PHI1R,PHI2R,TAU1R,TAU2R,DIST)
+#
+        vale=[]
+        for i in range(len(temps)) :
+              vale.append(temps[i])
+              vale.append(fff[i])
+        vale.append(temps[-1]+2*pas_t)
+        vale.append(0.)
+#
+        C_out=DEFI_FONCTION(NOM_PARA='INST',NOM_RESU='ELEC',
+                            VALE=vale,
+                            PROL_DROITE='CONSTANT',
+                            PROL_GAUCHE='CONSTANT',)
+        return ier
index 964c2600ec96f4ee830f358d82920369794d0c8b..91a390f41e99ce27b0551a0480c9b11b7ccb569e 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF exec_logiciel_ops Macro  DATE 21/10/2008   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF exec_logiciel_ops Macro  DATE 08/04/2010   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -20,7 +20,8 @@
 
 # RESPONSABLE COURTOIS M.COURTOIS
 
-import os.path
+import os
+import os.path as osp
 import traceback
 import shutil
 from types import ListType, TupleType
@@ -76,17 +77,19 @@ def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO
       dMCF = mcf.cree_dict_valeurs(mcf.mc_liste)
       d_para['fichIN']  = 'fort.%d' % dMCF['UNITE_GEOM']
       d_para['fichOUT'] = 'fort.%d' % dMCF['UNITE']
+      if osp.exists(d_para['fichOUT']):
+         os.remove(d_para['fichOUT'])
       
       if dMCF['FORMAT'] == 'GMSH':
          mode_lancement = CMD_EXTERNE
          cmd = '%(prog)s %(options)s -o %(fichOUT)s %(fichIN)s'
-         d_para['prog'] = os.path.join(aster.repout(), 'gmsh')
+         d_para['prog'] = osp.join(aster.repout(), 'gmsh')
          d_para['options'] = ('-3',)
       
       elif dMCF['FORMAT'] == 'GIBI':
          mode_lancement = CMD_EXTERNE
          cmd = '%(prog)s %(options)s %(fichIN)s %(fichOUT)s'
-         d_para['prog'] = os.path.join(aster.repout(), 'gibi')
+         d_para['prog'] = osp.join(aster.repout(), 'gibi')
       
       elif dMCF['FORMAT'] == 'SALOME':
          mode_lancement = EXECFILE
@@ -117,7 +120,8 @@ def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO
       iret, output, error = ExecCommand(scmd, alt_comment=comment, verbose=False, 
                                         capturestderr=True, separated_stderr=True)
       erreur = iret > CODE_RETOUR_MAXI
-      
+      if CODE_RETOUR_MAXI == -1: erreur = False
+
       # output
       if INFO > 0 or erreur:
          UTMESS('I', 'EXECLOGICIEL0_11', vali=(iret, CODE_RETOUR_MAXI))
@@ -144,7 +148,7 @@ def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO
          txt = open(d_para['fichIN'], 'r').read()
          UTMESS('F', 'EXECLOGICIEL0_5', valk=txt)
       
-      if not os.path.exists(d_para['fichMED']):
+      if not osp.exists(d_para['fichMED']):
          UTMESS('F', 'EXECLOGICIEL0_6', valk=d_para['fichMED'])
       else:
          # copie fichMED vers fichOUT pour pouvoir le récupérer
@@ -160,6 +164,9 @@ def exec_logiciel_ops(self, LOGICIEL, ARGUMENT, MAILLAGE, CODE_RETOUR_MAXI, INFO
       umail = UL.Libre(action='ASSOCIER',
                        nom='exec_logiciel.%s2mail' % dMCF['FORMAT'].lower())
       
+      if not osp.exists(d_para['fichOUT']):
+          UTMESS('F', 'EXECLOGICIEL0_13', valk=dMCF['FORMAT'])
+
       # déclaration du concept maillage en sortie
       self.DeclareOut('mail', dMCF['MAILLAGE'])
       
index 8bfada76224497e8ea60bb516a1bb7a5c1b969f7..e2261d3a8fabb173b703747fcc2e5bfe54a8a5b4 100644 (file)
@@ -1,28 +1,28 @@
-#@ MODIF macr_ecla_pg_ops Macro  DATE 09/11/2004   AUTEUR VABHHTS J.PELLET 
+#@ MODIF macr_ecla_pg_ops Macro  DATE 03/02/2010   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 
 ########################################################################
 def macr_ecla_pg_ops(self,RESULTAT,MAILLAGE,RESU_INIT,MODELE_INIT,
                      TOUT, GROUP_MA, MAILLE,
                      SHRINK, TAILLE_MIN,
-                     NOM_CHAM, TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE, INST, LIST_INST, PRECISION, CRITERE,  
+                     NOM_CHAM, TOUT_ORDRE, NUME_ORDRE, LIST_ORDRE, INST, LIST_INST, PRECISION, CRITERE,
                      **args):
     """
        Ecriture de la macro macr_ecla_pg
@@ -39,33 +39,32 @@ def macr_ecla_pg_ops(self,RESULTAT,MAILLAGE,RESU_INIT,MODELE_INIT,
 
     # La macro compte pour 1 dans la numerotation des commandes
     self.set_icmd(1)
-    
+
 
     # Appel à CREA_MAILLAGE :
     motscles={}
     if   TOUT      : motscles['TOUT']       =TOUT
     if   GROUP_MA  : motscles['GROUP_MA']   =GROUP_MA
     if   MAILLE    : motscles['MAILLE']     =MAILLE
-    
+
     self.DeclareOut('ma2',MAILLAGE)
     ma2=CREA_MAILLAGE(ECLA_PG=_F( MODELE = MODELE_INIT,  NOM_CHAM=NOM_CHAM,
                                   SHRINK = SHRINK, TAILLE_MIN=TAILLE_MIN, **motscles ));
-                                   
-                                   
+
+
 
     # Appel à CREA_RESU :
-    typ2=AsType(RESU_INIT).__name__ 
-    if   TOUT_ORDRE    : motscles['TOUT_ORDRE']     =TOUT_ORDRE
-    if   NUME_ORDRE    : motscles['NUME_ORDRE']     =NUME_ORDRE
-    if   LIST_ORDRE    : motscles['LIST_ORDRE']     =LIST_ORDRE
-    if   LIST_INST     : motscles['LIST_INST']      =LIST_INST
-    if   INST          : motscles['INST']           =INST
-    if   TOUT_ORDRE    : motscles['TOUT_ORDRE']     =TOUT_ORDRE
+    typ2=AsType(RESU_INIT).__name__
+    if   TOUT_ORDRE         : motscles['TOUT_ORDRE']     =TOUT_ORDRE
+    if   NUME_ORDRE != None : motscles['NUME_ORDRE']     =NUME_ORDRE
+    if   LIST_ORDRE         : motscles['LIST_ORDRE']     =LIST_ORDRE
+    if   LIST_INST          : motscles['LIST_INST']      =LIST_INST
+    if   INST != None       : motscles['INST']           =INST
 
     self.DeclareOut('resu2',RESULTAT)
     resu2=CREA_RESU( OPERATION='ECLA_PG', TYPE_RESU=string.upper(typ2),
                     ECLA_PG=_F( MODELE_INIT= MODELE_INIT, RESU_INIT=RESU_INIT, NOM_CHAM=NOM_CHAM,
                                 MAILLAGE= ma2, **motscles ));
-    return ier                                                           
+    return ier
 ############################################################################################
 
diff --git a/Aster/Cata/cataSTA9/Macro/macr_ecre_calc_ops.py b/Aster/Cata/cataSTA9/Macro/macr_ecre_calc_ops.py
new file mode 100644 (file)
index 0000000..d1eca31
--- /dev/null
@@ -0,0 +1,577 @@
+#@ MODIF macr_ecre_calc_ops Macro  DATE 05/05/2010   AUTEUR MACOCCO K.MACOCCO 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+
+
+def macr_ecre_calc_ops(
+  self,
+  TABLE,
+  DEBIT,
+  FISSURE,
+  ECOULEMENT,
+  TEMPERATURE,
+  MODELE_ECRE,
+  CONVERGENCE,
+  LOGICIEL,
+  VERSION,
+  ENTETE,
+  #COURBES,
+  IMPRESSION,
+  INFO,
+  **args):
+
+  """
+     Procedure de couplage Aster-Ecrevisse
+     Generation par Aster du fichier de donnees d'Ecrevisse et lancement d'Ecrevisse
+  """
+
+  import os, string, types, shutil
+  import aster
+  from Accas import _F
+  #from Noyau.N_utils import AsType
+  from Utilitai.Utmess import UTMESS
+  from Utilitai.System import ExecCommand
+
+  ier=0
+
+
+  # PARAMETRES DEBUG
+  debug = True
+
+
+
+  # Concept sortant
+  self.DeclareOut('__TAB',TABLE)
+  self.DeclareOut('__DEB',DEBIT)
+
+  # La macro compte pour 1 dans la numerotation des commandes
+  self.set_icmd(1)
+
+  # Info
+  info2 = (INFO==2)
+  if debug :
+      info2=True
+
+  # Parametres Developpeur
+  tmp_ecrevisse = "tmp_ecrevisse"
+  fichier_data  = "data.dat"
+  defaut        = '00'
+
+  # IMPORTATION DE COMMANDES ASTER
+  EXEC_LOGICIEL  = self.get_cmd("EXEC_LOGICIEL")
+  CREA_TABLE     = self.get_cmd("CREA_TABLE")
+#  IMPR_TABLE     = self.get_cmd("IMPR_TABLE")
+  IMPR_FONCTION  = self.get_cmd("IMPR_FONCTION")
+
+  # RECUPERATION DES MOTS-CLES FACTEURS
+  dFISSURE=FISSURE[0].cree_dict_valeurs(FISSURE[0].mc_liste)
+  for i in dFISSURE.keys():
+    if dFISSURE[i]==None : del dFISSURE[i]
+
+  dECOULEMENT=ECOULEMENT[0].cree_dict_valeurs(ECOULEMENT[0].mc_liste)
+  for i in dECOULEMENT.keys():
+    if dECOULEMENT[i]==None : del dECOULEMENT[i]
+
+  dTEMPERATURE=TEMPERATURE[0].cree_dict_valeurs(TEMPERATURE[0].mc_liste)
+  for i in dTEMPERATURE.keys():
+    if dTEMPERATURE[i]==None : del dTEMPERATURE[i]
+
+  dMODELE_ECRE=MODELE_ECRE[0].cree_dict_valeurs(MODELE_ECRE[0].mc_liste)
+  for i in dMODELE_ECRE.keys():
+    if dMODELE_ECRE[i]==None : del dMODELE_ECRE[i]
+
+  dCONVERGENCE=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
+  for i in dCONVERGENCE.keys():
+    if dCONVERGENCE[i]==None : del dCONVERGENCE[i]
+
+  if debug:
+      print 'dFISSURE = ', dFISSURE
+      print 'dECOULEMENT = ', dECOULEMENT
+      print 'dTEMPERATURE = ', dTEMPERATURE
+      print 'dMODELE_ECRE = ', dMODELE_ECRE
+      print 'dCONVERGENCE = ', dCONVERGENCE
+      print 'ENTETE = ', ENTETE
+      print 'IMPRESSION = ', IMPRESSION
+      print 'INFO = ', INFO
+
+
+
+
+# ---------------------------------------------------------------------
+# CONSTRUCTION DU JEU DE PARAMETRES
+
+  d = {}
+  d[ 0 ] = ENTETE,
+
+  # FISSURE
+  d[ 1 ]  = defaut,
+  d[ 2 ]  = str(len(dFISSURE['LISTE_COTES_AH'])),
+  d[ 3 ]  = dFISSURE['LISTE_COTES_AH'],
+  d[ 4 ]  = dFISSURE['LISTE_VAL_AH'],
+  d[ 5 ]  = str(len(dFISSURE['LISTE_COTES_BL'])),
+  d[ 6 ]  = dFISSURE['LISTE_COTES_BL'],
+  d[ 7 ]  = dFISSURE['LISTE_VAL_BL'],
+  d[ 8 ]  = dFISSURE['LONGUEUR'],
+  d[ 9 ]  = dFISSURE['ANGLE'],
+  d[ 10 ] = dFISSURE['RUGOSITE'],
+  d[ 11 ] = dFISSURE['ZETA'],
+  if dFISSURE['SECTION'] == 'ELLIPSE':
+    d[ 1 ]  = 1,
+  if dFISSURE['SECTION'] == 'RECTANGLE':
+    d[ 1 ]  = 2,
+
+  # ECOULEMENT
+  d[ 20 ] = dECOULEMENT['PRES_ENTREE'],
+  d[ 21 ] = dECOULEMENT['PRES_SORTIE'],
+  d[ 22 ] = dECOULEMENT['FLUIDE_ENTREE'],
+  d[ 23 ] = defaut,
+  d[ 24 ] = defaut,
+  d[ 25 ] = defaut,
+  if dECOULEMENT['FLUIDE_ENTREE'] in [1, 3, 4, 6]:
+    d[ 23 ] = dECOULEMENT['TEMP_ENTREE'],
+  if dECOULEMENT['FLUIDE_ENTREE'] in [2, 5]:
+    d[ 24 ] = dECOULEMENT['TITR_MASS'],
+  if dECOULEMENT['FLUIDE_ENTREE'] in [4, 5]:
+    d[ 25 ] = dECOULEMENT['PRES_PART'],
+
+  # TEMPERATURE
+  d[ 30 ] = defaut,
+  d[ 31 ] = defaut,
+  d[ 32 ] = defaut,
+  d[ 33 ] = defaut,
+  d[ 34 ] = defaut,
+  d[ 35 ] = defaut,
+  d[ 36 ] = defaut,
+  d[ 37 ] = defaut,
+  d[ 38 ] = defaut,
+  d[ 39 ] = defaut,
+  d[ 40 ] = defaut,
+  if dTEMPERATURE['GRADIENT'] == 'FOURNI':
+    d[ 30 ] = -1
+    d[ 31 ] = len(dTEMPERATURE['LISTE_COTES_TEMP'])
+    d[ 32 ] = dTEMPERATURE['LISTE_COTES_TEMP']
+    d[ 33 ] = dTEMPERATURE['LISTE_VAL_TEMP']
+  if dTEMPERATURE['GRADIENT'] == 'IMPOSE':
+    d[ 30 ] = 0
+    d[ 34 ] = dTEMPERATURE['TEMP1']
+    d[ 35 ] = dTEMPERATURE['TEMP2']
+  if dTEMPERATURE['GRADIENT'] == 'CALCULE':
+    d[ 30 ] = 1
+    d[ 36 ] = dTEMPERATURE['EPAISSEUR_PAROI']
+    d[ 37 ] = dTEMPERATURE['CONVECTION_AMONT']
+    d[ 38 ] = dTEMPERATURE['CONVECTION_AVAL']
+    d[ 39 ] = dTEMPERATURE['LAMBDA']
+    d[ 40 ] = dTEMPERATURE['TEMP_FLUIDE_AVAL']
+
+  # MODELE_ECRE
+  d[ 60 ] = defaut,
+  d[ 61 ] = defaut,
+  if dMODELE_ECRE['ECOULEMENT'] == 'SATURATION':
+    d[ 60 ] = 1,
+  if dMODELE_ECRE['ECOULEMENT'] == 'GELE':
+    d[ 60 ] = 2,
+    d[ 61 ] = dMODELE_ECRE['PRESS_EBULLITION'],
+
+  d[ 70 ] = dMODELE_ECRE['FROTTEMENT'],
+  d[ 71 ] = defaut,
+  d[ 72 ] = defaut,
+  d[ 73 ] = defaut,
+  d[ 74 ] = defaut,
+  d[ 75 ] = defaut,
+  if dMODELE_ECRE['FROTTEMENT'] < 0:
+    d[ 71 ] = dMODELE_ECRE['REYNOLDS_LIM'],
+    d[ 72 ] = dMODELE_ECRE['FROTTEMENT_LIM'],
+
+  d[ 73 ] = dMODELE_ECRE['TRANSFERT_CHAL'],
+
+  if dMODELE_ECRE['TRANSFERT_CHAL'] == 0: pass # Pour memoire 3 cas >0, =0, <0
+  if dMODELE_ECRE['TRANSFERT_CHAL']  > 0: pass # Pour memoire 3 cas >0, =0, <0
+  if dMODELE_ECRE['TRANSFERT_CHAL']  < 0:
+    d[74] = dMODELE_ECRE['XMINCH'],
+    d[75] = dMODELE_ECRE['XMAXCH'],
+
+  d[79] = dMODELE_ECRE['IVENAC'],
+
+  if IMPRESSION == 'OUI':
+    d[ 84 ] = 1,
+  if IMPRESSION == 'NON':
+    d[ 84 ] = 0,
+
+  # CONVERGENCE
+  d[ 88 ] = dCONVERGENCE['KGTEST'],
+  d[ 89 ] = dCONVERGENCE['ITER_GLOB_MAXI'],
+  d[ 90 ] = dCONVERGENCE['CRIT_CONV_DEBI'],
+
+  if debug: print d
+
+
+
+
+# ---------------------------------------------------------------------
+# GENERATION DU FICHIER DATA.DAT
+
+  txt = fichier_data_ecrevisse()
+
+  for num_param in d.keys():
+    if type(d[num_param]) in [int, float]:
+      txt0 = str(d[num_param])
+    elif type(d[num_param]) in [tuple, list]:
+      txt0 = str(d[num_param]).replace('(', '')
+      txt0 = txt0.replace(')', '')
+      txt0 = txt0.replace(',', '')
+      txt0 = txt0.replace("'", '')
+      txt0 = txt0.replace("[", '')
+      txt0 = txt0.replace("]", '')
+    else:
+      try:    txt0 = str(d[num_param])
+      except: UTMESS('F','ECREVISSE0_11')
+
+    # On remplace la variable dans le fichier par sa valeur
+    txt = txt.replace( '$V['+str(num_param)+']', txt0 )
+
+  if debug : print txt
+
+
+
+
+# ---------------------------------------------------------------------
+# CREATION DE L'ENVIRONNEMENT D'ETUDE POUR ECREVISSE
+
+
+  # Repertoire temporaire d'execution d'Ecrevisse
+  tmp_ecrevisse = os.path.join(os.getcwd(),tmp_ecrevisse)
+
+  if not os.path.isdir(tmp_ecrevisse) :
+    try :
+      os.mkdir(tmp_ecrevisse)
+    except os.error,erreur :
+      if debug :
+        print "Code d'erreur de mkdir : " + str(erreur[0]) + " : " + str(erreur[1])
+      UTMESS('F','ECREVISSE0_12',valk=[tmp_ecrevisse])
+
+  # On recopie eventuellement l'ancien fichier debits
+  src = os.path.join('.', 'REPE_OUT', 'debits_dernier')
+  dst = os.path.join(tmp_ecrevisse, 'debits')
+  if os.path.isfile(src):
+     try:
+        shutil.copyfile(src, dst)
+     except Exception, e:
+        UTMESS('F','ECREVISSE0_24',valk=[src, dst])
+        #print "ERREUR : copyfile %s -> %s" % (src, dst)
+
+  # Executable Ecrevisse
+  if LOGICIEL :
+    if not os.path.isfile(str(LOGICIEL)):
+      UTMESS('F','ECREVISSE0_13')
+    else:
+      chemin_executable = str(LOGICIEL)
+  else :
+    chemin_executable = os.path.join(aster.repout(), 'ecrevisse')
+    #chemin_executable = os.path.join(aster.repout(),version,'ecrevisse') 
+    if debug :
+      print 'chemin_executable:',chemin_executable
+
+  # Soit on fait un lien symbolique (incompatible avec certaines plate-formes) soit on recopie l'executable
+  if not os.path.isfile(os.path.join(tmp_ecrevisse, 'ecrevisse')):
+    try:
+      os.symlink( chemin_executable, os.path.join(tmp_ecrevisse, 'ecrevisse') )
+    except:
+      UTMESS('A','ECREVISSE0_14')
+      cmd = 'cp ' + chemin_executable + ' ' + os.path.join(tmp_ecrevisse, 'ecrevisse')
+      res = os.system(cmd)
+      os.chmod( os.path.join(tmp_ecrevisse, 'ecrevisse') ,0755)
+      if (res!=0): UTMESS('F','ECREVISSE0_15')
+
+  # Ecriture du fichier de donnees pour Ecrevisse
+  fw = open(os.path.join(tmp_ecrevisse, fichier_data),'w')
+  fw.write(txt)
+  fw.close()
+
+  # Sauvegarde dans REPE_OUT du data.dat
+  os.system('cp ' + tmp_ecrevisse + '/data.dat REPE_OUT/')
+
+
+# ---------------------------------------------------------------------
+# EXECUTION D'ECREVISSE
+
+  # Choix du shell
+  cmd = '#!sh'
+  for shell in ['/bin/sh', '/bin/bash', '/usr/bin/sh']:
+    if os.path.isfile(shell):
+      cmd = '#!' + shell
+      break
+
+#   #Ligne suivante a ajouter avec la version LINUX compilee avec GFORTRAN
+#   cmd = cmd + '\nexport LD_LIBRARY_PATH=/logiciels/aster/Linux/GF4/public/gcc-4.1.1/lib:$LD_LIBRARY_PATH'
+
+  # Creation du contenu du script de lancement ecrevisse.sh
+  cmd = cmd + '\ncd ' + tmp_ecrevisse + '\n' + os.path.join(tmp_ecrevisse, 'ecrevisse') + ' ' + str(VERSION) + '\nset iret=$?\ncd ..\nexit $iret'
+  fw = open(os.path.join(tmp_ecrevisse, 'ecrevisse.sh'),'w')
+  fw.write(cmd)
+  fw.close()
+  os.chmod(os.path.join(tmp_ecrevisse, 'ecrevisse.sh') ,0755)
+
+  # Lancement d'Ecrevisse
+  UTMESS('I','ECREVISSE0_16')
+  res = ExecCommand(os.path.join(tmp_ecrevisse, 'ecrevisse.sh'),follow_output=True,verbose=True)
+  UTMESS('I','ECREVISSE0_17')
+
+
+  if info2: os.system('ls -al ' + tmp_ecrevisse)
+
+
+
+
+# ---------------------------------------------------------------------
+# RECUPERATION DES RESULTATS DEPUIS ECREVISSE
+
+
+  # 1)  5 COLONNES (a partir de ECREVISSE 3.1.e)
+  #       COTE z (m), FLUX THERMIQUE (W/m2), PRESSION TOTALE ABSOLUE (Pa),
+  #       TEMPERATURE FLUIDE (degres C), COEFFICIENT DE CONVECTION (W/m2/K)
+  try:
+      f_ast = open(os.path.join(tmp_ecrevisse, 'pour_aster'),'r')
+      _txt = f_ast.read()
+      f_ast.close()
+      # transforme le texte en liste
+      _lst = _txt.split()
+      # transforme la liste de textes en liste de float
+      _lst = map( float, _lst )
+
+      # ATTENTION : les cotes _ecr_c sont celles des resultats ecrevisse,
+      #              c'est a dire les points de milieu du maillage aster,
+      #              eventuellement multiplies par 1/TORTUOSITE!
+      _ecr_c  = _lst[1:len(_lst):5]
+      _ecr_f  = _lst[2:len(_lst):5]
+      _ecr_p  = _lst[3:len(_lst):5]
+      _ecr_t  = _lst[4:len(_lst):5]
+      _ecr_cc = _lst[5:len(_lst):5]
+
+  except:
+      UTMESS('F','ECREVISSE0_18')
+      _ecr_c  = [-1]
+      _ecr_f  = [-1]
+      _ecr_p  = [-1]
+      _ecr_t  = [-1]
+      _ecr_cc = [-1]
+
+  else:
+      # On elimine les eventuels points en plus
+      #   (cela arrive si la longueur de la fissure est plus grande de la derniere cotes)
+      #   mais on considere quand meme la derniere cote du maillage aster
+      lx_ast = dFISSURE['LISTE_COTES_AH']
+      nbCotesEcre = len(lx_ast)
+      _ecr_c  = _ecr_c[0:nbCotesEcre]
+      _ecr_f  = _ecr_f[0:nbCotesEcre]
+      _ecr_p  = _ecr_p[0:nbCotesEcre]
+      _ecr_t  = _ecr_t[0:nbCotesEcre]
+      _ecr_cc = _ecr_cc[0:nbCotesEcre]
+
+
+
+  # 2)   DEBIT - 5 COLONNES (a partir de ECREVISSE 3.1.e)
+  #          DEBIT TOTAL (kg/s), DEBIT AIR (kg/s), DEBIT VAPEUR (kg/s),
+  #          DEBIT LIQUIDE (kg/s), TYPE ECOULEMENT
+  try:
+      f_deb = open(os.path.join(tmp_ecrevisse, 'debits'),'r')
+      _tex = f_deb.read()
+      f_deb.close()
+      _lis = _tex.split()
+      _lis = map( float, _lis )
+
+      _dtot  = _lis[0:len(_lis):5]
+      _dair  = _lis[1:len(_lis):5]
+      _dvap  = _lis[2:len(_lis):5]
+      _dliq  = _lis[3:len(_lis):5]
+      _ecou  = _lis[4:len(_lis):5]
+
+  except:
+      UTMESS('A','ECREVISSE0_18')
+      _dtot = [-1]
+      _dair = [-1]
+      _dvap = [-1]
+      _dliq = [-1]
+      _ecou = [-1]
+
+
+
+# ---------------------------------------------------------------------
+# CREATION DES SD-TABLE DE RESULTATS
+
+  __TAB=CREA_TABLE(LISTE=(_F(LISTE_R=_ecr_c,
+                           PARA='COTES'),
+                        _F(LISTE_R=_ecr_f,
+                           PARA='FLUX'),
+                        _F(LISTE_R=_ecr_p,
+                           PARA='PRESSION'),
+                        _F(LISTE_R=_ecr_t,
+                           PARA='TEMP'),
+                        _F(LISTE_R=_ecr_cc,
+                           PARA='COEF_CONV'),
+                         ))
+
+  __DEB=CREA_TABLE(LISTE=(_F(LISTE_R=_dtot,
+                           PARA='DEBTOT'),
+                        _F(LISTE_R=_dair,
+                           PARA='DEBAIR'),
+                        _F(LISTE_R=_dvap,
+                           PARA='DEBVAP'),
+                        _F(LISTE_R=_dliq,
+                           PARA='DEBLIQ'),
+                        _F(LISTE_I=_ecou,
+                           PARA='ECOULEMENT'),
+                         ))
+
+
+
+
+# ---------------------------------------------------------------------
+# DEBUG
+  if debug :
+      print 'DEBUT DEBUG MACR_ECRE_CALC'
+      print 'Chargements donnes par Ecrevisse'
+      print 'cotes aster :', lx_ast
+      print '_ecr_c  : min=', min(_ecr_c), ' / max=', max(_ecr_c), ' / ', _ecr_c
+      print '_ecr_f  : min=', min(_ecr_f), ' / max=', max(_ecr_f), ' / ', _ecr_f
+      print '_ecr_p  : min=', min(_ecr_p), ' / max=', max(_ecr_p), ' / ', _ecr_p
+      print '_ecr_t  : min=', min(_ecr_t), ' / max=', max(_ecr_t), ' / ', _ecr_t
+      print '_ecr_cc : min=', min(_ecr_cc), ' / max=', max(_ecr_cc), ' / ', _ecr_cc
+      print '_dtot=', _dtot
+      print '_dair=', _dair
+      print '_dvap=', _dvap
+      print '_dliq=', _dliq
+      print '_ecou=', _ecou
+      print __DEB.EXTR_TABLE()
+      print __TAB.EXTR_TABLE()
+      print 'FIN DEBUG MACR_ECRE_CALC'
+
+
+
+# ---------------------------------------------------------------------
+# RECUPERATION DES RESULTATS OPTIONNELS DEPUIS ECREVISSE
+# A finir
+#  lst_fic = os.listdir(tmp_ecrevisse)
+
+
+
+# ---------------------------------------------------------------------
+# FIN MACR_ECRE_CALC
+  return ier
+
+
+
+
+# ---------------------------------------------------------------------
+def fichier_data_ecrevisse():
+
+  """
+     Modele du fichier data.dat a la syntaxe Ecrevisse 3.0
+     Cette chaine de caractere est l'exacte replique d'un fichier de donnees
+     Ecrevisse 3.0 dans lequel toutes les donnees numeriques ont ete
+     remplacees par $V[x].
+  """
+
+  txt = """$V[0]
+
+
+      DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+      *******************************************
+
+$V[1]        is: type de section  (is=1 ellipse is=2 rectangle)
+$V[2]        nb points decrivant ah: grand axe  (m)
+$V[3]
+$V[4]
+$V[5]        nb points decrivant bl: petit axe (m)
+$V[6]
+$V[7]
+$V[8]        zl: longueur totale de la fissure (m)
+$V[9]        theta: angle par rapport a la verticale ascendante (en degres)
+$V[10]       eps: rugosite absolu (m)
+$V[11]       zeta: coefficient de la perte de charge singuliere a l'entree
+
+      DONNEES RELATIVES A L"ECOULEMENT
+      ********************************
+
+$V[20]       pe: pression de stagnation a l'entree (Pa)
+$V[21]       ps: pression de stagnation a la sortie (Pa)
+$V[22]       iflow : condition du fluide a l'entree
+               iflow=1  : eau sous-refroidie ou saturee
+               iflow=2  : fluide diphasique
+               iflow=3  : vapeur saturee ou surchauffee
+               iflow=4  : air + vapeur surchauffee
+               iflow=5  : air + vapeur saturee
+               iflow=6  : air seul
+$V[23]       te: temperature a l'entree (deg C) (utilise si iflow=1,3,4,6)
+$V[24]       xe: titre m. eau vap/eau tot a l'entree (utilise si iflow=2 ou 5)
+$V[25]       pae : pression partielle air en entree (Pa) (utilise si iflow>3)
+
+      DONNEES RELATIVES AU PROFIL DE TEMPERATURE A TRAVERS LA PAROI
+      *************************************************************
+
+$V[30]       imograd : modele de calcul du gradient de temperature
+               imograd=-1/ distribution imposee de temperature (max 100pts)
+               imograd=0 : profil impose de la temperature
+               imograd=1 : calcul du profil
+$V[31]       cas imograd = -1 : ntmat, nb de points donnes ensuite (max=100)
+$V[32]
+$V[33]
+$V[34]       tm1: grad. temp. paroi le lg de l'ecoul.(utilise si imograd=0) (degC/m)
+$V[35]       tm2: temperature de la paroi a l'entree (utilise si imograd=0) (degC)
+$V[36]       epp: epaisseur de la paroi (utilise si imograd=1) (m)
+$V[37]       alphe: coeff. convection face amont (utilise si imograd=1) (W/degC/m2)
+$V[38]       alphs: coeff. convection face aval  (utilise si imograd=1) (W/degC/m2)
+$V[39]       lambd: conduct. thermique de la paroi (utilise si imograd=1) (W/degC/m)
+$V[40]       ts: temperature du fluide cote aval (utilise si imograd=1) (degC)
+
+      CHOIX DES MODELES
+      *****************
+
+Modeles d'ecoulement diphasique
+-------------------------------
+$V[60]       imod : type de modele d'ecoulement diphasique
+               imod=1 : modele d'ecoulement a saturation a l'entree
+               imod=2 : modele d'ecoulement 'gele' a l'entree
+$V[61]       corrp: press. d'ebullition = corrp*psat(t)
+
+Choix des correlations de frottement et de transfert de chaleur
+---------------------------------------------------------------
+$V[70]       ifrot : frottement (avec : ifrot=1 ou -1 ; sans :  ifrot=0 )
+$V[71]       cas ifrot=-1 : relim = Re limite
+$V[72]       cas ifrot=-1 : frtlim = coeff frottement si Re > relim
+$V[73]       ichal : transfert de chaleur (-2 <= ichal <= 2  ichal=0 ==> Pas d'echange de chaleur)
+$V[74]       cas ichal < 0 : xminch = titre m. gaz avec corr. Chen ou liq pour x<xminch
+$V[75]       cas ichal < 0 : xmaxch = titre m. gaz avec corr. melange pour x>xmaxch
+
+Modelisation de la vena contracta
+---------------------------------
+$V[79]       ivenac : avec = 1, sans = 0
+
+Procedure d'impression
+----------------------
+$V[84]       iprint : impression profils ecran ( oui:1 non:0 )
+
+      DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+      ********************************************
+
+$V[88]       kgtest (0 < kgtest < 1) tel que g=kgtest*gmax+(1-kgtest)*gmin
+$V[89]       itnmax : nombre maximum iterations methode newton
+$V[90]       precdb : critere de convergence en debit
+"""
+
+  return txt
diff --git a/Aster/Cata/cataSTA9/Macro/macr_ecrevisse_ops.py b/Aster/Cata/cataSTA9/Macro/macr_ecrevisse_ops.py
new file mode 100644 (file)
index 0000000..8758d4f
--- /dev/null
@@ -0,0 +1,718 @@
+#@ MODIF macr_ecrevisse_ops Macro  DATE 05/05/2010   AUTEUR MACOCCO K.MACOCCO 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# ======================================================================
+
+def macr_ecrevisse_ops(self,reuse,
+   CONV_CRITERE,
+   TABLE,
+   TEMPER,
+   DEBIT,
+   MODELE_MECA,
+   MODELE_THER,
+   FISSURE,
+   ECOULEMENT,
+   LIST_INST,
+   MODELE_ECRE,
+   CONVERGENCE_ECREVISSE,
+   COURBES,
+   LOGICIEL,
+   VERSION,
+   ENTETE,
+   IMPRESSION,
+   CHAM_MATER,
+   CARA_ELEM,
+   EXCIT_MECA,
+   EXCIT_THER,
+   COMP_INCR,
+   NEWTON,
+   CONVERGENCE,
+   ETAT_INIT,
+   INFO,
+   **args):
+   """
+        Procedure de couplage Aster-Ecrevisse
+        Execution pour tous les pas de temps des calculs thermiques, mecaniques puis hydraulique
+        DecoupageGeneration par Aster du fichier de donnees d'Ecrevisse et lancement d'Ecrevisse
+   """
+
+
+   from Utilitai.Utmess import UTMESS
+   from Utilitai.Table import Table, merge
+   from Accas import _F
+   import os, aster, copy
+
+   ier=0
+   #
+   # La macro compte pour 1 dans la numerotation des commandes
+   self.set_icmd(1)
+
+   # Parametres debug
+   debug = False
+
+   # Info
+   InfoAster = 1
+   info2 = (INFO==2)
+   if debug :
+       info2=True
+
+   # IMPORTATION DE COMMANDES ASTER
+   DEFI_LIST_REEL = self.get_cmd("DEFI_LIST_REEL")
+   THER_LINEAIRE  = self.get_cmd("THER_LINEAIRE")
+   PROJ_CHAMP     = self.get_cmd("PROJ_CHAMP")
+   DETRUIRE       = self.get_cmd("DETRUIRE")
+   AFFE_MATERIAU  = self.get_cmd("AFFE_MATERIAU")
+   STAT_NON_LINE  = self.get_cmd("STAT_NON_LINE")
+   POST_RELEVE_T  = self.get_cmd("POST_RELEVE_T")
+   CALC_ECREVISSE = self.get_cmd("CALC_ECREVISSE")
+   CO             = self.get_cmd("CO")
+   CREA_TABLE     = self.get_cmd("CREA_TABLE")
+   CREA_RESU      = self.get_cmd("CREA_RESU")
+   CREA_CHAMP     = self.get_cmd("CREA_CHAMP")
+
+   # Concepts sortants
+   # TABLE creees par concatenation des tables sorties par CALC_ECREVISSE a chaque iteration
+   self.DeclareOut('TABL_RES',TABLE)
+   self.DeclareOut('DEB_RES',DEBIT)
+   # Concepts sortant: les resultats de STAT_NON_LINE et de THER_LINEAIRE valides vis-a-vis du calcul ecrevisse
+   self.DeclareOut('RTHERM',TEMPER)
+   self.DeclareOut('MECANIC', self.sd)
+
+   IsPoursuite = False
+   IsInit = True
+   # Traitement de l'etat initial en cas de poursuite
+   if ETAT_INIT:
+       dEtatInit=ETAT_INIT[0].cree_dict_valeurs(ETAT_INIT[0].mc_liste)
+       for i in dEtatInit.keys():
+           if dEtatInit[i]==None : del dEtatInit[i]
+       __EVINIT = dEtatInit['EVOL_NOLI']
+       __THINIT = dEtatInit['EVOL_THER']
+       _nume_ordre = dEtatInit['NUME_ORDRE']
+       IsPoursuite= True
+   else :
+       dEtatInit=None
+
+   ## Valeur par defaut du mot cle LOGICIEL
+   #if not LOGICIEL: LOGICIEL = os.path.join(aster.repout(), 'ecrevisse')
+
+   # RECUPERATION DES MOTS-CLES FACTEURS
+
+   l_dFISSURE=[]
+   for fissure in FISSURE:
+      dFISSURE=fissure.cree_dict_valeurs(fissure.mc_liste)
+      for i in dFISSURE.keys():
+         if dFISSURE[i]==None : del dFISSURE[i]
+      l_dFISSURE.append(dFISSURE)
+
+   dECOULEMENT=ECOULEMENT[0].cree_dict_valeurs(ECOULEMENT[0].mc_liste)
+   for i in dECOULEMENT.keys():
+      if dECOULEMENT[i]==None : del dECOULEMENT[i]
+
+   dMODELE_ECRE=MODELE_ECRE[0].cree_dict_valeurs(MODELE_ECRE[0].mc_liste)
+   for i in dMODELE_ECRE.keys():
+      if dMODELE_ECRE[i]==None : dMODELE_ECRE[i]=None #del dMODELE_ECRE[i]
+
+   dCONVERGENCE_ECREVISSE=CONVERGENCE_ECREVISSE[0].cree_dict_valeurs(CONVERGENCE_ECREVISSE[0].mc_liste)
+   for i in dCONVERGENCE_ECREVISSE.keys():
+      if dCONVERGENCE_ECREVISSE[i]==None : del dCONVERGENCE_ECREVISSE[i]
+
+   dCOMP_INCR=COMP_INCR[0].cree_dict_valeurs(COMP_INCR[0].mc_liste)
+   for i in dCOMP_INCR.keys():
+      if dCOMP_INCR[i]==None : del dCOMP_INCR[i]
+
+   dNEWTON=NEWTON[0].cree_dict_valeurs(NEWTON[0].mc_liste)
+   for i in dNEWTON.keys():
+      if dNEWTON[i]==None : del dNEWTON[i]
+
+   dCONVERGENCE=CONVERGENCE[0].cree_dict_valeurs(CONVERGENCE[0].mc_liste)
+   for i in dCONVERGENCE.keys():
+      if dCONVERGENCE[i]==None : del dCONVERGENCE[i]
+
+   # Recuperation des infos pour la convergence de la macro
+   dMacr_Conv = CONV_CRITERE[0].cree_dict_valeurs(CONV_CRITERE[0].mc_liste)
+   for i in dMacr_Conv.keys():
+      if dMacr_Conv[i]==None : del dMacr_Conv[i]
+
+   motclefsCALC_ECREVISSE = {}
+   motclefsCALC_ECREVISSE['COURBES'] = COURBES,
+
+
+
+
+
+   # -----------------------------------------------------------------------------------------------------
+   # Debut de la macro
+
+   # Si LIST_INST est un DEFI_LIST_REEL :
+   _liste_inst = LIST_INST.Valeurs()
+   if (debug):
+      print 'liste des instants liste_inst = ', _liste_inst
+
+   # Drapeaux pour les 1ers calculs et les 1eres definitions
+   IsDefineMaterMeca  = False
+   EcrevisseExe       = False  # si l'execution d'Ecrevisse n'a pas plantee ou a ete realisee
+
+   # Table python devant contenir toutes les tables Ecrevisse
+   T_TABL_RES = None
+   T_DEB_RES  = None
+   # Precision demandee pour converger sur le critere de la macro
+   # Nombre de decoupages succesifs d'un pas de temps
+   # Pas de temps en dessous duquel on ne decoupe plus
+   if dMacr_Conv.has_key('SUBD_NIVEAU'):
+       MacrNbDecoupage   = dMacr_Conv['SUBD_NIVEAU']
+   if dMacr_Conv.has_key('SUBD_PAS_MINI'):
+       MacrPasMini       = dMacr_Conv['SUBD_PAS_MINI']
+   MacrTempRef       = dMacr_Conv['TEMP_REF']
+   MacrPresRef       = dMacr_Conv['PRES_REF']
+   MacrCritere       = dMacr_Conv['CRITERE']
+   if dMacr_Conv.has_key('PREC_CRIT'):
+      MacrPrecisCritere = dMacr_Conv['PREC_CRIT']
+   else:
+      MacrPrecisCritere = None
+   if dMacr_Conv.has_key('NUME_ORDRE_MIN'):
+      MacrNumeOrdre     = dMacr_Conv['NUME_ORDRE_MIN']
+
+   #
+   # il faut 2 pas au minimum dans la liste
+   if (len(_liste_inst) < 2 ):
+      UTMESS('F','ECREVISSE0_20', vali=[2])
+
+   if (not IsPoursuite) :
+     _nume_ordre = 0
+   else :
+     # Dans le cas d'une poursuite :
+     # n reconstruit une nouvelle liste d'instant composee de l'ancienne liste jusqu'a l'instant recherche,
+     # puis de la nouvelle a partir de cet instant
+     # ainsi le _nume_ordre de la nouvelle liste correspond au nume_ordre de l'ancienne
+     __dico1 = __THINIT.LIST_VARI_ACCES()
+     _list_precedente = __dico1['INST']
+     _inst_init  = _list_precedente[_nume_ordre-1]
+     try:
+        # si l'instant est dans la liste, on recupere l'index
+        _idx = _liste_inst.index(_inst_init)
+     except:
+        # on cherche le plus proche
+        idx = 0
+        found = False
+        for t in _liste_inst:
+           if t > _inst_init:
+              found = True
+              idx += 1
+              break
+           idx += 1
+     new_list = _list_precedente[0:_nume_ordre]  # liste precedent jusqu'a l'instant a recalculer (inclu, ca permet de gerer le cas ou l'instant a recalculer n'est pas dans la nouvelle liste : il sera ajoute)
+     new_list.extend( _liste_inst[_idx+1:] )  # on lui ajoute la nouvelle liste a partir du l'instant a recalculer
+     _liste_inst = copy.copy(new_list)
+
+   ########################################################################################
+   # Debut boucle sur la liste d'instant
+   ########################################################################################
+   FinBoucle = False
+   while ( not FinBoucle ):
+      _inst      = _liste_inst[_nume_ordre]
+      if ( debug ):
+          print 'Instant debut boucle', _inst
+      # On boucle jusqu'a convergence
+      NbIter = 0
+      while True:
+
+
+         if ( (not IsPoursuite) or EcrevisseExe) :
+         # Le temps que l'on traite
+           _inst_p_un = _liste_inst[_nume_ordre+1]
+           IsInitEcre= False
+           # Construction de la liste des pas
+           LES_PAS = DEFI_LIST_REEL( VALE=_liste_inst, )
+           if (debug):
+              print '=====> ===== ===== ===== <===='
+              print 'Iteration numero : ', NbIter
+              print 'Instant          : ', _inst
+              print 'Instant+1        : ', _inst_p_un
+              print 'nume_ordre       : ', _nume_ordre+1
+              print 'Donnee Ecrevisse : ', EcrevisseExe
+
+           # ---------------------
+           #        THERMIQUE
+           # ---------------------
+           # Recuperation des chargements thermiques
+           _dEXCIT_THER = []
+           if EXCIT_THER:
+             for excit_i in EXCIT_THER:
+               dEXCIT_THER_i = excit_i.cree_dict_valeurs(excit_i.mc_liste)
+               for j in dEXCIT_THER_i.keys():
+                  if dEXCIT_THER_i[j]==None : del dEXCIT_THER_i[j]
+               _dEXCIT_THER.append(dEXCIT_THER_i)
+
+         #
+         # Definition des chargements thermiques venant d Ecrevisse
+           if ( EcrevisseExe ):
+              _dEXCIT_THER.append( _F(CHARGE=FLU1ECR0) )
+              _dEXCIT_THER.append( _F(CHARGE=FLU2ECR0) )
+
+           # Definition de l'etat initial
+           motclefs = {}
+           if (_nume_ordre == 0) :
+              # On verifie que temp_ref est bien renseigne dans AFFE_MATERIAU
+              try:
+                 tref = CHAM_MATER['AFFE_VARC']['VALE_REF']
+              except:
+                 UTMESS('F','ECREVISSE0_22',)
+
+              motclefs['ETAT_INIT']=[_F(VALE=tref, NUME_ORDRE=_nume_ordre)]
+              if ( debug ):
+                 print 'thermique initialise avec tref'
+           else:
+              if (IsInit) :
+                 motclefs['reuse']=__THINIT
+                 motclefs['ETAT_INIT']=[_F(EVOL_THER=__THINIT,  NUME_ORDRE=_nume_ordre)]
+                 if (debug):
+                    print 'thermique initialise avec etat_initial'
+              else :
+                 motclefs['reuse']=RTHERM
+                 motclefs['ETAT_INIT']=[_F(EVOL_THER=RTHERM,  NUME_ORDRE=_nume_ordre)]
+                 if (debug):
+                    print 'thermique initialise avec instant precedent'
+
+           if (debug):
+              print '====> THER_LINEAIRE <===='
+              print '   Les charges thermiques'
+              print EXCIT_THER
+         #
+           if IsPoursuite :
+              __THINIT = THER_LINEAIRE(
+                MODELE     = MODELE_THER,
+                CHAM_MATER = CHAM_MATER,
+                EXCIT      = _dEXCIT_THER,
+                INCREMENT  = _F(LIST_INST=LES_PAS, NUME_INST_INIT=_nume_ordre, NUME_INST_FIN=_nume_ordre+1,),
+                ARCHIVAGE  = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
+                INFO       = InfoAster,
+                **motclefs )
+
+              RTHERMPJ=PROJ_CHAMP(RESULTAT=__THINIT, MODELE_1=MODELE_THER, MODELE_2=MODELE_MECA,
+                     VIS_A_VIS=_F(TOUT_1='OUI', TOUT_2='OUI',),
+                     INFO=2,
+                      )
+              RTHERM=__THINIT
+           else :
+              RTHERM=THER_LINEAIRE(
+               MODELE     = MODELE_THER,
+               CHAM_MATER = CHAM_MATER,
+               EXCIT      = _dEXCIT_THER,
+               INCREMENT  = _F(LIST_INST=LES_PAS, NUME_INST_INIT=_nume_ordre, NUME_INST_FIN=_nume_ordre+1,),
+               ARCHIVAGE  = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
+               INFO       = InfoAster,
+               **motclefs
+               )
+
+           # Projection du champ thermique, a tous les instants sinon pas de deformations thermiques
+              RTHERMPJ=PROJ_CHAMP(RESULTAT=RTHERM, MODELE_1=MODELE_THER, MODELE_2=MODELE_MECA,
+                VIS_A_VIS=_F(TOUT_1='OUI', TOUT_2='OUI',),
+                INFO=2,
+                 )
+
+         # Definition du materiau pour la mecanique : a faire une seule fois
+           if ( not IsDefineMaterMeca ):
+              motclefmater = {}
+              motclefmater['AFFE'] = []
+              motclefmater['AFFE_VARC'] = []
+
+              for j in CHAM_MATER['AFFE_VARC'] :
+                 dvarc = j.cree_dict_valeurs(j.mc_liste)
+                 for mc, val in dvarc.items():
+                    if val == None:
+                       del dvarc[mc]
+                 motclefmater['AFFE_VARC'].append(dvarc)
+
+              for j in CHAM_MATER['AFFE'] :
+                 daffe = j.cree_dict_valeurs(j.mc_liste)
+                 for mc, val in daffe.items():
+                    if val == None:
+                       del daffe[mc]
+                 motclefmater['AFFE'].append(daffe)
+
+
+              dvarc['EVOL'] = RTHERMPJ
+              motclefmater['MAILLAGE'] = CHAM_MATER['MAILLAGE']
+              __MATMEC=AFFE_MATERIAU(
+                 **motclefmater
+              )
+              IsDefineMaterMeca = True
+
+           # ---------------------
+           #        MECANIQUE
+           # ---------------------
+           _dEXCIT_MECA = []
+           # Recuperation des chargements mecaniques
+           if EXCIT_MECA:
+              for excit_i in EXCIT_MECA:
+                 dEXCIT_MECA_i = excit_i.cree_dict_valeurs(excit_i.mc_liste)
+                 for j in dEXCIT_MECA_i.keys():
+                    if dEXCIT_MECA_i[j]==None : del dEXCIT_MECA_i[j]
+                 _dEXCIT_MECA.append(dEXCIT_MECA_i)
+
+
+           # Definition des chargements venant d'Ecrevisse
+           if ( EcrevisseExe ):
+              _dEXCIT_MECA.append( _F(CHARGE=MECAECR0) )
+
+           motclefs = {}
+
+           if (not IsPoursuite) :
+             if (_nume_ordre != 0):
+                motclefs['reuse'] = MECANIC
+                motclefs['ETAT_INIT']=[_F(EVOL_NOLI=MECANIC, NUME_ORDRE=_nume_ordre)]
+                if (debug):
+                   print 'etat meca initial = pas precedent'
+             else:
+                if (debug):
+                   print 'etat meca initial : vierge'
+           else:
+              motclefs['reuse']=__EVINIT
+              motclefs['ETAT_INIT']=[_F(EVOL_NOLI=__EVINIT, NUME_ORDRE=_nume_ordre)]
+              if (debug):
+                 print 'etat meca initial dReuseM', motclefs
+
+           if (debug):
+              print '====> STAT_NON_LINE <===='
+           if (debug):
+              print '   Les charges mecaniques'
+              print _dEXCIT_MECA
+
+
+           MECANIC=STAT_NON_LINE(
+              MODELE      = MODELE_MECA,
+              CHAM_MATER  = __MATMEC,
+              CARA_ELEM   = CARA_ELEM,
+              EXCIT       = _dEXCIT_MECA,
+              COMP_INCR   = _F(**dCOMP_INCR),
+              INCREMENT   = _F(LIST_INST=LES_PAS, NUME_INST_INIT=_nume_ordre, NUME_INST_FIN=_nume_ordre+1,),
+              NEWTON      = _F(**dNEWTON),
+              CONVERGENCE = _F(**dCONVERGENCE),
+              SOLVEUR     = _F(SYME='OUI'),
+              ARCHIVAGE   = _F(NUME_INIT=_nume_ordre+1,DETR_NUME_SUIV='OUI'),
+              INFO        = InfoAster,
+              **motclefs
+           )
+           # Destruction des concepts
+           #  Thermique projete
+           #  Liste des pas
+           DETRUIRE( CONCEPT=(_F(NOM=RTHERMPJ),_F(NOM=LES_PAS),),INFO=1,ALARME='NON',)
+
+         else :
+           #      CAS OU LA MACRO EST REENTRANTE : ON RELANCE ECREVISSE POUR CONNAITRE
+           #     LES CHARGEMENT A UTILISER POUR LES PROBLEMES THERMIQUES ET MECANIQUES
+           _inst_p_un=_inst
+           IsInitEcre = True
+
+         # -----------------------------------------------------------------------
+         #        ECREVISSE : ATTENTION SI REPRISE CALCUL, ON RECALCULE LE DERNIER INSTANT
+         # -------------------------------------------------------------------------
+         # Si Ecrevisse a deja ete fait une fois.
+         #   ==> Efface les concepts qui sont en sortie
+         if ( EcrevisseExe ):
+            DETRUIRE(
+               CONCEPT=(
+                  _F(NOM=MECAECR1),
+                  _F(NOM=FLU1ECR1),
+                  _F(NOM=FLU2ECR1),
+                  _F(NOM=TABLECR1),
+                  _F(NOM=DEBIECR1),
+               ),INFO=1,ALARME='NON',
+            )
+
+         # On remplace FONC_XXX par la valeur XXX correspondante a l'instant _inst_p_un
+         dECOULEMENT_ecrevisse = copy.copy(dECOULEMENT)
+         for fonc_name in ["PRES_ENTREE_FO", "PRES_SORTIE_FO", "PRES_PART_FO", "TITR_MASS_FO", "TEMP_ENTREE_FO"]:
+            if dECOULEMENT.has_key(fonc_name):
+               fonc = dECOULEMENT_ecrevisse.pop(fonc_name)
+               vale_name = fonc_name.replace('_FO', '')
+               dECOULEMENT_ecrevisse[vale_name] = fonc(_inst_p_un)
+
+
+         # Initialisation des concepts en sortie
+         MECAECR1=CO('MECAECR1')
+         FLU1ECR1=CO('FLU1ECR1')
+         FLU2ECR1=CO('FLU2ECR1')
+         TABLECR1=CO('TABLECR1')
+         DEBIECR1=CO('DEBIECR1')
+
+         if (debug):
+            print '====> ECREVISSE entree dans CALC_ECREVISSE <===='
+
+         if (not IsPoursuite) :
+
+           CALC_ECREVISSE(
+              CHARGE_MECA      = MECAECR1,
+              CHARGE_THER1     = FLU1ECR1,
+              CHARGE_THER2     = FLU2ECR1,
+              TABLE            = TABLECR1,
+              DEBIT            = DEBIECR1,
+              MODELE_MECA      = MODELE_MECA,
+              MODELE_THER      = MODELE_THER,
+              ENTETE           = ENTETE,
+              IMPRESSION       = IMPRESSION,
+              INFO             = INFO,
+              RESULTAT=_F(THERMIQUE  = RTHERM,
+                        MECANIQUE  = MECANIC,
+                        INST       = _inst_p_un, ),
+              # chemin d acces a Ecrevisse
+              LOGICIEL         = LOGICIEL,
+              VERSION          = VERSION,
+              # donnees necessaire pour ecrevisse
+              # assurer la coherence des donnees en fonction de FLUIDE_ENTREE = iflow (voir doc Ecrevisse)
+              # activation eventuelle de TITR_VA et P_AIR
+
+              FISSURE=l_dFISSURE,
+              ECOULEMENT=_F( **dECOULEMENT_ecrevisse ),
+              MODELE_ECRE=_F( **dMODELE_ECRE),
+
+              CONVERGENCE=_F( **dCONVERGENCE_ECREVISSE ),
+              **motclefsCALC_ECREVISSE
+              );
+         else :
+           CALC_ECREVISSE(
+              CHARGE_MECA      = MECAECR1,
+              CHARGE_THER1     = FLU1ECR1,
+              CHARGE_THER2     = FLU2ECR1,
+              TABLE            = TABLECR1,
+              DEBIT            = DEBIECR1,
+              MODELE_MECA      = MODELE_MECA,
+              MODELE_THER      = MODELE_THER,
+              ENTETE           = ENTETE,
+              IMPRESSION       = IMPRESSION,
+              INFO             = INFO,
+              RESULTAT=_F(THERMIQUE  = __THINIT,
+                          MECANIQUE  = __EVINIT,
+                          INST       = _inst_p_un, ),
+              # chemin d acces a Ecrevisse
+              LOGICIEL         = LOGICIEL,
+              VERSION          = VERSION,
+              # donnees necessaire pour ecrevisse
+              # assurer la coherence des donnees en fonction de FLUIDE_ENTREE = iflow (voir doc Ecrevisse)
+              # activation eventuelle de TITR_VA et P_AIR
+
+              FISSURE=l_dFISSURE,
+              ECOULEMENT=_F( **dECOULEMENT_ecrevisse ),
+              MODELE_ECRE=_F( **dMODELE_ECRE),
+
+              CONVERGENCE=_F( **dCONVERGENCE_ECREVISSE ),
+              **motclefsCALC_ECREVISSE
+              );
+
+         if (debug):
+            print '====> ECREVISSE sortie de CALC_ECREVISSE <===='
+
+
+         # Recuperation des infos de la table resultat Ecrevisse
+         T_TABL_TMP1 = TABLECR1.EXTR_TABLE()
+         T_DEB_TMP1  = DEBIECR1.EXTR_TABLE()
+#         # On ajoute deux colonnes supplementaires
+#         _nb_ligne = len(T_DEB_TMP1["DEBTOT"])
+#         T_DEB_TMP1["NUME_ORDRE"] = [_nume_ordre+1]*_nb_ligne
+#         T_DEB_TMP1["INST"]       = [_inst_p_un]*_nb_ligne
+
+         # Le calcul Ecrevisse c'est bien passe ?
+         EcrevisseExe = ( T_TABL_TMP1.values()['COTES'][0] != -1 )
+         #
+         if ( not EcrevisseExe ):
+            # Destruction des concepts de sortie, et on arrete tout
+            DETRUIRE(
+               CONCEPT=( _F(NOM=MECAECR1),
+                         _F(NOM=FLU1ECR1),
+                         _F(NOM=FLU2ECR1),
+                         _F(NOM=TABLECR1),
+                         _F(NOM=DEBIECR1),
+               ),
+               INFO=1,ALARME='NON',
+            )
+            if ( not IsInit ):
+               DETRUIRE(
+                  CONCEPT=( _F(NOM=MECAECR0),
+                            _F(NOM=FLU1ECR0),
+                            _F(NOM=FLU2ECR0),
+                            _F(NOM=TABLECR0),
+                            _F(NOM=DEBIECR0),
+                  ),
+                  INFO=1,ALARME='NON',
+               )
+            FinBoucle = True
+            break
+         #
+         # A t'on atteint la convergence
+         #  TABLECR0 table Ecrevisse a _inst
+         #  TABLECR1 table Ecrevisse a _inst_p_un
+         # --------------------
+
+         if ( not IsInit ):
+            # On recupere la liste des temperatures a t et t+1
+            lst_T_0 = T_TABL_TMP0.values()['TEMP']
+            lst_T_1 = T_TABL_TMP1.values()['TEMP']
+            # Le maximum des ecarts
+            lst_T_diff_01 = []
+            for v1, v2 in zip(lst_T_0,lst_T_1):
+               lst_T_diff_01.append(abs(v1-v2))
+            max_T_diff_01 = max(lst_T_diff_01)
+
+            # On recupere la liste des pressions a t et t+1
+            lst_P_0 = T_TABL_TMP0.values()['PRESSION']
+            lst_P_1 = T_TABL_TMP1.values()['PRESSION']
+            # Le maximum des ecarts
+            lst_P_diff_01 = []
+            for v1, v2 in zip(lst_P_0,lst_P_1):
+               lst_P_diff_01.append(abs(v1-v2))
+            max_P_diff_01 = max(lst_P_diff_01)
+            #
+            # "TEMP_PRESS","EXPLICITE","TEMP","PRESS"
+            ErreurT = (max_T_diff_01/MacrTempRef)
+            ErreurP = (max_P_diff_01/MacrPresRef)
+            ErreurG = (ErreurT**2+ErreurP**2)**0.5
+            if   ( MacrCritere == 'TEMP' ):
+               Erreur = ErreurT
+            elif ( MacrCritere == 'PRESS' ):
+               Erreur = ErreurP
+            else:
+               Erreur = ErreurG
+
+            if ( MacrCritere != 'EXPLICITE' ):
+               Convergence = ( Erreur <= MacrPrecisCritere )
+            #
+            if info2 :
+                # Info Critere
+                UTMESS('I', 'ECREVISSE0_35', valr=[_inst_p_un], valk=[MacrCritere,MacrPrecisCritere,Convergence])
+                # Info Convergence
+                UTMESS('I', 'ECREVISSE0_34', valr=[_inst_p_un,ErreurT,max_T_diff_01,ErreurP,max_P_diff_01,ErreurG])
+
+         else:
+            Convergence = True
+            if info2 :
+                UTMESS('I', 'ECREVISSE0_36', valr=[_inst_p_un])
+         # --------------------
+         #
+
+
+         if ( MacrCritere == 'EXPLICITE' ):
+            Convergence = True
+         else:
+            if ( (_nume_ordre != 0) and (_nume_ordre+1 <= MacrNumeOrdre) ):
+               UTMESS('A','ECREVISSE0_33', vali=[_nume_ordre+1,MacrNumeOrdre],valr=[_inst_p_un])
+               Convergence = True
+
+         if ( Convergence ):
+            nb_lignes_t1 = len(T_TABL_TMP1["COTES"])
+            # Ajout de deux colonnes supplementaires
+            # POUR LA TABLE ECREVISSE
+            T_TABL_TMP1["NUME_ORDRE"] = [_nume_ordre+1]*nb_lignes_t1
+            T_TABL_TMP1["INST"]       = [_inst_p_un]*nb_lignes_t1
+
+            # POUR LA TABLE DES DEBITS
+            nb_ligne_t2 = len(T_DEB_TMP1["DEBTOT"])
+            T_DEB_TMP1["NUME_ORDRE"] = [_nume_ordre+1]*nb_ligne_t2
+            T_DEB_TMP1["INST"]       = [_inst_p_un]*nb_ligne_t2
+
+            #
+            # Ajout des infos dans la table finale
+            if ( IsInit ):
+               T_TABL_RES = T_TABL_TMP1
+               T_DEB_RES  = T_DEB_TMP1
+            else:
+               T_TABL_RES = merge(T_TABL_RES, T_TABL_TMP1)
+               T_DEB_RES = merge(T_DEB_RES, T_DEB_TMP1)
+               T_TABL_RES.titr = 'TABLE_SDASTER CHARGEMENT ECREVISSE'
+               T_DEB_RES.titr = 'TABLE_SDASTER DEBIT ECREVISSE'
+            #
+            # RAZ des compteurs de division
+            NbIter = 0
+            # On memorise les concepts valides
+            MECAECR0 = MECAECR1
+            FLU1ECR0 = FLU1ECR1
+            FLU2ECR0 = FLU2ECR1
+            TABLECR0 = TABLECR1
+            DEBIECR0 = DEBIECR1
+            #
+            T_TABL_TMP0 = T_TABL_TMP1
+            if (not IsInitEcre) :
+              IsInit = False
+            if (info2):
+              UTMESS('I','ECREVISSE0_37', valr=[_inst_p_un])
+            break
+
+         else:
+            NbIter += 1
+            # A t'on le droit de decouper, par rapport au nombre de division
+            if ( NbIter > MacrNbDecoupage ):
+               FinBoucle = True
+               UTMESS('A','ECREVISSE0_30', valr=[_inst,_inst_p_un],vali=[MacrNbDecoupage])
+               break
+            #
+            # on divise le pas de temps par 2
+            tmp = (_inst + _inst_p_un )*0.5
+            # A t'on le droit de continuer, par rapport au pas de temps minimum
+            if ( (tmp - _inst) <= MacrPasMini ):
+               FinBoucle = True
+               UTMESS('A','ECREVISSE0_31', valr=[_inst,_inst_p_un,tmp,MacrPasMini])
+               break
+            #
+            if ( info2 ):
+               UTMESS('A','ECREVISSE0_32', valr=[_inst,_inst_p_un,tmp],vali=[NbIter])
+            # on insere le nouveau temps dans la liste des instants avant "_inst_p_un"
+            _liste_inst.insert(_nume_ordre+1,tmp)
+
+
+      # Convergence atteinte, on passe au pas de temps suivant, s'il en reste
+      if IsInitEcre :
+         continue
+      elif (_nume_ordre + 2 < len(_liste_inst)):
+         _nume_ordre += 1
+      else:
+         # On a fait tous les pas de temps
+         FinBoucle = True
+   #######################################################################################
+   #     Fin boucle sur les pas de temps
+   #######################################################################################
+
+   # Creation du concept de la table en sortie
+   if ( T_TABL_RES != None ):
+      dprod = T_TABL_RES.dict_CREA_TABLE()
+      TABL_RES = CREA_TABLE(**dprod)
+   if ( T_DEB_RES != None ):
+      debprod = T_DEB_RES.dict_CREA_TABLE()
+      DEB_RES = CREA_TABLE(**debprod)
+
+   # Destruction des concepts temporaires
+   DETRUIRE(
+            CONCEPT=( _F(NOM=MECAECR1),
+                      _F(NOM=FLU1ECR1),
+                      _F(NOM=FLU2ECR1),
+                      _F(NOM=TABLECR1),
+                      _F(NOM=DEBIECR1),
+            ),
+            INFO=1,ALARME='NON',
+   )
+
+   if (_nume_ordre != 0 ):
+       DETRUIRE(
+                CONCEPT=( _F(NOM=MECAECR0),
+                          _F(NOM=FLU1ECR0),
+                          _F(NOM=FLU2ECR0),
+                          _F(NOM=TABLECR0),
+                          _F(NOM=DEBIECR0),
+                ),
+                INFO=1,ALARME='NON',
+       )
+
+   return ier
index fd7078e5f54da7f3e08f87823f8fffa193a83b7c..bcca4fb65912ab5ebbf37f713b4a5d4f6ad22783 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macr_lign_coupe_ops Macro  DATE 07/10/2008   AUTEUR PELLET J.PELLET 
+#@ MODIF macr_lign_coupe_ops Macro  DATE 08/04/2010   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 
 ########################################################################
 # script PYTHON de creation du résultat local
+########################################################################
+
+########################################################################
+# verification que les points de la ligne de coupe sont dans la matiere
+def crea_grp_matiere(self,groupe,newgrp,iocc,m,__remodr,NOM_CHAM,LIGN_COUPE,__macou):
+
+  import aster
+  import os,string,types
+  from Accas import _F
+  from Noyau.N_utils import AsType
+  from Utilitai.Utmess import  UTMESS
+  import os
+  POST_RELEVE_T = self.get_cmd('POST_RELEVE_T')
+  DEFI_GROUP    = self.get_cmd('DEFI_GROUP')
+
+  motscles={}
+  if m['NOM_CMP']!=None:
+     motscles['NOM_CMP']=m['NOM_CMP']
+  else:
+     motscles['TOUT_CMP']='OUI'
+  motscles['OPERATION']='EXTRACTION'
+
+  __tab=POST_RELEVE_T(ACTION=_F(  INTITULE=newgrp,
+                           RESULTAT  = __remodr,
+                           NOM_CHAM=NOM_CHAM,
+                           GROUP_NO  = groupe,**motscles ))
+
+  # dictb=table initiale (contenant éventuellement des noeuds hors matière)
+  dictb=__tab.EXTR_TABLE()
+  # listenoe_b=liste ordonnee des noeuds de la ligne de coupe (avec doublons)
+  listenoe_b = dictb.NOEUD.values()
+  # lno_b2=liste des noeuds de la ligne de coupe après élimination des doublons
+  # (attention, on perd l'ordre des noeuds)
+  lno_b2 = set(listenoe_b)
+
+  # dictc=table (extraite de dictb) contenant uniquement des noeuds dans la matière
+  if m['NOM_CMP']!=None:
+     dictc=getattr(dictb,m['NOM_CMP'][0]).NON_VIDE()
+     lno_c2 = set(dictc.NOEUD.values())
+  else:# TOUT_CMP='OUI'
+     # on garde uniquement les composantes pour conserver les noeuds où il y a des valeurs
+     a_suppr = set(['INTITULE', 'RESU', 'NOM_CHAM', 'NUME_ORDRE', 'INST', 'ABSC_CURV', 'COOR_X', 'COOR_Y', 'COOR_Z'])
+     new_para = set(dictb.para)
+     new_para.difference_update(a_suppr)
+
+     lno_c2 = set()
+     for comp in new_para.difference(['NOEUD']):
+        dictc = getattr(dictb, comp).NON_VIDE()
+        lno_c2.update(dictc.NOEUD.values())
+
+  # on réordonne la liste des noeuds de lno_c2 (selon leur position dans listenoe_b) => l_matiere
+  # l_horsmat=liste des noeuds hors matière
+  l_matiere = [j for j in listenoe_b if j in lno_c2]
+  nderm=l_matiere.index(l_matiere[len(l_matiere)-1])
+  l_horsmat = [j for j in listenoe_b if j not in lno_c2]
+
+  # si on est en présence de noeuds hors matière,
+  # on emet une alarme pour informer l'utilisateur
+  nbpoin=m['NB_POINTS']
+  reste=nbpoin-len(l_matiere)
+  if len(l_horsmat) > 0:
+
+       nderh=l_horsmat.index(l_horsmat[len(l_horsmat)-1])
+       cnom = list(__macou.NOMNOE.get())
+       l_coor = __macou.COORDO.VALE.get()
+       indent=os.linesep+' '*12
+       l_surlig = []
+       l_horslig = []
+       for j in l_matiere[:nderm+1]:
+          nuno=cnom.index(j.ljust(8))
+          text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
+          l_surlig.append(text_coordo)
+       for j in l_horsmat[:nderh+1]:
+          nuno=cnom.index(j.ljust(8))
+          text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
+          l_horslig.append(text_coordo)
+       UTMESS('A','POST0_8',valk=[indent.join(l_surlig),indent.join(l_horslig)])
+
+  elif reste > 0:
+
+       cnom = list(__macou.NOMNOE.get())
+       l_coor = __macou.COORDO.VALE.get()
+       indent=os.linesep+' '*12
+       l_surlig = []
+       for j in l_matiere[:nderm+1]:
+          nuno=cnom.index(j.ljust(8))
+          text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
+          l_surlig.append(text_coordo)
+       UTMESS('A','POST0_24',vali=[iocc,reste],valk=[indent.join(l_surlig)])
+
+  __macou=DEFI_GROUP( reuse =__macou , MAILLAGE=__macou ,
+                   CREA_GROUP_NO=_F(NOM=newgrp,NOEUD=l_matiere[:nderm+1]),)
+
+  return
 
 def crea_resu_local(self,dime,NOM_CHAM,m,resin,mail,nomgrma):
 
@@ -364,83 +458,6 @@ def dist_min_deux_points(mail):
   return dist
 
 ########################################################################
-# verification que les points de la ligne de coupe sont dans la matiere
-def crea_grp_matiere(self,groupe,newgrp,m,__remodr,NOM_CHAM,__macou):
-
-  import aster
-  from Accas import _F
-  from Utilitai.Utmess import  UTMESS
-  import os
-  from sets import Set
-  POST_RELEVE_T = self.get_cmd('POST_RELEVE_T')
-  DEFI_GROUP    = self.get_cmd('DEFI_GROUP')
-
-  motscles={}
-  if m['NOM_CMP']!=None:
-     motscles['NOM_CMP']=m['NOM_CMP']
-  else:
-     motscles['TOUT_CMP']='OUI'
-  motscles['OPERATION']='EXTRACTION'
-
-  __tab=POST_RELEVE_T(ACTION=_F(  INTITULE=newgrp,
-                           RESULTAT  = __remodr,
-                           NOM_CHAM=NOM_CHAM,
-                           GROUP_NO  = groupe,**motscles ))
-
-  # dictb=table initiale (contenant éventuellement des noeuds hors matière)
-  dictb=__tab.EXTR_TABLE()
-  # listenoe_b=liste ordonnee des noeuds de la ligne de coupe (avec doublons)
-  listenoe_b = dictb.NOEUD.values()
-  # lno_b2=liste des noeuds de la ligne de coupe après élimination des doublons
-  # (attention, on perd l'ordre des noeuds)
-  lno_b2 = Set(listenoe_b)
-
-  # dictc=table (extraite de dictb) contenant uniquement des noeuds dans la matière
-  if m['NOM_CMP']!=None:
-     dictc=getattr(dictb,m['NOM_CMP'][0]).NON_VIDE()
-     lno_c2 = Set(dictc.NOEUD.values())
-  else:# TOUT_CMP='OUI'
-     # on garde uniquement les composantes pour conserver les noeuds où il y a des valeurs
-     a_suppr = Set(['INTITULE', 'RESU', 'NOM_CHAM', 'NUME_ORDRE', 'INST', 'ABSC_CURV', 'COOR_X', 'COOR_Y', 'COOR_Z'])
-     new_para = Set(dictb.para)
-     new_para.difference_update(a_suppr)
-
-     lno_c2 = Set()
-     for comp in new_para.difference(['NOEUD']):
-        dictc = getattr(dictb, comp).NON_VIDE()
-        lno_c2.update(dictc.NOEUD.values())
-
-  # on réordonne la liste des noeuds de lno_c2 (selon leur position dans listenoe_b) => l_matiere
-  # l_horsmat=liste des noeuds hors matière
-  l_matiere = [j for j in listenoe_b if j in lno_c2]
-  nderm=l_matiere.index(l_matiere[len(l_matiere)-1])
-  l_horsmat = [j for j in listenoe_b if j not in lno_c2]
-
-  # si on est en présence de noeuds hors matière,
-  # on emet une alarme pour informer l'utilisateur
-  if len(l_horsmat) > 0:
-
-       nderh=l_horsmat.index(l_horsmat[len(l_horsmat)-1])
-       cnom = list(__macou.NOMNOE.get())
-       l_coor = __macou.COORDO.VALE.get()
-       indent=os.linesep+' '*12
-       l_surlig = []
-       l_horslig = []
-       for j in l_matiere[:nderm+1]:
-          nuno=cnom.index(j.ljust(8))
-          text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
-          l_surlig.append(text_coordo)
-       for j in l_horsmat[:nderh+1]:
-          nuno=cnom.index(j.ljust(8))
-          text_coordo = '(%f, %f, %f)' % tuple(l_coor[3*nuno:3*nuno+3])
-          l_horslig.append(text_coordo)
-       UTMESS('A','POST0_8',valk=[indent.join(l_surlig),indent.join(l_horslig)])
-
-  __macou=DEFI_GROUP( reuse =__macou , MAILLAGE=__macou ,
-                   CREA_GROUP_NO=_F(NOM=newgrp,NOEUD=l_matiere[:nderm+1]),)
-
-  return
-########################################################################
 # script PYTHON de creation d un maillage de ligne de coupe
 
 def crea_mail_lig_coup(dimension,lignes,groups,arcs):
@@ -664,6 +681,8 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
     # détermination du type de résultat à créer
     if   nomgd[:6] == 'TEMP_R' : TYPE_RESU='EVOL_THER'
     elif nomgd[:6] == 'DEPL_R' : TYPE_RESU='EVOL_ELAS'
+    elif nomgd[:6] == 'VAR2_R' : TYPE_RESU='EVOL_NOLI'
+    elif nomgd[:6] == 'VARI_R' : TYPE_RESU='EVOL_NOLI'
     elif nomgd[:6] == 'SIEF_R' :
        if   NOM_CHAM[:4]=='SIGM':TYPE_RESU='EVOL_ELAS'
        elif NOM_CHAM[:4]=='SIEF':TYPE_RESU='EVOL_NOLI'
@@ -788,6 +807,10 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
 
   if n_modele in self.get_global_contexte().keys() : MODELE_1=self.get_global_contexte()[n_modele]
   else                                             : MODELE_1=self.jdc.current_context[n_modele]
+
+
+  if NOM_CHAM[5:9]=='ELGA' : UTMESS('F','POST0_18',valk=[NOM_CHAM,])
+
   __recou=PROJ_CHAMP(METHODE='ELEM',
                      RESULTAT=RESULTAT,
                      MODELE_1=MODELE_1,
@@ -805,9 +828,10 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
   if AsType(RESULTAT).__name__ in ('evol_elas','evol_noli') :
 
    if  NOM_CHAM in ('DEPL','SIEF_ELNO_ELGA','SIGM_NOEU_DEPL','SIGM_NOEU_SIEF','SIGM_NOEU_ELGA','SIGM_NOEU_COQU','SIGM_ELNO_DEPL'):icham=1
-
+   iocc=0
    for m in LIGN_COUPE :
 
+     iocc=iocc+1
      motscles={}
      motscles['OPERATION']=m['OPERATION']
      if m['NOM_CMP']!=None:
@@ -835,7 +859,7 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
          groupe='LICOU'+str(ioc2)
          nomgrma=' '
          newgrp='LICOF'+str(ioc2)
-         crea_grp_matiere(self,groupe,newgrp,m,__remodr,NOM_CHAM,__macou)
+         crea_grp_matiere(self,groupe,newgrp,iocc,m,__remodr,NOM_CHAM,LIGN_COUPE,__macou)
          groupe=newgrp
 
      # on definit l'intitulé
@@ -879,9 +903,10 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
 
 
   elif AsType(RESULTAT).__name__ in ('evol_ther',) :
-
+     iocc=0
      for m in LIGN_COUPE :
 
+        iocc=iocc+1
         motscles={}
         motscles['OPERATION']=m['OPERATION']
         if m['NOM_CMP']!=None:
@@ -904,7 +929,7 @@ def macr_lign_coupe_ops(self,RESULTAT,CHAM_GD,UNITE_MAILLAGE,LIGN_COUPE,
           ioc2=ioc2+1
           groupe='LICOU'+str(ioc2)
           newgrp='LICOF'+str(ioc2)
-          crea_grp_matiere(self,groupe,newgrp,m,__remodr,NOM_CHAM,__macou)
+          crea_grp_matiere(self,groupe,newgrp,iocc,m,__remodr,NOM_CHAM,LIGN_COUPE,__macou)
           groupe=newgrp
           if m['INTITULE'] !=None : intitl=m['INTITULE']
           else                    : intitl='l.coupe'+str(ioc2)
index 0d5a413982e6a99c6a4cf3ee41c88d4b507ffe22..94b5e820367df3151c638178d4103d53038ecc4e 100644 (file)
@@ -1,27 +1,27 @@
-#@ MODIF macro_elas_mult_ops Macro  DATE 22/10/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF macro_elas_mult_ops Macro  DATE 03/02/2010   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
-# (AT YOUR OPTION) ANY LATER VERSION.                                                  
-#                                                                       
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
-#                                                                       
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 
 
 
 def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
-                        CHAR_MECA_GLOBAL,CHAR_CINE_GLOBAL,LIAISON_DISCRET,
+                        CHAR_MECA_GLOBAL,LIAISON_DISCRET,
                         CAS_CHARGE,SOLVEUR,**args):
   """
      Ecriture de la macro MACRO_ELAS_MULT
@@ -49,7 +49,7 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
 
   # Le concept sortant (de type mult_elas ou fourier_elas) est nommé
   # 'nomres' dans le contexte de la macro
-  
+
   self.DeclareOut('nomres',self.sd)
 
   ielas = 0
@@ -75,11 +75,10 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
   if ielas==1 :
      motscles={}
      if   CHAR_MECA_GLOBAL: motscles['CHARGE']    =CHAR_MECA_GLOBAL
-     elif CHAR_CINE_GLOBAL: motscles['CHARGE']    =CHAR_CINE_GLOBAL
      if   CHAM_MATER      : motscles['CHAM_MATER']=CHAM_MATER
      if   CARA_ELEM       : motscles['CARA_ELEM'] =CARA_ELEM
      __nomrig=CALC_MATR_ELEM(OPTION='RIGI_MECA',MODELE=MODELE,**motscles)
-  
+
      if lnume:
        # On peut passer des mots cles egaux a None. Ils sont ignores
        motscles={}
@@ -106,14 +105,24 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
 # boucle sur les items de CAS_CHARGE
 
   nomchn=[]
+  lcharg=[]
   iocc=0
   for m in CAS_CHARGE:
      iocc=iocc+1
 
+     # calcul de lcharg : liste des listes de char_meca (mots clé CHAR_MECA et CHAR_MECA_GLOBAL)
+     xx1=m['CHAR_MECA']
+     if type(xx1) != type((1,)) : xx1=(xx1,)
+     xx2=CHAR_MECA_GLOBAL
+     if type(xx2) != type((1,)) : xx2=(xx2,)
+     lchar1=[]
+     for chargt in (xx1+xx2) :
+        if chargt : lchar1.append(chargt)
+     lcharg.append(lchar1)
+
      if ifour:
         motscles={}
         if   CHAR_MECA_GLOBAL: motscles['CHARGE']       =CHAR_MECA_GLOBAL
-        elif CHAR_CINE_GLOBAL: motscles['CHARGE']       =CHAR_CINE_GLOBAL
         if   CHAM_MATER      : motscles['CHAM_MATER']   =CHAM_MATER
         if   CARA_ELEM       : motscles['CARA_ELEM']    =CARA_ELEM
         motscles['MODE_FOURIER'] =m['MODE_FOURIER']
@@ -134,8 +143,7 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
         if   CHAM_MATER      : motscles['CHAM_MATER']   =CHAM_MATER
         if   CARA_ELEM       : motscles['CARA_ELEM']    =CARA_ELEM
         if   ifour           : motscles['MODE_FOURIER'] =m['MODE_FOURIER']
-        if   m['CHAR_MECA']  : motscles['CHARGE']       =m['CHAR_MECA']
-        elif m['CHAR_CINE']  : motscles['CHARGE']       =m['CHAR_CINE']
+        if   len(lchar1) > 0 : motscles['CHARGE']       =lchar1
         __nomvel=CALC_VECT_ELEM(OPTION='CHAR_MECA',**motscles)
         __nomasv=ASSE_VECTEUR(VECT_ELEM=__nomvel,NUME_DDL=num)
      else :
@@ -154,7 +162,7 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
   if CHAM_MATER : motscle2['CHAM_MATER']=CHAM_MATER
   if CARA_ELEM  : motscle2['CARA_ELEM']=CARA_ELEM
   if CHAM_MATER or CARA_ELEM :
-    if ielas : 
+    if ielas :
        motscles['AFFE']=[]
        for m in CAS_CHARGE:
           motscles['AFFE'].append(_F(MODELE=MODELE,
@@ -172,7 +180,7 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
                                      **motscle2) )
           iocc=iocc+1
   else:
-    if ielas : 
+    if ielas :
        motscles['AFFE']=[]
        for m in CAS_CHARGE:
           motscles['AFFE'].append(_F(MODELE=MODELE,
@@ -196,6 +204,7 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
 
   iocc=0
   for m in CAS_CHARGE:
+     lchar1=lcharg[iocc]
      iocc=iocc+1
 
      if m['OPTION']:
@@ -233,17 +242,9 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
            else:
               motscles['NUME_MODE']=m['MODE_FOURIER']
            motscles['EXCIT']=[]
-           if   m['CHAR_MECA'] :
-              for chargt in m['CHAR_MECA']   : motscles['EXCIT'].append(_F(CHARGE=chargt))
-           elif m['CHAR_CINE'] :
-              for chargt in m['CHAR_CINE']   : motscles['EXCIT'].append(_F(CHARGE=chargt))
-           if   CHAR_MECA_GLOBAL:
-              for chargt in CHAR_MECA_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
-           elif CHAR_CINE_GLOBAL:
-              for chargt in CHAR_CINE_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
+           for chargt in lchar1   : motscles['EXCIT'].append(_F(CHARGE=chargt))
            CALC_ELEM(reuse=nomres,
                      RESULTAT=nomres,
-                     MODELE=MODELE,
                      REPE_COQUE=_F(NIVE_COUCHE=m['NIVE_COUCHE'],
                                    NUME_COUCHE=m['NUME_COUCHE'],),
                      OPTION=tuple(liste_el),
@@ -257,17 +258,9 @@ def macro_elas_mult_ops(self,MODELE,CHAM_MATER,CARA_ELEM,NUME_DDL,
            else:
               motscles['NUME_MODE']=m['MODE_FOURIER']
            motscles['EXCIT']=[]
-           if   m['CHAR_MECA'] :
-              for chargt in m['CHAR_MECA']   : motscles['EXCIT'].append(_F(CHARGE=chargt))
-           elif m['CHAR_CINE'] :
-              for chargt in m['CHAR_CINE']   : motscles['EXCIT'].append(_F(CHARGE=chargt))
-           if   CHAR_MECA_GLOBAL:
-              for chargt in CHAR_MECA_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
-           elif CHAR_CINE_GLOBAL:
-              for chargt in CHAR_CINE_GLOBAL : motscles['EXCIT'].append(_F(CHARGE=chargt))
+           for chargt in lchar1   : motscles['EXCIT'].append(_F(CHARGE=chargt))
            CALC_NO(reuse=nomres,
                    RESULTAT=nomres,
-                   MODELE=MODELE,
                    OPTION=tuple(liste_no),
                    **motscles)
 
index a3089492471c4b21bbf785e79ebd4338e9d83fab..e8edd504e98429c3d8f8b76b9092b7aad67f7dce 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF macro_matr_asse_ops Macro  DATE 17/11/2008   AUTEUR DELMAS J.DELMAS 
+#@ MODIF macro_matr_asse_ops Macro  DATE 05/05/2010   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -88,7 +88,7 @@ def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
     if CHARGE     != None:
        if option[0:9] not in ('MASS_THER','RIGI_GEOM'):
                            motscles['CHARGE']      =CHARGE
-    if CHAM_MATER != None: motscles['CHAM_MATER']  =CHAM_MATER
+    if CHAM_MATER != None and option != 'RIGI_GEOM' : motscles['CHAM_MATER']  =CHAM_MATER
     if CARA_ELEM  != None: motscles['CARA_ELEM']   =CARA_ELEM
     if INST       != None: motscles['INST']        =INST
 
@@ -121,7 +121,7 @@ def macro_matr_asse_ops(self,MODELE,CHAM_MATER,CARA_ELEM,MATR_ASSE,
 
     self.DeclareOut('mm',m['MATRICE'])
     motscles={'OPTION':option}
-    if CHAR_CINE != None: 
+    if CHAR_CINE != None:
       mm=ASSE_MATRICE(MATR_ELEM=_a,NUME_DDL=num,CHAR_CINE=CHAR_CINE)
     else:
       mm=ASSE_MATRICE(MATR_ELEM=_a,NUME_DDL=num)
index a66baa1fb5372a697274a6a6e57f629484669fa9..bb6e7fa0cfe3fc71ead855748ed49b5f1f3bbfab 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF post_gp_ops Macro  DATE 15/04/2008   AUTEUR MACOCCO K.MACOCCO 
+#@ MODIF post_gp_ops Macro  DATE 18/11/2009   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -538,11 +538,6 @@ def post_gp_ops(self, **args):
          'YOUNG' : CallRCVALE(TEMP, 'E', MATER),
          'NU'    : CallRCVALE(TEMP, 'NU', MATER),
       }
-      if is_2D:
-         dict_constantes['R'] = self['RAYON_AXIS']
-      else:
-         dict_constantes['R'] = ep_tranche
-         
       
       # 3.3. ----- calcul de Kj(G)
       l_tabi = []
@@ -554,8 +549,7 @@ def post_gp_ops(self, **args):
          if is_2D:
             # fusion avec TEMP, E et nu
             tab = merge(tab, t_relev, 'NUME_ORDRE')
-            tab.fromfunction(new_para, fKj, ('G', 'YOUNG', 'NU'),
-                           { 'R' : self['RAYON_AXIS'] })
+            tab.fromfunction(new_para, fKj, ('G', 'YOUNG', 'NU'))
             # renomme G en G_i
             tab.Renomme('G', 'G_%d' % (k + 1))
          else:
@@ -797,11 +791,10 @@ def CallRCVALE(TEMP, para, MATER):
    return valres
 
 # -----------------------------------------------------------------------------
-def fKj(G, YOUNG, NU, R=1):
+def fKj(G, YOUNG, NU):
    """Calcul de Kj à partir de G (formule d'Irwin)
-      R n'intervient pas en 3D
    """
-   Kj=(abs(G / R * YOUNG / (1.0 - NU**2)))**0.5
+   Kj=(abs(G * YOUNG / (1.0 - NU**2)))**0.5
    return Kj
 
 # -----------------------------------------------------------------------------
index 7fcb68a6a6b43c529006eaae1c42433364016e5e..551acc5838fc61cf7164a9c70b2ab6781ffba4b7 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF post_k1_k2_k3_ops Macro  DATE 22/12/2008   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF post_k1_k2_k3_ops Macro  DATE 08/04/2010   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -58,10 +58,10 @@ def InterpolFondFiss(s0, Coorfo) :
 # en sortie : xyza = Coordonnees du point et abscisse
    n = len(Coorfo) / 4
    if ( s0 < Coorfo[3] )  :
-     xyz =  [Coorfo[0],Coorfo[1],Coorfo[2]]
+     xyz =  [Coorfo[0],Coorfo[1],Coorfo[2],s0]
      return xyz
    if ( s0 > Coorfo[-1]  ) :
-     xyz =  [Coorfo[-4],Coorfo[-3],Coorfo[-2]]
+     xyz =  [Coorfo[-4],Coorfo[-3],Coorfo[-2],s0]
      return xyz
    i = 1
    while s0 > Coorfo[4*i+3]:
@@ -810,13 +810,22 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
             tabsup=TlibS[ino].EXTR_TABLE()
             DETRUIRE(CONCEPT=_F(NOM=TlibS[ino]),INFO=1)
          elif RESULTAT :
-            __TSUP=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement SUP',
-                                          NOEUD=Lnosup[ino],
-                                          RESULTAT=RESULTAT,
-                                          NOM_CHAM='DEPL',
-                                          TOUT_ORDRE='OUI',
-                                          NOM_CMP=('DX','DY','DZ',),
-                                          OPERATION='EXTRACTION',),);
+            if MODELISATION=='AXIS' or MODELISATION=='C_PLAN' or MODELISATION=='D_PLAN':
+                __TSUP=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement SUP',
+                                              NOEUD=Lnosup[ino],
+                                              RESULTAT=RESULTAT,
+                                              NOM_CHAM='DEPL',
+                                              TOUT_ORDRE='OUI',
+                                              NOM_CMP=('DX','DY',),
+                                              OPERATION='EXTRACTION',),);
+            else :
+                __TSUP=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement SUP',
+                                              NOEUD=Lnosup[ino],
+                                              RESULTAT=RESULTAT,
+                                              NOM_CHAM='DEPL',
+                                              TOUT_ORDRE='OUI',
+                                              NOM_CMP=('DX','DY','DZ',),
+                                              OPERATION='EXTRACTION',),);
             tabsup=__TSUP.EXTR_TABLE()
             DETRUIRE(CONCEPT=_F(NOM=__TSUP),INFO=1)      
          else :
@@ -839,13 +848,22 @@ def post_k1_k2_k3_ops(self,MODELISATION,FOND_FISS,FISSURE,MATER,RESULTAT,
                tabinf=TlibI[ino].EXTR_TABLE()
                DETRUIRE(CONCEPT=_F(NOM=TlibI[ino]),INFO=1)
             elif RESULTAT :
-               __TINF=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement INF',
-                                          NOEUD=Lnoinf[ino],
-                                          RESULTAT=RESULTAT,
-                                          NOM_CHAM='DEPL',
-                                          TOUT_ORDRE='OUI',
-                                          NOM_CMP=('DX','DY','DZ',),
-                                          OPERATION='EXTRACTION',),);
+               if MODELISATION=='AXIS' or MODELISATION=='C_PLAN' or MODELISATION=='D_PLAN':
+                  __TINF=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement INF',
+                                             NOEUD=Lnoinf[ino],
+                                             RESULTAT=RESULTAT,
+                                             NOM_CHAM='DEPL',
+                                             TOUT_ORDRE='OUI',
+                                             NOM_CMP=('DX','DY'),
+                                             OPERATION='EXTRACTION',),);
+               else :
+                  __TINF=POST_RELEVE_T(ACTION=_F(INTITULE='Deplacement INF',
+                                             NOEUD=Lnoinf[ino],
+                                             RESULTAT=RESULTAT,
+                                             NOM_CHAM='DEPL',
+                                             TOUT_ORDRE='OUI',
+                                             NOM_CMP=('DX','DY','DZ',),
+                                             OPERATION='EXTRACTION',),);
                tabinf=__TINF.EXTR_TABLE()   
                DETRUIRE(CONCEPT=_F(NOM=__TINF),INFO=1)                 
             else :
index 2933aa8609fe48945d28b8cfee2af4fe57de5b92..676a4deabcc3d6e5a2a3f70a5954104e4eb2b447 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF propa_fiss_ops Macro  DATE 20/10/2008   AUTEUR GALENNE E.GALENNE 
+#@ MODIF propa_fiss_ops Macro  DATE 18/05/2010   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -114,6 +114,7 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
   # On importe les definitions des commandes a utiliser dans la macro
   ASSE_MAILLAGE         =self.get_cmd('ASSE_MAILLAGE'  )
   LIRE_MAILLAGE    =self.get_cmd('LIRE_MAILLAGE'  )
+  DEFI_FICHIER = self.get_cmd('DEFI_FICHIER'  )
   CREA_TABLE    =self.get_cmd('CREA_TABLE'  )
   CALC_TABLE    =self.get_cmd('CALC_TABLE'  )
   PROPA_XFEM = self.get_cmd('PROPA_XFEM'  )
@@ -483,9 +484,11 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
 # Sauvegarde (maillage xfem et maillage concatene)
     MA_XFEM2 = args['MA_XFEM2']
     if MA_XFEM2 != None : self.DeclareOut('ma_xfem2',MA_XFEM2)
-    __MA = mm.ToAster(unite=39)
+
+    unit = mm.ToAster()
+    DEFI_FICHIER(UNITE=unit, ACTION="LIBERER")
     self.DeclareOut('ma_xfem2',MA_XFEM2)
-    ma_xfem2=LIRE_MAILLAGE(UNITE=39);
+    ma_xfem2=LIRE_MAILLAGE(UNITE=unit);
 
     MA_TOT2 = args['MA_TOT2']
     if MA_TOT2 != None : self.DeclareOut('ma_tot',MA_TOT2)
@@ -639,9 +642,10 @@ def propa_fiss_ops(self,METHODE_PROPA,INFO,**args):
 # Sauvegarde (maillage xfem et maillage concatene)
     MA_XFEM2 = args['MA_XFEM2']
     if MA_XFEM2 != None : self.DeclareOut('ma_xfem2',MA_XFEM2)
-    __MA = mm.ToAster(unite=39)
+    unit = mm.ToAster()
+    DEFI_FICHIER(UNITE=unit, ACTION="LIBERER")
     self.DeclareOut('ma_xfem2',MA_XFEM2)
-    ma_xfem2=LIRE_MAILLAGE(UNITE=39);
+    ma_xfem2=LIRE_MAILLAGE(UNITE=unit);
 
     MA_TOT2 = args['MA_TOT2']
     if MA_TOT2 != None : self.DeclareOut('ma_tot',MA_TOT2)
index f4e39ca1028f16fbb3f9d45ef401480389b82713..f78372f41f674eb7a7a7f7252fb7b60a6e0ef291 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF co_fonction SD  DATE 22/04/2008   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF co_fonction SD  DATE 05/01/2010   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -112,18 +112,25 @@ class fonction_sdaster(fonction_class, sd_fonction_aster):
         lx = lbl[0:dim]
         ly = lbl[dim:2*dim]
       elif hasattr(self, 'etape') and self.etape.nom == 'DEFI_FONCTION' :
-         if self.etape['VALE'] != None:
+         if self.etape['VALE'] is not None:
             lbl = list(self.etape['VALE'])
             dim = len(lbl)
             lx = [lbl[i] for i in range(0,dim,2)]
             ly = [lbl[i] for i in range(1,dim,2)]
-         elif self.etape['VALE_PARA']!=None:
+         elif self.etape['VALE_PARA'] is not None:
             lx = self.etape['VALE_PARA'].Valeurs()
             ly = self.etape['VALE_FONC'].Valeurs()
+         elif self.etape['ABSCISSE'] is not None:
+            lx = self.etape['ABSCISSE']
+            ly = self.etape['ORDONNEE']
+         else:
+            raise Accas.AsException("Erreur (fonction.Valeurs) : ne fonctionne en " \
+               "PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
+               "dans le fichier de commandes courant.")
       else:
          raise Accas.AsException("Erreur (fonction.Valeurs) : ne fonctionne en " \
                "PAR_LOT='OUI' que sur des fonctions produites par DEFI_FONCTION " \
-               "dans le jdc courant.")
+               "dans le fichier de commandes courant.")
       return [lx, ly]
    def Absc(self):
       """Retourne la liste des abscisses"""
@@ -198,7 +205,8 @@ class fonction_c(fonction_class, sd_fonction_aster):
          for i in range(dim):
             lr.append(lbl[dim+2*i])
             li.append(lbl[dim+2*i+1])
-      elif hasattr(self, 'etape') and self.etape.nom == 'DEFI_FONCTION':
+      elif hasattr(self, 'etape') and self.etape.nom == 'DEFI_FONCTION' \
+            and self.etape['VALE_C'] is not None:
          lbl=list(self.etape['VALE_C'])
          dim=len(lbl)
          lx=[lbl[i] for i in range(0,dim,3)]
index 01726a8d825c051065cb146308c452e504a591bf..193a3b19295e88dfd789b0f729fc1fbe86f1773e 100644 (file)
@@ -23,6 +23,7 @@
    Utilitaire sur le catalogue des structures de données.
 """
 
+__revision__ = "$Id: utilsd.py,v 1.7.4.2 2010-06-03 08:51:16 pnoyret Exp $"
 
 import sys
 import os
index f6816918a5865a037ac5a21d555aa13f67b02c0d..7f6cba3a8c0583e8a161bd5acc9ec69f1e677be1 100644 (file)
@@ -3,7 +3,14 @@ sys.modules["Cata"]=sys.modules[__name__]
 rep_macro = os.path.dirname(__file__)
 sys.path.insert(0,rep_macro)
 rep_macro=os.path.join(rep_macro,'Macro')
-sys.path.insert(0,rep_macro)
+rep_sd = os.path.dirname(__file__)
+
+if sys.modules.has_key("SD"):
+  del sys.modules["SD"]
+for k in sys.modules.keys():
+  if k[0:3] == "SD.":
+    del sys.modules[k]
+
 
 from cata import *
 from math import ceil
index 40b41c338ea9f627f57bd41dc8434467e1c46e94..30a1ffef6202074ea6fa732f62dcba072eae9ccb 100644 (file)
@@ -23,6 +23,7 @@
 from __future__ import division
 
 __version__ = "$Name:  $"
+__Id__ = "$Id: cata.py,v 1.7.4.2 2010-06-03 08:50:35 pnoyret Exp $"
 
 import Accas
 from Accas import *
@@ -483,7 +484,7 @@ def C_COMP_INCR() : return FACT(statut='f',min=1,max='**',  #COMMUN#
            MAILLE          =SIMP(statut='f',typ=ma  ,validators=NoRepeat(),max='**'),
 
          ) ;
-#& MODIF COMMUN  DATE 06/05/2009   AUTEUR MACOCCO K.MACOCCO 
+#& MODIF COMMUN  DATE 27/10/2009   AUTEUR TARDIEU N.TARDIEU 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -778,7 +779,7 @@ def C_CONTACT() : return FACT(statut='f',max='**',
                                  fr="Paramètres de la méthode du gradient conjugué projeté (contact uniquement)",
                 RESI_ABSO       =SIMP(statut='o',typ='R',
                                       fr="Critère de convergence (niveau d'interpénétration autorisé)"),
-                REAC_ITER       =SIMP(statut='f',typ='I',defaut=3, fr="Fréquence de réinitialisation de la conjugaison"),
+                REAC_ITER       =SIMP(statut='f',typ='I',defaut=20, fr="Fréquence de réinitialisation de la conjugaison"),
                 ITER_GCP_MAXI   =SIMP(statut='f',typ='I',defaut=0, fr="Nombre d'itérations maximal pour le GCP"),
                 REAC_GEOM       =SIMP(statut='f',typ='TXM',defaut="AUTOMATIQUE",
                                       into=("AUTOMATIQUE","CONTROLE","SANS")),
@@ -801,7 +802,7 @@ def C_CONTACT() : return FACT(statut='f',max='**',
 
 
 
-#& MODIF COMMUN  DATE 14/10/2008   AUTEUR DELMAS J.DELMAS 
+#& MODIF COMMUN  DATE 29/09/2009   AUTEUR GNICOLAS G.NICOLAS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -904,6 +905,7 @@ def C_NOM_CHAM_INTO() : return  ("ACCE",    #COMMUN#
                         "ERZ2_ELEM_SIGM",
                         "QIRE_ELEM_SIGM",
                         "QIRE_ELNO_ELEM",
+                        "QIRE_NOEU_ELEM",
                         "QIZ1_ELEM_SIGM",
                         "QIZ2_ELEM_SIGM",
                         "SING_ELEM",
@@ -4835,7 +4837,181 @@ CALC_CHAR_SEISME=OPER(nom="CALC_CHAR_SEISME",op=  92,sd_prod=calc_char_seisme_pr
          ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 24/03/2009   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 05/05/2010   AUTEUR MACOCCO K.MACOCCO 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE BOTTONI M.BOTTONI
+
+from Macro.calc_ecrevisse_ops import calc_ecrevisse_ops
+
+def calc_ecrevisse_prod(self,CHARGE_MECA,CHARGE_THER1,CHARGE_THER2,TABLE,DEBIT,**args):
+
+  self.type_sdprod(CHARGE_MECA,char_meca)
+  self.type_sdprod(CHARGE_THER1,char_ther)
+  self.type_sdprod(CHARGE_THER2,char_ther)
+  self.type_sdprod(TABLE,table_sdaster)
+  self.type_sdprod(DEBIT,table_sdaster)
+  return None
+
+
+
+CALC_ECREVISSE=MACRO(nom="CALC_ECREVISSE",op=calc_ecrevisse_ops,sd_prod=calc_ecrevisse_prod,reentrant='n',
+                     UIinfo={"groupes":("Outils metier",)},fr="Procedure de couplage avec Ecrevisse",
+
+        regles             = (UN_PARMI('LOGICIEL','VERSION'),),
+
+#      CONCEPTS SORTANTS : 2 CHARGEMENTS THERMIQUE + 1 MECANIQUE + 2 TABLES POUR LE POST-TRAITEMENT
+#      ********************************************
+         CHARGE_MECA        =SIMP(statut='o',typ=CO),
+         CHARGE_THER1       =SIMP(statut='o',typ=CO),
+         CHARGE_THER2       =SIMP(statut='o',typ=CO),
+         TABLE              =SIMP(statut='o',typ=CO),
+         DEBIT              =SIMP(statut='o',typ=CO),
+
+
+#      MODELES MECANIQUES
+#      ********************************************
+         MODELE_MECA        =SIMP(statut='o',typ=modele_sdaster),
+         MODELE_THER        =SIMP(statut='o',typ=modele_sdaster),
+
+
+#      DONNEES GEOMETRIQUES RELATIVES AUX RESULTATS
+#      ********************************************
+         RESULTAT           =FACT(statut='o',min=1,max=1,
+           MECANIQUE           =SIMP(statut='o',typ=resultat_sdaster),
+           THERMIQUE           =SIMP(statut='o',typ=resultat_sdaster),
+           regles=(EXCLUS('NUME_ORDRE','INST'),),
+           NUME_ORDRE          =SIMP(statut='f',typ='I',validators=NoRepeat(),max='**'),
+           INST                =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**'),
+         ),
+
+#      DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+#      *******************************************
+
+         FISSURE            =FACT(statut='o',min=1,max='**',
+           PREFIXE_FICHIER     =SIMP(statut='f',typ='TXM',validators=LongStr(1,8),),
+           GROUP_MA            =SIMP(statut='o',typ=grma,validators=NoRepeat(),min=2,max=2,
+                                     fr="Groupe(s) des noeuds definissant les levres de la fissure"),
+           GROUP_NO_ORIG       =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+           GROUP_NO_EXTR       =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+           ZETA                =SIMP(statut='o',typ='R',fr="Coefficient de la perte de charge singuliere a l'entree [zeta]" ),
+           RUGOSITE            =SIMP(statut='o',typ='R',fr="Rugosite absolu (metres) [eps]" ),
+           OUVERT_REMANENTE    =SIMP(statut='o',typ='R',val_min=0.,fr="Ouverture remanente"),
+           TORTUOSITE          =SIMP(statut='f',typ='R',defaut=1.0, val_min=0., val_max=1.0,
+                                       fr="Coefficient de tortuosite de la fissure" ),
+           SECTION             =SIMP(statut='o',typ='TXM',into=("ELLIPSE","RECTANGLE"),fr="Type de section [is]" ),
+           b_section_ellipse   =BLOC(condition="SECTION=='ELLIPSE'",fr="Fissure a section elliptique",
+             LISTE_COTES_BL      =SIMP(statut='f',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant le petit axe de la section",
+                                       validators=NoRepeat() ),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant le petit axe de la section", ),
+           ),
+           b_section_rectangle =BLOC(condition="SECTION=='RECTANGLE'",fr="Fissure a section rectangulaire",
+             LISTE_COTES_BL      =SIMP(statut='f',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant la largeur de la section",
+                                       validators=NoRepeat() ),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant la largeur de la section", ),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A L"ECOULEMENT
+#      ********************************
+
+         ECOULEMENT         =FACT(statut='o',min=1,max=1,
+           PRES_ENTREE         =SIMP(statut='o',typ='R',fr="Pression de stagnation a l'entree (Pa) [pe]" ),
+           PRES_SORTIE         =SIMP(statut='o',typ='R',fr="Pression de stagnation a la sortie (Pa) [ps]" ),
+           FLUIDE_ENTREE       =SIMP(statut='o',typ='I',into=(1,2,3,4,5,6),fr="Condition du fluide a l'entree [iflow]" ),
+           b_condition_1       =BLOC(condition="FLUIDE_ENTREE==1",fr="Eau sous-refroidie ou saturee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_2       =BLOC(condition="FLUIDE_ENTREE==2",fr="Fluide diphasique",
+             TITR_MASS           =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+           ),
+           b_condition_3       =BLOC(condition="FLUIDE_ENTREE==3",fr="Vapeur saturee ou surchauffee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_4       =BLOC(condition="FLUIDE_ENTREE==4",fr="Air + vapeur surchauffee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             PRES_PART           =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_5       =BLOC(condition="FLUIDE_ENTREE==5",fr="Air + vapeur saturee",
+             TITR_MASS           =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+             PRES_PART           =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_6       =BLOC(condition="FLUIDE_ENTREE==6",fr="Air seul",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+         ),
+
+
+#      CHOIX DES MODELES
+#      *****************
+
+         MODELE_ECRE        =FACT(statut='o',min=1,max=1,
+           IVENAC              =SIMP(statut='f', typ='I', into=(0,1), defaut=0,
+                                     fr="Calcul ECREVISSE avec prise en compte de la vena contracta"),
+           ECOULEMENT          =SIMP(statut='o',typ='TXM',into=("SATURATION","GELE"),
+                                     fr="Type de modele d'ecoulement diphasique [imod]" ),
+           b_ecou_gele         =BLOC(condition="ECOULEMENT=='GELE'",fr="Modele d'ecoulement gele",
+             PRESS_EBULLITION    =SIMP(statut='o',typ='R',fr="Pression d'ebullition [corrp*psat(t)]" ),
+           ),
+           FROTTEMENT          =SIMP(statut='o',typ='I',into=(-3,-2,-1,0,1,2,3),fr="Correlation de frottement [ifrot]" ),
+           b_frottement        =BLOC(condition="FROTTEMENT<0",fr="Modele d'ecoulement gele",
+             REYNOLDS_LIM        =SIMP(statut='o',typ='R',fr="Coefficient de Reynolds limite [relim]" ),
+             FROTTEMENT_LIM      =SIMP(statut='o',typ='R',fr="Coefficient de frottement impose [frtlim]" ),
+           ),
+
+           TRANSFERT_CHAL      =SIMP(statut='o',typ='I',into=(-2,-1,0,1,2),fr="Transfert de chaleur [ichal]" ),
+           b_transchal         =BLOC(condition="TRANSFERT_CHAL<0", fr="Cas diphasique",
+             XMINCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux min [xminch]"),
+             XMAXCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux max [xmaxch]"),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+#      ********************************************
+
+         CONVERGENCE        =FACT(statut='o',min=1,max=1,
+           KGTEST              =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 0.5E+0,
+                                     fr="Parametre de l'algorithme iteratif [kgtest]" ),
+           ITER_GLOB_MAXI      =SIMP(statut='f',typ='I',defaut= 400,
+                                     fr="Nombre maximum d'iterations de la methode de Newton [itnmax]" ),
+           CRIT_CONV_DEBI      =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 1.E-5,
+                                     fr="Critere de convergence en debit [precdb]" ),
+         ),
+
+#      GENERAL
+#      *******
+
+         COURBES            =SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
+                                  fr="Generation eventuelle des courbes" ),
+         LOGICIEL           =SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
+         VERSION            =SIMP(statut='f',typ='TXM',defaut="3.1.2",into = ("3.1.1","3.1.2")),
+         ENTETE             =SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
+         IMPRESSION         =SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
+         INFO               =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+
+)  ;
+#& MODIF COMMANDE  DATE 09/11/2009   AUTEUR LEBOUVIER F.LEBOUVIER 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -4977,7 +5153,7 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
                EXCIT           =FACT(statut='f',max='**',
                                      fr="Charges contenant les températures, les efforts répartis pour les poutres...",
                                      regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
-                    CHARGE          =SIMP(statut='o',typ=char_meca ),
+                    CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca) ),
                     FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                     FONC_MULT_C     =SIMP(statut='f',typ=fonction_c),
                     COEF_MULT       =SIMP(statut='f',typ='R'),
@@ -5001,7 +5177,7 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
                                       (type(OPTION)==type(()) and  'SIEF_ELGA_DEPL' in OPTION ) ",
                                       fr="charge contenant les temperatures ou autre charge",
                          EXCIT           =FACT(statut='f',max='**',
-                         CHARGE          =SIMP(statut='o',typ=char_meca ),),
+                         CHARGE          =SIMP(statut='o',typ=(char_meca,char_cine_meca) ),),
                                     ),
                                   ),
 
@@ -5022,7 +5198,7 @@ CALC_ELEM=OPER(nom="CALC_ELEM",op=58,sd_prod=calc_elem_prod,reentrant='f',
                                             fr="charge contenant les temperatures ou les efforts répartis (poutres) ou autre",
                     EXCIT           =FACT(statut='f',max='**',
                                           regles=(EXCLUS('FONC_MULT','FONC_MULT_C','COEF_MULT','COEF_MULT_C'),),
-                         CHARGE          =SIMP(statut='f',typ=char_meca ),
+                         CHARGE          =SIMP(statut='f',typ=(char_meca,char_cine_meca) ),
                          FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
                          FONC_MULT_C     =SIMP(statut='f',typ=fonction_c),
                          COEF_MULT       =SIMP(statut='f',typ='R'),
@@ -5049,7 +5225,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                                       (type(OPTION)==type(()) and  'EPME_ELGA_DEPL' in OPTION ) ",
                                       fr="charge contenant les temperatures",
                     EXCIT           =FACT(statut='f',max='**',
-                         CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou) ),),
+                         CHARGE          =SIMP(statut='o',typ=(char_meca,char_ther,char_acou,char_cine_meca) ),),
                                  ),
                                        ),
           b_ener         =BLOC( condition = "TYPE_OPTION=='ENER'",
@@ -5064,7 +5240,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
                                       (type(OPTION)==type(()) and  'ECIN_ELEM_DEPL' in OPTION ) ",
                                       fr="charge contenant les temperatures",
                     EXCIT           =FACT(statut='f',max='**',
-                         CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou) ),),
+                         CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou,char_cine_meca) ),),
                               ),
                                  ),
 
@@ -5380,7 +5556,7 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
      INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
      TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 ) ;
-#& MODIF COMMANDE  DATE 21/10/2008   AUTEUR NISTOR I.NISTOR 
+#& MODIF COMMANDE  DATE 03/02/2010   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2008  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5403,17 +5579,11 @@ b_charge =BLOC( condition = "OPTION in ('EPME_ELNO_DEPL','EPSI_ELGA_DEPL','EPME_
 
 from Macro.calc_essai_ops import calc_essai_ops
 
-def calc_essai_prod(self,RESU_FLUDELA,RESU_IDENTIFICATION,RESU_TURBULENT, RESU_MODIFSTRU,**args):
+def calc_essai_prod(self,RESU_IDENTIFICATION, RESU_MODIFSTRU,**args):
 
-    if RESU_FLUDELA != None:
-        for res in RESU_FLUDELA:
-            self.type_sdprod(res['TABLE'],table_sdaster)
     if RESU_IDENTIFICATION != None:
         for res in RESU_IDENTIFICATION:
             self.type_sdprod(res['TABLE'],table_fonction)
-    if RESU_TURBULENT != None:
-        for res in RESU_TURBULENT:
-            self.type_sdprod(res['FONCTION'],fonction_sdaster)
 
 
     MTYPES = {
@@ -5444,14 +5614,7 @@ CALC_ESSAI = MACRO(nom       = 'CALC_ESSAI',
                    reentrant = 'n',
                    UIinfo    = {"groupes":("Outils métier",)},
                    fr        = "Outil de post-traitement interactif pour Meidee ",
-                   UNITE_FIMEN = SIMP( statut='f',typ='I',max='**' ),
                    INTERACTIF  = SIMP( statut='f',typ='TXM',into=('OUI','NON'),defaut='OUI' ),
-                   RESU_FLUDELA        = FACT( statut='f',max='**',
-                                               TABLE = SIMP(statut='f', typ=CO),
-                                             ),
-                   RESU_TURBULENT      = FACT( statut='f',max=1,
-                                               FONCTION = SIMP(statut='f', typ=CO),
-                                             ),
                    RESU_IDENTIFICATION = FACT( statut='f',max='**',
                                                TABLE = SIMP(statut='f', typ=CO),
                                              ),
@@ -5469,7 +5632,6 @@ CALC_ESSAI = MACRO(nom       = 'CALC_ESSAI',
                                           BASE_LMME=SIMP(statut='f',typ=CO,defaut=None),
                                           MODE_STA=SIMP(statut='f',typ=CO,defaut=None),
                                          ),
-                   UNITE_RESU = SIMP( statut='f',typ='I'),
 
                    b_inter    = BLOC( condition="INTERACTIF=='NON'",
 
@@ -5485,21 +5647,6 @@ CALC_ESSAI = MACRO(nom       = 'CALC_ESSAI',
                                                                               EPS = SIMP(statut='f',typ='R', defaut = 0.)
                                                                        )
                                                     ),
-                             MEIDEE_FLUDELA   = FACT( statut='f', max='**',
-                                                      MESURE1 = SIMP(statut='o',typ=mode_meca),
-                                                      MESURE2 = SIMP(statut='o',typ=mode_meca),
-                                                      MESURE3 = SIMP(statut='o',typ=mode_meca),
-                                                      BASE    = SIMP(statut='o',typ=mode_meca),
-                                                    ),
-                             MEIDEE_TURBULENT = FACT( statut='f', max='**',
-                                                      INTE_SPEC      = SIMP(statut='o',typ=table_sdaster),
-                                                      NUME_MODE_DECONV = SIMP(statut='f',typ='I',validators=NoRepeat(),
-                                                                              max=1,defaut=0),
-                                                      NUME_MODE_LOCAL  = SIMP(statut='f',typ='I',validators=NoRepeat(),
-                                                                              max='**',defaut=0),
-                                                      BASE = SIMP(statut='o',typ=mode_meca),
-                                                      MESURE = SIMP(statut='o',typ=(mode_meca,base_modale)),
-                                                    ),
                              IDENTIFICATION   = FACT( statut='f',max='**',   
                                                       ALPHA   = SIMP(statut='f',typ='R', defaut = 0.),
                                                       EPS     = SIMP(statut='f',typ='R', defaut = 0.),
@@ -5513,8 +5660,8 @@ CALC_ESSAI = MACRO(nom       = 'CALC_ESSAI',
                                                  MESURE = SIMP(statut='o', typ=mode_meca),
                                                  MODELE_SUP = SIMP(statut='o', typ=modele_sdaster),
                                                  MATR_RIGI = SIMP(statut='o', typ=matr_asse_depl_r),
-                                                 RESOLUTION = SIMP(statut='o', typ='TXM',
-                                                               into=('ES', 'LMME')),
+                                                 RESOLUTION = SIMP(statut='f', typ='TXM',
+                                                               into=('ES', 'LMME'), defaut='ES'),
                                                  b_resol = BLOC( condition = "RESOLUTION=='LMME'",
                                                                  MATR_MASS = SIMP(statut='o', typ=matr_asse_depl_r),
                                                                 ),
@@ -5524,14 +5671,14 @@ CALC_ESSAI = MACRO(nom       = 'CALC_ESSAI',
                                                ),
 
                              # Si on realise une modification structurale, on donne les DDL capteurs et interface
-                             b_inter    = BLOC( condition="MODIFSTRUCT!=None",
+                             b_modif   = BLOC( condition="MODIFSTRUCT!=None",
                                    GROUP_NO_CAPTEURS  = FACT( statut='f', max='**',
-                                                              GROUP_NO = SIMP(statut='f',typ='TXM', max='**'),
-                                                              NOM_CMP  = SIMP(statut='f',typ='TXM', max='**'),
+                                                              GROUP_NO = SIMP(statut='o',typ='TXM', max='**'),
+                                                              NOM_CMP  = SIMP(statut='o',typ='TXM', max='**'),
                                                             ),
                                    GROUP_NO_EXTERIEUR = FACT( statut='f', max='**',
-                                                              GROUP_NO = SIMP(statut='f',typ='TXM', max='**'),
-                                                              NOM_CMP  = SIMP(statut='f',typ='TXM', max='**'),
+                                                              GROUP_NO = SIMP(statut='o',typ='TXM', max='**'),
+                                                              NOM_CMP  = SIMP(statut='o',typ='TXM', max='**'),
                                                             ),
                                                ),
                                           ),
@@ -5688,7 +5835,7 @@ CALC_EUROPLEXUS = MACRO(nom="CALC_EUROPLEXUS",op=calc_europlexus_ops,sd_prod=cal
 
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=( 1, 2 ) ),
         ) ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 12/11/2009   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -5728,12 +5875,25 @@ CALC_FATIGUE=OPER(nom="CALC_FATIGUE",op= 151,sd_prod=calc_fatigue_prod,reentrant
                                  into=("DOMA_ELNO_SIGM","DOMA_ELGA_SIGM",
                                        "DOMA_ELNO_EPSI","DOMA_ELGA_EPSI",
                                        "DOMA_ELNO_EPME","DOMA_ELGA_EPME") ),
-           HISTOIRE        =FACT(statut='o',
-             RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,
+           
+             b_sigm   =BLOC(condition = "OPTION == 'DOMA_ELNO_SIGM' or OPTION == 'DOMA_ELGA_SIGM'",
+                               fr="Calcul a partir d un champ de contraintes.",
+               HISTOIRE        =FACT(statut='o',
+               RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,
                                                    evol_noli) ),
-             EQUI_GD         =SIMP(statut='f',typ='TXM',defaut="VMIS_SG",
-                                 into=("VMIS_SG","INVA_2_SG") ),
-           ),
+               EQUI_GD         =SIMP(statut='f',typ='TXM',defaut="VMIS_SG",
+                                 into=("VMIS_SG",) ),
+                                   ),
+                           ),
+             b_epsi   =BLOC(condition = "OPTION != 'DOMA_ELNO_SIGM' and OPTION != 'DOMA_ELGA_SIGM'",
+                               fr="Calcul a partir d un champ de déformations.",
+               HISTOIRE        =FACT(statut='o',
+               RESULTAT        =SIMP(statut='o',typ=(evol_elas,dyna_trans,
+                                                   evol_noli) ),
+               EQUI_GD         =SIMP(statut='o',typ='TXM',defaut="INVA_2_SG",
+                                 into=("INVA_2_SG",) ),
+                                    ),
+                           ),
            DOMMAGE         =SIMP(statut='o',typ='TXM',
                                into=("WOHLER","MANSON_COFFIN","TAHERI_MANSON",
                                      "TAHERI_MIXTE",) ),
@@ -6411,7 +6571,7 @@ CALC_MATR_AJOU=OPER(nom="CALC_MATR_AJOU",op= 152,sd_prod=matr_asse_gene_r,
            ),
          ),
 )  ;
-#& MODIF COMMANDE  DATE 17/11/2008   AUTEUR DELMAS J.DELMAS 
+#& MODIF COMMANDE  DATE 06/10/2009   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6494,7 +6654,7 @@ CALC_MATR_ELEM=OPER(nom="CALC_MATR_ELEM",op=   9,sd_prod=calc_matr_elem_prod
          ),
 
          b_meca_gyro = BLOC( condition = "OPTION=='MECA_GYRO'",
-           CHAM_MATER      =SIMP(statut='o',typ=cham_mater ),
+           CHAM_MATER      =SIMP(statut='f',typ=cham_mater ),
            CARA_ELEM       =SIMP(statut='o',typ=cara_elem ),
            CHARGE          =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**' ),
          ),
@@ -6732,7 +6892,7 @@ CALC_MODAL=MACRO(nom="CALC_MODAL",op=calc_modal_ops,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 06/10/2008   AUTEUR DEVESA G.DEVESA 
+#& MODIF COMMANDE  DATE 09/11/2009   AUTEUR LEBOUVIER F.LEBOUVIER 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -6829,7 +6989,7 @@ CALC_NO=OPER(nom="CALC_NO",op= 106,sd_prod=calc_no_prod,reentrant='f',
          CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
          CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
          EXCIT           =FACT(statut='f',max='**',
-           CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou) ),
+           CHARGE          =SIMP(statut='f',typ=(char_meca,char_ther,char_acou,char_cine_meca) ),
            FONC_MULT       =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
            TYPE_CHARGE     =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
                                  into=("FIXE_CSTE","FIXE_PILO","SUIV") ),
@@ -7085,7 +7245,7 @@ CALC_SPEC=MACRO(nom="CALC_SPEC",op= calc_spec_ops,sd_prod=table_fonction,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 );
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 30/06/2009   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7147,7 +7307,7 @@ CALC_TABLE=MACRO(nom="CALC_TABLE",op=calc_table_ops, sd_prod=calc_table_prod,
             VALE_K = SIMP(statut='f',typ='TXM',max='**'),
          ),
          b_regexp = BLOC(condition = "CRIT_COMP == 'REGEXP'",
-            VALE_K = SIMP(statut='f',typ='TXM',max='**'),
+            VALE_K = SIMP(statut='o',typ='TXM',max='**'),
          ),
          b_crit = BLOC(condition = "CRIT_COMP in ('EQ','NE')",
             CRITERE   = SIMP(statut='f',typ='TXM',defaut="RELATIF",into=("RELATIF","ABSOLU") ),
@@ -7485,7 +7645,7 @@ COMB_MATR_ASSE=OPER(nom="COMB_MATR_ASSE",op=  31,sd_prod=comb_matr_asse_prod,
          ),
          SANS_CMP        =SIMP(statut='f',typ='TXM',into=("LAGR",) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 12/11/2009   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -7546,15 +7706,15 @@ COMB_SISM_MODAL=OPER(nom="COMB_SISM_MODAL",op= 109,sd_prod=mode_stat,
            TRI_SPEC        =SIMP(statut='f',typ='TXM',into=("OUI",),
                                  fr="Excitation suivant les trois axes  avec trois spectres"),
            b_axe           =BLOC(condition = "AXE != None",fr="Excitation suivant un seul axe",
-             SPEC_OSCI       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule),),
+             SPEC_OSCI       =SIMP(statut='o',typ=(nappe_sdaster,formule),),
              ECHELLE         =SIMP(statut='f',typ='R',),
            ),
            b_tri_axe       =BLOC(condition = "TRI_AXE != None",fr="Excitation suivant les trois axes mais avec le meme spectre",
-             SPEC_OSCI       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule),),
+             SPEC_OSCI       =SIMP(statut='o',typ=(nappe_sdaster,formule),),
              ECHELLE         =SIMP(statut='f',typ='R',),
            ),
            b_tri_spec      =BLOC(condition = "TRI_SPEC != None",fr="Excitation suivant les trois axes  avec trois spectres",
-             SPEC_OSCI       =SIMP(statut='o',typ=(fonction_sdaster,nappe_sdaster,formule),min=3,max=3 ),
+             SPEC_OSCI       =SIMP(statut='o',typ=(nappe_sdaster,formule),min=3,max=3 ),
              ECHELLE         =SIMP(statut='f',typ='R',min=3,max=3),
            ),       
            NATURE          =SIMP(statut='f',typ='TXM',defaut="ACCE",into=("ACCE","VITE","DEPL") ),
@@ -9006,7 +9166,7 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
          ),
          INFO            =SIMP(statut='f',typ='I',defaut= 1,into=( 1 , 2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 09/02/2010   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -9024,8 +9184,11 @@ DEFI_FLUI_STRU=OPER(nom="DEFI_FLUI_STRU",op= 143,sd_prod=type_flui_stru,
 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
 # ======================================================================
-# RESPONSABLE COURTOIS M.COURTOIS
-DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction_sdaster,reentrant='n',
+# RESPONSABLE PEYRARD C.PEYRARD
+
+from Macro.defi_fonc_elec_ops import defi_fonc_elec_ops
+
+DEFI_FONC_ELEC=MACRO(nom="DEFI_FONC_ELEC",op=defi_fonc_elec_ops,sd_prod=fonction_sdaster,reentrant='n',
             UIinfo={"groupes":("Outils métier",)},
                     fr="Définir une fonction du temps intervenant dans le calcul des forces de LAPLACE",
       regles=(UN_PARMI('COUR_PRIN','COUR'),
@@ -9075,7 +9238,7 @@ DEFI_FONC_ELEC=OPER(nom="DEFI_FONC_ELEC",op=64,sd_prod=fonction_sdaster,reentran
            DIST            =SIMP(statut='f',typ='R',defaut=1.0E+0),
          ),
          INFO            =SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
-)  ;
+)
 #& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -12945,7 +13108,7 @@ DEFI_PARA_SENSI=OPER(nom="DEFI_PARA_SENSI",op=   2,sd_prod=para_sensi,
                                ang="Value of the parameter"),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 18/11/2009   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2004  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -12970,10 +13133,11 @@ from Macro.defi_part_feti_ops import defi_part_feti_ops
 DEFI_PART_FETI=MACRO(nom="DEFI_PART_FETI",op=defi_part_feti_ops,sd_prod=sd_feti_sdaster,
                      reentrant='n',UIinfo={"groupe":("Maillage",)},
                      fr="Creation partitionnement en sous-domaines pour FETI",
-         regles=(UN_PARMI('MAILLAGE','MODELE'),),
+         regles=(UN_PARMI('MAILLAGE','MODELE'),PRESENT_PRESENT('MODELE','EXCIT'),),
+
+         NB_PART         =SIMP(statut='o',typ='I',val_min=2),
          MAILLAGE        =SIMP(statut='f',typ=maillage_sdaster),
          MODELE          =SIMP(statut='f',typ=modele_sdaster),
-         NB_PART         =SIMP(statut='o',typ='I',val_min=2),
          EXCIT           =FACT(statut='f',max='**',
            CHARGE          =SIMP(statut='f',typ=(char_meca,char_cine_meca)),),
 
@@ -14317,7 +14481,7 @@ DYNA_SPEC_MODAL=OPER(nom="DYNA_SPEC_MODAL",op= 147,sd_prod=table_fonction,
          OPTION          =SIMP(statut='f',typ='TXM',defaut="TOUT",into=("TOUT","DIAG") ),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 24/03/2009   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 02/06/2009   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14441,7 +14605,7 @@ DYNA_TRAN_MODAL=OPER(nom="DYNA_TRAN_MODAL",op=  74,sd_prod=tran_gene,
            RIGI_NOR        =SIMP(statut='f',typ='R' ),
            AMOR_NOR        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
            RIGI_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
-           AMOR_TAN        =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
+           AMOR_TAN        =SIMP(statut='f',typ='R' ),
            COULOMB         =SIMP(statut='f',typ='R',defaut= 0.E+0 ),
 
            LAME_FLUIDE     =SIMP(statut='f',typ='TXM',defaut="NON",into=("OUI","NON") ),
@@ -14908,7 +15072,7 @@ FACTORISER=OPER(nom="FACTORISER",op=14,sd_prod=factoriser_prod,
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',into=(1,2) ),
 )  ;
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 05/08/2009   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -14929,6 +15093,12 @@ FACTORISER=OPER(nom="FACTORISER",op=14,sd_prod=factoriser_prod,
 # RESPONSABLE LEFEBVRE J.P.LEFEBVRE
 FIN=PROC(nom="FIN",op=9999,repetable='n',fr="Fin d'une étude, fin du travail engagé par une des commandes DEBUT ou POURSUITE",
             UIinfo={"groupes":("Gestion du travail",)},
+#
+# FIN est appelé prématurément en cas d'exception ("SIGUSR1", ArretCPUError,
+# NonConvergenceError..., erreurs <S> ou erreurs <F> récupérées).
+# En cas d'ArretCPUError, on limite au maximum le travail à faire dans FIN.
+# Pour cela, on force certains mots-clés dans Execution/E_JDC.py.
+# 
          FORMAT_HDF      =SIMP(fr="sauvegarde de la base GLOBALE au format HDF",statut='f',
                                typ='TXM',defaut="NON",into=("OUI","NON",) ), 
          RETASSAGE       =SIMP(fr="provoque le retassage de la base GLOBALE",
@@ -16701,7 +16871,7 @@ LIRE_PLEXUS=OPER(nom="LIRE_PLEXUS",op= 184,sd_prod=evol_char,
                    PRECISION       =SIMP(statut='o',typ='R',),),),
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
 )  ;
-#& MODIF COMMANDE  DATE 30/09/2008   AUTEUR REZETTE C.REZETTE 
+#& MODIF COMMANDE  DATE 08/04/2010   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -16831,7 +17001,6 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
          ),
          b_dataset_58_b = BLOC(condition="(FORMAT=='IDEAS_DS58') and ((TYPE_RESU=='DYNA_TRANS') or\
                                         (TYPE_RESU=='DYNA_HARMO') or (TYPE_RESU=='HARM_GENE'))",
-           UNITE           =SIMP(statut='f',typ='I',defaut= 19 ),
            NOM_CHAM=SIMP(statut='o',typ='TXM',into=("DEPL","VITE","ACCE","EPSI_NOEU_DEPL","SIEF_NOEU",) ),
            REDEFI_ORIENT=FACT(statut='f',max='**',
                               regles=(PRESENT_PRESENT('CODE_DIR','DIRECTION','NOEUD',),),
@@ -16880,7 +17049,7 @@ LIRE_RESU=OPER(nom="LIRE_RESU",op=150,sd_prod=lire_resu_prod,reentrant='n',
 # ---------
          b_med           =BLOC(condition = "FORMAT == 'MED'",fr="Nom du champ dans le fichier MED",
            UNITE           =SIMP(statut='f',typ='I',defaut= 81, fr="Le fichier est : fort.n.",),
-           FORMAT_MED      =FACT(statut='f',max='**',
+           FORMAT_MED      =FACT(statut='o',max='**',
              regles=(ENSEMBLE('NOM_CMP','NOM_CMP_MED'),),
              NOM_CHAM        =SIMP(statut='o',typ='TXM',into=C_NOM_CHAM_INTO(),),
              NOM_CHAM_MED    =SIMP(statut='o',typ='TXM',               fr="Nom du champ dans le fichier MED.",  ),
@@ -18431,6 +18600,472 @@ MACR_ECLA_PG=MACRO(nom="MACR_ECLA_PG",op=macr_ecla_pg_ops,sd_prod=macr_ecla_pg_p
              b_prec_abso=BLOC(condition="(CRITERE=='ABSOLU')",
                  PRECISION       =SIMP(statut='o',typ='R',),),
             )
+#& MODIF COMMANDE  DATE 05/05/2010   AUTEUR MACOCCO K.MACOCCO 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE BOTTONI M.BOTTONI
+
+from Macro.macr_ecre_calc_ops import macr_ecre_calc_ops
+
+def macr_ecre_calc_prod(self,TABLE,DEBIT,**args):
+
+  self.type_sdprod(TABLE,table_sdaster)
+  self.type_sdprod(DEBIT,table_sdaster)
+  return None
+
+MACR_ECRE_CALC=MACRO(nom="MACR_ECRE_CALC",op=macr_ecre_calc_ops,sd_prod=macr_ecre_calc_prod,reentrant='n',
+                     UIinfo={"groupes":("Outils metier",)},fr="Procedure de couplage avec Ecrevisse",
+
+         regles             = (UN_PARMI('LOGICIEL','VERSION'),),
+
+#      CONCEPTS SORTANT : 2 TABLES POUR LE POST-TRAITEMENT
+#      ********************************************
+         TABLE              =SIMP(statut='o',typ=CO),
+         DEBIT              =SIMP(statut='o',typ=CO),
+
+#      DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+#      *******************************************
+
+         FISSURE            =FACT(statut='o',min=1,max=1,
+           LONGUEUR            =SIMP(statut='o',typ='R',val_min=0.E+0,fr="Longueur de la fissure [zl]"),
+           RUGOSITE            =SIMP(statut='o',typ='R',fr="Rugosite absolu (metres) [eps]"),
+           ANGLE               =SIMP(statut='o',typ='R',fr="Angle par rapport a l'ascendante verticale (degres)"),
+           ZETA                =SIMP(statut='o',typ='R',fr="Coefficient de la perte de charge singuliere a l'entree [zeta]"),
+           SECTION             =SIMP(statut='o',typ='TXM',into=("ELLIPSE","RECTANGLE"),fr="Type de section [is]"),
+           b_section_ellipse   =BLOC(condition="SECTION=='ELLIPSE'",fr="Fissure a section elliptique",
+             LISTE_COTES_AH      =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant le grand axe de la section",
+                                       validators=NoRepeat()),
+             LISTE_VAL_AH        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant le grand axe de la section",),
+             LISTE_COTES_BL      =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant le petit axe de la section",
+                                       validators=NoRepeat()),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant le petit axe de la section",),
+           ),
+           b_section_rectangle =BLOC(condition="SECTION=='RECTANGLE'",fr="Fissure a section rectangulaire",
+             LISTE_COTES_AH      =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant la hauteur de la section",
+                                       validators=NoRepeat()),
+             LISTE_VAL_AH        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant la hauteur de la section",),
+             LISTE_COTES_BL      =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant la largeur de la section",
+                                       validators=NoRepeat()),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant la largeur de la section",),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A L"ECOULEMENT
+#      ********************************
+
+         ECOULEMENT         =FACT(statut='f',min=1,max=1,
+           PRES_ENTREE         =SIMP(statut='o',typ='R',fr="Pression de stagnation a l'entree (Pa) [pe]" ),
+           PRES_SORTIE         =SIMP(statut='o',typ='R',fr="Pression de stagnation a la sortie (Pa) [ps]" ),
+           FLUIDE_ENTREE       =SIMP(statut='o',typ='I',into=(1,2,3,4,5,6),fr="Condition du fluide a l'entree [iflow]" ),
+           b_condition_1       =BLOC(condition="FLUIDE_ENTREE==1",fr="Eau sous-refroidie ou saturee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_2       =BLOC(condition="FLUIDE_ENTREE==2",fr="Fluide diphasique",
+             TITR_MASS           =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+           ),
+           b_condition_3       =BLOC(condition="FLUIDE_ENTREE==3",fr="Vapeur saturee ou surchauffee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_4       =BLOC(condition="FLUIDE_ENTREE==4",fr="Air + vapeur surchauffee",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             PRES_PART           =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_5       =BLOC(condition="FLUIDE_ENTREE==5",fr="Air + vapeur saturee",
+             TITR_MASS           =SIMP(statut='o',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+             PRES_PART           =SIMP(statut='o',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_6       =BLOC(condition="FLUIDE_ENTREE==6",fr="Air seul",
+             TEMP_ENTREE         =SIMP(statut='o',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES AU PROFIL DE TEMPERATURE A TRAVERS LA PAROI
+#      *************************************************************
+
+         TEMPERATURE        =FACT(statut='f',min=1,max=1,
+           GRADIENT            =SIMP(statut='o',typ='TXM',into=("FOURNI","IMPOSE","CALCULE"),
+                                     fr="Modele de calcul du gradient de temperature [imograd]" ),
+           b_gradient_fourni   =BLOC(condition="GRADIENT=='FOURNI'",fr="Distribution de temperature fournie [imograd=-1]",
+             LISTE_COTES_TEMP    =SIMP(statut='o',typ='R',max='**',fr="Liste des cotes pour les temperatures",
+                                       validators=NoRepeat() ),
+             LISTE_VAL_TEMP      =SIMP(statut='o',typ='R',max='**',fr="Liste des valeurs de temperature", ),
+           ),
+           b_gradient_impose   =BLOC(condition="GRADIENT=='IMPOSE'",fr="Distribution imposee de temperature [imograd=0]",
+             TEMP1               =SIMP(statut='o',typ='R',
+                                       fr="Gradient de temperature de la paroi le long de l'ecoulement (degC/m) [tm1]", ),
+             TEMP2               =SIMP(statut='o',typ='R',fr="Temperature de la paroi a l'entree (degC) [tm2]", ),
+           ),
+           b_gradient_calcule  =BLOC(condition="GRADIENT=='CALCULE'",fr="Profil de temperature calcule [imograd=1]",
+             EPAISSEUR_PAROI     =SIMP(statut='o',typ='R',fr="Epaisseur de la paroi (m) [epp]", ),
+             CONVECTION_AMONT    =SIMP(statut='o',typ='R',
+                                       fr="Coefficient de convection a la surface de la paroi cote amont (W/degC/m2) [alphe]", ),
+             CONVECTION_AVAL     =SIMP(statut='o',typ='R',
+                                       fr="Coefficient de convection a la surface de la paroi cote aval (W/degC/m2) [alphs]", ),
+             LAMBDA              =SIMP(statut='o',typ='R',fr="Conduction thermique de la paroi (W/degC/m) [lambd]", ),
+             TEMP_FLUIDE_AVAL    =SIMP(statut='o',typ='R',fr="Temperature du fluide cote aval (degC) [ts]", ),
+           ),
+         ),
+
+
+#      CHOIX DES MODELES
+#      *****************
+
+         MODELE_ECRE        =FACT(statut='f',min=1,max=1,
+           IVENAC              =SIMP(statut='f', typ='I', into=(0,1), defaut=0,
+                                     fr="Calcul ECREVISSE avec prise en compte de la vena contracta"),
+           ECOULEMENT          =SIMP(statut='o',typ='TXM',into=("SATURATION","GELE"),
+                                     fr="Type de modele d'ecoulement diphasique [imod]" ),
+           b_ecou_gele         =BLOC(condition="ECOULEMENT=='GELE'",fr="Modele d'ecoulement gele",
+             PRESS_EBULLITION    =SIMP(statut='o',typ='R',fr="Pression d'ebullition [corrp*psat(t)]"),
+           ),
+           FROTTEMENT          =SIMP(statut='o',typ='I',into=(-3,-2,-1,0,1,2,3),fr="Correlation de frottement [ifrot]"),
+           b_frottement        =BLOC(condition="FROTTEMENT<0",fr="Modele d'ecoulement gele",
+             REYNOLDS_LIM        =SIMP(statut='o',typ='R',fr="Coefficient de Reynolds limite [relim]"),
+             FROTTEMENT_LIM      =SIMP(statut='o',typ='R',fr="Coefficient de frottement impose [frtlim]"),
+           ),
+
+           TRANSFERT_CHAL      =SIMP(statut='o',typ='I',into=(-2,-1,0,1,2),fr="Transfert de chaleur [ichal]"),
+           b_transchal         =BLOC(condition="TRANSFERT_CHAL<0", fr="Cas diphasique",
+             XMINCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux min [xminch]"),
+             XMAXCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux max [xmaxch]"),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+#      ********************************************
+
+         CONVERGENCE        =FACT(statut='f',min=1,max=1,
+           KGTEST              =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 0.5E+0,
+                                     fr="Parametre de l'algorithme iteratif [kgtest]" ),
+           ITER_GLOB_MAXI      =SIMP(statut='f',typ='I',defaut= 400,
+                                     fr="Nombre maximum d'iterations de la methode de Newton [itnmax]" ),
+           CRIT_CONV_DEBI      =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 1.E-5,
+                                     fr="Critere de convergence en debit [precdb]" ),
+         ),
+
+
+#      GENERAL
+#      *******
+
+         COURBES            =SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
+                                  fr="Generation eventuelle des courbes" ),
+         LOGICIEL           =SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
+         VERSION            =SIMP(statut='f',typ='TXM',defaut="3.1.2",into = ("3.1.1","3.1.2")),
+         ENTETE             =SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
+         IMPRESSION         =SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
+         INFO               =SIMP(statut='f',typ='I',defaut= 1,into=(1,2) ),
+
+)  ;
+#& MODIF COMMANDE  DATE 05/05/2010   AUTEUR MACOCCO K.MACOCCO 
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2009  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE BOTTONI M.BOTTONI
+
+from Macro.macr_ecrevisse_ops import macr_ecrevisse_ops
+
+def macr_ecrevisse_prod(self,TABLE,TEMPER,DEBIT,**args):
+    # On definit ici les concepts produits
+    self.type_sdprod(TABLE,table_sdaster)
+    self.type_sdprod(TEMPER,evol_ther)
+    self.type_sdprod(DEBIT,table_sdaster)
+    # concept retourne
+    return evol_noli
+
+
+
+MACR_ECREVISSE=MACRO(nom="MACR_ECREVISSE",op=macr_ecrevisse_ops,sd_prod=macr_ecrevisse_prod,reentrant='f',
+                       UIinfo={"groupes":("Outils metier",)},fr="Procedure de couplage avec Ecrevisse",
+
+       reuse =SIMP(statut='f',typ='evol_noli'),
+       regles = (EXCLUS('TEMPER','ETAT_INIT'),
+                 UN_PARMI('LOGICIEL','VERSION'),),
+
+#      CONCEPT SORTANT
+#      ********************************************
+         TABLE              =SIMP(statut='f',typ=CO),
+         DEBIT              =SIMP(statut='f',typ=CO),
+         TEMPER             =SIMP(statut='f',typ=CO),
+
+#      ETAT_INITIAL
+#      ********************************************
+         ETAT_INIT       =FACT(statut='f',
+             EVOL_NOLI       =SIMP(statut='o',typ=evol_noli),
+             EVOL_THER       =SIMP(statut='o',typ=evol_ther),
+             NUME_ORDRE      =SIMP(statut='o',typ='I'),
+         ),
+
+
+#      MODELES MECANIQUES
+#      ********************************************
+         MODELE_MECA        =SIMP(statut='o',typ=modele_sdaster),
+         MODELE_THER        =SIMP(statut='o',typ=modele_sdaster),
+
+
+#      DONNEES GEOMETRIQUES RELATIVES A LA FISSURE
+#      *******************************************
+         FISSURE            =FACT(statut='o',min=1,max='**',
+           PREFIXE_FICHIER     =SIMP(statut='f',typ='TXM',validators=LongStr(1,8)),
+           GROUP_MA            =SIMP(statut='o',typ=grma,validators=NoRepeat(),min=2,max=2,
+                                     fr="Groupe(s) des noeuds definissant les levres de la fissure"),
+           GROUP_NO_ORIG       =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+           GROUP_NO_EXTR       =SIMP(statut='o',typ=grno,validators=NoRepeat(),min=2,max=2),
+           ZETA                =SIMP(statut='o',typ='R',fr="Coefficient de la perte de charge singuliere a l'entree [zeta]" ),
+           RUGOSITE            =SIMP(statut='o',typ='R',fr="Rugosite absolu (metres) [eps]" ),
+           TORTUOSITE          =SIMP(statut='f',typ='R',defaut=1.0, val_min=0., val_max=1.0,
+                                       fr="Coefficient de tortuosite de la fissure" ),
+           OUVERT_REMANENTE    =SIMP(statut='o',typ='R',val_min=0.,fr="Ouverture remanente"),
+           SECTION             =SIMP(statut='o',typ='TXM',into=("ELLIPSE","RECTANGLE"),fr="Type de section [is]" ),
+           b_section_ellipse   =BLOC(condition="SECTION=='ELLIPSE'",fr="Fissure a section elliptique",
+             LISTE_COTES_BL      =SIMP(statut='f',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant le petit axe de la section",
+                                       validators=NoRepeat() ),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant le petit axe de la section", ),
+           ),
+           b_section_rectangle =BLOC(condition="SECTION=='RECTANGLE'",fr="Fissure a section rectangulaire",
+             LISTE_COTES_BL      =SIMP(statut='f',typ='R',max='**',
+                                       fr="Liste des cotes des points definissant la largeur de la section",validators=NoRepeat()),
+             LISTE_VAL_BL        =SIMP(statut='o',typ='R',max='**',
+                                       fr="Liste des valeurs des points definissant la largeur de la section", ),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A L"ECOULEMENT
+#      ********************************
+         ECOULEMENT         =FACT(statut='o',min=1,max=1,
+                                  regles=(UN_PARMI('PRES_ENTREE','PRES_ENTREE_FO'),
+                                          UN_PARMI('PRES_SORTIE','PRES_SORTIE_FO'),
+                                          ),
+           PRES_ENTREE         =SIMP(statut='f',typ='R',fr="Pression de stagnation a l'entree (Pa) [pe]" ),
+           PRES_ENTREE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                     fr="Evolution de la pression de stagnation a l'entree (Pa) [pe]" ),
+           PRES_SORTIE         =SIMP(statut='f',typ='R',fr="Pression de stagnation a la sortie (Pa) [ps]" ),
+           PRES_SORTIE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                     fr="Evolution de la pression de stagnation a la sortie (Pa) [ps]" ),
+           FLUIDE_ENTREE       =SIMP(statut='o',typ='I',into=(1,2,3,4,5,6),fr="Condition du fluide a l'entree [iflow]" ),
+           b_condition_1       =BLOC(condition="FLUIDE_ENTREE==1",
+                                     regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO')),
+                                     fr="Eau sous-refroidie ou saturee",
+             TEMP_ENTREE         =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             TEMP_ENTREE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_2       =BLOC(condition="FLUIDE_ENTREE==2",
+                                     regles=(UN_PARMI('TITR_MASS', 'TITR_MASS_FO')),
+                                     fr="Fluide diphasique",
+             TITR_MASS           =SIMP(statut='f',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+             TITR_MASS_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution du titre massique eau vap/eau tot a l'entree [xe]" ),
+           ),
+           b_condition_3       =BLOC(condition="FLUIDE_ENTREE==3",
+                                     regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO')),
+                                     fr="Vapeur saturee ou surchauffee",
+             TEMP_ENTREE         =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             TEMP_ENTREE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+           ),
+           b_condition_4       =BLOC(condition="FLUIDE_ENTREE==4",
+                                     regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO'),
+                                             UN_PARMI('PRES_PART', 'PRES_PART_FO')),
+                                     fr="Air + vapeur surchauffee",
+             TEMP_ENTREE         =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             TEMP_ENTREE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+             PRES_PART           =SIMP(statut='f',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+             PRES_PART_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_5       =BLOC(condition="FLUIDE_ENTREE==5",
+                                     regles=(UN_PARMI('TITR_MASS', 'TITR_MASS_FO'),
+                                             UN_PARMI('PRES_PART', 'PRES_PART_FO')),
+                                     fr="Air + vapeur saturee",
+             TITR_MASS           =SIMP(statut='f',typ='R',fr="Titre massique eau vap/eau tot a l'entree [xe]" ),
+             TITR_MASS_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution du titre massique eau vap/eau tot a l'entree [xe]" ),
+             PRES_PART           =SIMP(statut='f',typ='R',fr="Pression partielle air en entree (Pa) [pae]" ),
+             PRES_PART_FO        =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la pression partielle air en entree (Pa) [pae]" ),
+           ),
+           b_condition_6       =BLOC(condition="FLUIDE_ENTREE==6",
+                                     regles=(UN_PARMI('TEMP_ENTREE', 'TEMP_ENTREE_FO')),
+                                     fr="Air seul",
+             TEMP_ENTREE         =SIMP(statut='f',typ='R',fr="Temperature a l'entree (degres C) [te]" ),
+             TEMP_ENTREE_FO      =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule),
+                                       fr="Evolution de la temperature a l'entree (degres C) [te]" ),
+           ),
+         ),
+
+         LIST_INST =SIMP(statut='f',typ=(listr8_sdaster), fr="Liste des instants de calcul imposes" ),
+
+#      CHOIX DES MODELES
+#      *****************
+
+         MODELE_ECRE        =FACT(statut='o',min=1,max=1,
+           IVENAC              =SIMP(statut='f', typ='I', into=(0,1), defaut=0,
+                                     fr="Calcul ECREVISSE avec prise en compte de la vena contracta"),
+           ECOULEMENT          =SIMP(statut='o',typ='TXM',into=("SATURATION","GELE"),
+                                     fr="Type de modele d'ecoulement diphasique [imod]" ),
+           b_ecou_gele         =BLOC(condition="ECOULEMENT=='GELE'",fr="Modele d'ecoulement gele",
+             PRESS_EBULLITION  =SIMP(statut='o',typ='R',fr="Pression d'ebullition [corrp*psat(t)]" ),
+           ),
+           FROTTEMENT          =SIMP(statut='o',typ='I',into=(-3,-2,-1,0,1,2,3),fr="Correlation de frottement [ifrot]" ),
+           b_frottement        =BLOC(condition="FROTTEMENT<0",fr="Modele d'ecoulement gele",
+             REYNOLDS_LIM        =SIMP(statut='o',typ='R',fr="Coefficient de Reynolds limite [relim]" ),
+             FROTTEMENT_LIM      =SIMP(statut='o',typ='R',fr="Coefficient de frottement impose [frtlim]" ),
+           ),
+
+           TRANSFERT_CHAL      =SIMP(statut='o',typ='I',into=(-2,-1,0,1,2),fr="Transfert de chaleur [ichal]" ),
+           b_transchal         =BLOC(condition="TRANSFERT_CHAL<0", fr="Cas diphasique",
+             XMINCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux min [xminch]"),
+             XMAXCH              =SIMP(statut='o',typ='R',fr="Titre massique gazeux max [xmaxch]"),
+           ),
+         ),
+
+
+#      CRITERE DE CONVERGENCE
+#      **********************
+
+         CONV_CRITERE       =FACT(statut='o',min=1,max=1,
+           TEMP_REF            =SIMP(statut='o',typ='R',val_min=1.0E-5,fr="Temperature de reference pour le calcul du critere"),
+           PRES_REF            =SIMP(statut='o',typ='R',val_min=1.0E-5,fr="Pression de reference pour le calcul du critere"),
+           CRITERE             =SIMP(statut='o',typ='TXM',defaut="TEMP_PRESS",into=("TEMP_PRESS","EXPLICITE","TEMP","PRESS"),
+                                     fr="La nature du critere pour la convergence"),
+           b_critere_autre     =BLOC(condition="CRITERE=='TEMP_PRESS' or CRITERE=='TEMP' or CRITERE=='PRESS'",
+                                     fr="Critere de convergence temp_press, temp, ou press",
+             SUBD_NIVEAU         =SIMP(statut='f',typ='I',val_min=2,defaut=3,
+                                       fr="Nombre maximum de niveau de subdivision d'un pas de temps"),
+             SUBD_PAS_MINI       =SIMP(statut='f',typ='R',val_min=0.0, fr="Pas de temps en dessous duquel on ne subdivise plus"),
+             NUME_ORDRE_MIN      =SIMP(statut='f',typ='I',val_min=-1,defaut=-1,
+                                       fr="Numero d'ordre a partir duquel le critere est pris en compte"),
+             PREC_CRIT           =SIMP(statut='f',typ='R',val_min=1.0E-2,defaut=1.0,
+                                       fr="Valeur du critere pour l'erreur de convergence"),
+           ),
+         ),
+
+
+#      DONNEES RELATIVES A LA CONVERGENCE NUMERIQUE
+#      ********************************************
+
+         CONVERGENCE_ECREVISSE =FACT(statut='f',min=1,max=1,
+           KGTEST                 =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 0.5E+0,
+                                        fr="Parametre de l'algorithme iteratif [kgtest]" ),
+           ITER_GLOB_MAXI         =SIMP(statut='f',typ='I',defaut= 400,
+                                        fr="Nombre maximum d'iterations de la methode de Newton [itnmax]" ),
+           CRIT_CONV_DEBI         =SIMP(statut='f',typ='R',val_min=0.E+0,val_max=1.E+0,defaut= 1.E-5,
+                                        fr="Critere de convergence en debit [precdb]" ),
+         ),
+
+
+#      GENERAL
+#      *******
+
+         COURBES            = SIMP(statut='f',typ='TXM',into=("INTERACTIF","POSTSCRIPT","AUCUNE"),defaut="AUCUNE",
+                                  fr="Generation eventuelle des courbes" ),
+         LOGICIEL           = SIMP(statut='f',typ='TXM',validators=LongStr(1,255),),
+         VERSION            = SIMP(statut='f',typ='TXM',defaut="3.1.2",into = ("3.1.1","3.1.2") ),
+         ENTETE             = SIMP(statut='f',typ='TXM',max='**',defaut="Titre du calcul Ecrevisse" ),
+         IMPRESSION         = SIMP(statut='f',typ='TXM',defaut='NON',into=( 'OUI','NON') ),
+         INFO               = SIMP(statut='f',typ='I',defaut="1",into=(1,2) ),
+
+#      DONNEES POUR STAT_NON_LINE ET THER_NON_LINE
+#      *******************************************
+
+         # copie de stat_non_line.capy des options des mots cles qui nous interessent
+
+         # donnees communes
+
+         CHAM_MATER         =SIMP(statut='o',typ=cham_mater),
+         CARA_ELEM          =SIMP(statut='f',typ=cara_elem),
+
+         # donnees specifiques a stat_non_line
+
+         EXCIT_MECA         =FACT(statut='o',max='**',
+           CHARGE              =SIMP(statut='o',typ=(char_meca,char_cine_meca)),
+           FONC_MULT           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+           TYPE_CHARGE         =SIMP(statut='f',typ='TXM',defaut="FIXE_CSTE",
+                                     into=("FIXE_CSTE","SUIV","DIDI")),
+         ),
+         COMP_INCR          =C_COMP_INCR(),
+         NEWTON             =FACT(statut='d',
+           REAC_INCR           =SIMP(statut='f',typ='I',defaut= 1 ),
+           PREDICTION          =SIMP(statut='f',typ='TXM',into=("DEPL_CALCULE","TANGENTE","ELASTIQUE","EXTRAPOL") ),
+           MATRICE             =SIMP(statut='f',typ='TXM',defaut="TANGENTE",into=("TANGENTE","ELASTIQUE") ),
+           PAS_MINI_ELAS       =SIMP(statut='f',typ='R',defaut=0.0E+0),
+           REAC_ITER           =SIMP(statut='f',typ='I',defaut=0),
+           REAC_ITER_ELAS      =SIMP(statut='f',typ='I',defaut=0),
+           EVOL_NOLI           =SIMP(statut='f',typ=evol_noli),
+         ),
+         CONVERGENCE        =FACT(statut='d',regles=(PRESENT_ABSENT('RESI_REFE_RELA','RESI_GLOB_MAXI','RESI_GLOB_RELA'),),
+           b_refe_rela         =BLOC(condition = "RESI_REFE_RELA != None",
+                                     regles=(AU_MOINS_UN('SIGM_REFE','EPSI_REFE','FLUX_THER_REFE',
+                                                         'FLUX_HYD1_REFE','FLUX_HYD2_REFE','VARI_REFE'),
+                                            ),
+             SIGM_REFE           =SIMP(statut='f',typ='R'),
+             EPSI_REFE           =SIMP(statut='f',typ='R'),
+             FLUX_THER_REFE      =SIMP(statut='f',typ='R'),
+             FLUX_HYD1_REFE      =SIMP(statut='f',typ='R'),
+             FLUX_HYD2_REFE      =SIMP(statut='f',typ='R'),
+             VARI_REFE           =SIMP(statut='f',typ='R'),
+           ),
+           RESI_REFE_RELA   =SIMP(statut='f',typ='R'),
+           RESI_GLOB_MAXI   =SIMP(statut='f',typ='R'),
+           RESI_GLOB_RELA   =SIMP(statut='f',typ='R'),
+           ITER_GLOB_MAXI   =SIMP(statut='f',typ='I',defaut=10),
+           ITER_GLOB_ELAS   =SIMP(statut='f',typ='I',defaut=25),
+           ARRET            =SIMP(statut='f',typ='TXM',defaut="OUI",into=("OUI","NON")),
+         ),
+
+         # donnees specifiques a ther_lineaire
+
+         EXCIT_THER         =FACT(statut='o',max='**',
+           CHARGE              =SIMP(statut='o',typ=(char_ther,char_cine_ther)),
+           FONC_MULT           =SIMP(statut='f',typ=(fonction_sdaster,nappe_sdaster,formule)),
+         ),
+         PARM_THETA         =SIMP(statut='f',typ='R',defaut= 0.57),
+
+)
 #& MODIF COMMANDE  DATE 06/05/2008   AUTEUR CORUS M.CORUS 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -19206,23 +19841,23 @@ MACR_LIGN_COUPE=MACRO(nom="MACR_LIGN_COUPE",op=macr_lign_coupe_ops,sd_prod=table
 )  ;
 
 
-#& MODIF COMMANDE  DATE 21/04/2008   AUTEUR LEFEBVRE J-P.LEFEBVRE 
+#& MODIF COMMANDE  DATE 03/02/2010   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
-# (AT YOUR OPTION) ANY LATER VERSION.                                 
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
 # ======================================================================
 # RESPONSABLE DESROCHES X.DESROCHES
 
@@ -19240,22 +19875,20 @@ def macro_elas_mult_prod(self,NUME_DDL,CAS_CHARGE,**args ):
 MACRO_ELAS_MULT=MACRO(nom="MACRO_ELAS_MULT",op=macro_elas_mult_ops,sd_prod=macro_elas_mult_prod,reentrant='f',
             UIinfo={"groupes":("Résolution",)},
          fr="Calculer les réponses statiques linéaires pour différents cas de charges ou modes de Fourier",
-         regles=(UN_PARMI('CHAR_MECA_GLOBAL','CHAR_CINE_GLOBAL','LIAISON_DISCRET', ),),
+         regles=(UN_PARMI('CHAR_MECA_GLOBAL','LIAISON_DISCRET', ),),
          MODELE          =SIMP(statut='o',typ=modele_sdaster),
          CHAM_MATER      =SIMP(statut='f',typ=cham_mater),
          CARA_ELEM       =SIMP(statut='f',typ=cara_elem),
          NUME_DDL        =SIMP(statut='f',typ=(nume_ddl_sdaster,CO)),
          CHAR_MECA_GLOBAL=SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
-         CHAR_CINE_GLOBAL=SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
          LIAISON_DISCRET =SIMP(statut='f',typ='TXM',into=("OUI",)),
          CAS_CHARGE      =FACT(statut='o',max='**',
            regles=(UN_PARMI('NOM_CAS','MODE_FOURIER'),
-                   UN_PARMI('CHAR_MECA','CHAR_CINE','VECT_ASSE'),),
+                   UN_PARMI('CHAR_MECA','VECT_ASSE'),),
            NOM_CAS         =SIMP(statut='f',typ='TXM' ),
            MODE_FOURIER    =SIMP(statut='f',typ='I' ),
            TYPE_MODE       =SIMP(statut='f',typ='TXM',defaut="SYME",into=("SYME","ANTI","TOUS") ),
            CHAR_MECA       =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
-           CHAR_CINE       =SIMP(statut='f',typ=char_meca,validators=NoRepeat(),max='**'),
            OPTION          =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
                                  into=("EFGE_ELNO_DEPL","EPOT_ELEM_DEPL","SIGM_ELNO_DEPL","SIEF_ELGA_DEPL",
                                        "SIGM_ELNO_CART","EFGE_ELNO_CART","DEGE_ELNO_DEPL","EPSI_ELNO_DEPL",
@@ -25210,7 +25843,7 @@ TEST_TEMPS=MACRO(nom="TEST_TEMPS",op=test_temps_ops, sd_prod=None,
    INFO  = SIMP(statut='f',typ='I',defaut=1,into=(1,2) ),
 )
 
-#& MODIF COMMANDE  DATE 24/03/2009   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 18/11/2009   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -25324,13 +25957,11 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f',
          ),
          PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57),
          ARCHIVAGE       =FACT(statut='f',
-           regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
-                   EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
+           regles=EXCLUS('PAS_ARCH','LIST_INST','INST'),
            LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
            INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
            PAS_ARCH        =SIMP(statut='f',typ='I' ),
            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-6),
-           ARCH_ETAT_INIT  =SIMP(statut='f',typ='TXM',into=("OUI",)),
            NUME_INIT       =SIMP(statut='f',typ='I'),
            DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
            CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
@@ -25339,7 +25970,7 @@ THER_LINEAIRE=OPER(nom="THER_LINEAIRE",op=25,sd_prod=evol_ther,reentrant='f',
          TITRE           =SIMP(statut='f',typ='TXM',max='**'),
          INFO            =SIMP(statut='f',typ='I',into=(1,2)),
 )  ;
-#& MODIF COMMANDE  DATE 24/03/2009   AUTEUR PELLET J.PELLET 
+#& MODIF COMMANDE  DATE 18/11/2009   AUTEUR MACOCCO K.MACOCCO 
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -25474,13 +26105,11 @@ THER_NON_LINE=OPER(nom="THER_NON_LINE",op= 186,sd_prod=evol_ther,reentrant='f',
          ),
          PARM_THETA      =SIMP(statut='f',typ='R',defaut= 0.57 ),
          ARCHIVAGE       =FACT(statut='f',
-           regles=(EXCLUS('PAS_ARCH','LIST_INST','INST'),
-                   EXCLUS('ARCH_ETAT_INIT','NUME_INIT'), ),
+           regles=EXCLUS('PAS_ARCH','LIST_INST','INST'),
            LIST_INST       =SIMP(statut='f',typ=(listr8_sdaster) ),
            INST            =SIMP(statut='f',typ='R',validators=NoRepeat(),max='**' ),
            PAS_ARCH        =SIMP(statut='f',typ='I' ),
            PRECISION       =SIMP(statut='f',typ='R',defaut= 1.0E-6),
-           ARCH_ETAT_INIT  =SIMP(statut='f',typ='TXM',into=("OUI",)),
            NUME_INIT       =SIMP(statut='f',typ='I'),
            DETR_NUME_SUIV  =SIMP(statut='f',typ='TXM',into=("OUI",)),
            CHAM_EXCLU      =SIMP(statut='f',typ='TXM',validators=NoRepeat(),max='**',
index 6ee01171af3f0b752d76ef2597c48d94ab9a3a33..c9488eb6b3a11191a17c71d012ecd2832c3f5f34 100644 (file)
@@ -1,4 +1,4 @@
-#@ MODIF ops Cata  DATE 01/12/2008   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF ops Cata  DATE 06/10/2009   AUTEUR MACOCCO K.MACOCCO 
 # -*- coding: iso-8859-1 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
@@ -23,6 +23,7 @@
 import types
 import string,linecache,os,traceback,re
 import pickle
+import re
 
 # Modules Eficas
 import Accas
@@ -50,7 +51,7 @@ def commun_DEBUT_POURSUITE(jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM):
    """
    jdc.par_lot    = PAR_LOT
    jdc.impr_macro = int(IMPR_MACRO == 'OUI')
-   jdc.jxveri     = int(DEBUG != None and DEBUG['JXVERI'] == 'OUI')
+   jdc.jxveri     = int(CODE != None or (DEBUG != None and DEBUG['JXVERI'] == 'OUI'))
    jdc.sdveri     = int(DEBUG != None and DEBUG['SDVERI'] == 'OUI')
    jdc.fico       = None
    jdc.sd_checker = CheckLog()
@@ -62,7 +63,8 @@ def commun_DEBUT_POURSUITE(jdc, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM):
          jdc.memo_sensi = MEMORISATION_SENSIBILITE()
       jdc.memo_sensi.reparent(jdc)
 
-      if hasattr(jdc, 'msg_init') and jdc.msg_init == 1:
+      # ne faire qu'une fois
+      if not hasattr(jdc, 'msg_init'):
          # messages d'alarmes désactivés
          if IGNORE_ALARM:
             if not type(IGNORE_ALARM) in (list, tuple):
@@ -181,7 +183,11 @@ def POURSUITE(self, PAR_LOT, IMPR_MACRO, CODE, DEBUG, IGNORE_ALARM, **args):
             pickle_context[elem].executed = 1
             # pour que sds_dict soit cohérent avec g_context
             self.jdc.sds_dict[elem] = pickle_context[elem]
-            assert elem == pickle_context[elem].nom
+            if elem != pickle_context[elem].nom:
+               name = re.sub('_([0-9]+)$', '[\\1]', pickle_context[elem].nom)
+               UTMESS('A', 'SUPERVIS_93', valk=(elem, name))
+               del pickle_context[elem]
+               continue
             # rétablir le parent pour les attributs de la SD
             pickle_context[elem].reparent_sd()
             if elem in self.g_context.keys():
@@ -297,8 +303,9 @@ def detruire(self,d):
    """
        Cette fonction est la fonction op_init de la PROC DETRUIRE
    """
-   if hasattr(self,"executed") and self.executed == 1:
-      return
+#XXX introduit par issue11484, commenté par issue13713
+#   if hasattr(self,"executed") and self.executed == 1:
+#      return
    if self["CONCEPT"]!=None:
       sd = []
       for mc in self["CONCEPT"]:
diff --git a/Aster/Cata/cataSTA9c_clefs_docu b/Aster/Cata/cataSTA9c_clefs_docu
new file mode 100644 (file)
index 0000000..8efdfe0
--- /dev/null
@@ -0,0 +1,217 @@
+AFFE_CARA_ELEM:U4.42.01-i.pdf
+AFFE_CHAR_ACOU:U4.44.04-g
+AFFE_CHAR_CINE_F:U4.44.03-h
+AFFE_CHAR_CINE:U4.44.03-h
+AFFE_CHAR_MECA:U4.44.01-i
+AFFE_CHAR_MECA_F:U4.44.01-i
+AFFE_CHAR_MECA_C:U4.44.05-f
+AFFE_CHAR_THER_F:U4.44.02-h
+AFFE_CHAR_THER:U4.44.02-h
+AFFE_CHAR_THER_F:U4.44.02-i
+AFFE_CHAR_THER:U4.44.02-i
+AFFE_MATERIAU:U4.43.03-i
+AFFE_MODELE:U4.41.01-i
+AIDE:U4.02.01-i
+ASSE_MAILLAGE:U4.23.03-h
+ASSE_MATRICE:U4.61.22-i
+ASSE_MATR_GENE:U4.65.04-g
+ASSE_VECTEUR:U4.61.23-i
+ASSE_VECT_GENE:U4.65.05-g
+CALC_AMOR_MODAL:U4.52.13-g
+CALC_CHAM_ELEM:U4.81.03-i
+CALC_CHAR_CINE:U4.61.03-h
+CALC_CHAR_SEISME:U4.63.01-h
+CALC_ELEM:U4.81.01-i
+CALC_FATIGUE:U4.83.02-f
+CALC_FLUI_STRU:U4.66.02-g
+CALC_FONCTION:U4.32.04-i
+CALC_FONC_INTERP:U4.32.01-g
+CALC_FORC_AJOU:U4.66.03-c
+CALC_G:U4.82.03-h
+CALC_G_THETA_T:U4.82.03-g
+CALC_INTE_SPEC:U4.36.03-h
+CALC_MATR_AJOU:U4.66.01-f
+CALC_MATR_ELEM:U4.61.01-i
+CALC_META:U4.85.01-d
+CALC_NO:U4.81.02-h
+CALC_PRECONT:U4.42.05-b
+CALC_TABLE:U4.33.03-a
+CALC_THETA:U4.82.02-g
+CALC_VECT_ELEM:U4.61.02-i
+COMB_CHAM_ELEM:U4.72.03-g
+COMB_CHAM_NO:U4.72.02-h
+COMB_FOURIER:U4.83.31-f
+COMB_MATR_ASSE:U4.72.01-i
+COMB_SISM_MODAL:U4.84.01-g
+COMP_INCR:U4.51.11-b
+CREA_CHAMP:U4.72.04-d
+CREA_MAILLAGE:U4.23.02-f
+CREA_RESU:U4.44.12-g
+CREA_TABLE:U4.33.02-b
+DEBUT:U4.11.01-i
+DEFI_ CONSTANTE:U4.31.01-i
+DEFI_BASE_MODALE:U4.64.02-h1
+DEFI_CABLE_BP:U4.42.04-d
+DEFI_COMPOR:U4.43.06-b
+DEFI_CONSTANTE:U4.31.01-h
+DEFI_COQU_MULT:U4.42.03-h
+DEFI_FICHIER:U4.12.03-b
+DEFI_FISS_XFEM:U4.82.08-b
+DEFI_FLUI_STRU:U4.25.01-g
+DEFI_FONCTION:U4.31.02-i
+DEFI_FONC_ELEC:U4.mk.10-h
+DEFI_FONC_FLUI:U4.35.01-f
+DEFI_FOND_FISS:U4.82.01-h
+DEFI_GROUP:U4.22.01-h
+DEFI_INTERF_DYNA:U4.64.01-h
+DEFI_INTE_SPEC:U4.36.02-h
+DEFI_LIST_ENTI:U4.34.02-i
+DEFI_LIST_REEL:U4.34.01-i
+DEFI_MAILLAGE:U4.23.01-h
+DEFI_MATERIAU:U4.43.01-i
+DEFI_MODELE_GENE:U4.65.02-g
+DEFI_NAPPE:U4.31.03-i
+DEFI_OBSTACLE:U4.44.21-h
+DEFI_PARA_SENSI:U4.31.06-c
+DEFI_PART_FETI:U4.23.05-a1
+DEFI_SPEC_TURB:U4.44.31-f
+DEFI_SQUELETTE:U4.24.01-i
+DEFI_THER_JOULE:U4.mk.20-f
+DEFI_TRC:U4.43.04-h
+DEPL_INTERNE:U4.62.02-h
+DETRUIRE:U4.14.01-g
+DIST_LIGN_3D:U4.mk.30-f
+DYNA_ALEA_MODAL:U4.53.22-h
+DYNA_LINE_HARM:U4.53.11-h
+DYNA_LINE_TRAN:U4.53.02-i
+DYNA_NON_LINE:U4.53.01-h
+DYNA_SPEC_MODAL:U4.53.23-f
+DYNA_TRAN_EXPLI:U4.53.03-b
+DYNA_TRAN_MODAL:U4.53.21-h
+ENGENDRE_TEST:U4.92.11-e
+EXEC_LOGICIEL:U7.00.01-d
+EXTR_MODE:U4.52.12-f
+EXTR_RESU:U4.71.04-e
+EXTR_TABLE:U4.71.05-b
+FACT_GRAD:U4.55.03-h
+FACT_LDLT:U4.55.01-i
+FIN:U4.11.02-i
+FONC_FLUI_STRU:U4.35.02-f
+FORMULE:U4.31.05-g
+GENE_FONC_ALEA:U4.36.05-h
+GENE_MATR_ALEA:U4.36.06-c
+GENE_VARI_ALEA:U4.36.07-c
+IMPR_CO:U4.91.11-i
+IMPR_FONCTION:U4.33.01-g
+IMPR_GENE:U4.91.02-f
+IMPR_JEVEUX:U4.91.21-i
+IMPR_MACR_ELEM:U7.04.33-g
+IMPR_MATRICE:U7.04.32-f
+IMPR_MISS3D:U7.04.11-f
+IMPR_MISS_3D:U7.04.11-e
+IMPR_OAR:U7.04.51-b
+IMPR_RESU:U4.91.01-i
+IMPR_STURM:U4.52.01-i
+IMPR_TABLE:U4.91.03-f
+INCLUDE:U4.13.01-h
+INCLUDE_MATERIAU:U4.43.02-d
+INFO_EXEC_ASTER:U4.13.04-b
+INFO_FONCTION:U4.32.05-a
+INTE_MAIL_2D:U4.81.11-h
+INTE_MAIL_3D:U4.81.12-h
+LIRE_CHAMP:U7.02.02-d
+LIRE_FONCTION:U4.32.02-h
+LIRE_FORC_MISS:U7.02.33-a
+LIRE_IMPE_MISS:U7.02.32-a
+LIRE_INTE_SPEC:U4.36.01-h
+LIRE_MAILLAGE:Patronvestepatchwork.pdf
+LIRE_MISS_3D:U7.02.31-f
+LIRE_PLEXUS:U7.02.11-d
+LIRE_RESU:U7.02.01-f
+LIRE_TABLE:U7.02.03-c
+MACRO_ELAS_MULT:U4.51.02-e
+MACRO_ELIAS_MULT:U4.51.02-f
+MACRO_MATR_AJOU:U4.66.11-e
+MACRO_MATR_ASSE:U4.61.21-f
+MACRO_MISS_3D:U7.03.11-e
+MACRO_MODE_MECA:U4.52.02-f
+MACRO_PROJ_BASE:U4.63.11-f
+MACR_ADAP_MAIL:U7.03.01-d
+MACR_ASCOUF_CALC:U4.cf.20-d
+MACR_ASCOUF_MAIL:U4.cf.10-d
+MACR_ASPIC_CALC:U4.pc.20-d
+MACR_ASPIC_MAIL:U4.pc.10-d
+MACR_CABRI_CALC:U4.cb.20-b
+MACR_CABRI_MAIL:U4.cb.10-b
+MACR_CARA_POUTRE:U4.42.02-f
+MACR_ECLA_PG:U4.44.14-b
+MACR_ELEM_DYNA:U4.65.01-g
+MACR_ELEM_STAT:U4.62.01-h
+MACR_FIABILITE:U7.03.31-b
+MACR_FIAB_IMPR:U7.04.41-b
+MACR_INFO_MAIL:U7.03.02-d
+MACR_LIGN_COUPE:U4.81.13-c
+MACR_RECAL:U4.73.02-c
+MACR_SPECTRE:U4.32.11-a
+MAC_MODES:U4.52.15-a
+MAJ_CATA:U4.15.01-g
+MECA_STATIQUE:U4.51.01-i
+MEMO_NOM_SENSI:U4.31.07-c
+MODE_ITER_CYCL:U4.52.05-h
+MODE_ITER_INV:U4.52.04-i
+MODE_ITER_SIMULT:U4.52.03-h
+MODE_STATIQUE:U4.52.14-h
+MODI_BASE_MODALE:U4.66.21-f
+MODI_MAILLAGE:U4.23.04-f
+MODI_MODELE_XFEM:U4.41.11-b
+MODI_OBSTACLE:U4.44.22-d
+MODI_REPERE:U4.74.01-c
+NORM_MODE:U4.52.11-h
+NUME_DDL:U4.61.11-i
+NUME_DDL_GENE:U4.65.03-g
+POST_CHAM_XFEM:U4.82.22-a
+POST_DYNA_ALEA:U4.84.04-g
+POST_DYNA_MODA_T:U4.84.02-g
+POST_ELEM:U4.81.22-g
+POST_FATIGUE:U4.83.01-f
+POST_FATI_ALEA:U4.84.03-f
+POST_GP:U4.82.31-a
+POST_K1_K2_K3:U4.82.05-d
+POST_K_BETA:U4.82.07-c
+POST_K_TRANS:U4.82.30-a
+POST_MAIL_XFEM:U4.82.21-a
+POST_RCCM:U4.83.11-f
+POST_RELEVE_T:U4.81.21-g1
+POST_USURE:U4.84.05-g
+POST_ZAC:U4.83.21-e
+POURSUITE:U4.11.03-i
+PRE_GIBI:U7.01.11-i
+PRE_GMSH:U7.01.31-c
+PRE_IDEAS:U7.01.01-i
+PROD_MATR_CHAM:U4.72.06-e
+PROJ_CHAMP:U4.72.05-g
+PROJ_MATR_BASE:U4.63.12-h
+PROJ_MESU_MODAL:U4.73.01-d
+PROJ_SPEC_BASE:U4.63.14-f
+PROJ_VECT_BASE:U4.63.13-h
+PROPA_XFEM:U4.82.11-a
+RECA_WEIBULL:U4.82.06-d
+RECU_FONCTION:U4.32.03-h
+RECU_GENE:U4.71.03-h
+RECU_TABLE:U4.71.02-d
+RESO_GRAD:U4.55.04-h
+RESO_LDLT:U4.55.02-i
+REST_BASE_PHYS:U4.63.21-h
+REST_SPEC_PHYS:U4.63.22-f
+SENSIBILITE:U4.50.02-c
+SIMU_POINT_MAT:U4.51.12-a
+SOLVEUR:U4.50.01-f
+STANLEY:U4.81.31-c
+STAT_NON_LINE:U4.51.03-h
+TEST_FICHIER:U4.92.04-b
+TEST_FONCTION:U4.92.02-h
+TEST_RESU:U4.92.01-i
+TEST_TABLE:U4.92.03-e
+THER_LINEAIRE:U4.54.01-i
+THER_NON_LINE:U4.54.02-g
+THER_NON_LINE_MO:U4.54.03-e
diff --git a/Aster/configuration_ASTER.py b/Aster/configuration_ASTER.py
new file mode 100644 (file)
index 0000000..9a7273d
--- /dev/null
@@ -0,0 +1,362 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+"""
+    Ce module sert pour charger les paramètres de configuration d'EFICAS
+"""
+# Modules Python
+import os, sys, string, types, re
+import traceback
+
+
+# Modules Eficas
+from Editeur import utils
+
+class CONFIGbase:
+
+  #-----------------------------------
+  def __init__(self,appli):
+  #-----------------------------------
+
+  # Classe de base permettant de lire, afficher
+  # et sauvegarder les fichiers utilisateurs editeur.ini
+  # et style.py
+  # Classe Mere de : class CONFIG(CONFIGbase)
+  #                  class CONFIGStyle(CONFIGbase):
+      self.appli = appli  
+      self.salome = appli.salome
+      self.dRepMat={}
+      if self.appli:
+         self.parent=appli.top
+      else:
+         self.parent=None
+      self.rep_user = utils.get_rep_user()
+      if not os.path.isdir(self.rep_user) : os.mkdir(self.rep_user)
+      self.lecture_fichier_ini_standard()
+      self.lecture_catalogues_standard()
+      self.lecture_fichier_ini_utilisateur()
+      self.init_liste_param()
+
+  #--------------------------------------
+  def lecture_fichier_ini_standard(self):
+  #--------------------------------------
+  # Verifie l'existence du fichier "standard"
+  # appelle la lecture de ce fichier
+      if not os.path.isfile(self.fic_ini):
+          if self.appli.ihm=="TK" :
+              from widgets import showerror
+              showerror("Erreur","Pas de fichier de configuration" + self.fic_ini+"\n")
+          print "Erreur à la lecture du fichier de configuration : %s" % self.fic_ini
+          sys.exit(0)
+      self.lecture_fichier(self.fic_ini)
+
+  #-----------------------------
+  def lecture_fichier(self,fic):
+  #------------------------------
+  # lit les paramètres du fichier eficas.ini ou style.py
+  # les transforme en attribut de l 'objet  
+  # utilisation du dictionnaire local pour récuperer style
+      txt = utils.read_file(fic)
+      from styles import style
+      d=locals()
+      try:
+         exec txt in d
+      except:
+         l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+         if self.appli.ihm=="TK" :
+              from widgets import showerror
+              showerror("Erreur","Une erreur s'est produite lors de la lecture du fichier : " + fic + "\n")
+         print ("Erreur","Une erreur s'est produite lors de la lecture du fichier : " + fic + "\n")
+         sys.exit()
+
+      for k in d.keys() :
+          if  k in self.labels.keys()  :
+             setattr(self,k,d[k])
+    # Glut horrible pour les repertoires materiau...
+          elif k[0:9]=="rep_mat_v" :
+             setattr(self,k,d[k])
+      
+      for k in d['style'].__dict__.keys() :
+          setattr(self,k,d['style'].__dict__[k])
+
+      if hasattr(self,"catalogues") :
+         for ligne in self.catalogues :
+            version=ligne[1]
+            codeSansPoint=re.sub("\.","",version)
+            chaine="rep_mat_"+codeSansPoint
+            if hasattr(self,chaine):
+               rep_mat=getattr(self,chaine)
+               self.dRepMat[version]=str(rep_mat)
+
+
+  #--------------------------------------
+  def lecture_fichier_ini_utilisateur(self):
+  #--------------------------------------
+  # Surcharge les paramètres standards par les paramètres utilisateur s'ils existent
+      self.fic_ini_utilisateur = os.path.join(self.rep_user,self.fichier)
+      if not os.path.isfile(self.fic_ini_utilisateur):
+          return
+      self.lecture_fichier(self.fic_ini_utilisateur)
+
+  #--------------------------------------
+  def lecture_catalogues_standard(self):
+  #--------------------------------------
+      # repertoires Materiau
+      if hasattr(self,"catalogues") :
+         for ligne in self.catalogues :
+            version=ligne[1]
+            cata=ligne[2]
+            self.dRepMat[version]=os.path.join(cata,'materiau')
+
+  #--------------------------------------
+  def affichage_fichier_ini(self):
+  #--------------------------------------
+      """
+      Affichage des valeurs des paramètres relus par Eficas
+      """
+      import widgets
+      result = widgets.Formulaire(self.parent,
+                                  obj_pere = self,
+                                  titre = self.titre,
+                                  texte = self.texte_ini,
+                                  items = self.l_param,
+                                  mode='display',
+                                  commande=('Modifier',self.commande))
+      if result.resultat :
+          #print 'on sauvegarde les nouveaux paramètres :',result.resultat
+          self.save_param_ini(result.resultat)
+
+  #--------------------------------------
+  def save_param_ini(self,dico):
+  #--------------------------------------
+  # sauvegarde
+  # les nouveaux paramètres dans le fichier de configuration utilisateur
+  #
+      f=open(self.fic_ini_utilisateur,'w+')
+      for k,v in dico.items():
+         if self.types[k] in ('mot2','mot3','mot4'): 
+            v1=v[1:-1]
+            val=v1.split(",")
+            p = "(" 
+            listeval=""
+            for valeur in val:
+              listeval = listeval+ p + str(valeur) 
+              p=" , "
+            listeval = listeval + ")"
+            f.write(str(self.pref)+str(k) + '=' + str(listeval) + '\n') 
+         elif k == 'catalogues' :
+            f.write(k + '\t=\t' + str(v) + '\n')
+         else:
+            f.write(str(self.pref)+str(k) + '\t=\t"' + str(v) + '"\n')
+      f.close()
+      self.lecture_fichier_ini_utilisateur()
+
+  #-------------------------------------------
+  def creation_fichier_ini_si_possible(self):
+  #-------------------------------------------
+      return self.creation_fichier_ini(mode='ignorer_annuler')
+
+  #--------------------------------------------------------
+  def creation_fichier_ini(self,mode='considerer_annuler'):
+  #---------------------------------------------------------
+  # Récupération des valeurs des paramétres requis pour la création du fichier
+  # eficas.ini
+  #
+      import widgets
+      items = self.l_param
+      result = widgets.Formulaire(self.parent,
+                                  obj_pere = self,
+                                  titre = "Saisie des donnees indispensables a la configuration d'EFICAS",
+                                  texte = self.texte,
+                                  items = items,
+                                  mode='query')
+      if not result.resultat :
+          if mode == 'considerer_annuler':
+             test=0
+             if self.appli.ihm=="TK" :
+                from widgets import showerror,askretrycancel
+                test = askretrycancel("Erreur","Données incorrectes !")
+             if not test:
+                 # XXX On sort d'EFICAS, je suppose
+                 self.appli.exitEFICAS()
+             else:
+                 self.creation_fichier_ini()
+          else:
+              return None
+      else :
+          self.save_param_ini(result.resultat)
+          return result.resultat
+
+  #--------------------------
+  def init_liste_param (self):
+  #--------------------------
+  # construit self.l_param 
+  # a partir de self.labels et des attributs 
+  # de l objet (mis a jour lors de la lecture du fichier)
+  # l_param est une liste de tuples où chaque tuple est de la forme :
+  #           (label,nature,nom_var,defaut)
+
+      self.l_param=[]
+      for k in self.labels.keys()  :
+          if hasattr(self,k) :
+             if k in self.YesNo.keys():
+                self.l_param.append((self.labels[k],self.types[k],k,self.__dict__[k],
+                                     self.YesNo[k][0],self.YesNo[k][1]))
+             else :
+                self.l_param.append((self.labels[k],self.types[k],k,self.__dict__[k]))
+      self.l_param = tuple(self.l_param)
+
+
+class CONFIG(CONFIGbase):
+  def __init__(self,appli,repIni):
+
+      self.dFichierEditeur={"ASTER"                    : "editeur.ini", 
+                           "ASTER_SALOME"             : "editeur_salome.ini"}
+      self.texte = "EFICAS a besoin de certains renseignements pour se configurer\n"+\
+              "Veuillez remplir TOUS les champs ci-dessous et appuyer sur 'Valider'\n"+\
+              "Si vous annulez, EFICAS ne se lancera pas !!"
+
+      self.salome=appli.salome
+      self.code=appli.code
+      clef=self.code
+      if self.salome != 0 :
+         clef = clef + "_SALOME"
+      self.fichier=self.dFichierEditeur[clef]
+      self.repIni = repIni
+      self.rep_ini = repIni
+      self.fic_ini = os.path.join(self.repIni,self.fichier)
+      self.titre = 'Parametres necessaires a la configuration d\'EFICAS'
+      self.texte_ini = "Voici les paramètres que requiert Eficas"
+      self.commande = self.creation_fichier_ini_si_possible
+      self.labels={"savedir"       : "Répertoire initial pour Open/Save des fichiers",
+                   "rep_travail"   : "Répertoire de travail",
+                   "rep_mat"       : "Répertoire materiaux",
+                   "path_doc"      : "Chemin d'accès à la doc Aster",
+                   "exec_acrobat"  : "Ligne de commande Acrobat Reader",
+                   "catalogues"    : "Versions du code ",
+                   "isdeveloppeur" : "Niveau de message ",
+                   "path_cata_dev" : "Chemin d'accès aux catalogues développeurs"}
+
+                   
+      self.types ={"savedir":"rep", "rep_travail":"rep","rep_mat":"rep",
+                   "path_doc": "rep","exec_acrobat":"file","exec_acrobat":"file",
+                   "catalogues" :"cata","isdeveloppeur":"YesNo","path_cata_dev":"rep",
+                  "DTDDirectory":"rep"}
+
+      self.YesNo={}
+      self.YesNo['isdeveloppeur']=('Deboggage','Utilisation')
+
+      # Valeurs par defaut
+      self.rep_user = utils.get_rep_user()
+      self.initialdir=self.rep_user
+      self.savedir = os.environ['HOME']
+      self.rep_travail=os.path.join(self.rep_user,'uaster','tmp_eficas')
+      self.rep_mat=""
+      self.path_doc=self.rep_user
+      self.exec_acrobat=self.rep_user
+      self.isdeveloppeur='NON'
+      self.path_cata_dev=os.path.join(self.rep_user,'cata')
+      CONFIGbase.__init__ (self,appli)
+      self.pref=""
+
+  #--------------------------------------
+  def save_params(self):
+  #--------------------------------------
+  # sauvegarde
+  # les nouveaux paramètres dans le fichier de configuration utilisateur
+  #
+      l_param=('exec_acrobat', 'repIni','catalogues','rep_travail','rep_mat','path_doc','savedir')
+      texte=""
+      for clef in l_param :
+          if hasattr(self,clef):
+             valeur=getattr(self,clef)
+             texte= texte + clef+"     = " + repr(valeur) +"\n"
+
+
+      # recuperation des repertoires materiaux
+      try :
+          for item in self.catalogues :
+              try :
+                  (code,version,cata,format,defaut)=item
+              except :
+                  (code,version,cata,format)=item
+              codeSansPoint=re.sub("\.","",version)
+              chaine="rep_mat_"+codeSansPoint
+              if hasattr(self,chaine):
+                 valeur=getattr(self,chaine)
+                 texte= texte + chaine+"       = '" + str(valeur) +"'\n"
+      except :
+             pass
+
+      f=open(self.fic_ini_utilisateur,'w+')
+      f.write(texte) 
+      f.close()
+
+
+class CONFIGStyle(CONFIGbase):
+  def __init__(self,appli,repIni):
+      self.salome=appli.salome
+      self.texte = "Pour prendre en compte les modifications \n"+\
+                   "     RELANCER EFICAS"
+      self.fichier="style.py"
+      self.repIni = repIni
+      self.rep_ini = repIni
+      self.fic_ini = os.path.join(self.repIni,self.fichier)
+      self.titre = "Parametres d affichage"
+      self.texte_ini = "Voici les paramètres configurables :  "
+      self.commande = self.creation_fichier_ini_si_possible
+      self.labels={"background":"couleur du fonds", 
+                   "foreground":"couleur de la police standard" ,
+                   "standard":" police et taille standard",
+                   "standard_italique":"police utilisée pour l'arbre ",
+                   "standard_gras_souligne":"police utilisée pour le gras souligné",
+                   "canvas_italique":"police italique",
+                   "standard_gras":"gras",
+                  }
+      self.types ={"background":"mot", 
+                   "foreground":"mot" ,
+                   "standard":"mot2",
+                   "standard_italique":"mot3",
+                   "standard_gras":"mot3",
+                   "standard_gras_souligne":"mot4",
+                   "canvas":"mot2",
+                   "canvas_italique":"mot3",
+                   "canvas_gras":"mot3",
+                   "canvas_gras_italique":"mot4",
+                   "standard12":"mot2",
+                   "standard12_gras":"mot3",
+                   "standard12_gras_italique":"mot4",
+                   "statusfont":"mot2",
+                   "standardcourier10":"mot2"}
+      self.YesNo={}
+      self.l_param=[]
+      CONFIGbase.__init__ (self,appli)
+      self.pref="style."
+
+  def affichage_style_ini(self):
+      self.affichage_fichier_ini()
+
+def make_config(appli,rep):
+    return CONFIG(appli,rep)
+
+def make_config_style(appli,rep):
+    return CONFIGStyle(appli,rep)
+
+
index bc1df2869000a2a9732a1b7ef48883fbbea8557a..f7b3b7243b820145f62b76a046a2f96d256e6c15 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
 #
 #
 # ======================================================================
-
 import os
 
-from Aster import prefs
-
-rep_cata = os.path.join(prefs.REPINI,'Cata')
-rep_Pmw = os.path.join(prefs.REPINI,'../Pmw')
+# Répertoire initial
+import prefs_ASTER 
+initialdir=prefs_ASTER.REPINI
+rep_cata = os.path.join(initialdir,'Cata')
+rep_Pmw = os.path.join(initialdir,'../Pmw')
 
 # Accès à la documentation Aster
 path_doc              = os.path.join(rep_cata,'..','Doc')
-exec_acrobat    =       "/usr/bin/xpdf"
+exec_acrobat    =       "acroread"
+
 # Utilisateur/Développeur
 isdeveloppeur   =       "NON"
 path_cata_dev   =       "/tmp/cata"
 # Répertoire temporaire
 rep_travail     =   "/tmp"
-# Répertoire initial
-initialdir=os.curdir
 
 # Choix des catalogues
 rep_mat_v88=os.path.join(rep_cata,'cataSTA8','materiau')
-rep_mat_v95=os.path.join(rep_cata,'cataSTA9','materiau')
-
-catalogues = (
-              ('ASTER','v8.8',os.path.join(rep_cata,'cataSTA8'),'python'),
-              ('ASTER','v9.5',os.path.join(rep_cata,'cataSTA9'),'python','defaut'),
-             )
-
+rep_mat_v96=os.path.join(rep_cata,'cataSTA9','materiau')
+rep_mat_v10=os.path.join(rep_cata,'cataSTA10','materiau')
+#
+catalogues=(
+('ASTER','v9.6',os.path.join(rep_cata,'cataSTA9'),'python'),
+('ASTER','v10.0',os.path.join(rep_cata,'cataSTA10'),'python','defaut'),
+)
index bc1df2869000a2a9732a1b7ef48883fbbea8557a..25ce39b9f5c05cf02c3c1e46d371b672bbc763ff 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
 #
 #
 # ======================================================================
-
 import os
 
-from Aster import prefs
-
-rep_cata = os.path.join(prefs.REPINI,'Cata')
-rep_Pmw = os.path.join(prefs.REPINI,'../Pmw')
+# Répertoire initial
+#initialdir=os.curdir
+from prefs_ASTER import REPINI
+initialdir=REPINI
+rep_cata = os.path.join(initialdir,'Cata')
+rep_Pmw = os.path.join(initialdir,'../Pmw')
 
 # Accès à la documentation Aster
 path_doc              = os.path.join(rep_cata,'..','Doc')
-exec_acrobat    =       "/usr/bin/xpdf"
+exec_acrobat    =       "acroread"
+
 # Utilisateur/Développeur
 isdeveloppeur   =       "NON"
 path_cata_dev   =       "/tmp/cata"
 # Répertoire temporaire
 rep_travail     =   "/tmp"
-# Répertoire initial
-initialdir=os.curdir
 
 # Choix des catalogues
 rep_mat_v88=os.path.join(rep_cata,'cataSTA8','materiau')
 rep_mat_v95=os.path.join(rep_cata,'cataSTA9','materiau')
-
-catalogues = (
-              ('ASTER','v8.8',os.path.join(rep_cata,'cataSTA8'),'python'),
-              ('ASTER','v9.5',os.path.join(rep_cata,'cataSTA9'),'python','defaut'),
-             )
-
+#
+catalogues=(
+#('ASTER','v8.8',os.path.join(rep_cata,'cataSTA8'),'python'),
+('ASTER','v9.5',os.path.join(rep_cata,'cataSTA9'),'python'),
+('ASTER','v10.0',os.path.join(rep_cata,'cataSTA10'),'python','defaut'),
+)
index a13a68ce052a04f905c0703d30c49a194b932fd1..bc668a5b32e14418b904862baece226d20167590 100755 (executable)
@@ -27,6 +27,9 @@
 
 # Modules Eficas
 import prefs
+name='prefs_'+prefs.code
+__import__(name)
+
 from InterfaceTK import eficas_go
 
 eficas_go.lance_eficas(code=prefs.code)
index 5786a287f5e5f1b3902dabe416da84c7c761d265..484e857c76efc763b71c0988eed45f01b330f5c8 100644 (file)
@@ -1,115 +1 @@
-# -*- coding: utf-8 -*-
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
-#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
-#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
-#
-#
-# ======================================================================
-
-import os,sys
-
-# REPINI sert à localiser le fichier editeur.ini
-# Obligatoire
-REPINI=os.path.dirname(os.path.abspath(__file__))
-repIni=REPINI
-
-# INSTALLDIR sert à localiser l'installation d'Eficas
-# Obligatoire
-INSTALLDIR=os.path.join(REPINI,'..')
-
-# CODE_PATH sert à localiser Noyau et Validation éventuellement
-# non contenus dans la distribution EFICAS
-# Par défaut on utilise les modules de INSTALLDIR
-# Peut valoir None (defaut)
-CODE_PATH = None
-
-# la variable code donne le nom du code a selectionner
 code="ASTER" 
-
-# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
-lang='fr'
-
-# Codage des strings qui accepte les accents (en remplacement de 'ascii')
-encoding='iso-8859-1'
-
-
-EditeurDir=INSTALLDIR+"/Editeur"
-sys.path[:0]=[INSTALLDIR]
-
-ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
-
-# Preference
-if os.name == 'nt':
-   userprefs = os.sep.join( [ os.environ['HOMEDRIVE'], os.environ['HOMEPATH'], 'Eficas_install', 'prefs.py' ])
-else :
-   userprefs=os.path.expanduser("~/.Eficas_install/prefs.py")
-
-if os.path.isfile(userprefs):
-   try:
-      execfile(userprefs)
-   except:
-      pass
-
-
-#-------------------------------------------------------------------
-# Partie pour TK
-#-------------------------------------------------------------------
-
-labels= ('Fichier','Edition','Jeu de commandes',
-                'Options',
-                'Aide',
-                 'Traduction',
-           )
-
-appli_composants=['readercata','bureau',
-                   'options',
-           ]
-
-menu_defs={ 'bureau': [
-              ('Fichier',[
-                           ('Nouveau','newJDC','<Control-n>','Ctrl+N'),
-                           ('Nouvel INCLUDE','newJDC_include'),
-                           ('Ouvrir','openJDC','<Control-o>','Ctrl+O'),
-                           ('Enregistrer','saveJDC','<Control-s>','Ctrl+S'),
-                           ('Enregistrer sous','saveasJDC','<Control-e>','Ctrl+E'),
-                           None,
-                           ('Fermer','closeJDC','<Control-w>','Ctrl+W'),
-                           ('Quitter','exitEFICAS','<Control-q>','Ctrl+Q'),
-                         ]
-              ),
-              ('Edition',[
-                           ('Copier','copy','<Control-c>','Ctrl+C'),
-                           ('Couper','cut','<Control-x>','Ctrl+X'),
-                           ('Coller','paste','<Control-v>','Ctrl+V'),
-                         ]
-              ),
-              ('Jeu de commandes',[
-               ('Rapport de validation','visuCRJDC','<Control-r>','Ctrl+R'),
-               ('Fichier source','visu_txt_brut_JDC','<Control-b>','Ctrl+B'),
-               #('Paramètres Eficas','affichage_fichier_ini'),
-                                  ]
-              ),
-              ('Traduction',[
-               ('Traduction v7 en v8','TraduitFichier7'),
-               ('Traduction v8 en v9','TraduitFichier8','<Control-t>','Ctrl+T'),
-                            ]
-              ),
-              ('Aide',[
-                        ('Aide EFICAS','aideEFICAS','<Control-a>','Ctrl+A'),
-                      ]
-              ),
-             ]
-           }
diff --git a/Aster/prefs_ASTER.py b/Aster/prefs_ASTER.py
new file mode 100644 (file)
index 0000000..46c9e9c
--- /dev/null
@@ -0,0 +1,112 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import os,sys
+
+# REPINI sert à localiser le fichier editeur.ini
+# Obligatoire
+REPINI=os.path.dirname(os.path.abspath(__file__))
+repIni=REPINI
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+# Obligatoire
+INSTALLDIR=os.path.join(REPINI,'..')
+
+# CODE_PATH sert à localiser Noyau et Validation éventuellement
+# non contenus dans la distribution EFICAS
+# Par défaut on utilise les modules de INSTALLDIR
+# Peut valoir None (defaut)
+CODE_PATH = None
+
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+encoding='iso-8859-1'
+
+
+EditeurDir=INSTALLDIR+"/Editeur"
+sys.path[:0]=[INSTALLDIR]
+
+ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
+
+# Preference
+if os.name == 'nt':
+   userprefs = os.sep.join( [ os.environ['HOMEDRIVE'], os.environ['HOMEPATH'], 'Eficas_install', 'prefs.py' ])
+else :
+   userprefs=os.path.expanduser("~/.Eficas_install/prefs.py")
+
+if os.path.isfile(userprefs):
+   try:
+      execfile(userprefs)
+   except:
+      pass
+
+
+#-------------------------------------------------------------------
+# Partie pour TK
+#-------------------------------------------------------------------
+
+labels= ('Fichier','Edition','Jeu de commandes',
+                'Options',
+                'Aide',
+                 'Traduction',
+           )
+
+appli_composants=['readercata','bureau',
+                   'options',
+           ]
+
+menu_defs={ 'bureau': [
+              ('Fichier',[
+                           ('Nouveau','newJDC','<Control-n>','Ctrl+N'),
+                           ('Nouvel INCLUDE','newJDC_include'),
+                           ('Ouvrir','openJDC','<Control-o>','Ctrl+O'),
+                           ('Enregistrer','saveJDC','<Control-s>','Ctrl+S'),
+                           ('Enregistrer sous','saveasJDC','<Control-e>','Ctrl+E'),
+                           None,
+                           ('Fermer','closeJDC','<Control-w>','Ctrl+W'),
+                           ('Quitter','exitEFICAS','<Control-q>','Ctrl+Q'),
+                         ]
+              ),
+              ('Edition',[
+                           ('Copier','copy','<Control-c>','Ctrl+C'),
+                           ('Couper','cut','<Control-x>','Ctrl+X'),
+                           ('Coller','paste','<Control-v>','Ctrl+V'),
+                         ]
+              ),
+              ('Jeu de commandes',[
+               ('Rapport de validation','visuCRJDC','<Control-r>','Ctrl+R'),
+               ('Fichier source','visu_txt_brut_JDC','<Control-b>','Ctrl+B'),
+               #('Paramètres Eficas','affichage_fichier_ini'),
+                                  ]
+              ),
+              ('Traduction',[
+               ('Traduction v7 en v8','TraduitFichier7'),
+               ('Traduction v8 en v9','TraduitFichier8','<Control-t>','Ctrl+T'),
+                            ]
+              ),
+              ('Aide',[
+                        ('Aide EFICAS','aideEFICAS','<Control-a>','Ctrl+A'),
+                      ]
+              ),
+             ]
+           }
index fc860fafd40a9c5ae3a0886040dc4645456be4bc..3db8254b0efca9ee0a2484886c59e76f04506c5c 100644 (file)
@@ -1,4 +1,5 @@
-#@ MODIF properties Accas DATE 11/06/2008 AUTEUR aster M.ADMINISTRATEUR
+#@ MODIF properties Accas DATE 02/06/2010 AUTEUR aster M.ADMINISTRATEUR
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
 # RESPONSABLE D6BHHHH J-P.LEFEBVRE
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -19,6 +20,6 @@
 #     IDENTIFICATION DU GESTIONNAIRE DE COMMANDE ACCAS A PARTIR
 #     DE LA VERSION DU CODE_ASTER ASSOCIE
 #----------------------------------------------------------------------
-version = "9.3.0"
-date = "11/06/2008"
+version = "10.1.27"
+date = "02/06/2010"
 exploit = False
index cf2dbf0eeafbd76d81e900dee82dde8ebd16cae3..a779bfcb299ac8f7973298d30fd002bb9b073b86 100755 (executable)
 
 # Modules Eficas
 import prefs
-#from InterfaceQT4 import eficas_go
-from InterfaceQT import eficas_go
+name='prefs_'+prefs.code
+__import__(name)
+
+import sys
+from InterfaceQT4 import eficas_go
 
 eficas_go.lance_eficas(code=prefs.code)
diff --git a/Aster/qtGroup.py b/Aster/qtGroup.py
new file mode 100755 (executable)
index 0000000..930d1cf
--- /dev/null
@@ -0,0 +1,35 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+"""
+   Ce module sert à lancer EFICAS configuré pour Code_Aster
+"""
+# Modules Python
+
+# Modules Eficas
+import prefs
+name='prefs_'+prefs.code
+__import__(name)
+
+from InterfaceQT4 import eficas_go
+
+eficas_go.lance_eficas_ssIhm(code=prefs.code,fichier="/local/noyret/Eficas_Aster/cable.comm",version='v10.0')
index 04bd43474944987db0dadd7f57c55bbd4044c336..797e77673a4bc9679c8c2f93acbee4b653f02c59 100644 (file)
@@ -26,7 +26,7 @@ version="$Name:  $"[7:-2] or 'Test1_4'
 # ==========Path du noyau fourni par Aster====================
 path_Noyau="../../AccasAster"
 # ============================================================
-nom_distrib="Eficas"+version+"AsterSTA9"
+nom_distrib="Eficas"+version
 path_distrib=os.path.join("dist",nom_distrib)
 path_TextTools="/home/eficas/pkg/mxTools/egenix2.0.2pourWindows/mx/TextTools"
 dir_download= "/home/eficas/WWW/telechargement/eficas"
@@ -38,25 +38,30 @@ def main():
 
    copyfiles('../Editeur',os.path.join(path_distrib,'Editeur'),['*.py','faqs.txt'])
    copyfiles('../InterfaceTK',os.path.join(path_distrib,'InterfaceTK'),['*.py','faqs.txt'])
-   copyfiles('../InterfaceQT',os.path.join(path_distrib,'InterfaceQT'),['*.py'])
-   copyfiles('../Ui',os.path.join(path_distrib,'Ui'),['*.ui','makefile'])
+   copyfiles('../InterfaceQT4',os.path.join(path_distrib,'InterfaceQT4'),['*.py'])
+   copyfiles('../UiQT4',os.path.join(path_distrib,'UiQT4'),['*.ui','makefile'])
    copyfiles('../Traducteur',os.path.join(path_distrib,'Traducteur'),['*.py'])
    copyfiles('../Ihm',os.path.join(path_distrib,'Ihm'),['*.py'])
    copyfiles('../Extensions',os.path.join(path_distrib,'Extensions'),['*.py'])
    copyfiles('../Misc',os.path.join(path_distrib,'Misc'),['*.py'])
    copyfiles('../Accas',os.path.join(path_distrib,'Accas'),['*.py'])
    # AIDE
+   copyfiles('../Aide',os.path.join(path_distrib,'Aide'),['*_ASTER.adp'])
+   copyfiles('../Aide/fichiers_ASTER',os.path.join(path_distrib,'Aide','fichiers_ASTER'),['*'])
+   #pour Aster TK
    copyfiles('../AIDE',os.path.join(path_distrib,'AIDE'),['*.py'])
    copyfiles('../AIDE/fichiers',os.path.join(path_distrib,'AIDE','fichiers'),['*'])
    copyfiles('.',os.path.join(path_distrib,'AIDE','fichiers'),['INSTALL','NEWS'])
    copyfiles('../Editeur',os.path.join(path_distrib,'AIDE','fichiers'),['faqs.txt'])
    # Code_Aster
    copyfiles('../Aster',os.path.join(path_distrib,'Aster'),['prefs.py',
+                                                            'prefs_ASTER.py',
                                                             'editeur.ini',
                                                             'editeur_salome.ini',
                                                             'eficas_aster.py',
                                                             'qtEficas_aster.py',
                                                             'configuration.py',
+                                                            'configuration_ASTER.py',
                                                            'test_eficas.py',
                                                            'style.py',
                                                             '__init__.py'
@@ -69,9 +74,9 @@ def main():
    #copyfiles('Cata/cataSTA6',os.path.join(path_distrib,'Aster','Cata','cataSTA6'),['*.py'])
    #copyfiles('Cata/cataSTA6/Macro',os.path.join(path_distrib,'Aster','Cata','cataSTA6','Macro'),['*.py'])
 
-   copyfiles('Cata/cataSTA7',os.path.join(path_distrib,'Aster','Cata','cataSTA7'),['*.py'])
-   copyfiles('Cata/cataSTA7/Macro',os.path.join(path_distrib,'Aster','Cata','cataSTA7','Macro'),['*.py'])
-   copyfiles('Cata/cataSTA7/materiau',os.path.join(path_distrib,'Aster','Cata','cataSTA7/materiau'),['README.py'])
+   #copyfiles('Cata/cataSTA7',os.path.join(path_distrib,'Aster','Cata','cataSTA7'),['*.py'])
+   #copyfiles('Cata/cataSTA7/Macro',os.path.join(path_distrib,'Aster','Cata','cataSTA7','Macro'),['*.py'])
+   #copyfiles('Cata/cataSTA7/materiau',os.path.join(path_distrib,'Aster','Cata','cataSTA7/materiau'),['README.py'])
 
    copyfiles('Cata/cataSTA8',os.path.join(path_distrib,'Aster','Cata','cataSTA8'),['*.py'])
    copyfiles('Cata/cataSTA8/Macro',os.path.join(path_distrib,'Aster','Cata','cataSTA8/Macro'),['*.py'])
@@ -79,10 +84,14 @@ def main():
 
    copyfiles('Cata/cataSTA9',os.path.join(path_distrib,'Aster','Cata','cataSTA9'),['*.py'])
    copyfiles('Cata/cataSTA9/Macro',os.path.join(path_distrib,'Aster','Cata','cataSTA9/Macro'),['*.py'])
-   #copyfiles('Cata/cataSTA9/Messages',os.path.join(path_distrib,'Aster','Cata','cataSTA9/Messages'),['*.py'])
    copyfiles('Cata/cataSTA9/materiau',os.path.join(path_distrib,'Aster','Cata','cataSTA9/materiau'),['README.py'])
    copyfiles('Cata/cataSTA9/SD',os.path.join(path_distrib,'Aster','Cata','cataSTA9/SD'),['*.py'])
 
+   copyfiles('Cata/cataSTA10',os.path.join(path_distrib,'Aster','Cata','cataSTA10'),['*.py'])
+   copyfiles('Cata/cataSTA10/Macro',os.path.join(path_distrib,'Aster','Cata','cataSTA10/Macro'),['*.py'])
+   #copyfiles('Cata/cataSTA10/materiau',os.path.join(path_distrib,'Aster','Cata','cataSTA10/materiau'),['README.py'])
+   copyfiles('Cata/cataSTA10/SD',os.path.join(path_distrib,'Aster','Cata','cataSTA10/SD'),['*.py'])
+
    copyfiles('Cata',os.path.join(path_distrib,'Aster','Cata'),['*9c_clefs_docu'])
    copyfiles('../Aster/Cata',os.path.join(path_distrib,'Aster'),['aster.py',])
 
@@ -91,7 +100,7 @@ def main():
    copyfiles('../convert',os.path.join(path_distrib,'convert'),['*.py'])
    copyfiles('../convert/Parserv5',os.path.join(path_distrib,'convert','Parserv5'),['*.py'])
    copyfiles('../generator',os.path.join(path_distrib,'generator'),['*.py'])
-   copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.gif'])
+   copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.gif','*.png'])
    copyfiles('../Editeur/Patrons',os.path.join(path_distrib,'Editeur','Patrons'),['*.com*'])
    copyfiles('../Editeur/Patrons/ASTER',os.path.join(path_distrib,'Editeur','Patrons','ASTER'),['*.com*'])
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644 (file)
index 0000000..0f2d52b
--- /dev/null
@@ -0,0 +1,186 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+cmake_minimum_required ( VERSION 2.8 )
+
+project ( Eficas CXX C )
+
+# Definition du chemin d'acces aux modules additionnels
+set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeModules" )
+
+# Detection de Python
+find_package ( PythonInterp 2.4 REQUIRED )
+if (PYTHONINTERP_FOUND)
+  string ( RANDOM tmpPyScript )
+  set ( tmpPyScript "${tmpPyScript}.py" )
+  file ( WRITE  ${tmpPyScript}
+"# Automaticaly generated by CMake. Do NOT edit. Changes will be lost
+import sys
+print '%d.%d' % ( sys.version_info[0], sys.version_info[1] )
+" )
+  get_source_file_property ( PYSCRIPT_LOC ${tmpPyScript} LOCATION )
+  execute_process ( COMMAND ${PYTHON_EXECUTABLE} ${PYSCRIPT_LOC}
+                    OUTPUT_VARIABLE PYTHON_VERSION
+                   #ERROR_QUIET
+                   OUTPUT_STRIP_TRAILING_WHITESPACE )
+  file ( REMOVE ${tmpPyScript} )
+endif (PYTHONINTERP_FOUND)
+message ( STATUS "Using Python version ${PYTHON_VERSION}" )
+# Detection de QT4
+find_package ( Qt4 COMPONENTS QtCore QtGui REQUIRED )
+include( ${QT_USE_FILE} )
+
+# Detection de PyQt4
+if (NOT PYQT4_FOUND)
+  execute_process ( COMMAND ${PYTHON_EXECUTABLE} -c "\"import PyQt4\""
+                    RESULT_VARIABLE _res
+                   OUTPUT_VARIABLE _trashout
+                   ERROR_VARIABLE  _trasherr
+                  )
+  if (NOT _res)
+    message ( STATUS "Looking for Python package PyQt4 - found" )
+    set ( PYQT4_FOUND 1 CACHE INTERNAL "True if Python package PyQt4 is here" )
+  else (NOT _res)
+    message ( STATUS "Looking for Python package PyQt4 - not found" )
+    set ( PYQT4_FOUND 0 CACHE INTERNAL "True if Python package PyQt4 is here" )
+  endif (NOT _res)
+endif (NOT PYQT4_FOUND)
+
+if (NOT PYQT4_FOUND)
+  message ( FATAL_ERROR "Python package PyQt4 is REQUIRED" )
+endif (NOT PYQT4_FOUND)
+
+# Detection de pyuic4
+find_program ( PYUIC4 NAMES pyuic4
+               DOC  "Path to the pyuic4 compilation tool"
+             )
+if (NOT PYUIC4)
+  message ( FATAL_ERROR "pyuic4 tool is REQUIRED" )
+endif (NOT PYUIC4)
+
+# Definition des options de CMake
+option ( WITH_ALL_PACKAGES "Install all package files" OFF )
+option ( WITH_SALOME_MECA  "Install OT, Aster and SEP files" OFF )
+option ( WITH_OPENTURNS    "Install Open TURNS files"  OFF )
+option ( WITH_ASTER        "Install Aster files"       OFF )
+option ( WITH_MAP          "Install MAP files"         OFF )
+option ( WITH_SEP          "Install SEP files"         OFF )
+
+set ( _OPTIONLIST
+  WITH_OPENTURNS 
+  WITH_ASTER
+  WITH_MAP
+  WITH_SEP
+  WITH_TK
+  WITH_SALOME_MECA
+  )
+
+set ( _SALOME_MECA_LIST
+  WITH_OPENTURNS 
+  WITH_ASTER
+  WITH_SEP
+  )
+
+if (WITH_ALL_PACKAGES)
+  foreach ( _opt ${_OPTIONLIST} )
+    set ( ${_opt} ON )
+  endforeach ( _opt )
+endif (WITH_ALL_PACKAGES)
+
+if (WITH_SALOME_MECA)
+  foreach ( _opt ${_SALOME_MECA_LIST} )
+    set ( ${_opt} ON )
+  endforeach ( _opt )
+endif (WITH_SALOME_MECA)
+
+# Verification: au moins une option doit etre selectionnee
+set ( _VALIDOPT FALSE )
+foreach ( _opt ${_OPTIONLIST} )
+  if ( ${_opt} )
+    set ( _VALIDOPT TRUE )
+    string ( REPLACE WITH_ "" _opt2 ${_opt} )
+    message ( STATUS "Will install package ${_opt2}" )
+  endif ( ${_opt} )
+endforeach ( _opt )
+if ( NOT ${_VALIDOPT} )
+  message ( FATAL_ERROR "At least one option within ${_OPTIONLIST} must be selected" )
+endif ( NOT ${_VALIDOPT} )
+
+# Detection des prerequis lies aux options
+if (WITH_OPENTURNS)
+  find_package ( OpenTURNS REQUIRED )
+endif (WITH_OPENTURNS)
+
+#if (WITH_ASTER)
+#  find_package ( Aster REQUIRED )
+#endif (WITH_ASTER)
+
+#if (WITH_MAP)
+#  find_package ( MAP REQUIRED )
+#endif (WITH_MAP)
+
+
+# Parcours recursif des sous-repertoires
+add_subdirectory ( Accas )
+add_subdirectory ( Aide )
+add_subdirectory ( Editeur )
+add_subdirectory ( Extensions )
+add_subdirectory ( Ihm )
+add_subdirectory ( InterfaceQT4 )
+add_subdirectory ( Noyau )
+add_subdirectory ( UiQT4 )
+add_subdirectory ( Validation )
+add_subdirectory ( convert )
+add_subdirectory ( generator )
+
+# Installation des fichiers : Open TURNS
+if (WITH_OPENTURNS)
+  add_subdirectory ( Openturns_Study )
+  add_subdirectory ( Openturns_Wrapper )
+endif (WITH_OPENTURNS)
+
+# Installation des fichiers : Aster
+if (WITH_ASTER)
+  add_subdirectory ( Aster )
+  add_subdirectory ( Traducteur )
+endif (WITH_ASTER)
+
+if (WITH_TK)
+  add_subdirectory ( InterfaceTK )
+  add_subdirectory ( Pmw )
+  add_subdirectory ( Tools )
+  add_subdirectory ( Misc )
+  add_subdirectory ( AIDE )
+endif (WITH_TK)
+
+# Installation des fichiers : MAP
+if (WITH_MAP)
+  add_subdirectory ( Map )
+endif (WITH_MAP)
+
+# Installation des fichiers : Sep
+if (WITH_SEP)
+  add_subdirectory ( Sep )
+endif (WITH_SEP)
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/CMakeModules/FindOpenTURNS.cmake b/CMakeModules/FindOpenTURNS.cmake
new file mode 100644 (file)
index 0000000..c16a56e
--- /dev/null
@@ -0,0 +1,235 @@
+# - Try to find OpenTURNS
+# Once done this will define
+#
+#  OpenTURNS_FOUND - system has OT
+#  OpenTURNS_INCLUDE_DIR - the OT include directory
+#  OpenTURNS_INCLUDE_DIRS - the OT include directory and dependencies include directories
+#  OpenTURNS_LIBRARY - Where to find the OT library
+#  OpenTURNS_LIBRARIES - Link these to use OT
+#  OpenTURNS_WRAPPER_DIR - Wrappers directory
+#  OpenTURNS_WRAPPER_DEFINITIONS - Compiler switches required for using OT wrapper
+#  OpenTURNS_MODULE_DIR - OT module directory
+#  OpenTURNS_MODULE_DEFINITIONS - Compiler switches required for using OT module
+#  OpenTURNS_SWIG_INCLUDE_DIR - the OT include directory to swig interface
+#
+#  Copyright (c) 2009 Mathieu Lapointe <lapointe@phimeca.com>
+#  Copyright (c) 2010 Julien Schueller <schueller@phimeca.com>
+#
+#  Redistribution and use is allowed according to the terms of the New
+#  BSD license.
+#  For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+#
+
+include (CheckFunctionExists)
+include (CheckIncludeFile)
+include (CheckIncludeFileCXX)
+include (FindPackageHandleStandardArgs)
+
+# check dependencies
+find_package(LibXml2 2.6.27)
+find_package(PythonLibs ${PYTHON_VERSION})
+
+# test if variables are not already in cache
+if (NOT (OpenTURNS_INCLUDE_DIR
+          AND OpenTURNS_SWIG_INCLUDE_DIR
+          AND OpenTURNS_INCLUDE_DIRS
+          AND OpenTURNS_LIBRARY
+          AND OpenTURNS_LIBRARIES
+          AND OpenTURNS_WRAPPER_DIR
+          AND OpenTURNS_PYTHON_MODULE_DIR
+          AND OpenTURNS_MODULE_DIR))
+
+  # set include dir
+  if (NOT OpenTURNS_INCLUDE_DIR)
+    find_path (OpenTURNS_INCLUDE_DIR
+      NAMES
+        OT.hxx
+      HINTS
+        ${OPENTURNS_DIR}
+        /usr
+        /usr/local
+        /opt
+      PATH_SUFFIXES
+        include/openturns
+      DOC
+        "OpenTURNS include directory"
+    )
+  endif ()
+
+  # set swig include dir
+  if (NOT OpenTURNS_SWIG_INCLUDE_DIR)
+    set(OpenTURNS_SWIG_INCLUDE_DIR "${OpenTURNS_INCLUDE_DIR}/swig")
+  endif ()
+
+  # dependencies includes
+  if (NOT OpenTURNS_INCLUDE_DIRS)
+    set (OpenTURNS_INCLUDE_DIRS ${OpenTURNS_INCLUDE_DIR})
+    list (APPEND OpenTURNS_INCLUDE_DIRS ${LIBXML2_INCLUDE_DIR})
+    list (APPEND OpenTURNS_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
+  endif ()
+
+  # check for library directory
+  if (NOT OpenTURNS_LIBRARY)
+    find_library (OpenTURNS_LIBRARY
+      NAMES
+        OT
+      HINTS
+        ${OPENTURNS_DIR}
+        /usr
+        /usr/local
+        /opt
+      PATH_SUFFIXES
+        lib/openturns
+      DOC
+        "OpenTURNS library location"
+    )
+  endif ()
+
+  # find dependent libraries
+  if (NOT OpenTURNS_LIBRARIES)
+    set (OpenTURNS_LIBRARIES ${OpenTURNS_LIBRARY} ${LIBXML2_LIBRARIES} ${PYTHON_LIBRARIES})
+    list (APPEND OpenTURNS_LIBRARIES ${LIBXML2_LIBRARIES})
+    list (APPEND OpenTURNS_LIBRARIES ${PYTHON_LIBRARIES})
+  endif ()
+
+  # retrieve path to lib
+  get_filename_component (OpenTURNS_LIBRARY_PATH ${OpenTURNS_LIBRARY} PATH)
+
+  # retrieve install path
+  set (OpenTURNS_INSTALL_PATH "${OpenTURNS_LIBRARY_PATH}/../..")
+
+  # find wrappers dir
+  if (NOT OpenTURNS_WRAPPER_DIR)
+    find_path (OpenTURNS_WRAPPER_DIR
+      NAMES
+        wrapper.xml wrapper.dtd
+      HINTS
+        ${OPENTURNS_DIR}
+        ${OpenTURNS_INSTALL_PATH}
+        /usr
+        /usr/local
+        /opt
+      PATH_SUFFIXES
+        share/openturns/wrappers
+      DOC
+        "OpenTURNS wrappers location"
+    )
+  endif ()
+
+  # set wrapper definitions
+  if (NOT OpenTURNS_WRAPPER_DEFINITIONS)
+    set(OpenTURNS_WRAPPER_DEFINITIONS)
+    check_include_file_cxx (pthread.h HAVE_PTHREAD_H)
+    if (HAVE_PTHREAD_H)
+      list (APPEND OpenTURNS_WRAPPER_DEFINITIONS -DHAVE_PTHREAD_H)
+    endif ()
+  endif ()
+
+  # find python module dir
+  if (NOT OpenTURNS_PYTHON_MODULE_DIR)
+    find_path (OpenTURNS_PYTHON_MODULE_DIR
+      NAMES
+        openturns.pth
+      HINTS
+        ${OPENTURNS_DIR}
+        ${OpenTURNS_INSTALL_PATH}
+        /usr
+        /usr/local
+        /opt
+      PATH_SUFFIXES
+        lib/python${PYTHON_VERSION}/site-packages
+      DOC
+        "OpenTURNS python module location"
+    )
+  endif ()
+
+
+  # find module directory
+  if (NOT OpenTURNS_MODULE_DIR)
+    set (OpenTURNS_MODULE_DIR
+      ${OpenTURNS_LIBRARY_PATH}/module
+    )
+  endif ()
+
+  # set module definitions
+  if (NOT OpenTURNS_MODULE_DEFINITIONS)
+    set (OpenTURNS_MODULE_DEFINITIONS)
+
+    # check for STDC_HEADERS
+    check_include_file (stdlib.h HAVE_STDLIB_H)
+    check_include_file (stdarg.h HAVE_STDARG_H)
+    check_include_file (string.h HAVE_STRING_H)
+    check_include_file (float.h HAVE_FLOAT_H)
+    check_function_exists (memchr HAVE_MEMCHR)
+    check_function_exists (free HAVE_FREE)
+    check_include_file (ctype.h HAVE_CTYPE_H)
+    if(HAVE_STDLIB_H AND HAVE_STDARG_H AND HAVE_STRING_H AND HAVE_FLOAT_H AND HAVE_MEMCHR AND HAVE_FREE AND HAVE_CTYPE_H)
+      list (APPEND OpenTURNS_MODULE_DEFINITIONS -DSTDC_HEADERS_H=1)
+    else ()
+      list (APPEND OpenTURNS_MODULE_DEFINITIONS -DSTDC_HEADERS_H=0)
+    endif ()
+
+    # this macro checks a header and defines the corresponding macro
+    macro(check_include_files_define_macro header_file)
+      # get macro name from header_file
+      string(TOUPPER ${header_file} macro_name)
+      string(REGEX REPLACE "[/.]" "_" macro_name ${macro_name})
+      set(macro_name HAVE_${macro_name})
+      # check for header
+      check_include_file(${header_file} ${macro_name})
+      # define macro
+      if(${macro_name})
+        list (APPEND OpenTURNS_MODULE_DEFINITIONS -D${macro_name}=1)
+      else()
+        list (APPEND OpenTURNS_MODULE_DEFINITIONS -D${macro_name}=0)
+      endif()
+    endmacro()
+
+    # check for some headers
+    check_include_files_define_macro(sys/types.h)
+    check_include_files_define_macro(sys/stat.h)
+    check_include_files_define_macro(stdlib.h)
+    check_include_files_define_macro(string.h)
+    check_include_files_define_macro(memory.h)
+    check_include_files_define_macro(strings.h)
+    check_include_files_define_macro(inttypes.h)
+    check_include_files_define_macro(stdint.h)
+    check_include_files_define_macro(unistd.h)
+    check_include_files_define_macro(dlfcn.h)
+    check_include_files_define_macro(stdbool.h)
+    check_include_files_define_macro(regex.h)
+
+  endif ()
+
+endif ()
+
+# handle the QUIETLY and REQUIRED arguments and set OpenTURNS_FOUND to TRUE if
+# all listed variables are TRUE
+find_package_handle_standard_args (OpenTURNS DEFAULT_MSG
+  OpenTURNS_LIBRARY
+  OpenTURNS_INCLUDE_DIR
+  OpenTURNS_SWIG_INCLUDE_DIR
+  OpenTURNS_INCLUDE_DIRS
+  OpenTURNS_LIBRARIES
+  OpenTURNS_WRAPPER_DIR
+  OpenTURNS_PYTHON_MODULE_DIR
+  OpenTURNS_MODULE_DIR
+)
+
+mark_as_advanced (
+  OpenTURNS_LIBRARY
+  OpenTURNS_INCLUDE_DIR
+  OpenTURNS_SWIG_INCLUDE_DIR
+  OpenTURNS_INCLUDE_DIRS
+  OpenTURNS_LIBRARIES
+  OpenTURNS_WRAPPER_DIR
+  OpenTURNS_WRAPPER_DEFINITIONS
+  OpenTURNS_MODULE_DIR
+  OpenTURNS_PYTHON_MODULE_DIR
+  OpenTURNS_MODULE_DEFINITIONS
+)
+
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/Cuve2dg/Cuve2dg_Cata_V1.py b/Cuve2dg/Cuve2dg_Cata_V1.py
new file mode 100644 (file)
index 0000000..47e2364
--- /dev/null
@@ -0,0 +1,2264 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'CUVE1D-DEFAILLGLOB',
+                 execmodul = None,
+                 regles = ( AU_MOINS_UN ('OPTIONS','DEFAUT', 'CUVE', 'MODELES', 'INITIALISATION', 'REVETEMENT', 'METAL_BASE', 'TRANSITOIRE'), 
+                            AU_MOINS_UN ( 'FIN' ), 
+                            A_CLASSER ( ('OPTIONS', 'DEFAUT', 'CUVE', 'MODELES', 'INITIALISATION', 'REVETEMENT', 'METAL_BASE', 'TRANSITOIRE'),'FIN')
+                          )
+                 ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+
+
+
+
+
+#================================
+# 1. Definition des OPTIONS
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+
+OPTIONS = OPER ( nom = "OPTIONS",
+                 sd_prod = loi,
+                 op = 68,
+                 fr = "Definitions des options", 
+
+#===
+# Liste des paramètres
+#===
+
+  INCRTPS = SIMP ( statut = "o",
+                   typ = "I",
+                   defaut = "1",
+                  max = 1,
+                   val_max = 100,
+                   fr = "Increment temporel (=1 pour calcul deterministe)",
+                  ),
+
+  DTPREC = SIMP ( statut = "o",
+                  typ = "R",
+                  defaut = "0.1",
+                  max = 1,
+                  val_max = 1.,
+                  fr = "Increment maximum d'evolution de la temperature par noeud et par instant (°C)",
+                ),
+
+  DTARCH = SIMP ( statut = "o",
+                  typ = "R",
+                  defaut = "1000.",
+                 max = 1,
+                  val_max = 1000.,
+                  fr = "Increment maximum de temps pour l'affichage (s)",
+                ),
+
+  NBO = SIMP ( statut = "o",
+               typ = "R",
+              max=1,
+               val_max = 1000.,
+               fr = "Nombre de noeuds a considerer dans le maillage interne",
+              ),
+
+  Liste_instants = SIMP ( statut = "o",
+                          typ = "R",
+                          max = "**",
+                          fr = "Liste des instants ",
+                        ),
+
+) # Fin OPER OPTIONS
+
+#================================
+# 2. Caracteristiques du DEFAUT
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+DEFAUT = OPER ( nom = "DEFAUT",
+                sd_prod = loi,
+                op = 68,
+                fr = "Caracteristiques du defaut", 
+
+#===
+# Liste des paramètres
+#===
+
+  TYPEDEF = SIMP ( statut = "o", typ = "TXM",
+                   into = ( "DSR",
+                            "DD",
+                          ),
+                   #defaut = "DSR",
+                   fr = "Type de defaut : sous revetement ou debouchant",
+                  ),
+
+#====
+# Definition des parametres selon le type du defaut
+#====
+
+  Parametres_DSR = BLOC ( condition = " TYPEDEF in ( 'DSR', ) ",
+
+                  ORIEDEF = SIMP ( statut = "o",
+                                   typ = "TXM",
+                                   into = ( "LONGITUD", "CIRCONF" ),
+                                   #defaut = "LONGITUD",
+                                   fr = "Orientation du defaut : longitudinale ou circonferentielle",
+                                 ),
+
+                  PROFDEF = SIMP ( statut = "o",
+                                   typ = "R",
+                                   #defaut = "0.006",
+                                   max = 1,
+                                   val_max = 1.,
+                                   fr = "Profondeur radiale du defaut (m)",
+                                 ),
+
+                  OPTLONG = SIMP ( statut = "o",
+                                   typ = "TXM",
+                                   into = ( "VALEUR", "RAPPORT" ),
+                                   #defaut = "VALEUR",
+                                   fr = "Option pour caracteriser la longueur du defaut : soit par valeur, soit par un rapport LONG/PROF",
+                                 ),
+
+                    Option_Valeur = BLOC ( condition = "OPTLONG in ( 'VALEUR', ) ",
+
+                            LONGDEF = SIMP ( statut = "o",
+                                             typ = "R",
+                                             #defaut = "0.060",
+                                             max = 1,
+                                             val_max = 1.,
+                                             fr = "Longueur du defaut sous revetement (m)",
+                                            ),
+
+                                         ), # Fin BLOC Option_Valeur
+
+                    Option_Rapport = BLOC ( condition = "OPTLONG in ( 'RAPPORT', ) ",
+
+                            LONGSURPROF = SIMP ( statut = "o",
+                                                 typ = "R",
+                                                 #defaut = "6.",
+                                                 max = 1,
+                                                 val_max = 100.,
+                                                 fr = "Rapport longueur/profondeur du defaut sous revetement",
+                                                ),
+
+                                          ), # Fin BLOC Option_Rapport
+
+                  DECADEF = SIMP ( statut = "o",
+                                   typ = "R",
+                                   #defaut = "-0.00001",
+                                   fr = "Decalage radial du defaut sous revetement (m)",
+                                  ),
+
+                  ANGLDEF = SIMP ( statut = "o",
+                                   typ = "R",
+                                   defaut = "0.",
+                                   fr = "Coordonnee angulaire du defaut (degres)",
+                                  ),
+
+                  ALTIDEF = SIMP ( statut = "o",
+                                   typ = "R",
+                                   defaut = "2.",
+                                   fr = "Altitude du defaut (m)",
+                                  ),
+
+                  POINDEF = SIMP ( statut = "o",
+                                   typ = "TXM",
+                                   into = ( "A", "B" ),
+                                   defaut = "A",
+                                   fr = "Choix du point considere du defaut sous revetement",
+                                  ),
+
+                  ARRETFISSURE = SIMP ( statut = "o",
+                                        typ = "TXM",
+                                        into = ( "OUI", "NON" ),
+                                        defaut = "NON",
+                                        fr = "Prise en compte de l arret de fissure",
+                                       ),
+
+                  INCRDEF = SIMP ( statut = "o",
+                                   typ = "R",
+                                   defaut = "0.005",
+                                   fr = "Increment de la taille de fissure (m)",
+                                  ),
+
+                  CORRECPLASTIC = SIMP ( statut = "o",
+                                         typ = "TXM",
+                                         into = ( "OUI", "NON" ),
+                                         defaut = "NON",
+                                         fr = "Prise en compte de la correction plastique BETA ",
+                                        ),
+
+                         ), # Fin BLOC Parametres_DSR
+
+  Parametres_DD = BLOC ( condition = " TYPEDEF in ( 'DD', ) ",
+
+                  ORIEDEF = SIMP ( statut = "o",
+                                   typ = "TXM",
+                                   into = ( "LONGITUD", "CIRCONF" ),
+                                   #defaut = "LONGITUD",
+                                   fr = "Orientation du defaut : longitudinale ou circonferentielle",
+                                  ),
+
+                  PROFDEF = SIMP ( statut = "o",
+                                   typ = "R",
+                                   #defaut = "0.006",
+                                   max = 1,
+                                   val_max = 1.,
+                                   fr = "Profondeur radiale du defaut (m)",
+                                  ),
+
+                  ANGLDEF = SIMP ( statut = "o",
+                                   typ = "R",
+                                   defaut = "0.",
+                                   fr = "Coordonnee angulaire du defaut (degres)",
+                                  ),
+
+                  ALTIDEF = SIMP ( statut = "o",
+                                   typ = "R",
+                                   defaut = "2.",
+                                   fr = "Altitude du defaut (m)",
+                                  ),
+
+                  ARRETFISSURE = SIMP ( statut = "o",
+                                        typ = "TXM",
+                                        into = ( "OUI", "NON" ),
+                                        defaut = "NON",
+                                        fr = "Prise en compte de l arret de fissure",
+                                       ),
+
+                  INCRDEF = SIMP ( statut = "o",
+                                   typ = "R",
+                                   defaut = "0.005",
+                                   fr = "Increment de la taille de fissure (m)",
+                                  ),
+
+                  IRWIN = SIMP ( statut = "o",
+                                 typ = "TXM",
+                                 into = ( "OUI", "NON" ),
+                                 defaut = "NON",
+                                 fr = "Prise en compte de la correction plastique d'Irwin ",
+                                ),
+
+                  CORRECPLASTIC = SIMP ( statut = "o",
+                                         typ = "TXM",
+                                         into = ( "OUI", "NON" ),
+                                         defaut = "NON",
+                                         fr = "Prise en compte de la correction plastique BETA ",
+                                        ),
+
+                        ), # Fin BLOC Parametres_DD 
+
+) # Fin OPER DEFAUT
+
+
+#================================
+# 3. Caracteristiques de la CUVE
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+CUVE = OPER (nom = "CUVE",
+             sd_prod = loi,
+             op = 68,
+             fr = "Caracteristiques de la cuve", 
+
+#===
+# Liste des paramètres
+#===
+
+  TYPEGEOM = SIMP ( statut = "o",
+                    typ = "TXM",
+                   into = ( "GEOMETRIE", "MAILLAGE"), 
+                    #defaut = "GEOMETRIE",
+                    fr = "Traitement de la geometrie d'une cuve",
+                   ),
+
+
+#====
+# Definition des parametres selon le type de traitement de la geometrie
+#====
+
+  Geometrie = BLOC ( condition = " TYPEGEOM in ( 'GEOMETRIE', ) ",
+
+                  RINT = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "1.994",
+                                fr = "Rayon interne de la cuve (m)",
+                               ),
+
+                  REXT = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "2,2015",
+                                fr = "Rayon externe de la cuve (m)",
+                               ),
+
+                  LREV = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "0.0075",
+                                fr = "Epaisseur du revetement (m)",
+                               ),
+
+                  LIGMIN = SIMP ( statut = "o",
+                                  typ = "R",
+                                  defaut = "0.75",
+                                  fr = "Ligament externe minimal avant rupture (% de l'epaisseur de cuve)",
+                                 ),
+
+                     ), # Fin BLOC  Geometrie
+
+  Maillage = BLOC ( condition = " TYPEGEOM in ( 'MAILLAGE', ) ",
+
+                  Liste_abscisses = SIMP ( statut = "o",
+                                           typ = "R",
+                                           max = "**",
+                                           fr = "Liste des abscisses (m) A FAIRE",
+                                          ),
+                   ), # Fin BLOC Maillage
+
+) # Fin OPER CUVE
+
+#====================================================
+# 4. Modeles de fluence, d'irradiation et de tenacite
+#====================================================
+
+#=======================
+# 4.1 Modeles de fluence
+#=======================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+MODELES = OPER ( nom = "MODELES",
+                 sd_prod = loi,
+                 op = 68,
+                 fr = "Modeles de fluence, d'irradiation et de tenacite", 
+
+
+#===
+# Liste des paramètres
+#===
+
+  MODELFLUENCE = SIMP ( statut = "o",
+                        typ = "TXM",
+                       into = ( "Reglementaire", "France", "ValeurImposee", "SDM", "USNRC", "REV_2", "SDM_Lissage", "GrandeDev", "GD_Cuve"), 
+                        #defaut = "Reglementaire",
+                        fr = "Modele d'attenuation de la fluence dans l'epaisseur de la cuve",
+                       ),
+
+
+#====
+# Definition des parametres selon le modele de fluence
+#====
+
+  Reglementaire = BLOC ( condition = " MODELFLUENCE in ( 'Reglementaire', ) ",
+
+                  fmax = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "6.5",
+                                fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                               ),
+
+                        ), # Fin BLOC Reglementaire
+
+  France = BLOC ( condition = " MODELFLUENCE in ( 'France', ) ",
+
+                  fmax = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "6.5",
+                                fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                               ),
+
+                 KPFRANCE = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "12.7",
+                                    fr = "Parametre exponentiel du modele France",
+                                   ),
+
+                   ), # Fin BLOC France
+
+  ValeurImposee = BLOC ( condition = " MODELFLUENCE in ( 'ValeurImposee', ) ",
+
+                  fmax = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "6.5",
+                                fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                               ),
+
+                         ), # Fin BLOC ValeurImposee
+
+  SDM = BLOC ( condition = " MODELFLUENCE in ( 'SDM', ) ",
+
+                  fmax = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "6.5",
+                                fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                               ),
+
+              ), # Fin BLOC SDM
+
+  USNRC = BLOC ( condition = " MODELFLUENCE in ( 'USNRC', ) ",
+
+                  fmax = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "6.5",
+                                fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                               ),
+
+                 KPUS = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "9.4488",
+                                fr = "Parametre exponentiel du modele US",
+                               ),
+
+                ), # Fin BLOC USNRC
+
+  REV_2 = BLOC ( condition = " MODELFLUENCE in ( 'REV_2', ) ",
+
+                  fmax = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "6.5",
+                                fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                               ),
+
+                ), # Fin BLOC REV_2
+
+  SDM_Lissage = BLOC ( condition = " MODELFLUENCE in ( 'SDM_Lissage', ) ",
+
+                  fmax = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "6.5",
+                                fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                               ),
+
+                      ), # Fin BLOC SDM_Lissage
+
+  GrandeDev = BLOC ( condition = " MODELFLUENCE in ( 'GrandeDev', ) ",
+
+                  fmax = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "6.5",
+                                fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                               ),
+
+                     ), # Fin BLOC GrandeDev
+
+  GD_Cuve = BLOC ( condition = " MODELFLUENCE in ( 'GD_Cuve', ) ",
+
+                  fmax = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "6.5",
+                                fr = "Fluence maximale assimilee par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                               ),
+
+                  COEFFLUENCE1 = SIMP ( statut = "o",
+                                        typ = "R",
+                                        defaut = "5.8",
+                                        fr = "Fluence a l'azimut 0 (10^19 n/cm)",
+                                       ),
+
+                  COEFFLUENCE2 = SIMP ( statut = "o",
+                                        typ = "R",
+                                        defaut = "5.48",
+                                        fr = "Fluence a l'azimut 5 (10^19 n/cm)",
+                                       ),
+
+                  COEFFLUENCE3 = SIMP ( statut = "o",
+                                        typ = "R",
+                                        defaut = "4.46",
+                                        fr = "Fluence a l'azimut 10 (10^19 n/cm)",
+                                       ),
+
+                  COEFFLUENCE4 = SIMP ( statut = "o",
+                                        typ = "R",
+                                        defaut = "3.41",
+                                        fr = "Fluence a l'azimut 15 (10^19 n/cm)",
+                                       ),
+
+                  COEFFLUENCE5 = SIMP ( statut = "o",
+                                        typ = "R",
+                                        defaut = "3.37",
+                                        fr = "Fluence a l'azimut 20 (10^19 n/cm)",
+                                       ),
+
+                  COEFFLUENCE6 = SIMP ( statut = "o",
+                                        typ = "R",
+                                        defaut = "3.16",
+                                        fr = "Fluence a l'azimut 25 (10^19 n/cm)",
+                                       ),
+
+                  COEFFLUENCE7 = SIMP ( statut = "o",
+                                        typ = "R",
+                                        defaut = "2.74",
+                                        fr = "Fluence a l'azimut 30 (10^19 n/cm)",
+                                       ),
+
+                  COEFFLUENCE8 = SIMP ( statut = "o",
+                                        typ = "R",
+                                        defaut = "2.25",
+                                        fr = "Fluence a l'azimut 35 (10^19 n/cm)",
+                                       ),
+
+                  COEFFLUENCE9 = SIMP ( statut = "o",
+                                        typ = "R",
+                                        defaut = "1.89",
+                                        fr = "Fluence a l'azimut 40 (10^19 n/cm)",
+                                       ),
+
+                  COEFFLUENCE10 = SIMP ( statut = "o",
+                                        typ = "R",
+                                        defaut = "1.78",
+                                        fr = "Fluence a l'azimut 45 (10^19 n/cm)",
+                                       ),
+
+                  ), # Fin BLOC GD_Cuve
+
+#==========================
+# 4.2 Modeles d'irradiation
+#==========================
+
+  TYPIRR = SIMP ( statut = "o",
+                  typ = "TXM",
+                 into = ( "RTNDT", "FLUENCE" ),
+                  #defaut = "RTNDT",
+                  fr = "Type d'irradiation ",
+                 ),
+
+#====
+# Definition des parametres selon le type d'irradiation
+#====
+
+  Parametres_RTNDT = BLOC ( condition = " TYPIRR in ( 'RTNDT', ) ",
+                  RTNDT = SIMP ( statut = "o",
+                                 typ = "R",
+                                 defaut = "73.",
+                                 fr = "RTNDT finale (°C)",
+                                ),
+
+                            ), # Fin BLOC Parametres_RTNDT
+
+  Parametres_FLUENCE = BLOC ( condition = " TYPIRR in ( 'FLUENCE', ) ",
+                  MODELIRR = SIMP ( statut = "o",
+                                    typ = "TXM",
+                                   into = ( "HOUSSIN", "PERSOZ", "LEFEBVRE", "USNRCmdb", "BRILLAUD", "USNRCsoud" ),
+                                    #defaut = "HOUSSIN",
+                                    fr = "Modele d'irradiation pour virole ou joint soude",
+                                   ),
+
+                  CU = SIMP ( statut = "o",
+                              typ = "R",
+                              defaut = "0.",
+                              fr = "Teneur en cuivre (%)",
+                             ),
+
+                  Ni = SIMP ( statut = "o",
+                              typ = "R",
+                              defaut = "0.",
+                              fr = "Teneur en nickel (%)",
+                             ),
+
+                  P = SIMP ( statut = "o",
+                             typ = "R",
+                             defaut = "0.",
+                             fr = "Teneur en phosphore (%)",
+                            ),
+
+                  RTimoy = SIMP ( statut = "o",
+                                  typ = "R",
+                                  defaut = "0.",
+                                  fr = "Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)",
+                                 ),
+
+                  RTicov = SIMP ( statut = "o",
+                                  typ = "R",
+                                  defaut = "0.",
+                                  fr = "Coefficient de variation de la RTNDT initiale",
+                                 ),
+
+  Parametres_USNRC = BLOC ( condition = " MODELIRR in ( 'USNRCsoud', 'USNRCmdb' , ) ",
+                  USectDRT = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "28.",
+                                    fr = "pour modeles USNRCsoud ou USNRCmdb, ecart-type du decalage de RTNDT (°F) (28. pour js et 17. pour mdb)",
+                                   ),
+
+                           ), # Fin BLOC Parametres_USNRC 
+
+                  nbectDRTNDT = SIMP ( statut = "o",
+                                       typ = "R",
+                                       defaut = "2.",
+                                       fr = "Nombre d ecart-type par rapport a la moyenne de DRTNDT",
+                                      ),
+
+                           ), # Fin BLOC Parametres_FLUENCE
+
+#========================
+# 4.3 Modeles de tenacite
+#========================
+
+  MODELKIC = SIMP ( statut = "o",
+                    typ = "TXM",
+                   into = ( "RCC-M", "RCC-M_pal", "RCC-M_exp", "Houssin_RC", "Wallin", "REME", "ORNL", "Frama", "WEIB3", "WEIB2", "LOGWOLF", "WEIB_GEN" ),
+                    #defaut = "RCC-M",
+                    fr = "Modele de tenacite ",
+                   ),
+
+#====
+# Definition des parametres selon le modele de tenacité
+#====
+
+  Parametres_RCCM = BLOC ( condition = " MODELKIC in ( 'RCC-M', ) ",
+
+                  nbectKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+                                   ),
+
+                  fractKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "5.",
+                                    fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+                                   ),
+
+                  KICPAL = SIMP ( statut = "o",
+                                  typ = "R",
+                                  defaut = "195.",
+                                  fr = "palier deterministe de K1c quand modele RCC-M  (MPa(m^0.5)) ",
+                                 ),
+
+                  KICCDV = SIMP ( statut = "o",
+                                  typ = "R",
+                                  defaut = "0.15",
+                                  fr = "coef de variation de la loi normale de K1c quand modele RCC-M ",
+                                 ),
+
+                  nbectKIa = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+                                   ),
+
+
+                  KIAPAL = SIMP ( statut = "o",
+                                  typ = "R",
+                                  defaut = "195.",
+                                  fr = "palier deterministe de K1a -tenacite a l'arret- quand modele RCC-M  (MPa(m^0.5)) ",
+                                 ),
+
+                  KIACDV = SIMP ( statut = "o",
+                                  typ = "R",
+                                  defaut = "0.10",
+                                  fr = "coef de variation de la loi normale de K1a -tenacite a l'arret- quand modele RCC-M ",
+                                 ),
+
+                          ), # Fin BLOC Parametres_RCC-M
+
+  Parametres_RCCMpal = BLOC ( condition = " MODELKIC in ( 'RCC-M_pal', ) ",
+
+                  nbectKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+                                   ),
+
+                  fractKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "5.",
+                                    fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+                                   ),
+
+                  nbectKIa = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+                                   ),
+
+                             ), # Fin BLOC Parametres_RCCMpal
+
+  Parametres_RCCMexp = BLOC ( condition = " MODELKIC in ( 'RCC-M_exp', ) ",
+
+                  nbectKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+                                   ),
+
+                  fractKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "5.",
+                                    fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+                                   ),
+
+                  nbectKIa = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+                                   ),
+
+                             ), # Fin BLOC Parametres_RCCMexp
+
+  Parametres_Houssin_RC = BLOC ( condition = " MODELKIC in ( 'Houssin_RC', ) ",
+
+                  nbectKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+                                   ),
+
+                  fractKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "5.",
+                                    fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+                                   ),
+
+                  nbectKIa = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+                                   ),
+
+                                ), # Fin BLOC Parametres_Houssin_RC
+      
+  Parametres_Wallin = BLOC ( condition = " MODELKIC in ( 'Wallin', ) ",
+                  T0WALLIN = SIMP ( statut = "o",
+                                    typ = "I",
+                                    defaut = "-27",
+                                    fr = "parametre T0 du modele Wallin (°C)",
+                                   ),
+
+                  nbectKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+                                   ),
+
+                  fractKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "5.",
+                                    fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+                                   ),
+
+                  nbectKIa = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+                                   ),
+
+                            ), # Fin BLOC Parametres_Wallin
+
+  Parametres_REME = BLOC ( condition = " MODELKIC in ( 'REME', ) ",
+
+                  nbectKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+                                   ),
+
+                  fractKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "5.",
+                                    fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+                                   ),
+
+                  nbectKIa = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+                                   ),
+
+                          ), # Fin BLOC Parametres_REME
+
+  Parametres_ORNL = BLOC ( condition = " MODELKIC in ( 'ORNL', ) ",
+
+                  nbectKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+                                   ),
+
+                  fractKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "5.",
+                                    fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+                                   ),
+
+                  nbectKIa = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+                                   ),
+
+                          ), # Fin BLOC Parametres_ORNL
+
+  Parametres_Frama = BLOC ( condition = " MODELKIC in ( 'Frama', ) ",
+
+                  nbectKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+                                   ),
+
+                  fractKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "5.",
+                                    fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+                                   ),
+
+                  nbectKIa = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+                                   ),
+
+                           ), # Fin BLOC Parametres_Frama
+
+  Parametres_WEIB3 = BLOC ( condition = " MODELKIC in ( 'WEIB3', ) ",
+
+                  nbectKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+                                   ),
+
+                  fractKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "5.",
+                                    fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+                                   ),
+
+                  nbectKIa = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+                                   ),
+
+                           ), # Fin BLOC Parametres_WEIB3
+
+  Parametres_WEIB2 = BLOC ( condition = " MODELKIC in ( 'WEIB2', ) ",
+
+                  nbectKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+                                   ),
+
+                  fractKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "5.",
+                                    fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+                                   ),
+
+                  nbectKIa = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+                                   ),
+
+                           ), # Fin BLOC Parametres_WEIB2
+
+  Parametres_LOGWOLF = BLOC ( condition = " MODELKIC in ( 'LOGWOLF', ) ",
+
+                  nbectKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+                                   ),
+
+                  fractKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "5.",
+                                    fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+                                   ),
+
+                  nbectKIa = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+                                   ),
+
+                             ), # Fin BLOC Parametres_LOGWOLF
+
+  Parametres_WEIB_GEN = BLOC ( condition = " MODELKIC in ( 'WEIB_GEN',) ",
+                  A1 = SIMP ( statut = "o",
+                              typ = "R",
+                              defaut = "21.263",
+                              fr = "coef du coef a(T) d'une Weibull generale",
+                             ),
+                  A2 = SIMP ( statut = "o",
+                              typ = "R",
+                              defaut = "9.159",
+                              fr = "coef du coef a(T) d'une Weibull generale",
+                             ),
+                  A3 = SIMP ( statut = "o",
+                              typ = "R",
+                              defaut = "0.04057",
+                              fr = "coef du coef a(T) d'une Weibull generale",
+                             ),
+                  B1 = SIMP ( statut = "o",
+                              typ = "R",
+                              defaut = "17.153",
+                              fr = "coef du coef b(T) d'une Weibull generale",
+                             ),
+                  B2 = SIMP ( statut = "o",
+                              typ = "R",
+                              defaut = "55.089",
+                              fr = "coef du coef b(T) d'une Weibull generale",
+                             ),
+                  B3 = SIMP ( statut = "o",
+                              typ = "R",
+                              defaut = "0.0144",
+                              fr = "coef du coef b(T) d'une Weibull generale",
+                             ),
+                  C1 = SIMP ( statut = "o",
+                              typ = "R",
+                              defaut = "4.",
+                              fr = "coef du coef c(T) d'une Weibull generale",
+                             ),
+                  C2 = SIMP ( statut = "o",
+                              typ = "R",
+                              defaut = "0.",
+                              fr = "coef du coef c(T) d'une Weibull generale",
+                             ),
+                  C3 = SIMP ( statut = "o",
+                              typ = "R",
+                              defaut = "0.",
+                              fr = "coef du coef c(T) d'une Weibull generale",
+                             ),
+
+                  nbectKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIc (nb sigma) : det = -2 ",
+                                   ),
+
+                  fractKIc = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "5.",
+                                    fr = "Valeur caracteristique de KIc exprimee en ordre de fractile (%) ",
+                                   ),
+
+                  nbectKIa = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma) ",
+                                   ),
+
+                              ), # Fin BLOC Parametres_WEIB_GEN
+
+) # Fin OPER MODELES
+
+
+#==================
+# 5. Initialisation
+#==================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+INITIALISATION = OPER ( nom = "INITIALISATION",
+                        sd_prod = loi,
+                        op = 68,
+                        fr = "Initialisation", 
+
+  Liste_tempinit = SIMP ( statut = "o",
+                          typ = "R",
+                          max = "**",
+                          fr = "Profil radial de la temperature initiale dans la cuve (m) (°C) ",
+                         ),
+
+  Prolongation_tempsinit = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                  fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                 ),
+
+  Liste_sigmainit = SIMP ( statut = "o",
+                           typ = "R",
+                           max = "**",
+                           fr = "Profil radial des contraintes residuelles dans la cuve (m) (xx) (xx) (xx) ",
+                          ),
+
+  Prolongation_sigmainit = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                  fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                 ),
+
+  INSTINIT = SIMP ( statut = "o",
+                    typ = "R",
+                    defaut = "-1.",
+                    fr = "Instant initial (s) ",
+                   ),
+
+) # Fin OPER INITIALISATION
+
+
+#==================================
+# 6. CARACTERISTIQUES DU REVETEMENT
+#==================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+REVETEMENT = OPER ( nom = "REVETEMENT",
+                    sd_prod = loi,
+                    op = 68,
+                    fr = "Caracteristiques du revetement", 
+
+  KTHREV = SIMP ( statut = "o",
+                  typ = "TXM",
+                  into = ( "ENTHALPIE", "CHALEUR",),
+                  #defaut = "CHALEUR",
+                  fr = "Options pour definir les caracteristiques du revetement ",
+                 ),
+
+  Parametres_ENTHALPIErev = BLOC ( condition = " KTHREV in ( 'ENTHALPIE', ) ",
+
+                  Liste_enthalpie_rev = SIMP ( statut = "o",
+                                               typ = "R",
+                                               max = "**",
+                                               fr = "Temperature (°C) / enthalpie (J/kg) ",
+                                              ),
+
+                  Prolongation_enthalpie_rev = SIMP ( statut = "o",
+                                                      typ = "TXM",
+                                                      into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                                      fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                                     ),
+
+                                  ), # Fin BLOC Parametres_ENTHALPIErev
+
+
+  Parametres_CHALEURrev = BLOC ( condition = " KTHREV in ( 'CHALEUR', ) ",
+
+                  Liste_chaleur_rev = SIMP ( statut = "o",
+                                             typ = "R",
+                                             max = "**",
+                                             fr = "Temperature (°C) / chaleur volumique (J/kg/K) ",
+                                            ),
+
+                  Prolongation_chaleur_rev = SIMP ( statut = "o",
+                                                    typ = "TXM",
+                                                    into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                                    fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                                   ),
+
+                                ), # Fin BLOC Parametres_CHALEURrev
+
+   Liste_conductivite_rev = SIMP ( statut = "o",
+                                   typ = "R",
+                                   max = "**",
+                                   fr = "Temperature (°C) / conductivite thermique (W/m/°C) ",
+                                  ),
+
+   Prolongation_conductivite_rev = SIMP ( statut = "o",
+                                          typ = "TXM",
+                                          into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                          fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                         ),
+
+   Liste_young_rev = SIMP ( statut = "o",
+                            typ = "R",
+                            max = "**",
+                            fr = "Temperature (°C) / module d'Young (MPa) ",
+                           ),
+
+   Prolongation_young_rev = SIMP ( statut = "o",
+                                   typ = "TXM",
+                                   into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                   fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                  ),
+
+   Liste_dilatation_rev = SIMP ( statut = "o",
+                                 typ = "R",
+                                 max = "**",
+                                 fr = "Temperature (°C) / coefficient de dilatation thermique (°C-1) ",
+                                ),
+
+   Prolongation_dilatation_rev = SIMP ( statut = "o",
+                                        typ = "TXM",
+                                        into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                        fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                       ),
+
+   Liste_elasticite_rev = SIMP ( statut = "o",
+                                 typ = "R",
+                                 max = "**",
+                                 fr = "Temperature (°C) / limite d'elasticite (MPa) ",
+                                ),
+
+   Prolongation_elasticite_rev = SIMP ( statut = "o",
+                                        typ = "TXM",
+                                        into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                        fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                       ),
+
+   TREFREV = SIMP ( statut = "o",
+                    typ = "R",
+                    defaut = "20.",
+                    fr = "Temperature de deformation nulle (°C) ",
+                   ),
+
+   TDETREV = SIMP ( statut = "o",
+                    typ = "R",
+                    defaut = "287.",
+                    fr = "Temperature de definition du coefficient de dilatation thermique (°C) ",
+                   ),
+
+   NUREV = SIMP ( statut = "o",
+                  typ = "R",
+                  defaut = "0.3",
+                  fr = "Coefficient de Poisson ",
+                 ),
+
+) # Fin OPER REVETEMENT
+
+
+#=====================================
+# 7. CARACTERISTIQUES DU METAL DE BASE
+#=====================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+METAL_BASE = OPER ( nom = "METAL_BASE",
+                    sd_prod = loi,
+                    op = 68,
+                    fr = "Caracteristiques du metal de base", 
+
+  KTHMDB = SIMP ( statut = "o",
+                  typ = "TXM",
+                  into = ( "ENTHALPIE", "CHALEUR",),
+                  #defaut = "CHALEUR",
+                  fr = "Options pour definir les caracteristiques du revetement ",
+                 ),
+
+  Parametres_ENTHALPIEmdb = BLOC ( condition = " KTHMDB in ( 'ENTHALPIE', ) ",
+
+                  Liste_enthalpie_mdb = SIMP ( statut = "o",
+                                               typ = "R",
+                                               max = "**",
+                                               fr = "Temperature (°C) / enthalpie (J/kg) ",
+                                              ),
+
+                  Prolongation_enthalpie_mdb = SIMP ( statut = "o",
+                                                      typ = "TXM",
+                                                      into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                                      fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                                     ),
+
+                                  ), # Fin BLOC Parametres_ENTHALPIEmdb
+
+
+  Parametres_CHALEURmdb = BLOC ( condition = " KTHMDB in ( 'CHALEUR', ) ",
+
+                  Liste_chaleur_mdb = SIMP ( statut = "o",
+                                             typ = "R",
+                                             max = "**",
+                                             fr = "Temperature (°C) / chaleur volumique (J/kg/K) ",
+                                            ),
+
+                  Prolongation_chaleur_mdb = SIMP ( statut = "o",
+                                                    typ = "TXM",
+                                                    into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                                    fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                                   ),
+
+                                ), # Fin BLOC Parametres_CHALEURmdb
+
+   Liste_conductivite_mdb = SIMP ( statut = "o",
+                                   typ = "R",
+                                   max = "**",
+                                   fr = "Temperature (°C) / conductivite thermique (W/m/°C) ",
+                                  ),
+
+   Prolongation_conductivite_mdb = SIMP ( statut = "o",
+                                          typ = "TXM",
+                                          into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                          fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                         ),
+
+   Liste_young_mdb = SIMP ( statut = "o",
+                            typ = "R",
+                            max = "**",
+                            fr = "Temperature (°C) / module d'Young (MPa) ",
+                           ),
+
+   Prolongation_young_mdb = SIMP ( statut = "o",
+                                   typ = "TXM",
+                                   into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                   fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                  ),
+
+   Liste_dilatation_mdb = SIMP ( statut = "o",
+                                 typ = "R",
+                                 max = "**",
+                                 fr = "Temperature (°C) / coefficient de dilatation thermique (°C-1) ",
+                                ),
+
+   Prolongation_dilatation_mdb = SIMP ( statut = "o",
+                                        typ = "TXM",
+                                        into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                        fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                       ),
+
+   TREFMDB = SIMP ( statut = "o",
+                    typ = "R",
+                    defaut = "20.",
+                    fr = "Temperature de deformation nulle (°C) ",
+                   ),
+
+   TDETMDB = SIMP ( statut = "o",
+                    typ = "R",
+                    defaut = "287.",
+                    fr = "Temperature de definition du coefficient de dilatation thermique (°C) ",
+                   ),
+
+   NUMDB = SIMP ( statut = "o",
+                  typ = "R",
+                  defaut = "0.3",
+                  fr = "Coefficient de Poisson ",
+                 ),
+
+) # Fin OPER METAL_BASE
+
+
+#================
+# 8. TRANSITOIRES
+#================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+TRANSITOIRE = OPER ( nom = "TRANSITOIRE",
+                     sd_prod = loi,
+                     op = 68,
+                     fr = "Description du transitoire", 
+
+  Liste_pression = SIMP ( statut = "o",
+                          typ = "R",
+                          max = "**",
+                          fr = "instant (s) / pression (MPa) ",
+                         ),
+
+  Prolongation_pression = SIMP ( statut = "o",
+                                 typ = "TXM",
+                                 into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                 fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                ),
+
+  TYPCLTH = SIMP ( statut = "o",
+                   typ = "TXM",
+                   into = ( "TEMP_IMPO", "FLUX_REP", "ECHANGE", "DEBIT", "TEMP_FLU"),
+                   #defaut = "ECHANGE",
+                   fr = "Type de condition thermique en paroi interne ",
+                  ),
+
+  Parametres_TEMP_IMPO = BLOC ( condition = " TYPCLTH in ( 'TEMP_IMPO', ) ",
+
+                  Liste_temp_impo = SIMP ( statut = "o",
+                                           typ = "R",
+                                           max = "**",
+                                           fr = "Instant (s) / Temperature imposee (°C) ",
+                                          ),
+
+                  Prolongation_temp_impo = SIMP ( statut = "o",
+                                                  typ = "TXM",
+                                                  into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                                  fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                                 ),
+
+                               ), # Fin BLOC Parametres_TEMP_IMPO
+
+  Parametres_FLUX_REP = BLOC ( condition = " TYPCLTH in ( 'FLUX_REP', ) ",
+
+                  Liste_flux_rep = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = "**",
+                                          fr = "Instant (s) / Flux de chaleur impose (W/m2) ",
+                                         ),
+
+                  Prolongation_flux_rep = SIMP ( statut = "o",
+                                                 typ = "TXM",
+                                                 into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                                 fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                                ),
+
+                              ), # Fin BLOC Parametres_FLUX_REP
+
+  Parametres_ECHANGE = BLOC ( condition = " TYPCLTH in ( 'ECHANGE', ) ",
+
+                  Liste_echange_temp = SIMP ( statut = "o",
+                                              typ = "R",
+                                              max = "**",
+                                              fr = "Instant (s) / Temperature impose (°C) ",
+                                             ),
+
+                  Prolongation_echange_temp = SIMP ( statut = "o",
+                                                     typ = "TXM",
+                                                     into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                                     fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                                    ),
+
+                  Liste_echange_coef = SIMP ( statut = "o",
+                                              typ = "R",
+                                              max = "**",
+                                              fr = "Instant (s) / Coefficient d echange (W/m2/K) ",
+                                             ),
+
+                  Prolongation_echange_coef = SIMP ( statut = "o",
+                                                     typ = "TXM",
+                                                     into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                                     fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                                    ),
+
+                             ), # Fin BLOC Parametres_ECHANGE
+
+  Parametres_DEBIT = BLOC ( condition = " TYPCLTH in ( 'DEBIT', ) ",
+
+                  Liste_debit = SIMP ( statut = "o",
+                                       typ = "R",
+                                       max = "**",
+                                       fr = "Instant (s) / Debit massique (kg/s) ",
+                                      ),
+
+                  Prolongation_debit = SIMP ( statut = "o",
+                                              typ = "TXM",
+                                              into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                              fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                             ),
+
+                  Liste_temp_injection = SIMP ( statut = "o",
+                                                typ = "R",
+                                                max = "**",
+                                                fr = "Instant (s) / Temperature d injection de securite  (°C) ",
+                                               ),
+
+                  Prolongation_temp_injection = SIMP ( statut = "o",
+                                                       typ = "TXM",
+                                                       into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                                       fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                                      ),
+
+                  DH = SIMP ( statut = "o",
+                              typ = "R",
+                              defaut = "-2.",
+                              fr = "Diametre hydraulique (m) ",
+                             ),
+
+                  SECTION = SIMP ( statut = "o",
+                                   typ = "R",
+                                   defaut = "-2.",
+                                   fr = "Section espace annulaire (m2) ",
+                                  ),
+
+                  DELTA = SIMP ( statut = "o",
+                                 typ = "R",
+                                 defaut = "-2.",
+                                 fr = "Hauteur caracteristique convection naturelle (m) ",
+                                ),
+
+                  ALPHA_CF = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "1.",
+                                    fr = "Coefficient Vestale convection forcee (-) ",
+                                   ),
+
+                  ALPHA_CN = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "1.",
+                                    fr = "Coefficient Vestale convection naturelle (-) ",
+                                   ),
+
+                  EPS = SIMP ( statut = "o",
+                               typ = "R",
+                               defaut = "0.00001",
+                               fr = "Critere convergence relative (-) ",
+                              ),
+
+                  VM = SIMP ( statut = "o",
+                              typ = "R",
+                              defaut = "-2.",
+                              fr = "Volume de melange CREARE (m3) ",
+                             ),
+
+                  T0 = SIMP ( statut = "o",
+                              typ = "R",
+                              defaut = "-2.",
+                              fr = "Temperature initiale CREARE (degC) ",
+                             ),
+
+                  SE = SIMP ( statut = "o",
+                              typ = "R",
+                              defaut = "-2.",
+                              fr = "Surface d'echange fluide/structure (m2) ",
+                             ),
+
+                           ), # Fin BLOC Parametres_DEBIT
+
+  Parametres_TEMP_FLU = BLOC ( condition = " TYPCLTH in ( 'TEMP_FLU', ) ",
+
+                  Liste_temp_flu = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = "**",
+                                          fr = "Instant (s) / Debit massique (kg/s) ",
+                                         ),
+
+                  Prolongation_temp_flu = SIMP ( statut = "o",
+                                                 typ = "TXM",
+                                                 into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                                 fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                                ),
+
+                  Liste_debit_injection = SIMP ( statut = "o",
+                                                 typ = "R",
+                                                 max = "**",
+                                                 fr = "Instant (s) / Debit d injection de securite (kg/s) ",
+                                                ),
+
+                  Prolongation_debit_injection = SIMP ( statut = "o",
+                                                        typ = "TXM",
+                                                        into = ( 'CC', 'CE', 'CL', 'EC', 'EE', 'EL', 'LC', 'LE', 'LL'),
+                                                        fr = "Prolongation aux frontieres amont et aval : C=constant, E=exclus, L=lineaire ",
+                                                       ),
+
+                  DH = SIMP ( statut = "o",
+                              typ = "R",
+                              defaut = "-2.",
+                              fr = "Diametre hydraulique (m) ",
+                             ),
+
+                  SECTION = SIMP ( statut = "o",
+                                   typ = "R",
+                                   defaut = "-2.",
+                                   fr = "Section espace annulaire (m2) ",
+                                  ),
+
+                  DELTA = SIMP ( statut = "o",
+                                 typ = "R",
+                                 defaut = "-2.",
+                                 fr = "Hauteur caracteristique convection naturelle (m) ",
+                                ),
+
+                  ALPHA_CF = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "1.",
+                                    fr = "Coefficient Vestale convection forcee (-) ",
+                                   ),
+
+                  ALPHA_CN = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "1.",
+                                    fr = "Coefficient Vestale convection naturelle (-) ",
+                                   ),
+
+                  EPS = SIMP ( statut = "o",
+                               typ = "R",
+                               defaut = "0.00001",
+                               fr = "Critere convergence relative (-) ",
+                              ),
+
+                              ), # Fin BLOC Parametres_TEMP_FLU
+
+) # Fin OPER TRANSITOIRE
+
+
+#================================
+# 3. Definition de l'etude
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+CRITERIA = PROC ( nom = "CRITERIA",
+                  op = None,
+                  docu = "",
+                  fr = "Mise en donnee pour le fichier de configuration de OPENTURNS.",
+                  ang = "Writes the configuration file for OPENTURNS.",
+
+
+
+  Type = SIMP ( statut = "o",
+                typ = "TXM",
+                into = ( "Min/Max", "Central Uncertainty", "Threshold Exceedence" ),
+                fr = "Type d'Analyse",
+                ang = "Analysis",
+                ),
+
+
+
+
+  MinMax = BLOC ( condition = " Type in ( 'Min/Max', ) ",
+
+                  Method = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "Experiment Plane", "Random Sampling" ),
+                                  fr = "Methode",
+                                  ang = "Method",
+                                  ),
+                  # UC 3.1.1
+                  ExperimentPlaneSettings = BLOC ( condition = " Method in ( 'Experiment Plane', ) ",
+
+                          ExperimentPlane = SIMP ( statut = "o",
+                                                   typ = "TXM",
+                                                   into = ( "Axial", "Factorial", "Composite", ),
+                                                   fr = "Methode",
+                                                   ang = "Method",
+                                                   ),
+
+                          Levels = SIMP ( statut = "o",
+                                          typ = "R",
+                                          val_min = 0.0,
+                                          max = '**',    
+                                          fr = "Nombre de niveaux dans chaque direction",
+                                          ang = "Levels in each direction",
+                                          ),
+
+                          # Scaled Vector
+                          UnitsPerDimension = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = '**',    
+                                          fr = "Unite par dimension (autant que de variables declarees)",
+                                          ang = "Units per dimension (as much as declared variables)",
+                                          ),
+
+                          # Translation Vector
+                          Center = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = '**',    
+                                          fr = "Unite par dimension",
+                                          ang = "Units per dimension",
+                                          ),
+
+                    ), # Fin BLOC ExperimentPlaneSettings
+
+
+
+                  RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+                          PointsNumber = SIMP ( statut = "o",
+                                                typ = "I",
+                                                val_min = 1,
+                                                fr = "Nombre de points",
+                                                ang = "Points number",
+                                                ),
+
+                    ), # Fin BLOC RandomSamplingSettings
+
+                  Result = SIMP (  statut = "o",
+                                   typ = "TXM",
+                                   into = ( "Min/Max", ),
+                                   defaut = "Min/Max",
+                                   fr = "Le minimum et le maximum",
+                                   ang = "The min and max values",
+                                   ),
+
+
+  ), # Fin BLOC MinMax
+
+
+
+
+  CentralUncertainty = BLOC ( condition = " Type in ( 'Central Uncertainty', ) ",
+
+                  Method = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "Taylor Variance Decomposition", "Random Sampling" ),
+                                  fr = "Methode",
+                                  ang = "Method",
+                                  ),
+                              
+                  # UC 3.2.
+                  TaylorVarianceDecompositionSettings = BLOC ( condition = " Method in ( 'Taylor Variance Decomposition', ) ",
+
+                      Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                              MeanFirstOrder = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Moyenne au premier ordre",
+                                                ang = "MeanFirstOrder",
+                                                ),
+
+                              StandardDeviationFirstOrder = SIMP ( statut = "o",
+                                                                   typ = 'TXM',
+                                                                   into = ( 'yes', 'no' ),
+                                                                   defaut = 'yes',
+                                                                   max = 1,
+                                                                   fr = "Ecart-type au premier ordre",
+                                                                   ang = "StandardDeviationFirstOrder",
+                                                                   ),
+
+                              MeanSecondOrder = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'yes',
+                                                       max = 1,
+                                                       fr = "Moyenne au second ordre",
+                                                       ang = "MeanSecondOrder",
+                                                       ),
+
+                              ImportanceFactor = SIMP ( statut = "o",
+                                                        typ = 'TXM',
+                                                        into = ( 'yes', 'no' ),
+                                                        defaut = 'no',
+                                                        max = 1,
+                                                        fr = "Facteur d'importance pour variable de sortie scalaire",
+                                                        ang = "ImportanceFactor",
+                                                        ),
+
+                             ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                                    NumericalResults  = SIMP ( statut = "o",
+                                                               typ = 'TXM',
+                                                               into = ( 'yes', 'no' ),
+                                                               defaut = 'yes',
+                                                               max = 1,
+                                                               fr = "Resultats numeriques",
+                                                               ang = "NumericalResults",
+                                                               ),
+
+                                     GraphicalResults  = SIMP ( statut = "o",
+                                                                typ = 'TXM',
+                                                                into = ( 'yes', 'no' ),
+                                                                defaut = 'no',
+                                                                max = 1,
+                                                                fr = "Resultats graphiques",
+                                                                ang = "GraphicalResults",
+                                                                ),
+
+                            ), # Fin BLOC ImportanceFactorSettings
+
+                      ), # Fin FACT Result
+                                                               
+                  ), # Fin BLOC TaylorVarianceDecompositionSettings
+
+
+
+                  RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+                          PointsNumber = SIMP ( statut = "o",
+                                                typ = "I",
+                                                val_min = 1,
+                                                fr = "Nombre de points",
+                                                ang = "Points number",
+                                                ),
+
+                       Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                              EmpiricalMean = SIMP ( statut = "o",
+                                                     typ = 'TXM',
+                                                     into = ( 'yes', 'no' ),
+                                                     defaut = 'yes',
+                                                     max = 1,
+                                                     fr = "Moyenne empirique",
+                                                     ang = "Empirical mean",
+                                                     ),
+
+                              EmpiricalStandardDeviation = SIMP ( statut = "o",
+                                                                  typ = 'TXM',
+                                                                  into = ( 'yes', 'no' ),
+                                                                  defaut = 'yes',
+                                                                  max = 1,
+                                                                  fr = "Ecart-type empirique",
+                                                                  ang = "Empirical standard deviation",
+                                                                  ),
+
+                              EmpiricalQuantile = SIMP ( statut = "o",
+                                                         typ = 'R',
+                                                         defaut = 0.0,
+                                                         max = 1,
+                                                         val_min = 0.0,
+                                                         val_max = 1.0,
+                                                         fr = "Quantile empirique",
+                                                         ang = "Empirical quantile",
+                                                         ),
+
+                              AnalysedCorrelations = SIMP ( statut = "o",
+                                                            typ = 'TXM',
+                                                            into = ( 'yes', 'no' ),
+                                                            defaut = 'no',
+                                                            max = 1,
+                                                            fr = "Correlations analysees",
+                                                            ang = "Analysed correlations",
+                                                            ),
+
+                              KernelSmoothing = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'no',
+                                                       max = 1,
+                                                       fr = "Kernel smoothing de l'echantillon",
+                                                       ang = "Kernel smoothing of the sample",
+                                                       ),
+
+                      ), # Fin FACT Result
+                                                               
+                  ), # Fin BLOC RandomSamplingSettings
+
+  ), # Fin BLOC CentralUncertainty
+
+
+
+
+  ThresholdExceedence = BLOC ( condition = " Type in ( 'Threshold Exceedence', ) ",
+
+         Event =  FACT ( statut = "o",
+                         min = 1,
+                         max = 1,
+
+                         Threshold = SIMP ( statut = "o",
+                                            typ = "R",
+                                            max = 1,
+                                            fr = "Le seuil de defaillance",
+                                            ang = "Failure threshold",
+                                            ),
+
+                         ComparisonOperator = SIMP ( statut = "o",
+                                                     typ = "TXM",
+                                                     max = 1,
+                                                     into = ( "Less", "LessOrEqual", "Equal", "GreaterOrEqual", "Greater" ),
+                                                     fr = "Que faut-il ne pas depasser : un maximum ou un minimum",
+                                                     ang = "What is the failure threshold : maximum or minimum",
+                                                     ),
+         ), # Fin FACT Event
+                         
+
+         Method = SIMP ( statut = "o",
+                         typ = "TXM",
+                         into = ( "Simulation", "Analytical" ),
+                         fr = "Methode",
+                         ang = "Method",
+                         ),
+
+         SimulationSettings = BLOC ( condition = " Method in ( 'Simulation', ) ",
+
+               Algorithm = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "MonteCarlo", "LHS", "ImportanceSampling" ),
+                                  fr = "Algorithme de simulation",
+                                  ang = "Simulation algorithm",
+                                  ),
+
+                                 
+               RandomGenerator = FACT ( statut = "o",
+                                        min = 1,
+                                        max = 1,
+
+                           SeedToBeSet = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'no',
+                                                max = 1,
+                                                fr = "La racine du generateur aleatoire doit-elle etre positionnee ?",
+                                                ang = "Does the random generator seed need to be set ?",
+                                                ),
+
+                           SeedSettings = BLOC ( condition = " SeedToBeSet in ( 'yes', ) ",
+
+                                                 RandomGeneratorSeed = SIMP ( statut = "o",
+                                                                              typ = "I",
+                                                                              max = 1,
+                                                                              fr = "Racine du generateur aleatoire",
+                                                                              ang = "Random generator seed",
+                                                                              ),
+
+                                               ), # Fin BLOC SeedSettings
+
+               ), # Fin FACT RandomGenerator
+
+
+               BlockSize = SIMP ( statut = "f",
+                                  typ = "I",
+                                  max = 1,
+                                  val_min = 1,
+                                  defaut = 1,
+                                  fr = "Nombre de calculs realises en bloc",
+                                  ang = "Number of computations as a block",
+                                  ),
+
+               MaximumOuterSampling = SIMP ( statut = "o",
+                                             typ = "I",
+                                             max = 1,
+                                             val_min = 1,
+                                             fr = "Maximum d'iterations externes",
+                                             ang = "Maximum outer Sampling value",
+                                             ),
+
+               MaximumCoefficientOfVariation = SIMP ( statut = "f",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      defaut = 0.1,
+                                                      val_min = 0.0,
+                                                      fr = " maximum ...",
+                                                      ang = "Absolute maximum ...."
+                                                      ),
+
+               ImportanceSamplingSettings = BLOC ( condition = " Algorithm in ( 'ImportanceSampling', ) ",
+
+                            MeanVector = SIMP ( statut = "o",
+                                                typ = "R",
+                                                max = "**",
+                                                fr = "Moyenne",
+                                                ang = "Mean vector",
+                                                ),
+
+                            Correlation = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'Independent', 'Linear' ),
+                                                 defaut = 'Linear',
+                                                 max = 1,
+                                                 fr = "Le type de correlation entre les variables",
+                                                 ang = "Correlation between variables",
+                                                 ),
+
+               ), # Fin BLOC ImportanceSamplingSettings
+
+               Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                    Probability = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Probabiblite",
+                                         ang = "Probability",
+                                         ),
+
+                    ConfidenceInterval = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Ecart-type empirique",
+                                                ang = "Empirical standard deviation",
+                                                ),
+
+                    ConfidenceIntervalSettings = BLOC ( condition = " ConfidenceInterval in ( 'yes', ) ",
+
+                          Level = SIMP ( statut = "o",
+                                         typ = 'R',
+                                         defaut = 0.0,
+                                         max = 1,
+                                         val_min = 0.0,
+                                         val_max = 1.0,
+                                         fr = "Niveau de confiance",
+                                         ang = "Confidence level",
+                                         ),
+                                                     
+                    ), # Fin BLOC ConfidenceIntervalSettings
+                               
+                    VariationCoefficient = SIMP ( statut = "o",
+                                                  typ = 'TXM',
+                                                  into = ( 'yes', 'no' ),
+                                                  defaut = 'yes',
+                                                  max = 1,
+                                                  fr = "Coefficient de variation",
+                                                  ang = "VariationCoefficient",
+                                                  ),
+
+                    IterationNumber = SIMP ( statut = "o",
+                                             typ = 'TXM',
+                                             into = ( 'yes', 'no' ),
+                                             defaut = 'yes',
+                                             max = 1,
+                                             fr = "Nombre d'iterations",
+                                             ang = "Iteration number",
+                                             ),
+
+                    ConvergenceGraph = SIMP ( statut = "o",
+                                             typ = 'TXM',
+                                             into = ( 'yes', 'no' ),
+                                             defaut = 'yes',
+                                             max = 1,
+                                             fr = "Graphe de convergence",
+                                             ang = "Convergence graph",
+                                             ),
+
+               ), # Fin FACT Result
+                                                               
+
+
+         ), # Fin BLOC SimulationSettings
+
+
+                               
+         AnalyticalSettings = BLOC ( condition = " Method in ( 'Analytical', ) ",
+
+                Approximation = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       into = ( "FORM", "SORM" ),
+                                       fr = "Approximation",
+                                       ang = "Approximation",
+                                       ),
+
+                OptimizationAlgorithm = SIMP ( statut = "o",
+                                               typ = "TXM",
+                                               into = ( "Cobyla", "AbdoRackwitz" ),
+                                               fr = "Methode d'optimisation",
+                                               ang = "Optimisation method",
+                                               ),
+
+                                     
+                PhysicalStartingPoint = SIMP ( statut = "f",
+                                               typ = "R",
+                                               max = "**",
+                                               fr = "Point de demarrage de l'algorithme iteratif",
+                                               ang = "Initial point for iterative process",
+                                               ),
+
+                MaximumIterationsNumber = SIMP ( statut = "f",
+                                                 typ = "I",
+                                                 max = 1,
+                                                 val_min = 1,
+                                                 fr = "Nombre maximum d iterations",
+                                                 ang = "Maximum number of iterations",
+                                                 ),
+
+                regles = ( EXCLUS ( "MaximumAbsoluteError", "RelativeAbsoluteError" ),  ),
+                                     
+                MaximumAbsoluteError = SIMP ( statut = "f",
+                                              typ = "R",
+                                              max = 1,
+                                              defaut = 1E-6,
+                                              val_min = 0.0,
+                                              fr = "Distance maximum absolue entre 2 iterations successifs",
+                                              ang = "Absolute maximum distance between 2 successive iterates",
+                                              ),
+
+                RelativeAbsoluteError = SIMP ( statut = "f",
+                                               typ = "R",
+                                               max = 1,
+                                               defaut = 1E-6,
+                                               val_min = 0.0,
+                                               fr = "Distance maximum relative entre 2 iterations successives",
+                                               ang = "Relative maximum distance between 2 successive iterates",
+                                               ),
+                                     
+                MaximumConstraintError = SIMP ( statut = "f",
+                                                typ = "R",
+                                                max = 1,
+                                                val_min = 0.0,
+                                                fr = "Valeur maximum absolue de la fonction moins la valeur du niveau",
+                                                ang = "Maximum absolute value of the constraint function minus the level value",
+                                                ),
+
+                ImportanceSampling = SIMP ( statut = "o",
+                                            typ = 'TXM',
+                                            into = ( 'yes', 'no' ),
+                                            defaut = 'no',
+                                            max = 1,
+                                            fr = "Tirage d'importance au point de conception",
+                                            ang = "Importance sampling at design point",
+                                            ),
+
+                FORM = BLOC ( condition = " Approximation in ( 'FORM', ) ",
+
+                    Probability = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Probabiblite",
+                                         ang = "Probability",
+                                         ),
+
+                    DesignPoint = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', 'no' ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Point de conception",
+                                         ang = "Design point",
+                                         ),
+
+                    HasReliabilityIndex = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Indice de fiabilite",
+                                                 ang = "Reliability index",
+                                                 ),
+
+                    ImportanceFactor = SIMP ( statut = "o",
+                                              typ = 'TXM',
+                                              into = ( 'yes', 'no' ),
+                                              defaut = 'no',
+                                              max = 1,
+                                              fr = "Facteur d'importance pour variable de sortie scalaire",
+                                              ang = "ImportanceFactor",
+                                              ),
+
+                    ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                            NumericalResults  = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'yes',
+                                                       max = 1,
+                                                       fr = "Resultats numeriques",
+                                                       ang = "NumericalResults",
+                                                       ),
+
+                             GraphicalResults  = SIMP ( statut = "o",
+                                                        typ = 'TXM',
+                                                        into = ( 'yes', 'no' ),
+                                                        defaut = 'no',
+                                                        max = 1,
+                                                        fr = "Resultats graphiques",
+                                                        ang = "GraphicalResults",
+                                                        ),
+
+                    ), # Fin BLOC ImportanceFactorSettings
+
+
+                    SensitivityAnalysis = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'no',
+                                                 max = 1,
+                                                 fr = "Analyse de sensibilite",
+                                                 ang = "Sensitivity analysis",
+                                                 ),
+
+                    SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+                            HasoferReliabilityIndex = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'no',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+        
+                            HasoferReliabilityIndexSettings = BLOC ( condition = " HasoferReliabilityIndex in ( 'yes', ) ",
+        
+                                    NumericalResults  = SIMP ( statut = "o",
+                                                               typ = 'TXM',
+                                                               into = ( 'yes', 'no' ),
+                                                               defaut = 'yes',
+                                                               max = 1,
+                                                               fr = "Resultats numeriques",
+                                                               ang = "NumericalResults",
+                                                               ),
+        
+                                     GraphicalResults  = SIMP ( statut = "o",
+                                                                typ = 'TXM',
+                                                                into = ( 'yes', 'no' ),
+                                                                defaut = 'no',
+                                                                max = 1,
+                                                                fr = "Resultats graphiques",
+                                                                ang = "GraphicalResults",
+                                                                ),
+
+                            ), # Fin BLOC HasoferReliabilityIndexSettings
+                                                         
+                    ), # Fin BLOC SensitivityAnalysisSettings
+
+                    FunctionCallsNumber = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'no',
+                                                 max = 1,
+                                                 fr = "Nombre d'appels a la fonction",
+                                                 ang = "Function calls number",
+                                                 ),
+
+
+                ), # Fin BLOC FORM
+
+
+                SORM = BLOC ( condition = " Approximation in ( 'SORM', ) ",
+
+
+                    TvedtApproximation = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'no',
+                                                max = 1,
+                                                fr = "Approximation de Tvedt",
+                                                ang = "Tvedt approximation",
+                                                ),
+
+                    HohenBichlerApproximation = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'no',
+                                                       max = 1,
+                                                       fr = "Approximation de HohenBichler",
+                                                       ang = "HohenBichler approximation",
+                                                       ),
+
+                    BreitungApproximation = SIMP ( statut = "o",
+                                                   typ = 'TXM',
+                                                   into = ( 'yes', 'no' ),
+                                                   defaut = 'no',
+                                                   max = 1,
+                                                   fr = "Approximation de Breitung",
+                                                   ang = "Breitung approximation",
+                                                   ),
+
+                    DesignPoint = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', 'no' ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Point de conception",
+                                         ang = "Design point",
+                                         ),
+
+                    ImportanceFactor = SIMP ( statut = "o",
+                                              typ = 'TXM',
+                                              into = ( 'yes', 'no' ),
+                                              defaut = 'no',
+                                              max = 1,
+                                              fr = "Facteur d'importance pour variable de sortie scalaire",
+                                              ang = "ImportanceFactor",
+                                              ),
+
+                    ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                            NumericalResults  = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'yes',
+                                                       max = 1,
+                                                       fr = "Resultats numeriques",
+                                                       ang = "NumericalResults",
+                                                       ),
+
+                             GraphicalResults  = SIMP ( statut = "o",
+                                                        typ = 'TXM',
+                                                        into = ( 'yes', 'no' ),
+                                                        defaut = 'no',
+                                                        max = 1,
+                                                        fr = "Resultats graphiques",
+                                                        ang = "GraphicalResults",
+                                                        ),
+
+                    ), # Fin BLOC ImportanceFactorSettings
+
+
+                    SensitivityAnalysis = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'no',
+                                                 max = 1,
+                                                 fr = "Analyse de sensibilite",
+                                                 ang = "Sensitivity analysis",
+                                                 ),
+
+                    SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+                            HasoferReliabilityIndex = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'no',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+        
+                            HasoferReliabilityIndexSettings = BLOC ( condition = " HasoferReliabilityIndex in ( 'yes', ) ",
+        
+                                    NumericalResults  = SIMP ( statut = "o",
+                                                               typ = 'TXM',
+                                                               into = ( 'yes', 'no' ),
+                                                               defaut = 'yes',
+                                                               max = 1,
+                                                               fr = "Resultats numeriques",
+                                                               ang = "NumericalResults",
+                                                               ),
+        
+                                     GraphicalResults  = SIMP ( statut = "o",
+                                                                typ = 'TXM',
+                                                                into = ( 'yes', 'no' ),
+                                                                defaut = 'no',
+                                                                max = 1,
+                                                                fr = "Resultats graphiques",
+                                                                ang = "GraphicalResults",
+                                                                ),
+
+                            ), # Fin BLOC HasoferReliabilityIndexSettings
+                                                         
+                    ), # Fin BLOC SensitivityAnalysisSettings
+
+                    FunctionCallsNumber = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'no',
+                                                 max = 1,
+                                                 fr = "Nombre d'appels a la fonction",
+                                                 ang = "Function calls number",
+                                                 ),
+
+
+                ), # Fin BLOC SORM
+
+
+                                     
+        ), # Fin BLOC AnalyticalSettings
+
+
+                               
+  ), # Fin BLOC ThresholdExceedence
+
+
+
+) # Fin PROC CRITERIA
+
+
+#===============================
+# 5. Definition des parametres
+#===============================
+VARI = OPER ( nom = "VARI",
+                      sd_prod = variable,
+                      op = None,
+                      fr = "Definitions des lois marginales utilisees par les variables d'entree", 
+                      type=SIMP(statut='f',defaut="IN",into=("IN","OUT"), typ = "TXM",)
+              )
+
+ESSAI=PROC(nom="ESSAI",
+       op=None,
+       fr="Essai",
+       ang = "Test",
+       
+       MALOI       = SIMP(statut='o',typ=(loi,),),
+       MAVARIABLE  = SIMP(statut='o',typ=(variable,),),
+) ;
+
+                     
+
+
diff --git a/Cuve2dg/Cuve2dg_Cata_V2.py b/Cuve2dg/Cuve2dg_Cata_V2.py
new file mode 100644 (file)
index 0000000..ab40004
--- /dev/null
@@ -0,0 +1,1851 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# Definition de variables sous forme de tuple
+# --------------------------------------------------
+
+import types
+class Tuple:
+  def __init__(self,ntuple):
+    self.ntuple=ntuple
+
+  def __convert__(self,valeur):
+    if type(valeur) == types.StringType:
+      return None
+    if len(valeur) != self.ntuple:
+      return None
+    return valeur
+
+  def info(self):
+    return "Tuple de %s elements" % self.ntuple
+
+  __repr__=info
+  __str__=info
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'CUVE1D-DEFAILLGLOB',
+                 execmodul = None,
+                 regles = ( AU_MOINS_UN ('OPTIONS','DEFAUT', 'CUVE', 'MODELES', 'INITIALISATION', 'REVETEMENT', 'METAL_BASE', 'TRANSITOIRE'),
+                            A_CLASSER ( ('OPTIONS'), ('DEFAUT') ),
+                            A_CLASSER ( ('DEFAUT'), ('CUVE') ),
+                            A_CLASSER ( ('CUVE'), ('MODELES') ),
+                            A_CLASSER ( ('MODELES'), ('INITIALISATION') ),
+                            A_CLASSER ( ('INITIALISATION'), ('REVETEMENT') ),
+                            A_CLASSER ( ('REVETEMENT'), ('METAL_BASE') ),
+                            A_CLASSER ( ('METAL_BASE'), ('TRANSITOIRE') )
+                          )
+                 ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+
+
+
+
+
+#================================
+# 1. Definition des OPTIONS
+#================================
+
+OPTIONS = PROC ( nom = "OPTIONS",
+                 op = 68,
+                repetable = 'n',
+                 fr = "Définitions des options", 
+
+#===
+# Liste des paramètres
+#===
+
+# INCRTPS
+  IncrementTemporel = SIMP ( statut = "o",
+                             typ = "I",
+                             defaut = "1",
+                            max = 1,
+                             #val_max = 100,
+                             fr = "Incrément temporel (=1 pour calcul déterministe)",
+                             ),
+
+# DTPREC
+  IncrementMaxTemperature = SIMP ( statut = "o", 
+                                   typ = "R", 
+                                  defaut = "0.1", 
+                                  max = 1, 
+                                  val_min = 0., 
+                                  val_max = 1., 
+                                  fr = "Incrément maximum d'évolution de la température par noeud et par instant (°C)",
+                                  ),
+
+# DTARCH
+  IncrementMaxTempsAffichage = SIMP ( statut = "o", 
+                                      typ = "R", 
+                                     defaut = "1000.", 
+                                     max = 1, 
+                                     val_min = 0., 
+                                     val_max = 1000., 
+                                     fr = "Incrément maximum de temps pour l'affichage (s)",
+                                     ),
+
+# NBO
+# Question : NBO depend-il de TYPGEOM ??
+  NombreNoeudsMaillage = SIMP ( statut = "o", 
+                                typ = "R", 
+                               max=1, 
+                               val_min = 1., 
+                               val_max = 100., 
+                               fr = "Nombre de noeuds à considérer dans le maillage interne",
+                               ),
+
+# 
+  ListeInstants = SIMP ( statut = "o",
+                         typ = "R",
+                         max = "**",
+                         fr = "Liste des instants pour lesquels la température et les contraintes seront archivés",
+                         ),
+
+) # Fin PROC OPTIONS
+
+#================================
+# 2. Caracteristiques du DEFAUT
+#================================
+
+DEFAUT = PROC ( nom = "DEFAUT",
+                op = 68,
+               repetable = 'n',
+                fr = "Caractéristiques du défaut", 
+
+#===
+# Liste des paramètres
+#===
+
+# TYPEDEF
+  TypeInitial = SIMP ( statut = "o", typ = "TXM",
+                       into = ( "Sous Revetement", # DSR
+                                "Debouchant", # DD
+                                 ),
+                       fr = "Type initial du défaut : sous revêtement ou débouchant",
+                       ),
+
+#====
+# Definition des parametres selon le type du defaut
+#====
+
+  SousRevetement = BLOC ( condition = " TypeInitial in ( 'Sous Revetement', ) ",
+
+    # ORIEDEF
+    Orientation = SIMP ( statut = "o",
+                         typ = "TXM",
+                         into = ( "Longitudinale", # LONGITUD
+                                 "Circonferentielle" ), # CIRCONF
+                         fr = "Orientation du défaut",
+                         ),
+
+    # PROFDEF
+    ProfondeurRadiale = SIMP ( statut = "o",
+                               typ = "R",
+                               #defaut = "0.006",
+                               max = 1,
+                               val_max = 1.,
+                               fr = "Profondeur radiale du défaut (m)",
+                               ),
+
+    # OPTLONG
+    OptionCalculLongueur = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "Valeur", # VALEUR
+                                          "Relation lineaire avec la longueur" ), # RAPPORT
+                                  #defaut = "VALEUR",
+                                  fr = "Option pour caractériser la longueur du défaut : soit par valeur, soit par un rapport LONG/PROF",
+                                  ),
+
+    Option_Valeur = BLOC ( condition = "OptionCalculLongueur in ( 'Valeur', ) ",
+
+      # LONGDEF
+      Longueur = SIMP ( statut = "o",
+                        typ = "R",
+                        #defaut = "0.060",
+                        max = 1,
+                        val_max = 1.,
+                        fr = "Longueur du défaut sous revêtement (m)",
+                        ),
+
+    ), # Fin BLOC Option_Valeur
+
+    Option_Rapport = BLOC ( condition = "OptionCalculLongueur in ( 'Relation lineaire avec la longueur', ) ",
+
+        # LONGSURPROF
+        LongueurSurProfondeur = SIMP ( statut = "o",
+                                       typ = "R",
+                                       #defaut = "6.",
+                                       max = 1,
+                                       val_max = 100.,
+                                       fr = "Rapport longueur/profondeur du défaut sous revêtement",
+                                       ),
+
+    ), # Fin BLOC Option_Rapport
+
+    # DECADEF
+    DecalageRadial = SIMP ( statut = "o",
+                            typ = "R",
+                            #defaut = "-0.00001",
+                            fr = "Décalage radial du defaut sous revêtement (m)",
+                            ),
+
+    # ANGLDEF
+    Azimut = SIMP ( statut = "o",
+                    typ = "R",
+                    defaut = "0.",
+                    fr = "Position angulaire du défaut dans le cylindre de cuve (degrés)",
+                    ),
+
+    # ALTIDEF
+    Altitude = SIMP ( statut = "o",
+                      typ = "R",
+                      defaut = "2.",
+                     val_min = 0.,
+                     val_max = 4.,
+                      fr = "Altitude du défaut sur le cylindre de cuve (m)",
+                      ),
+
+    # POINDEF
+    Pointe = SIMP ( statut = "o",
+                    typ = "TXM",
+                    into = ( "A", "B" ),
+                    defaut = "A",
+                    fr = "Choix du point considéré du défaut sous revêtement",
+                    ),
+
+    # ARRETFISSURE
+    ArretDeFissure = SIMP ( statut = "o",
+                            typ = "TXM",
+                            into = ( "OUI", "NON" ),
+                            defaut = "NON",
+                            fr = "Prise en compte de l'arrêt de fissure",
+                            ),
+
+    # INCRDEF
+    IncrementTailleFissure = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "0.005",
+                                    fr = "Incrément de la taille de fissure pour la propagation (m)",
+                                    ),
+
+    # CORRECPLASTIC
+    CorrectionPlastiqueBeta = SIMP ( statut = "o",
+                                     typ = "TXM",
+                                     into = ( "OUI", "NON" ),
+                                     defaut = "NON",
+                                     fr = "Prise en compte de la correction plastique BETA dans le calcul du facteur d'intensité de contraintes",
+                                     ),
+
+  ), # Fin BLOC SousRevetement
+
+  Debouchant = BLOC ( condition = " TypeInitial in ( 'Debouchant', ) ",
+
+    # ORIEDEF
+    Orientation = SIMP ( statut = "o",
+                         typ = "TXM",
+                         into = ( "Longitudinale", # LONGITUD
+                                 "Circonferentielle" ), # CIRCONF
+                         #defaut = "LONGITUD",
+                         fr = "Orientation du défaut : longitudinale ou circonférentielle",
+                         ),
+
+    # PROFDEF
+    ProfondeurRadiale = SIMP ( statut = "o",
+                               typ = "R",
+                               #defaut = "0.006",
+                               max = 1,
+                               val_max = 1.,
+                               fr = "Profondeur radiale du défaut (m)",
+                               ),
+
+    # ANGLDEF
+    Azimut = SIMP ( statut = "o",
+                    typ = "R",
+                    defaut = "0.",
+                    fr = "Position angulaire du défaut dans le cylindre de la cuve (en degrés)",
+                    ),
+
+    # ALTIDEF
+    Altitude = SIMP ( statut = "o",
+                      typ = "R",
+                      defaut = "2.",
+                      fr = "Altitude du défaut sur le cylindre de la cuve (m)",
+                      ),
+
+    # ARRETFISSURE
+    ArretDeFissure = SIMP ( statut = "o",
+                            typ = "TXM",
+                            into = ( "OUI", "NON" ),
+                            defaut = "NON",
+                            fr = "Prise en compte de l'arrêt de fissure",
+                            ),
+
+    # INCRDEF
+    IncrementTailleFissure = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "0.005",
+                                    fr = "Incrément de la taille de fissure pour la propagation (m)",
+                                    ),
+
+    # IRWIN
+    CorrectionPlastiqueIrwin = SIMP ( statut = "o",
+                                      typ = "TXM",
+                                      into = ( "OUI", "NON" ),
+                                      defaut = "NON",
+                                      fr = "Prise en compte de la correction plastique d'Irwin dans le calcul du facteur d'intensité de contraintes",
+                                      ),
+
+    # CORRECPLASTIC
+    CorrectionPlastiqueBeta = SIMP ( statut = "o",
+                                     typ = "TXM",
+                                     into = ( "OUI", "NON" ),
+                                     defaut = "NON",
+                                     fr = "Prise en compte de la correction plastique BETA dans le calcul du facteur d'intensité de contraintes",
+                                     ),
+
+  ), # Fin BLOC debouchant
+
+) # Fin PROC DEFAUT
+
+
+#================================
+# 3. Caracteristiques de la CUVE
+#================================
+
+CUVE = PROC (nom = "CUVE",
+             op = 68,
+            repetable = 'n',
+             fr = "Caractéristiques de la cuve", 
+
+#===
+# Liste des paramètres
+#===
+
+  # TYPEGEOM
+  TraitementGeometrie = SIMP ( statut = "o",
+                               typ = "TXM",
+                              into = ( "Topologie", # GEOMETRIE 
+                                       "Maillage"), # MAILLAGE
+                               #defaut = "geometrie",
+                               fr = "Choix de la définition de la geométrie d'une cuve",
+                               ),
+
+
+#====
+# Definition des parametres selon le type de traitement de la geometrie
+#====
+
+  Geometrie = BLOC ( condition = " TraitementGeometrie in ( 'Topologie', ) ",
+
+    # RINT
+    RayonInterne = SIMP ( statut = "o",
+                          typ = "R",
+                          defaut = "1.994",
+                          fr = "Rayon interne de la cuve (m)",
+                          ),
+
+    # REXT
+    RayonExterne = SIMP ( statut = "o",
+                          typ = "R",
+                          defaut = "2.2015",
+                          fr = "Rayon externe de la cuve (m)",
+                          ),
+
+    # LREV
+    EpaisseurRevetement = SIMP ( statut = "o",
+                                 typ = "R",
+                                 defaut = "0.0075",
+                                 fr = "Epaisseur du revêtement (m)",
+                                 ),
+
+    # LIGMIN
+    LigamentExterneMin = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "0.75",
+                                fr = "Ligament externe minimal avant rupture (% de l'épaisseur de cuve)",
+                                ),
+
+  ), # Fin BLOC  Geometrie
+
+  Maillage = BLOC ( condition = " TraitementGeometrie in ( 'Maillage', ) ",
+
+    # Question : quel rapport avec NBO ??
+    Liste_abscisses = SIMP ( statut = "o",
+                             typ = "R",
+                             max = "**",
+                             fr = "Liste des abscisses (m)",
+                             ),
+  ), # Fin BLOC Maillage
+
+) # Fin PROC CUVE
+
+#====================================================
+# 4. Modeles de fluence, d'irradiation et de tenacite
+#====================================================
+
+#=======================
+# 4.1 Modeles de fluence
+#=======================
+
+MODELES = PROC ( nom = "MODELES",
+                 op = 68,
+                repetable = 'n',
+                 fr = "Modèles de fluence, d'irradiation et de ténacité", 
+
+
+#===
+# Liste des paramètres
+#===
+
+  # MODELFLUENCE
+  Fluence = SIMP ( statut = "o",
+                   typ = "TXM",
+                  into = ( "Exponentiel sans revetement k=9.7 (Reglementaire)", # Reglementaire
+                           "Exponentiel sans revetement k=12.7 (France)", # France 
+                            "Exponentiel sans revetement k=0. (ValeurImposee)", # ValeurImposee 
+                            "Donnees francaises du palier CPY (SDM)", # SDM 
+                            "Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)", # GrandeDev 
+                            "Regulatory Guide 1.99 rev 2 (USNRC)", # USNRC 
+                            "Dossier 900 MWe AP9701 rev 2 (REV_2)", # REV_2 
+                            "Lissage du modele ajuste (SDM_Lissage)", # SDM_Lissage 
+                            "Grand developpement (GD_Cuve)"), # GD_Cuve 
+                   #defaut = "Reglementaire", 
+                   fr = "Modèle d'atténuation de la fluence dans l'épaisseur de la cuve",
+                   ),
+
+
+#====
+# Definition des parametres selon le modele de fluence
+#====
+
+  Reglementaire = BLOC ( condition = " Fluence in ( 'Exponentiel sans revetement k=9.7 (Reglementaire)', ) ",
+
+    # fmax
+    FluenceMax = SIMP ( statut = "o",
+                        typ = "R",
+                        defaut = "6.5",
+                        fr = "Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                        ),
+
+  ), # Fin BLOC Reglementaire
+
+  France = BLOC ( condition = " Fluence in ( 'Exponentiel sans revetement k=12.7 (France)', ) ",
+
+    # fmax
+    FluenceMax = SIMP ( statut = "o",
+                        typ = "R",
+                        defaut = "6.5",
+                        fr = "Fluence maximale assimilée par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                        ),
+
+    # KPFRANCE = SIMP ( statut = "o",
+    KPFrance = SIMP ( statut = "o",
+                      typ = "R",
+                      defaut = "12.7",
+                      fr = "Paramètre exponentiel du modèle France",
+                      ),
+
+  ), # Fin BLOC France
+
+  ValeurImposee = BLOC ( condition = " Fluence in ( 'Exponentiel sans revetement k=0. (ValeurImposee)', ) ",
+
+    # fmax
+    FluenceMax = SIMP ( statut = "o",
+                        typ = "R",
+                        defaut = "6.5",
+                        fr = "Fluence maximale assimilée par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                        ),
+
+  ), # Fin BLOC ValeurImposee
+
+  SDM = BLOC ( condition = " Fluence in ( 'Donnees francaises du palier CPY' (SDM), ) ",
+
+    # fmax
+    FluenceMax = SIMP ( statut = "o",
+                        typ = "R",
+                        defaut = "6.5",
+                        fr = "Fluence maximale assimilée par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                        ),
+
+  ), # Fin BLOC SDM
+
+  USNRC = BLOC ( condition = " Fluence in ( 'Regulatory Guide 1.99 rev 2 (USNRC)', ) ",
+
+    # fmax
+    FluenceMax = SIMP ( statut = "o",
+                        typ = "R",
+                        defaut = "6.5",
+                        fr = "Fluence maximale assimilée par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                        ),
+
+    KPUS = SIMP ( statut = "o",
+                  typ = "R",
+                  defaut = "9.4488",
+                  fr = "Paramètre exponentiel du modèle US",
+                  ),
+
+  ), # Fin BLOC USNRC
+
+  REV_2 = BLOC ( condition = " Fluence in ( 'Dossier 900 MWe AP9701 rev 2 (REV_2)', ) ",
+
+    # fmax
+    FluenceMax = SIMP ( statut = "o",
+                        typ = "R",
+                        defaut = "6.5",
+                        fr = "Fluence maximale assimilée par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                        ),
+
+  ), # Fin BLOC REV_2
+
+  SDM_Lissage = BLOC ( condition = " Fluence in ( 'Lissage du modele ajuste (SDM_Lissage)', ) ",
+
+    # fmax
+    FluenceMax = SIMP ( statut = "o",
+                        typ = "R",
+                        defaut = "6.5",
+                        fr = "Fluence maximale assimilée par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                        ),
+
+  ), # Fin BLOC SDM_Lissage
+
+  GrandeDev = BLOC ( condition = " Fluence in ( 'Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)', ) ",
+
+    # fmax
+    FluenceMax = SIMP ( statut = "o",
+                        typ = "R",
+                        defaut = "6.5",
+                        fr = "Fluence maximale assimilée par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                        ),
+
+  ), # Fin BLOC GrandeDev
+
+  GD_Cuve = BLOC ( condition = " Fluence in ( 'Grand developpement (GD_Cuve)', ) ",
+
+    # fmax
+    FluenceMax = SIMP ( statut = "o",
+                        typ = "R",
+                        defaut = "6.5",
+                        fr = "Fluence maximale assimilée par la cuve (n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95",
+                        ),
+
+    # COEFFLUENCE1
+    FluenceAzimut0 = SIMP ( statut = "o",
+                            typ = "R",
+                            defaut = "5.8",
+                            fr = "Fluence à l'azimut 0 (10^19 n/cm2)",
+                            ),
+
+    # COEFFLUENCE2
+    FluenceAzimut5 = SIMP ( statut = "o",
+                            typ = "R",
+                            defaut = "5.48",
+                            fr = "Fluence à l'azimut 5 (10^19 n/cm2)",
+                            ),
+
+    # COEFFLUENCE3
+    FluenceAzimut10 = SIMP ( statut = "o",
+                             typ = "R",
+                             defaut = "4.46",
+                             fr = "Fluence à l'azimut 10 (10^19 n/cm2)",
+                             ),
+
+    # COEFFLUENCE4
+    FluenceAzimut15 = SIMP ( statut = "o",
+                             typ = "R",
+                             defaut = "3.41",
+                             fr = "Fluence à l'azimut 15 (10^19 n/cm2)",
+                             ),
+
+    # COEFFLUENCE5
+    FluenceAzimut20 = SIMP ( statut = "o",
+                             typ = "R",
+                             defaut = "3.37",
+                             fr = "Fluence à l'azimut 20 (10^19 n/cm2)",
+                             ),
+
+    # COEFFLUENCE6
+    FluenceAzimut25 = SIMP ( statut = "o",
+                             typ = "R",
+                             defaut = "3.16",
+                             fr = "Fluence à l'azimut 25 (10^19 n/cm2)",
+                             ),
+
+    # COEFFLUENCE7
+    FluenceAzimut30 = SIMP ( statut = "o",
+                             typ = "R",
+                             defaut = "2.74",
+                             fr = "Fluence à l'azimut 30 (10^19 n/cm2)",
+                             ),
+
+    # COEFFLUENCE8
+    FluenceAzimut35 = SIMP ( statut = "o",
+                             typ = "R",
+                             defaut = "2.25",
+                             fr = "Fluence à l'azimut 35 (10^19 n/cm2)",
+                             ),
+
+    # COEFFLUENCE9
+    FluenceAzimut40 = SIMP ( statut = "o",
+                             typ = "R",
+                             defaut = "1.89",
+                             fr = "Fluence à l'azimut 40 (10^19 n/cm2)",
+                             ),
+
+    # COEFFLUENCE10
+    FluenceAzimut45 = SIMP ( statut = "o",
+                             typ = "R",
+                             defaut = "1.78",
+                             fr = "Fluence à l'azimut 45 (10^19 n/cm2)",
+                             ),
+
+  ), # Fin BLOC GD_Cuve
+
+#==========================
+# 4.2 Modeles d'irradiation
+#==========================
+
+  # TYPIRR
+  Irradiation = SIMP ( statut = "o",
+                       typ = "TXM",
+                      into = ( "RTndt de la cuve a l instant de l analyse", # RTNDT 
+                               "Modele d irradiation" ), # FLUENCE
+                       fr = "Type d'irradiation",
+                       ),
+
+#====
+# Definition des parametres selon le type d'irradiation
+#====
+
+  RTndt = BLOC ( condition = " Irradiation in ( 'RTndt de la cuve a l instant de l analyse', ) ",
+    RTNDT = SIMP ( statut = "o",
+                   typ = "R",
+                   defaut = "73.",
+                   fr = "RTNDT de la cuve à l'instant de l'analyse (°C)",
+                   ),
+
+  ), # Fin BLOC RTndt
+
+  Modele = BLOC ( condition = " Irradiation in ( 'Modele d irradiation', ) ",
+    # MODELIRR
+    ModeleIrradiation = SIMP ( statut = "o",
+                               typ = "TXM",
+                              into = ( "Metal de Base : formule de FIM/FIS Houssin", # HOUSSIN 
+                                       "Metal de Base : formule de FIM/FIS Persoz", # PERSOZ
+                                       "Metal de Base : formule de FIM/FIS Lefebvre", # LEFEBVRE
+                                       "Metal de Base : Regulatory Guide 1.00 rev 2", # USNRCmdb
+                                       "Joint Soude : formulation de FIM/FIS Brillaud", # BRILLAUD
+                                       "Joint Soude : Regulatory Guide 1.00 rev 2" ), # USNRCsoud
+                               fr = "Modèle d'irradiation pour virole ou joint soudé",
+                               ),
+
+    # CU
+    TeneurCuivre = SIMP ( statut = "o",
+                          typ = "R",
+                          defaut = "0.",
+                          fr = "Teneur en cuivre (%)",
+                          ),
+
+    # NI
+    TeneurNickel = SIMP ( statut = "o",
+                          typ = "R",
+                          defaut = "0.",
+                          fr = "Teneur en nickel (%)",
+                          ),
+
+    # P
+    TeneurPhosphore = SIMP ( statut = "o",
+                             typ = "R",
+                             defaut = "0.",
+                             fr = "Teneur en phosphore (%)",
+                             ),
+
+    Parametres_USNRC = BLOC ( condition = " ModeleIrradiation in ( 'Joint Soude : Regulatory Guide 1.00 rev 2', 'Metal de Base : Regulatory Guide 1.00 rev 2' , ) ",
+      # RTimoy
+      MoyenneRTndt = SIMP ( statut = "o",
+                            typ = "R",
+                            defaut = "0.",
+                            fr = "Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)",
+                            ),
+
+      # RTicov
+      CoefVariationRTndt = SIMP ( statut = "o",
+                                  typ = "R",
+                                  defaut = "0.",
+                                  fr = "Coefficient de variation de la RTNDT initiale",
+                                  ),
+
+      # USectDRT
+      EcartTypeRTndt = SIMP ( statut = "o",
+                              typ = "R",
+                              defaut = "28.",
+                              fr = "Ecart-type du décalage de RTNDT (°F) (28. pour js et 17. pour mdb)",
+                              ),
+
+      # nbectDRTNDT
+      NombreEcartTypeRTndt = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "2.",
+                                    fr = "Nombre d'écart-type par rapport à la moyenne de DRTNDT",
+                                    ),
+
+    ), # Fin BLOC Parametres_USNRC 
+
+  ), # Fin BLOC Modele
+
+#========================
+# 4.3 Modeles de tenacite
+#========================
+
+  # MODELKIC
+  Tenacite = SIMP ( statut = "o",
+                    typ = "TXM",
+                   into = ( "RCC-M/ASME coefficient=2", # RCC-M
+                            "RCC-M/ASME coefficient=2.33 (Houssin)", # Houssin_RC
+                            "RCC-M/ASME avec KI=KIpalier", # RCC-M_pal
+                            "RCC-M/ASME avec KI~exponentiel", # RCC-M_exp
+                            "Weibull basee sur la master cuve", # Wallin
+                            "Weibull basee sur la master cuve (REME)", # REME
+                            "Weibull n°1 (etude ORNL)", # ORNL
+                            "Weibull n°2", # WEIB2
+                            "Weibull n°3", # WEIB3
+                            "Weibull generalisee", # WEIB_GEN
+                            "Exponentielle n°1 (Frama)", # Frama
+                            "Exponentielle n°2 (LOGWOLF)" ), # LOGWOLF
+                    fr = "Modèle de ténacité",
+                    ),
+
+#====
+# Definition des parametres selon le modele de tenacité
+#====
+
+  RCCM_delta2 = BLOC ( condition = " Tenacite in ( 'RCC-M/ASME coefficient=2', ) ",
+
+    # nbectKIc
+    NbEcartType_MoyKIc = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+                                ),
+
+    # fractKIc
+    Fractile_KIc = SIMP ( statut = "o",
+                          typ = "R",
+                          defaut = "5.",
+                          fr = "Valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+                          ),
+
+    # KICPAL
+    PalierDuctile_KIc = SIMP ( statut = "o",
+                               typ = "R",
+                               defaut = "195.",
+                               fr = "Palier déterministe de K1c quand modèle RCC-M  (MPa(m^0.5)) ",
+                               ),
+
+    # KICCDVD = SIMP ( statut = "o",
+    CoefficientVariation_KIc = SIMP ( statut = "o",
+                                      typ = "R",
+                                      defaut = "0.15",
+                                      fr = "Coefficient de variation de la loi normale de K1c quand modèle RCC-M ",
+                                      ),
+
+    # nbectKIa
+    NbEcartType_MoyKIa = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+                                ),
+
+
+    # KIAPAL
+    PalierDuctile_KIa = SIMP ( statut = "o",
+                               typ = "R",
+                               defaut = "195.",
+                               fr = "Palier déterministe de K1a -ténacite à l'arrêt- quand modèle RCC-M  (MPa(m^0.5)) ",
+                               ),
+
+    # KIACDV
+    CoefficientVariation_KIa = SIMP ( statut = "o",
+                                      typ = "R",
+                                      defaut = "0.10",
+                                      fr = "Coefficient de variation de la loi normale de K1a -ténacite à l'arrêt- quand modèle RCC-M ",
+                                      ),
+
+  ), # Fin BLOC Parametres_RCC-M
+
+  RCCM_KIpal = BLOC ( condition = " Tenacite in ( 'RCC-M/ASME avec KI=KIpalier', ) ",
+
+    # nbectKIc
+    NbEcartType_MoyKIc = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+                                ),
+
+    # fractKIc
+    Fractile_KIc = SIMP ( statut = "o",
+                          typ = "R",
+                          defaut = "5.",
+                          fr = "Valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+                          ),
+
+    # nbectKIa
+    NbEcartType_MoyKIa = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+                                ),
+
+  ), # Fin BLOC Parametres_RCCMpal
+
+  RCCM_KIexp = BLOC ( condition = " Tenacite in ( 'RCC-M/ASME avec KI~exponentiel', ) ",
+
+    # nbectKIc
+    NbEcartType_MoyKIc = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+                                ),
+
+    # fractKIc
+    Fractile_KIc = SIMP ( statut = "o",
+                          typ = "R",
+                          defaut = "5.",
+                          fr = "Valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+                          ),
+
+    # nbectKIa
+    NbEcartType_MoyKIa = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+                                ),
+
+  ), # Fin BLOC Parametres_RCCMexp
+
+  RCCM_delta233 = BLOC ( condition = " Tenacite in ( 'RCC-M/ASME coefficient=2.33 (Houssin)', ) ",
+
+    # nbectKIc
+    NbEcartType_MoyKIc = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+                                ),
+
+    # fractKIc
+    Fractile_KIc = SIMP ( statut = "o",
+                          typ = "R",
+                          defaut = "5.",
+                          fr = "Valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+                          ),
+
+    # nbectKIa
+    NbEcartType_MoyKIa = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+                                ),
+
+  ), # Fin BLOC Parametres_Houssin_RC
+      
+  Weibull_MasterCuve = BLOC ( condition = " Tenacite in ( 'Weibull basee sur la master cuve', ) ",
+    # T0WALLIN
+    Temperature_KIc100 = SIMP ( statut = "o",
+                                typ = "I",
+                                defaut = "-27",
+                                fr = "Paramètre T0 du modèle Wallin (°C) : température pour laquelle la téncité du matériau vaut en moyenne 100MPa.m^5",
+                                ),
+
+    # nbectKIc
+    NbEcartType_MoyKIc = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+                                ),
+
+    # fractKIc
+    Fractile_KIc = SIMP ( statut = "o",
+                          typ = "R",
+                          defaut = "5.",
+                          fr = "Valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+                          ),
+
+    # nbectKIa
+    NbEcartType_MoyKIa = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+                                ),
+
+  ), # Fin BLOC Parametres_Wallin
+
+  Weibull_MasterCuveREME = BLOC ( condition = " Tenacite in ( 'Weibull basee sur la master cuve (REME)', ) ",
+
+    # nbectKIc
+    NbEcartType_MoyKIc = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+                                ),
+
+    # fractKIc
+    Fractile_KIc = SIMP ( statut = "o",
+                          typ = "R",
+                          defaut = "5.",
+                          fr = "Valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+                          ),
+
+    # nbectKIa
+    NbEcartType_MoyKIa = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+                                ),
+
+  ), # Fin BLOC Parametres_REME
+
+  Weibull1_ORNL = BLOC ( condition = " Tenacite in ( 'Weibull n°1 (etude ORNL)', ) ",
+
+    # nbectKIc
+    NbEcartType_MoyKIc = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+                                ),
+
+    # fractKIc
+    Fractile_KIc = SIMP ( statut = "o",
+                          typ = "R",
+                          defaut = "5.",
+                          fr = "Valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+                          ),
+
+    # nbectKIa
+    NbEcartType_MoyKIa = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+                                ),
+
+  ), # Fin BLOC Parametres_ORNL
+
+  Exponentielle1_Frama = BLOC ( condition = " Tenacite in ( 'Exponentielle n°1 (Frama)', ) ",
+
+    # nbectKIc
+    NbEcartType_MoyKIc = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+                                ),
+
+    # fractKIc
+    Fractile_KIc = SIMP ( statut = "o",
+                          typ = "R",
+                          defaut = "5.",
+                          fr = "Valeur caracteristique de KIc exprimée en ordre de fractile (%) ",
+                          ),
+
+    # nbectKIa
+    NbEcartType_MoyKIa = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+                                ),
+
+  ), # Fin BLOC Parametres_Frama
+
+  Weibull3 = BLOC ( condition = " Tenacite in ( 'Weibull n°3', ) ",
+
+    # nbectKIc
+    NbEcartType_MoyKIc = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+                                ),
+
+    # fractKIc
+    Fractile_KIc = SIMP ( statut = "o",
+                          typ = "R",
+                          defaut = "5.",
+                          fr = "Valeur caracteristique de KIc exprimée en ordre de fractile (%) ",
+                          ),
+
+    # nbectKIa
+    NbEcartType_MoyKIa = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+                                ),
+
+  ), # Fin BLOC Parametres_WEIB3
+
+  Weibull2 = BLOC ( condition = " Tenacite in ( 'Weibull n°2', ) ",
+
+    # nbectKIc
+    NbEcartType_MoyKIc = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+                                ),
+
+    # fractKIc
+    Fractile_KIc = SIMP ( statut = "o",
+                          typ = "R",
+                          defaut = "5.",
+                          fr = "Valeur caracteristique de KIc exprimée en ordre de fractile (%) ",
+                          ),
+
+    # nbectKIa
+    NbEcartType_MoyKIa = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+                                ),
+
+  ), # Fin BLOC Parametres_WEIB2
+
+  Exponentielle2_LOGWOLF = BLOC ( condition = " Tenacite in ( 'Exponentielle n°2 (LOGWOLF)', ) ",
+
+    # nbectKIc
+    NbEcartType_MoyKIc = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+                                ),
+
+    # fractKIc
+    Fractile_KIc = SIMP ( statut = "o",
+                          typ = "R",
+                          defaut = "5.",
+                          fr = "Valeur caracteristique de KIc exprimée en ordre de fractile (%) ",
+                          ),
+
+    # nbectKIa
+    NbEcartType_MoyKIa = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+                                ),
+
+  ), # Fin BLOC Parametres_LOGWOLF
+
+  Weibull_Generalisee = BLOC ( condition = " Tenacite in ( 'Weibull generalisee',) ",
+    Coefficients = FACT ( statut = "o",
+
+      # A1
+      A1 = SIMP ( statut = "o",
+                  typ = "R",
+                  defaut = "21.263",
+                  fr = "coef du coef a(T) d'une Weibull générale",
+                  ),
+      # A2
+      A2 = SIMP ( statut = "o",
+                  typ = "R",
+                  defaut = "9.159",
+                  fr = "coef du coef a(T) d'une Weibull générale",
+                  ),
+      # A3
+      A3 = SIMP ( statut = "o",
+                  typ = "R",
+                  defaut = "0.04057",
+                  fr = "coef du coef a(T) d'une Weibull générale",
+                  ),
+      # B1
+      B1 = SIMP ( statut = "o",
+                  typ = "R",
+                  defaut = "17.153",
+                  fr = "coef du coef b(T) d'une Weibull générale",
+                  ),
+      # B2
+      B2 = SIMP ( statut = "o",
+                  typ = "R",
+                  defaut = "55.089",
+                  fr = "coef du coef b(T) d'une Weibull générale",
+                  ),
+      # B3
+      B3 = SIMP ( statut = "o",
+                  typ = "R",
+                  defaut = "0.0144",
+                  fr = "coef du coef b(T) d'une Weibull générale",
+                  ),
+      # C1
+      C1 = SIMP ( statut = "o",
+                  typ = "R",
+                  defaut = "4.",
+                  fr = "coef du coef c(T) d'une Weibull générale",
+                  ),
+      # C2
+      C2 = SIMP ( statut = "o",
+                  typ = "R",
+                  defaut = "0.",
+                  fr = "coef du coef c(T) d'une Weibull générale",
+                  ),
+      # C3
+      C3 = SIMP ( statut = "o",
+                  typ = "R",
+                  defaut = "0.",
+                  fr = "coef du coef c(T) d'une Weibull générale",
+                  ),
+
+    ), # FIN FACT Coefficients
+
+    # nbectKIc
+    NbEcartType_MoyKIc = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ",
+                                ),
+
+    # fractKIc
+    Fractile_KIc = SIMP ( statut = "o",
+                          typ = "R",
+                          defaut = "5.",
+                          fr = "Valeur caracteristique de KIc exprimée en ordre de fractile (%) ",
+                          ),
+
+    # nbectKIa
+    NbEcartType_MoyKIa = SIMP ( statut = "o",
+                                typ = "R",
+                                defaut = "-2.",
+                                fr = "Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ",
+                                ),
+
+  ), # Fin BLOC Parametres_WEIB_GEN
+
+) # Fin PROC MODELES
+
+
+#==================
+# 5. Initialisation
+#==================
+
+INITIALISATION = PROC ( nom = "INITIALISATION",
+                        op = 68,
+                       repetable = 'n',
+                        fr = "Initialisation : instant initial, profils radiaux de température et contraintes", 
+
+  TemperatureInitiale = FACT ( statut = "o",
+
+    ProfilRadial_TemperatureInitiale = SIMP ( statut = "o",
+                                              typ = Tuple(2),
+                                              max = "**",
+                                              fr = "Profil radial de la température initiale dans la cuve (m) (°C) ",
+                                              ),
+
+    Amont_TemperatureInitiale = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                       fr = "Prolongation à la frontière amont",
+                                       ),
+            
+    Aval_TemperatureInitiale = SIMP ( statut = "o",
+                                      typ = "TXM",
+                                      into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                      fr = "Prolongation à la frontière aval",
+                                      ),
+
+  ), # Fin FACT TemperatureInitiale
+
+  ContraintesInitiales = FACT ( statut = "o",
+
+    ProfilRadial_ContraintesInitiales = SIMP ( statut = "o",
+                                               typ = Tuple(4),
+                                               max = "**",
+                                               fr = "Profil radial des contraintes radiale, circonférentielle et longitudinale dans la cuve (m) (xx) (xx) (xx) ",
+                                               ),
+
+    Amont_ContraintesInitiales = SIMP ( statut = "o",
+                                        typ = "TXM",
+                                        into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                        fr = "Prolongation à la frontière amont",
+                                        ),
+            
+    Aval_ContraintesInitiales = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                       fr = "Prolongation à la frontière aval",
+                                       ),
+
+  ), # Fin FACT ContraintesInitiales
+
+  # INSTINIT
+  InstantInitialisation = SIMP ( statut = "o",
+                                 typ = "R",
+                                 defaut = "-1.",
+                                 fr = "Instant initial auquel sont définies la température, ainsi que les contraintes initiales (en s) ",
+                                 ),
+
+) # Fin PROC INITIALISATION
+
+
+#==================================
+# 6. CARACTERISTIQUES DU REVETEMENT
+#==================================
+
+REVETEMENT = PROC ( nom = "REVETEMENT",
+                    op = 68,
+                   repetable = 'n',
+                    fr = "Caracteristiques du revêtement", 
+
+  # KTHREV
+  ConditionLimiteThermiqueREV = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       into = ( "ENTHALPIE", "CHALEUR",),
+                                       #defaut = "CHALEUR",
+                                       fr = "Option pour définir les caractéristiques du revêtement ",
+                                       ),
+
+  EnthalpieREV = BLOC ( condition = " ConditionLimiteThermiqueREV in ( 'ENTHALPIE', ) ",
+
+    EnthalpieREV_Fct_Temperature = SIMP ( statut = "o",
+                                          typ = Tuple(2),
+                                          max = "**",
+                                          fr = "Température (°C) / enthalpie massique  (J/kg) ",
+                                          ),
+
+    Amont_EnthalpieREV = SIMP ( statut = "o",
+                                typ = "TXM",
+                                into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                fr = "Prolongation à la frontière amont",
+                                ),
+            
+    Aval_EnthalpieREV = SIMP ( statut = "o",
+                               typ = "TXM",
+                               into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                               fr = "Prolongation à la frontière aval",
+                               ),
+
+  ), # Fin BLOC EnthalpieREV
+
+
+  ChaleurREV = BLOC ( condition = " ConditionLimiteThermiqueREV in ( 'CHALEUR', ) ",
+
+    ChaleurREV_Fct_Temperature = SIMP ( statut = "o",
+                                        typ = Tuple(2),
+                                        max = "**",
+                                        fr = "Température (°C) / chaleur volumique (J/kg/K) ",
+                                        ),
+
+    Amont_ChaleurREV = SIMP ( statut = "o",
+                              typ = "TXM",
+                              into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                              fr = "Prolongation à la frontière amont",
+                              ),
+            
+    Aval_ChaleurREV = SIMP ( statut = "o",
+                             typ = "TXM",
+                             into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                             fr = "Prolongation à la frontière aval",
+                             ),
+
+  ), # Fin BLOC ChaleurREV
+
+  ConductiviteREV = FACT (statut = "o",
+
+    ConductiviteREV_Fct_Temperature = SIMP ( statut = "o",
+                                             typ = Tuple(2),
+                                             max = "**",
+                                             fr = "Température (°C) / conductivité thermique (W/m/°C) ",
+                                             ),
+
+    Amont_ConductiviteREV = SIMP ( statut = "o",
+                                   typ = "TXM",
+                                   into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                   fr = "Prolongation à la frontière amont",
+                                   ),
+            
+    Aval_ConductiviteREV = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                  fr = "Prolongation à la frontière aval",
+                                  ),
+
+  ), # Fin FACT ConductiviteREV
+
+  ModuleYoungREV = FACT (statut = "o",
+
+    ModuleYoungREV_Fct_Temperature = SIMP ( statut = "o",
+                                            typ = Tuple(2),
+                                            max = "**",
+                                            fr = "Température (°C) / module d'Young (MPa) ",
+                                            ),
+
+    Amont_ModuleYoungREV = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                  fr = "Prolongation à la frontière amont",
+                                  ),
+            
+    Aval_ModuleYoungREV = SIMP ( statut = "o",
+                                 typ = "TXM",
+                                 into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                 fr = "Prolongation à la frontière aval",
+                                 ),
+
+  ), # Fin FACT ModuleYoungREV
+
+  CoeffDilatThermREV = FACT (statut = "o",
+
+    CoeffDilatThermREV_Fct_Temperature = SIMP ( statut = "o",
+                                                typ = Tuple(2),
+                                                max = "**",
+                                                fr = "Température (°C) / coefficient de dilatation thermique (°C-1) ",
+                                               ),
+
+    Amont_CoeffDilatThermREV = SIMP ( statut = "o",
+                                      typ = "TXM",
+                                      into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                      fr = "Prolongation à la frontière amont",
+                                      ),
+            
+    Aval_CoeffDilatThermREV = SIMP ( statut = "o",
+                                     typ = "TXM",
+                                     into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                     fr = "Prolongation à la frontière aval",
+                                     ),
+
+  ), # Fin FACT CoeffDilatThermREV
+
+  LimiteElasticiteREV = FACT (statut = "o",
+
+    LimiteElasticiteREV_Fct_Temperature = SIMP ( statut = "o",
+                                                 typ = Tuple(2),
+                                                 max = "**",
+                                                 fr = "Température (°C) / limite d'élasticite (MPa) ",
+                                                 ),
+
+    Amont_LimiteElasticiteREV = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                       fr = "Prolongation à la frontière amont",
+                                       ),
+            
+    Aval_LimiteElasticiteREV = SIMP ( statut = "o",
+                                      typ = "TXM",
+                                      into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                      fr = "Prolongation à la frontière aval",
+                                      ),
+
+  ), # Fin FACT LimiteElasticiteREV
+
+  AutresParametresREV = FACT (statut = "o",
+
+    # TREFREV
+    TemperatureDeformationNulleREV = SIMP ( statut = "o",
+                                            typ = "R",
+                                            defaut = "20.",
+                                            fr = "Température de référence pour laquelle les déformations thermiques sont nulles (°C) ",
+                                            ),
+
+    # TDETREV
+    TemperaturePourCoefDilatThermREV = SIMP ( statut = "o",
+                                              typ = "R",
+                                              defaut = "287.",
+                                              fr = "Température de définition du coefficient de dilatation thermique (°C) ",
+                                              ),
+
+    # NUREV
+    CoefficientPoissonREV = SIMP ( statut = "o",
+                                   typ = "R",
+                                   defaut = "0.3",
+                                   fr = "Coefficient de Poisson ",
+                                   ),
+
+  ), # Fin FACT AutresParametresREV
+
+) # Fin PROC REVETEMENT
+
+
+#=====================================
+# 7. CARACTERISTIQUES DU METAL DE BASE
+#=====================================
+
+METAL_BASE = PROC ( nom = "METAL_BASE",
+                    op = 68,
+                   repetable = 'n',
+                    fr = "Caracteristiques du metal de base", 
+
+  # KTHMDB
+  ConditionLimiteThermiqueMDB = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       into = ( "ENTHALPIE", "CHALEUR",),
+                                       #defaut = "CHALEUR",
+                                       fr = "Option pour definir les caractéristiques du revêtement ",
+                                       ),
+
+  EnthalpieMDB = BLOC ( condition = " ConditionLimiteThermiqueMDB in ( 'ENTHALPIE', ) ",
+
+    EnthalpieMDB_Fct_Temperature = SIMP ( statut = "o",
+                                          typ = Tuple(2),
+                                          max = "**",
+                                          fr = "Température (°C) / enthalpie massique (J/kg) ",
+                                          ),
+
+    Amont_EnthalpieMDB = SIMP ( statut = "o",
+                                typ = "TXM",
+                                into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                fr = "Prolongation à la frontière amont",
+                                ),
+            
+    Aval_EnthalpieMDB = SIMP ( statut = "o",
+                               typ = "TXM",
+                               into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                               fr = "Prolongation à la frontière aval",
+                               ),
+
+  ), # Fin BLOC EnthalpieMDB
+
+  ChaleurMDB = BLOC ( condition = " ConditionLimiteThermiqueMDB in ( 'CHALEUR', ) ",
+
+    ChaleurMDB_Fct_Temperature = SIMP ( statut = "o",
+                                        typ = Tuple(2),
+                                        max = "**",
+                                        fr = "Température (°C) / chaleur volumique (J/kg/K) ",
+                                        ),
+
+    Amont_ChaleurMDB = SIMP ( statut = "o",
+                              typ = "TXM",
+                              into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                              fr = "Prolongation à la frontière amont",
+                              ),
+            
+    Aval_ChaleurMDB = SIMP ( statut = "o",
+                             typ = "TXM",
+                             into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                             fr = "Prolongation à la frontière aval",
+                             ),
+
+  ), # Fin BLOC ChaleurMDB
+
+  ConductiviteMDB = FACT ( statut = "o",
+
+    ConductiviteMDB_Fct_Temperature = SIMP ( statut = "o",
+                                             typ = Tuple(2),
+                                             max = "**",
+                                             fr = "Température (°C) / conductivité thermique (W/m/°C) ",
+                                             ),
+
+    Amont_ConductiviteMDB = SIMP ( statut = "o",
+                                   typ = "TXM",
+                                   into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                   fr = "Prolongation à la frontière amont",
+                                   ),
+            
+    Aval_ConductiviteMDB = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                  fr = "Prolongation à la frontière aval",
+                                  ),
+
+  ), # Fin FACT ConductiviteMDB
+
+  ModuleYoungMDB = FACT ( statut = "o",
+
+    ModuleYoungMDB_Fct_Temperature = SIMP ( statut = "o",
+                                            typ = Tuple(2),
+                                            max = "**",
+                                            fr = "Température (°C) / module d'Young (MPa) ",
+                                            ),
+
+    Amont_ModuleYoungMDB = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                  fr = "Prolongation à la frontière amont",
+                                  ),
+            
+    Aval_ModuleYoungMDB = SIMP ( statut = "o",
+                                 typ = "TXM",
+                                 into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                 fr = "Prolongation à la frontière aval",
+                                 ),
+
+  ), # Fin FACT ModuleYoungMDB
+
+  CoeffDilatThermMDB = FACT ( statut = "o",
+
+    CoeffDilatThermMDB_Fct_Temperature = SIMP ( statut = "o",
+                                                typ = Tuple(2),
+                                                max = "**",
+                                                fr = "Température (°C) / coefficient de dilatation thermique (°C-1) ",
+                                                ),
+
+    Amont_CoeffDilatThermMDB = SIMP ( statut = "o",
+                                      typ = "TXM",
+                                      into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                      fr = "Prolongation à la frontière amont",
+                                      ),
+            
+    Aval_CoeffDilatThermMDB = SIMP ( statut = "o",
+                                     typ = "TXM",
+                                     into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                     fr = "Prolongation à la frontière aval",
+                                     ),
+
+  ), # Fin FACT CoeffDilatThermMDB
+
+  AutresParametresMDB = FACT ( statut = "o",
+
+    # TREFMDB
+    TemperatureDeformationNulleMDB = SIMP ( statut = "o",
+                                            typ = "R",
+                                            defaut = "20.",
+                                            fr = "Température de référence pour laquelle les déformations thermiques sont nulles (°C) ",
+                                            ),
+
+    # TDETMDB
+    TemperaturePourCoefDilatThermMDB = SIMP ( statut = "o",
+                                              typ = "R",
+                                              defaut = "287.",
+                                              fr = "Température de définition du coefficient de dilatation thermique (°C) ",
+                                              ),
+
+    # NUMDB
+    CoefficientPoissonMDB = SIMP ( statut = "o",
+                                   typ = "R",
+                                   defaut = "0.3",
+                                   fr = "Coefficient de Poisson ",
+                                   ),
+
+  ), # Fin FACT TemperatureDeformationNulleMDB
+
+) # Fin PROC METAL_BASE
+
+
+#===============================
+# 8. TRANSITOIRE THERMOMECANIQUE
+#===============================
+
+TRANSITOIRE = PROC ( nom = "TRANSITOIRE",
+                     op = 68,
+                    repetable = 'n',
+                     fr = "Description du transitoire thermohydraulique", 
+
+  Pression = FACT ( statut = "o",
+
+    ProfilTemporel_Pression = SIMP ( statut = "o",
+                                   typ = Tuple(2),
+                                   max = "**",
+                                   fr = "Instant (s) / pression (MPa) ",
+                                   ),
+
+    Amont_Pression = SIMP ( statut = "o",
+                          typ = "TXM",
+                          into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                          fr = "Prolongation à la frontière amont",
+                          ),
+            
+    Aval_Pression = SIMP ( statut = "o",
+                         typ = "TXM",
+                         into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                         fr = "Prolongation à la frontière aval",
+                         ),
+
+  ), # FIN FACT Pression
+
+  # TYPCLTH
+  TypeConditionLimiteThermique = SIMP ( statut = "o",
+                                        typ = "TXM",
+                                        into = ( "Temperature imposee en paroi", # TEMP_IMPO 
+                                                "Flux de chaleur impose en paroi", # FLUX_REP 
+                                                "Temperature imposee du fluide et coefficient echange", # ECHANGE 
+                                                "Debit massique et temperature d injection de securite", # DEBIT 
+                                                "Temperature imposee du fluide et debit d injection de securite"), # TEMP_FLU
+                                        #defaut = "ECHANGE",
+                                        fr = "Type de condition thermique en paroi interne ",
+                                        ),
+
+  TemperatureImposeeParoi = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee en paroi', ) ",
+
+    ProfilTemporel_TemperatureImposeeParoi = SIMP ( statut = "o",
+                                               typ = Tuple(2),
+                                               max = "**",
+                                               fr = "Instant (s) / Température imposée (°C) ",
+                                               ),
+
+    Amont_TemperatureImposeeParoi = SIMP ( statut = "o",
+                                      typ = "TXM",
+                                      into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                      fr = "Prolongation à la frontière amont",
+                                      ),
+            
+    Aval_TemperatureImposeeParoi = SIMP ( statut = "o",
+                                     typ = "TXM",
+                                     into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                     fr = "Prolongation à la frontière aval",
+                                     ),
+
+  ), # Fin BLOC TemperatureImposeeParoi
+
+  FluxChaleur = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Flux de chaleur impose en paroi', ) ",
+
+    ProfilTemporel_FluxChaleur = SIMP ( statut = "o",
+                                        typ = Tuple(2),
+                                        max = "**",
+                                        fr = "Instant (s) / Flux de chaleur impose (W/m2) ",
+                                        ),
+
+    Amont_FluxChaleur = SIMP ( statut = "o",
+                               typ = "TXM",
+                               into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                               fr = "Prolongation à la frontière amont",
+                               ),
+            
+    Aval_FluxChaleur = SIMP ( statut = "o",
+                              typ = "TXM",
+                              into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                              fr = "Prolongation à la frontière aval",
+                              ),
+
+  ), # Fin BLOC FluxChaleur
+
+  TemperatureImposeeFluide = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et coefficient echange', 'Temperature imposee du fluide et debit d injection de securite', ) ",
+
+    ProfilTemporel_TemperatureImposeeFluide = SIMP ( statut = "o",
+                                               typ = Tuple(2),
+                                               max = "**",
+                                               fr = "Instant (s) / Température imposée (°C) ",
+                                               ),
+
+    Amont_TemperatureImposeeFluide = SIMP ( statut = "o",
+                                      typ = "TXM",
+                                      into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                      fr = "Prolongation à la frontière amont",
+                                      ),
+            
+    Aval_TemperatureImposeeFluide = SIMP ( statut = "o",
+                                     typ = "TXM",
+                                     into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                     fr = "Prolongation à la frontière aval",
+                                     ),
+
+  ), # Fin BLOC TemperatureImposeeFluide
+
+  CoefficientEchange = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et coefficient echange', ) ",
+
+    ProfilTemporel_CoefficientEchange = SIMP ( statut = "o",
+                                               typ = Tuple(2),
+                                               max = "**",
+                                               fr = "Instant (s) / Coefficient d'échange (W/m2/K) ",
+                                               ),
+
+    Amont_CoefficientEchange = SIMP ( statut = "o",
+                                      typ = "TXM",
+                                      into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                      fr = "Prolongation à la frontière amont",
+                                      ),
+            
+    Aval_CoefficientEchange = SIMP ( statut = "o",
+                                     typ = "TXM",
+                                     into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                     fr = "Prolongation à la frontière aval",
+                                     ),
+
+  ), # Fin BLOC CoefficientEchange
+
+  DebitMassique = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+    ProfilTemporel_DebitMassique = SIMP ( statut = "o",
+                                          typ = Tuple(2),
+                                          max = "**",
+                                          fr = "Instant (s) / Débit massique (kg/s) ",
+                                          ),
+
+    Amont_DebitMassique = SIMP ( statut = "o",
+                                 typ = "TXM",
+                                 into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                 fr = "Prolongation à la frontière amont",
+                                 ),
+            
+    Aval_DebitMassique = SIMP ( statut = "o",
+                                typ = "TXM",
+                                into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                fr = "Prolongation à la frontière aval",
+                                ),
+
+  ), # Fin BLOC DebitMassique
+
+  TemperatureInjection = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+    ProfilTemporel_TemperatureInjection = SIMP ( statut = "o",
+                                                 typ = Tuple(2),
+                                                 max = "**",
+                                                 fr = "Instant (s) / Température d'injection de sécurité  (°C) ",
+                                                 ),
+
+    Amont_TemperatureInjection = SIMP ( statut = "o",
+                                        typ = "TXM",
+                                        into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                        fr = "Prolongation à la frontière amont",
+                                        ),
+            
+    Aval_TemperatureInjection = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                       fr = "Prolongation à la frontière aval",
+                                       ),
+  ), # Fin BLOC TemperatureInjection
+
+  Creare = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+    # DH
+    DiametreHydraulique = SIMP ( statut = "o",
+                                 typ = "R",
+                                 defaut = "-2.",
+                                 fr = "Diamètre hydraulique (m) ",
+                                 ),
+
+    # SECTION
+    SectionEspaceAnnulaire = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Section espace annulaire (m2) ",
+                                    ),
+
+    # DELTA
+    HauteurCaracConvectionNaturelle = SIMP ( statut = "o",
+                                             typ = "R",
+                                             defaut = "-2.",
+                                             fr = "Hauteur caractéristique convection naturelle (m) ",
+                                             ),
+
+    # ALPHA_CF
+    CoeffVestale_ConvectionForcee = SIMP ( statut = "o",
+                                           typ = "R",
+                                           defaut = "1.",
+                                           fr = "Coefficient Vestale convection forcée (-) ",
+                                           ),
+
+    # ALPHA_CN
+    CoeffVestale_ConvectionNaturelle = SIMP ( statut = "o",
+                                              typ = "R",
+                                              defaut = "1.",
+                                              fr = "Coefficient Vestale convection naturelle (-) ",
+                                              ),
+
+    # EPS
+    CritereConvergenceRelative = SIMP ( statut = "o",
+                                        typ = "R",
+                                        defaut = "0.00001",
+                                        fr = "Critère convergence relative (-) ",
+                                        ),
+
+    # VM
+    VolumeMelange_CREARE = SIMP ( statut = "o",
+                                  typ = "R",
+                                  defaut = "-2.",
+                                  fr = "Volume de mélange CREARE (m3) ",
+                                  ),
+
+    # T0
+    TemperatureInitiale_CREARE = SIMP ( statut = "o",
+                                        typ = "R",
+                                        defaut = "-2.",
+                                        fr = "Température initiale CREARE (°C) ",
+                                        ),
+
+    # SE
+    SurfaceEchange_FluideStructure = SIMP ( statut = "o",
+                                            typ = "R",
+                                            defaut = "-2.",
+                                            fr = "Surface d'échange fluide/structure (m2) ",
+                                            ),
+
+  ), # Fin BLOC Creare
+
+
+  DebitInjection = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', ) ",
+
+    ProfilTemporel_DebitInjection = SIMP ( statut = "o",
+                                           typ = Tuple(2),
+                                           max = "**",
+                                           fr = "Instant (s) / Débit d'injection de sécurité (kg/s) ",
+                                           ),
+
+    Amont_DebitInjection = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                  fr = "Prolongation à la frontière amont",
+                                  ),
+            
+    Aval_DebitInjection = SIMP ( statut = "o",
+                                 typ = "TXM",
+                                 into = ( 'Continu', 'Exclu', 'Lineaire' ),
+                                 fr = "Prolongation à la frontière aval",
+                                 ),
+
+  ), # Fin BLOC DebitInjection
+
+
+  Vestale = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', ) ",
+
+    # DH
+    DiametreHydraulique = SIMP ( statut = "o",
+                                 typ = "R",
+                                 defaut = "-2.",
+                                 fr = "Diamètre hydraulique (m) ",
+                                 ),
+
+    # SECTION
+    SectionEspaceAnnulaire = SIMP ( statut = "o",
+                                    typ = "R",
+                                    defaut = "-2.",
+                                    fr = "Section espace annulaire (m2) ",
+                                    ),
+
+    # DELTA
+    HauteurCaracConvectionNaturelle = SIMP ( statut = "o",
+                                             typ = "R",
+                                             defaut = "-2.",
+                                             fr = "Hauteur caractéristique convection naturelle (m) ",
+                                             ),
+
+    # ALPHA_CF
+    CoeffVestale_ConvectionForcee = SIMP ( statut = "o",
+                                           typ = "R",
+                                           defaut = "1.",
+                                           fr = "Coefficient d'échange Vestale convection forcée (-) ",
+                                           ),
+
+    # ALPHA_CN
+    CoeffVestale_ConvectionNaturelle = SIMP ( statut = "o",
+                                              typ = "R",
+                                              defaut = "1.",
+                                              fr = "Coefficient d'échange Vestale convection naturelle (-) ",
+                                              ),
+
+    # EPS
+    CritereConvergenceRelative = SIMP ( statut = "o",
+                                        typ = "R",
+                                        defaut = "0.00001",
+                                        fr = "Critère convergence relative (-) ",
+                                        ),
+
+  ), # Fin BLOC Vestale
+
+) # Fin PROC TRANSITOIRE
diff --git a/Cuve2dg/Cuve2dg_Cata_V3.py b/Cuve2dg/Cuve2dg_Cata_V3.py
new file mode 100644 (file)
index 0000000..cc5fc92
--- /dev/null
@@ -0,0 +1,1050 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# Definition de variables sous forme de tuple
+# --------------------------------------------------
+
+import types
+class Tuple:
+  def __init__(self,ntuple):
+    self.ntuple=ntuple
+
+  def __convert__(self,valeur):
+    if type(valeur) == types.StringType:
+      return None
+    if len(valeur) != self.ntuple:
+      return None
+    return valeur
+
+  def info(self):
+    return "Tuple de %s elements" % self.ntuple
+
+  __repr__=info
+  __str__=info
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'CUVE1D-DEFAILLGLOB',
+                 execmodul = None,
+                 regles = ( AU_MOINS_UN ('OPTIONS','DEFAUT', 'CUVE', 'MODELES', 'INITIALISATION', 'REVETEMENT', 'METAL_BASE', 'TRANSITOIRE'),
+                            A_CLASSER ( ('OPTIONS'), ('DEFAUT') ),
+                            A_CLASSER ( ('DEFAUT'), ('CUVE') ),
+                            A_CLASSER ( ('CUVE'), ('MODELES') ),
+                            A_CLASSER ( ('MODELES'), ('INITIALISATION') ),
+                            A_CLASSER ( ('INITIALISATION'), ('REVETEMENT') ),
+                            A_CLASSER ( ('REVETEMENT'), ('METAL_BASE') ),
+                            A_CLASSER ( ('METAL_BASE'), ('TRANSITOIRE') )
+                          )
+                 ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+# --------------------------------------------------
+# RESPONSABLE D. THAI VAN
+# Ce fichier contient la liste des coefficients pour un
+# modele de Weibull generalise
+def Coef_WeibGen() : return FACT(statut='o',min=1,max='**',
+
+  # A1
+  A1 = SIMP ( statut="o", typ="R", defaut=21.263, 
+              fr="coef du coef a(T) d'une Weibull générale", ),
+  # A2
+  A2 = SIMP ( statut="o", typ="R", defaut=9.159, 
+              fr="coef du coef a(T) d'une Weibull générale", ),
+  # A3
+  A3 = SIMP ( statut="o", typ="R", defaut=0.04057, 
+              fr="coef du coef a(T) d'une Weibull générale", ),
+  # B1
+  B1 = SIMP ( statut="o", typ="R", defaut=17.153, 
+              fr="coef du coef b(T) d'une Weibull générale", ),
+  # B2
+  B2 = SIMP ( statut="o", typ="R", defaut=55.089, 
+              fr="coef du coef b(T) d'une Weibull générale", ),
+  # B3
+  B3 = SIMP ( statut="o", typ="R", defaut=0.0144, 
+              fr="coef du coef b(T) d'une Weibull générale", ),
+  # C1
+  C1 = SIMP ( statut="o", typ="R", defaut=4., 
+              fr="coef du coef c(T) d'une Weibull générale", ),
+  # C2
+  C2 = SIMP ( statut="o", typ="R", defaut=0., 
+              fr="coef du coef c(T) d'une Weibull générale", ),
+  # C3
+  C3 = SIMP ( statut="o", typ="R", defaut=0., 
+              fr="coef du coef c(T) d'une Weibull générale", ),
+
+); # FIN def Coef_WeibGen
+
+
+# --------------------------------------------------
+# RESPONSABLE D. THAI VAN
+# Ce fichier contient la liste des coefficients 
+def Coef_Fluence() : return FACT(statut='o',min=1,max='**',
+
+  # COEFFLUENCE1
+  Azimut_0deg  = SIMP ( statut="o", typ="R", defaut=5.8, 
+                        fr="Fluence à l'azimut 0 (10^19 n/cm2)", ),
+  # COEFFLUENCE2
+  Azimut_5deg  = SIMP ( statut="o", typ="R", defaut=5.48, 
+                        fr="Fluence à l'azimut 5 (10^19 n/cm2)", ),
+  # COEFFLUENCE3
+  Azimut_10deg = SIMP ( statut="o", typ="R", defaut=4.46, 
+                        fr="Fluence à l'azimut 10 (10^19 n/cm2)", ),
+  # COEFFLUENCE4
+  Azimut_15deg = SIMP ( statut="o", typ="R", defaut=3.41, 
+                        fr="Fluence à l'azimut 15 (10^19 n/cm2)", ),
+  # COEFFLUENCE5
+  Azimut_20deg = SIMP ( statut="o", typ="R", defaut=3.37, 
+                        fr="Fluence à l'azimut 20 (10^19 n/cm2)", ),
+  # COEFFLUENCE6
+  Azimut_25deg = SIMP ( statut="o", typ="R", defaut=3.16, 
+                        fr="Fluence à l'azimut 25 (10^19 n/cm2)", ),
+  # COEFFLUENCE7
+  Azimut_30deg = SIMP ( statut="o", typ="R", defaut=2.74, 
+                        fr="Fluence à l'azimut 30 (10^19 n/cm2)", ),
+  # COEFFLUENCE8
+  Azimut_35deg = SIMP ( statut="o", typ="R", defaut=2.25, 
+                        fr="Fluence à l'azimut 35 (10^19 n/cm2)", ),
+  # COEFFLUENCE9
+  Azimut_40deg = SIMP ( statut="o", typ="R", defaut=1.89, 
+                        fr="Fluence à l'azimut 40 (10^19 n/cm2)", ),
+  # COEFFLUENCE10
+  Azimut_45deg = SIMP ( statut="o", typ="R", defaut=1.78, 
+                        fr="Fluence à l'azimut 45 (10^19 n/cm2)", ),
+
+); # FIN def Coef_Fluence
+
+#================================
+# 1. Definition des OPTIONS
+#================================
+
+OPTIONS = PROC ( nom = "OPTIONS",
+                 op = 68,
+                repetable = 'n',
+                 fr = "Définitions des options", 
+
+#===
+# Liste des paramètres
+#===
+
+# INCRTPS
+  IncrementTemporel          = SIMP ( statut="o", typ="I", max=1, defaut=1, 
+                                      fr="Incrément temporel (=1 pour calcul déterministe)", ),
+
+# DTPREC
+  IncrementMaxTemperature    = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut=0.1, 
+                                     fr="Incrément maximum d'évolution de la température par noeud et par instant (°C)", ),
+
+# DTARCH
+  IncrementMaxTempsAffichage = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1000., defaut="1000.", 
+                                     fr="Incrément maximum de temps pour l'affichage (s)", ),
+
+# NBO
+# Question : NBO depend-il de TYPGEOM ??
+  NombreNoeudsMaillage       = SIMP ( statut="o", typ="R", max=1, val_min=1., val_max=1000., 
+                                     fr = "Nombre de noeuds à considérer dans le maillage interne", ),
+
+# 
+  ListeInstants              = SIMP ( statut="o", typ="R", max="**",
+                                      fr = "Liste des instants pour lesquels la température et les contraintes seront archivés", ),
+
+) # Fin PROC OPTIONS
+
+#================================
+# 2. Caracteristiques du DEFAUT
+#================================
+
+DEFAUT = PROC ( nom = "DEFAUT",
+                op = 68,
+               repetable = 'n',
+                fr = "Caractéristiques du défaut", 
+
+#===
+# Liste des paramètres
+#===
+
+# TYPEDEF
+  TypeInitial = SIMP ( statut="o", typ="TXM",
+                       fr="Type initial du défaut : sous revêtement ou débouchant",
+                       into=( "Sous Revetement", # DSR
+                              "Debouchant", ), # DD
+                       ),
+
+#====
+# Definition des parametres selon le type du defaut
+#====
+
+  SousRevetement = BLOC ( condition = "TypeInitial=='Sous Revetement'",
+
+    # ORIEDEF into LONGITUD, CIRCONF
+    Orientation              = SIMP ( statut="o", typ="TXM", 
+                                     fr="Orientation du défaut",
+                                      into=( "Longitudinale", 
+                                            "Circonferentielle" ), ),
+
+    # PROFDEF
+    ProfondeurRadiale        = SIMP ( statut="o", typ="R", max=1, val_min=1., val_max=1., defaut=0.006, 
+                                      fr="Profondeur radiale du défaut (m)", ),
+
+    # OPTLONG into VALEUR, RAPPORT
+    OptionCalculLongueur     = SIMP ( statut="o", typ="TXM",
+                                      fr="Option pour caractériser la longueur du défaut : soit par valeur, soit par un rapport LONG/PROF",
+                                      into = ( "Valeur", 
+                                              "Relation lineaire avec la longueur" ), ),
+
+    Option_Valeur            = BLOC ( condition = "OptionCalculLongueur=='Valeur'",
+      # LONGDEF
+      Longueur                 = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut = 0.060, 
+                                        fr = "Longueur du défaut sous revêtement (m)", ),
+    ), # Fin BLOC Option_Valeur
+
+    Option_Rapport           = BLOC ( condition = "OptionCalculLongueur=='Relation lineaire avec la longueur'",
+      # LONGSURPROF
+      LongueurSurProfondeur    = SIMP ( statut="o", typ="R", max=1, val_max=100.,
+                                        fr="Rapport longueur/profondeur du défaut sous revêtement", ),
+    ), # Fin BLOC Option_Rapport
+
+    # DECADEF
+    DecalageRadial           = SIMP ( statut="o", typ="R", defaut=-0.00001, 
+                                      fr="Décalage radial du defaut sous revêtement (en m)", ),
+    # ANGLDEF
+    Azimut                   = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+    # ALTIDEF
+    Altitude                 = SIMP ( statut="o", typ="R", val_min=0., val_max=4., defaut=2., 
+                                      fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+    # POINDEF
+    Pointe                   = SIMP ( statut="o", typ="TXM", defaut="A", 
+                                      fr="Choix du point considéré du défaut sous revêtement",
+                                      into=( "A", "B" ), ),
+    # CORRECPLASTIC
+    CorrectionPlastiqueBeta  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Prise en compte de la correction plastique BETA dans le calcul du facteur d'intensité de contraintes",
+                                      into=( "OUI", "NON" ), ),
+
+  ), # Fin BLOC SousRevetement
+
+  Debouchant = BLOC ( condition = "TypeInitial=='Debouchant'",
+
+    # ORIEDEF into LONGITUD, CIRCONF
+    Orientation              = SIMP ( statut="o", typ="TXM",
+                                      fr="Orientation du défaut : longitudinale ou circonférentielle",
+                                      into=( "Longitudinale",
+                                            "Circonferentielle" ), ),
+    # PROFDEF
+    ProfondeurRadiale        = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut=0.006, 
+                                      fr="Profondeur radiale du défaut (en m)", ),
+    # ANGLDEF
+    Azimut                   = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Position angulaire du défaut dans le cylindre de la cuve (en degrés)", ),
+    # ALTIDEF
+    Altitude                 = SIMP ( statut="o", typ="R", defaut=2., 
+                                      fr="Altitude du défaut sur le cylindre de la cuve (en m)", ),
+    # IRWIN
+    CorrectionPlastiqueIrwin = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Prise en compte de la correction plastique d'Irwin dans le calcul du facteur d'intensité de contraintes",
+                                      into=( "OUI", "NON" ), ),
+    # CORRECPLASTIC
+    CorrectionPlastiqueBeta  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Prise en compte de la correction plastique BETA dans le calcul du facteur d'intensité de contraintes",
+                                      into=( "OUI", "NON" ), ),
+
+  ), # Fin BLOC debouchant
+
+) # Fin PROC DEFAUT
+
+
+#================================
+# 3. Caracteristiques de la CUVE
+#================================
+
+CUVE = PROC (nom = "CUVE",
+             op = 68,
+            repetable = 'n',
+             fr = "Caractéristiques de la cuve", 
+
+#===
+# Liste des paramètres
+#===
+
+  # TYPEGEOM
+  TraitementGeometrie = SIMP ( statut="o", typ="TXM",
+                               fr="Choix de la définition de la geométrie d'une cuve",
+                              into=( "Topologie", # GEOMETRIE 
+                                       "Maillage"), # MAILLAGE
+                               ),
+
+#====
+# Definition des parametres selon le type de traitement de la geometrie
+#====
+
+  Geometrie = BLOC ( condition = "TraitementGeometrie=='Topologie'",
+
+    # RINT
+    RayonInterne        = SIMP ( statut="o", typ="R", val_min=0.,  defaut=1.994, 
+                                 fr="Rayon interne de la cuve (en m)", ),
+
+    # DTV : comment preciser que REXT > RINT ?
+    # REXT
+    RayonExterne        = SIMP ( statut="o", typ="R", defaut=2.2015, 
+                                 fr="Rayon externe de la cuve (en m)", ),
+
+    # DTV : comment preciser que LREV < RINT ?
+    # LREV
+    EpaisseurRevetement = SIMP ( statut="o", typ="R", defaut=0.0075, 
+                                 fr="Epaisseur du revêtement (m)", ),
+
+    # LIGMIN
+    LigamentExterneMin  = SIMP ( statut="o", typ="R", defaut=0.75, 
+                                 fr="Ligament externe minimal avant rupture (% de l'épaisseur de cuve)", ),
+
+  ), # Fin BLOC  Geometrie
+
+  Maillage  = BLOC ( condition = "TraitementGeometrie=='Maillage'",
+
+    # DTV : comment preciser que c'est une suite de liste de nombres croissants ?
+    # Question : quel rapport avec NBO ??
+    Liste_abscisses = SIMP ( statut="o", typ="R", max="**",
+                             fr = "Liste des abscisses (m)", ),
+  ), # Fin BLOC Maillage
+
+) # Fin PROC CUVE
+
+#====================================================
+# 4. Modeles de fluence, d'irradiation et de tenacite
+#====================================================
+
+#=======================
+# 4.1 Modeles de fluence
+#=======================
+
+MODELES = PROC ( nom = "MODELES",
+                 op = 68,
+                repetable = 'n',
+                 fr = "Modèles de fluence, d'irradiation et de ténacité", 
+
+
+#===
+# Liste des paramètres
+#===
+
+  Fluence = FACT ( statut="o",
+  
+    # MODELFLUENCE
+    Modele        = SIMP ( statut="o", typ="TXM",
+                           fr="Modèle d'atténuation de la fluence dans l'épaisseur de la cuve",
+                          into=( "Exponentiel sans revetement k=9.7 (Reglementaire)", # Reglementaire
+                                 "Exponentiel sans revetement k=12.7 (France)", # France 
+                                  "Exponentiel sans revetement k=0. (ValeurImposee)", # ValeurImposee 
+                                  "Donnees francaises du palier CPY (SDM)", # SDM 
+                                  "Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)", # GrandeDev 
+                                  "Regulatory Guide 1.99 rev 2 (USNRC)", # USNRC 
+                                  "Dossier 900 MWe AP9701 rev 2 (REV_2)", # REV_2 
+                                  "Lissage du modele ajuste (SDM_Lissage)", # SDM_Lissage 
+                                  "Grand developpement (GD_Cuve)"), # GD_Cuve 
+                         ),
+
+#====
+# Definition des parametres selon le modele de fluence
+#====
+
+    Reglementaire = BLOC ( condition = " Modele in ( 'Exponentiel sans revetement k=9.7 (Reglementaire)', ) ",
+      # DTV : comment proposer une liste de valeurs, tout en proposant de fournir d'autres valeurs ?
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC Reglementaire
+
+    France        = BLOC ( condition = " Modele in ( 'Exponentiel sans revetement k=12.7 (France)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+      # KPFRANCE
+      KPFrance      = SIMP ( statut="o", typ="R",
+                             fr="Paramètre exponentiel du modèle France",
+                             defaut = 12.7, ),
+    ), # Fin BLOC France
+
+    ValeurImposee = BLOC ( condition = " Modele in ( 'Exponentiel sans revetement k=0. (ValeurImposee)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC ValeurImposee
+
+    SDM           = BLOC ( condition = " Modele in ( 'Donnees francaises du palier CPY (SDM)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC SDM
+
+    USNRC         = BLOC ( condition = " Modele in ( 'Regulatory Guide 1.99 rev 2 (USNRC)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+      KPUS          = SIMP ( statut="o", typ="R",
+                             fr="Paramètre exponentiel du modèle US",
+                             defaut=9.4488, ),
+    ), # Fin BLOC USNRC
+
+    REV_2         = BLOC ( condition = " Modele in ( 'Dossier 900 MWe AP9701 rev 2 (REV_2)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC REV_2
+
+    SDM_Lissage   = BLOC ( condition = " Modele in ( 'Lissage du modele ajuste (SDM_Lissage)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC SDM_Lissage
+
+    GrandeDev     = BLOC ( condition = " Modele in ( 'Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC GrandeDev
+
+    GD_Cuve       = BLOC ( condition = " Modele in ( 'Grand developpement (GD_Cuve)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+      Coefficients  = Coef_Fluence(),
+    ), # Fin BLOC GD_Cuve
+
+  ), # Fin FACT Fluence
+
+#==========================
+# 4.2 Modeles d'irradiation
+#==========================
+
+  Irradiation = FACT ( statut="o",
+
+    # TYPIRR
+    Option = SIMP ( statut = "o", typ = "TXM",
+                       fr = "Type d'irradiation",
+                      into = ( "RTndt de la cuve a l instant de l analyse", # RTNDT 
+                               "Modele d irradiation" ), # FLUENCE
+                       ),
+
+#====
+# Definition des parametres selon le type d'irradiation
+#====
+
+    RTndt = BLOC ( condition = "Option=='RTndt de la cuve a l instant de l analyse'",
+      RTNDT = SIMP ( statut="o", typ="R", defaut=73., 
+                     fr="RTNDT de la cuve à l'instant de l'analyse (°C)", ),
+
+    ), # Fin BLOC RTndt
+
+    ModeleIrradiation = BLOC ( condition = "Option=='Modele d irradiation'",
+      # MODELIRR
+      Modele           = SIMP ( statut="o", typ="TXM",
+                                fr="Modèle d'irradiation pour virole ou joint soudé",
+                               into=( "Metal de Base : formule de FIM/FIS Houssin", # HOUSSIN 
+                                      "Metal de Base : formule de FIM/FIS Persoz", # PERSOZ
+                                      "Metal de Base : formule de FIM/FIS Lefebvre", # LEFEBVRE
+                                      "Metal de Base : Regulatory Guide 1.00 rev 2", # USNRCmdb
+                                      "Joint Soude : formulation de FIM/FIS Brillaud", # BRILLAUD
+                                      "Joint Soude : Regulatory Guide 1.00 rev 2" ), # USNRCsoud
+                                ),
+      # CU
+      TeneurCuivre     = SIMP ( statut="o", typ="R", defaut=0., 
+                                fr="Teneur en cuivre (%)", ),
+      # NI
+      TeneurNickel     = SIMP ( statut="o", typ="R", defaut=0., 
+                                fr="Teneur en nickel (%)", ),
+      # P
+      TeneurPhosphore  = SIMP ( statut="o", typ="R", defaut=0., 
+                                fr="Teneur en phosphore (%)", ),
+
+      Parametres_USNRC = BLOC ( condition = " Modele in ( 'Joint Soude : Regulatory Guide 1.00 rev 2', 'Metal de Base : Regulatory Guide 1.00 rev 2' , ) ",
+        # RTimoy
+        MoyenneRTndt         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)", ),
+        # RTicov
+        CoefVariationRTndt   = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Coefficient de variation de la RTNDT initiale", ),
+        # USectDRT
+        EcartTypeRTndt       = SIMP ( statut="o", typ="R", defaut=28., 
+                                      fr="Ecart-type du décalage de RTNDT (°F) (28. pour js et 17. pour mdb)", ),
+        # nbectDRTNDT
+        NombreEcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=2., 
+                                      fr="Nombre d'écart-type par rapport à la moyenne de DRTNDT", ),
+      ), # Fin BLOC Parametres_USNRC 
+
+    ), # Fin BLOC ModeleIrradiation
+
+  ), # Fin FACT Irradiation
+
+#========================
+# 4.3 Modeles de tenacite
+#========================
+
+  Tenacite = FACT ( statut = "o",
+
+    # MODELKIC
+    Modele = SIMP ( statut="o", typ="TXM",
+                    fr="Modèle de calcul de la ténacité à l'amorçage KIc", 
+                   into=( "RCC-M/ASME coefficient=2", # RCC-M
+                          "RCC-M/ASME coefficient=2.33 (Houssin)", # Houssin_RC
+                          "RCC-M/ASME avec KI=KIpalier", # RCC-M_pal
+                          "RCC-M/ASME avec KI~exponentiel", # RCC-M_exp
+                          "Weibull basee sur la master cuve", # Wallin
+                          "Weibull basee sur la master cuve (REME)", # REME
+                          "Weibull n°1 (etude ORNL)", # ORNL
+                          "Weibull n°2", # WEIB2
+                          "Weibull n°3", # WEIB3
+                          "Weibull generalisee", # WEIB_GEN
+                          "Exponentielle n°1 (Frama)", # Frama
+                          "Exponentielle n°2 (LOGWOLF)" ), # LOGWOLF
+                   ),
+
+
+#====
+# Definition des parametres selon le modele de tenacité
+#====
+
+# Modeles type RCC-M
+
+    KIc_RCCM = BLOC ( condition = " Modele in ( 'RCC-M/ASME coefficient=2', 'RCC-M/ASME coefficient=2.33 (Houssin)', 'RCC-M/ASME avec KI=KIpalier', 'RCC-M/ASME avec KI~exponentiel', ) ",
+
+      # nbectKIc
+      NbEcartType_MoyKIc       = SIMP ( statut="o", typ="R", defaut=-2., 
+                                        fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+
+      # KICPAL
+      PalierDuctile_KIc        = SIMP ( statut="o", typ="R", defaut=195. ,
+                                        fr="Palier déterministe de K1c ou valeur du palier ductile plafonnant la courbe (en MPa(m^0.5)) ", ),
+
+      # KICCDVD
+      CoefficientVariation_KIc = SIMP ( statut="o", typ="R", defaut = 0.15, 
+                                        fr = "Coefficient de variation de la loi normale de K1c ", ),
+
+    ), # Fin BLOC KIc_RCCM
+
+    Fissure = BLOC ( condition = " Modele in ( 'RCC-M/ASME coefficient=2', 'RCC-M/ASME coefficient=2.33 (Houssin)', 'RCC-M/ASME avec KI=KIpalier', 'RCC-M/ASME avec KI~exponentiel', )",
+
+      # ARRETFISSURE
+      ArretDeFissure           = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                        fr="Prise en compte de l'arrêt de fissure",
+                                        into=( "OUI", "NON" ), ),
+
+      Parametres_Fissure       = BLOC ( condition = "ArretDeFissure=='OUI'",
+        # INCRDEF
+        IncrementTailleFissure   = SIMP ( statut="o", typ="R", defaut=0.005, 
+                                          fr="Incrément de la taille de fissure pour la propagation (en m)", ),
+      ), # Fin BLOC Parametres_Fissure
+
+      KIa_RCCM = BLOC ( condition = "ArretDeFissure=='OUI'",
+
+        # nbectKIa
+        NbEcartType_MoyKIa       = SIMP ( statut="o", typ="R", defaut=-2., 
+                                          fr="Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ", ),
+
+        # KIACDV
+        CoefficientVariation_KIa = SIMP ( statut="o", typ="R", defaut=0.10, 
+                                          fr="Coefficient de variation de la loi normale de K1a -ténacite à l'arrêt- ", ),
+
+        # KIAPAL
+        PalierDuctile_KIa        = SIMP ( statut="o", typ="R", defaut=195., 
+                                          fr="Palier déterministe de K1a -ténacite à l'arrêt- (en MPa(m^0.5)) ", ),
+      ), # Fin BLOC KIa_RCCM
+
+    ), # Fin BLOC Fissure
+
+# Modeles type Weibull
+
+    KIc_MasterCuve = BLOC ( condition = " Modele in ( 'Weibull basee sur la master cuve', ) ",
+      # T0WALLIN
+      Temperature_KIc100 = SIMP ( statut="o", typ="I", defaut=-27, 
+                                  fr="Paramètre T0 du modèle Wallin (°C) : température pour laquelle la téncité du matériau vaut en moyenne 100MPa.m^5", ),
+
+      # fractKIc
+      Fractile_KIc       = SIMP ( statut="o", typ="R", defaut=5., 
+                                  fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+
+    ), # Fin BLOC KIc_MasterCuve
+
+    KIc_Weibull1 = BLOC ( condition = " Modele in ( 'Weibull basee sur la master cuve (REME)', 'Weibull n°1 (etude ORNL)', ) ",
+
+      # fractKIc
+      Fractile_KIc       = SIMP ( statut="o", typ="R", defaut=5., 
+                                  fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+
+    ), # Fin BLOC KIc_Weibull1
+
+    KIc_Weibull2 = BLOC ( condition = " Modele in ( 'Weibull n°2', 'Weibull n°3', ) ",
+
+      # nbectKIc
+      NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2., 
+                                  fr="Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+
+    ), # Fin BLOC KIc_Weibull2
+
+    Weibull_Generalisee = BLOC ( condition = " Modele in ( 'Weibull generalisee',) ",
+      Coefficients       = Coef_WeibGen(),
+      # nbectKIc
+      NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2., 
+                                  fr="Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+
+    ), # Fin BLOC Weibull_Generalisee
+
+# Modeles type exponentiel (Frama, LOGWOLF)
+
+    KIc_Exponentielle = BLOC ( condition = " Modele in ( 'Exponentielle n°1 (Frama)', 'Exponentielle n°2 (LOGWOLF)', ) ",
+
+      # nbectKIc
+      NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2., 
+                                  fr="Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+
+    ), # Fin BLOC KIc_Exponentielle
+
+  ), # Fin FACT Tenacite
+
+) # Fin PROC MODELES
+
+
+#==================
+# 5. Initialisation
+#==================
+
+INITIALISATION = PROC ( nom = "INITIALISATION",
+                        op = 68,
+                       repetable = 'n',
+                        fr = "Initialisation : instant initial, profils radiaux de température et contraintes", 
+
+  TemperatureInitiale = FACT ( statut = "o",
+
+    ProfilRadial_TemperatureInitiale = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                              fr="Profil radial de la température initiale dans la cuve (en m : °C) ", ),
+    Amont_TemperatureInitiale        = SIMP ( statut="o", typ="TXM",
+                                              fr="Prolongation à la frontière amont",
+                                              into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_TemperatureInitiale         = SIMP ( statut="o", typ="TXM",
+                                              fr="Prolongation à la frontière aval",
+                                              into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT TemperatureInitiale
+
+  ContraintesInitiales = FACT ( statut = "o",
+
+    ProfilRadial_ContraintesInitiales = SIMP ( statut="o", typ=Tuple(4), max="**",
+                                               fr="Profil radial des contraintes radiale, circonférentielle et longitudinale dans la cuve (en m : xx : xx : xx) ", ),
+    Amont_ContraintesInitiales        = SIMP ( statut="o", typ="TXM",
+                                               fr="Prolongation à la frontière amont",
+                                               into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ContraintesInitiales         = SIMP ( statut="o", typ="TXM",
+                                               fr="Prolongation à la frontière aval",
+                                               into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ContraintesInitiales
+
+  # INSTINIT
+  InstantInitialisation = SIMP ( statut="o", typ="R", defaut = -1., 
+                                 fr="Instant initial auquel sont définies la température, ainsi que les contraintes initiales (en s) ", ),
+
+) # Fin PROC INITIALISATION
+
+
+#==================================
+# 6. CARACTERISTIQUES DU REVETEMENT
+#==================================
+
+REVETEMENT = PROC ( nom = "REVETEMENT",
+                    op = 68,
+                   repetable = 'n',
+                    fr = "Caracteristiques du revêtement", 
+
+  # KTHREV
+  ConditionLimiteThermiqueREV = SIMP ( statut="o", typ="TXM",
+                                       fr="Option pour définir les caractéristiques du revêtement ",
+                                       into=( "ENTHALPIE", "CHALEUR",),
+                                       ),
+
+  EnthalpieREV = BLOC ( condition = "ConditionLimiteThermiqueREV=='ENTHALPIE'",
+
+    EnthalpieREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                          fr="Température (°C) / enthalpie massique  (J/kg) ", ),
+    Amont_EnthalpieREV           = SIMP ( statut="o", typ="TXM",
+                                          fr="Prolongation à la frontière amont",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_EnthalpieREV            = SIMP ( statut="o", typ="TXM",
+                                          fr="Prolongation à la frontière aval",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC EnthalpieREV
+
+
+  ChaleurREV = BLOC ( condition = "ConditionLimiteThermiqueREV=='CHALEUR'",
+
+    ChaleurREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                        fr="Température (°C) / chaleur volumique (J/kg/K) ", ),
+    Amont_ChaleurREV           = SIMP ( statut="o", typ="TXM",
+                                        fr="Prolongation à la frontière amont",
+                                        into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ChaleurREV            = SIMP ( statut="o", typ="TXM",
+                                        fr="Prolongation à la frontière aval",
+                                        into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC ChaleurREV
+
+  ConductiviteREV = FACT (statut = "o",
+
+    ConductiviteREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                             fr="Température (°C) / conductivité thermique (W/m/°C) ", ),
+    Amont_ConductiviteREV           = SIMP ( statut="o", typ="TXM",
+                                             fr="Prolongation à la frontière amont",
+                                             into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ConductiviteREV            = SIMP ( statut="o", typ="TXM",
+                                             fr="Prolongation à la frontière aval",
+                                             into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ConductiviteREV
+
+  ModuleYoungREV = FACT (statut = "o",
+
+    ModuleYoungREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                            fr="Température (°C) / module d'Young (MPa) ", ),
+    Amont_ModuleYoungREV           = SIMP ( statut="o", typ="TXM",
+                                            fr="Prolongation à la frontière amont",
+                                            into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ModuleYoungREV            = SIMP ( statut="o", typ="TXM",
+                                            fr="Prolongation à la frontière aval",
+                                            into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ModuleYoungREV
+
+  CoeffDilatThermREV = FACT (statut = "o",
+
+    CoeffDilatThermREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                fr="Température (°C) / coefficient de dilatation thermique (°C-1) ", ),
+    Amont_CoeffDilatThermREV           = SIMP ( statut="o", typ="TXM",
+                                                fr="Prolongation à la frontière amont",
+                                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_CoeffDilatThermREV            = SIMP ( statut="o", typ="TXM",
+                                                fr="Prolongation à la frontière aval",
+                                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT CoeffDilatThermREV
+
+  LimiteElasticiteREV = FACT (statut = "o",
+
+    LimiteElasticiteREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                 fr="Température (°C) / limite d'élasticite (MPa) ", ),
+    Amont_LimiteElasticiteREV           = SIMP ( statut="o", typ="TXM",
+                                                 fr="Prolongation à la frontière amont",
+                                                 into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_LimiteElasticiteREV            = SIMP ( statut="o", typ="TXM",
+                                                 fr="Prolongation à la frontière aval",
+                                                 into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT LimiteElasticiteREV
+
+  AutresParametresREV = FACT (statut = "o",
+
+    # TREFREV
+    TemperatureDeformationNulleREV   = SIMP ( statut="o", typ="R", defaut=20.,
+                                              fr="Température de référence pour laquelle les déformations thermiques sont nulles (°C) ", ),
+    # TDETREV
+    TemperaturePourCoefDilatThermREV = SIMP ( statut="o", typ="R", defaut=287.,
+                                              fr="Température de définition du coefficient de dilatation thermique (°C) ", ),
+    # NUREV
+    CoefficientPoissonREV            = SIMP ( statut="o", typ="R", defaut=0.3,
+                                              fr="Coefficient de Poisson ", ),
+
+  ), # Fin FACT AutresParametresREV
+
+) # Fin PROC REVETEMENT
+
+
+#=====================================
+# 7. CARACTERISTIQUES DU METAL DE BASE
+#=====================================
+
+METAL_BASE = PROC ( nom = "METAL_BASE",
+                    op = 68,
+                   repetable = 'n',
+                    fr = "Caracteristiques du metal de base", 
+
+  # KTHMDB
+  ConditionLimiteThermiqueMDB = SIMP ( statut="o", typ="TXM",
+                                       fr="Option pour definir les caractéristiques du revêtement ",
+                                       into=( "ENTHALPIE", "CHALEUR",), ),
+
+  EnthalpieMDB = BLOC ( condition = "ConditionLimiteThermiqueMDB=='ENTHALPIE'",
+
+    EnthalpieMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                          fr="Température (°C) / enthalpie massique (J/kg) ", ),
+    Amont_EnthalpieMDB           = SIMP ( statut="o", typ="TXM",
+                                          fr="Prolongation à la frontière amont",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_EnthalpieMDB            = SIMP ( statut="o", typ="TXM",
+                                          fr="Prolongation à la frontière aval",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC EnthalpieMDB
+
+  ChaleurMDB = BLOC ( condition = "ConditionLimiteThermiqueMDB=='CHALEUR'",
+
+    ChaleurMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                        fr="Température (°C) / chaleur volumique (J/kg/K) ", ),
+    Amont_ChaleurMDB           = SIMP ( statut="o", typ="TXM",
+                                        fr="Prolongation à la frontière amont",
+                                        into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ChaleurMDB            = SIMP ( statut="o", typ="TXM",
+                                        fr="Prolongation à la frontière aval",
+                                        into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC ChaleurMDB
+
+  ConductiviteMDB = FACT ( statut = "o",
+
+    ConductiviteMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                             fr="Température (°C) / conductivité thermique (W/m/°C) ", ),
+    Amont_ConductiviteMDB           = SIMP ( statut="o", typ="TXM",
+                                             fr="Prolongation à la frontière amont",
+                                             into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ConductiviteMDB            = SIMP ( statut="o", typ="TXM",
+                                             fr="Prolongation à la frontière aval",
+                                             into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ConductiviteMDB
+
+  ModuleYoungMDB = FACT ( statut="o",
+
+    ModuleYoungMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                            fr="Température (°C) / module d'Young (MPa) ", ),
+    Amont_ModuleYoungMDB           = SIMP ( statut="o", typ="TXM",
+                                            fr="Prolongation à la frontière amont",
+                                            into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ModuleYoungMDB            = SIMP ( statut="o", typ="TXM",
+                                            fr="Prolongation à la frontière aval",
+                                            into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ModuleYoungMDB
+
+  CoeffDilatThermMDB = FACT ( statut="o",
+
+    CoeffDilatThermMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                fr="Température (°C) / coefficient de dilatation thermique (°C-1) ", ),
+    Amont_CoeffDilatThermMDB           = SIMP ( statut="o", typ="TXM",
+                                                fr="Prolongation à la frontière amont",
+                                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_CoeffDilatThermMDB            = SIMP ( statut="o", typ="TXM",
+                                                fr="Prolongation à la frontière aval",
+                                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT CoeffDilatThermMDB
+
+  AutresParametresMDB = FACT ( statut = "o",
+
+    # TREFMDB
+    TemperatureDeformationNulleMDB   = SIMP ( statut="o", typ="R", defaut=20.,
+                                              fr="Température de référence pour laquelle les déformations thermiques sont nulles (°C) ", ),
+    # TDETMDB
+    TemperaturePourCoefDilatThermMDB = SIMP ( statut="o", typ="R", defaut=287.,
+                                              fr="Température de définition du coefficient de dilatation thermique (°C) ", ),
+    # NUMDB
+    CoefficientPoissonMDB            = SIMP ( statut="o", typ="R", defaut=0.3,
+                                              fr="Coefficient de Poisson ", ),
+
+  ), # Fin FACT TemperatureDeformationNulleMDB
+
+) # Fin PROC METAL_BASE
+
+
+#===============================
+# 8. TRANSITOIRE THERMOMECANIQUE
+#===============================
+
+TRANSITOIRE = PROC ( nom = "TRANSITOIRE",
+                     op = 68,
+                    repetable = 'n',
+                     fr = "Description du transitoire thermohydraulique", 
+
+  Pression = FACT ( statut = "o",
+
+    ProfilTemporel_Pression = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                     fr = "Instant (s) / pression (MPa) ", ),
+    Amont_Pression          = SIMP ( statut="o", typ="TXM",
+                                     fr="Prolongation à la frontière amont",
+                                     into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_Pression           = SIMP ( statut="o", typ="TXM",
+                                     fr="Prolongation à la frontière aval",
+                                     into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # FIN FACT Pression
+
+  # TYPCLTH
+  TypeConditionLimiteThermique = SIMP ( statut="o", typ="TXM",
+                                        fr="Type de condition thermique en paroi interne ",
+                                        into=( "Temperature imposee en paroi", # TEMP_IMPO 
+                                              "Flux de chaleur impose en paroi", # FLUX_REP 
+                                              "Temperature imposee du fluide et coefficient echange", # ECHANGE 
+                                              "Debit massique et temperature d injection de securite", # DEBIT 
+                                              "Temperature imposee du fluide et debit d injection de securite"), # TEMP_FLU
+                                        ),
+
+  TemperatureImposeeParoi      = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee en paroi', ) ",
+
+    ProfilTemporel_TemperatureImposeeParoi = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                    fr = "Instant (s) / Température imposée (°C) ", ),
+    Amont_TemperatureImposeeParoi          = SIMP ( statut="o", typ="TXM",
+                                                    fr="Prolongation à la frontière amont",
+                                                    into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_TemperatureImposeeParoi           = SIMP ( statut="o", typ="TXM",
+                                                    fr="Prolongation à la frontière aval",
+                                                    into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC TemperatureImposeeParoi
+
+  FluxChaleur                  = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Flux de chaleur impose en paroi', ) ",
+
+    ProfilTemporel_FluxChaleuri   = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                          fr="Instant (s) / Flux de chaleur impose (W/m2) ", ),
+    Amont_FluxChaleur             = SIMP ( statut="o", typ="TXM",
+                                           fr="Prolongation à la frontière amont",
+                                           into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_FluxChaleur              = SIMP ( statut="o", typ="TXM",
+                                           fr="Prolongation à la frontière aval",
+                                           into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC FluxChaleur
+
+  TemperatureImposeeFluide     = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et coefficient echange', 'Temperature imposee du fluide et debit d injection de securite', ) ",
+
+    ProfilTemporel_TemperatureImposeeFluide = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                     fr = "Instant (s) / Température imposée (°C) ", ),
+    Amont_TemperatureImposeeFluide          = SIMP ( statut="o", typ="TXM",
+                                                     fr="Prolongation à la frontière amont",
+                                                     into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_TemperatureImposeeFluide           = SIMP ( statut="o", typ="TXM",
+                                                     fr="Prolongation à la frontière aval",
+                                                     into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC TemperatureImposeeFluide
+
+  CoefficientEchange          = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et coefficient echange', ) ",
+
+    ProfilTemporel_CoefficientEchange = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                               fr="Instant (s) / Coefficient d'échange (W/m2/K) ", ),
+    Amont_CoefficientEchange          = SIMP ( statut="o", typ="TXM",
+                                               fr="Prolongation à la frontière amont",
+                                               into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_CoefficientEchange           = SIMP ( statut="o", typ="TXM",
+                                               fr="Prolongation à la frontière aval",
+                                               into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC CoefficientEchange
+
+  DebitMassique               = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+    ProfilTemporel_DebitMassique = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                          fr="Instant (s) / Débit massique (kg/s) ", ),
+    Amont_DebitMassique          = SIMP ( statut="o", typ="TXM",
+                                          fr="Prolongation à la frontière amont",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_DebitMassique = SIMP ( statut="o", typ="TXM",
+                                fr="Prolongation à la frontière aval",
+                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC DebitMassique
+
+  TemperatureInjection        = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+    ProfilTemporel_TemperatureInjection = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                 fr="Instant (s) / Température d'injection de sécurité  (°C) ", ),
+    Amont_TemperatureInjection          = SIMP ( statut="o", typ="TXM",
+                                                 fr="Prolongation à la frontière amont",
+                                                 into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_TemperatureInjection           = SIMP ( statut="o", typ = "TXM",
+                                                 fr="Prolongation à la frontière aval",
+                                                 into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+  ), # Fin BLOC TemperatureInjection
+
+  Creare                      = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+    # DH
+    DiametreHydraulique              = SIMP ( statut="o", typ="R", defaut=-2.,
+                                              fr="Diamètre hydraulique (m) ", ),
+    # SECTION
+    SectionEspaceAnnulaire           = SIMP ( statut="o", typ="R", defaut=-2.,
+                                              fr="Section espace annulaire (m2) ", ),
+    # DELTA
+    HauteurCaracConvectionNaturelle  = SIMP ( statut="o", typ="R", defaut=-2.,
+                                              fr="Hauteur caractéristique convection naturelle (m) ", ),
+    # ALPHA_CF
+    CoeffVestale_ConvectionForcee    = SIMP ( statut="o", typ="R", defaut=1.,
+                                              fr="Coefficient Vestale convection forcée (-) ", ),
+    # ALPHA_CN
+    CoeffVestale_ConvectionNaturelle = SIMP ( statut="o", typ="R", defaut=1.,
+                                              fr="Coefficient Vestale convection naturelle (-) ", ),
+    # EPS
+    CritereConvergenceRelative       = SIMP ( statut="o", typ="R", defaut=0.00001,
+                                              fr = "Critère convergence relative (-) ", ),
+    # VM
+    VolumeMelange_CREARE             = SIMP ( statut="o", typ="R", defaut=-2.,
+                                              fr = "Volume de mélange CREARE (m3) ", ),
+    # T0
+    TemperatureInitiale_CREARE       = SIMP ( statut="o", typ="R", defaut=-2.,
+                                              fr="Température initiale CREARE (°C) ", ),
+    # SE
+    SurfaceEchange_FluideStructure   = SIMP ( statut="o", typ="R", defaut=-2.,
+                                              fr="Surface d'échange fluide/structure (m2) ", ),
+
+  ), # Fin BLOC Creare
+
+  DebitInjection              = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', ) ",
+
+    ProfilTemporel_DebitInjection = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                           fr="Instant (s) / Débit d'injection de sécurité (kg/s) ", ),
+    Amont_DebitInjection          = SIMP ( statut="o", typ="TXM",
+                                           fr="Prolongation à la frontière amont",
+                                           into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_DebitInjection           = SIMP ( statut="o", typ="TXM",
+                                           fr="Prolongation à la frontière aval",
+                                           into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC DebitInjection
+
+
+  Vestale                     = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', ) ",
+
+    # DH
+    DiametreHydraulique              = SIMP ( statut="o", typ="R", defaut=-2.,
+                                              fr="Diamètre hydraulique (m) ", ),
+    # SECTION
+    SectionEspaceAnnulaire           = SIMP ( statut="o", typ="R", defaut=-2.,
+                                              fr="Section espace annulaire (m2) ", ),
+    # DELTA
+    HauteurCaracConvectionNaturelle  = SIMP ( statut="o", typ="R", defaut=-2.,
+                                              fr="Hauteur caractéristique convection naturelle (m) ", ),
+    # ALPHA_CF
+    CoeffVestale_ConvectionForcee    = SIMP ( statut="o", typ="R", defaut=1.,
+                                              fr="Coefficient d'échange Vestale convection forcée (-) ", ),
+    # ALPHA_CN
+    CoeffVestale_ConvectionNaturelle = SIMP ( statut="o", typ="R", defaut=1.,
+                                              fr="Coefficient d'échange Vestale convection naturelle (-) ", ),
+    # EPS
+    CritereConvergenceRelative       = SIMP ( statut="o", typ="R", defaut=0.00001,
+                                              fr="Critère convergence relative (-) ", ),
+
+  ), # Fin BLOC Vestale
+
+) # Fin PROC TRANSITOIRE
diff --git a/Cuve2dg/Cuve2dg_Cata_VPN.py b/Cuve2dg/Cuve2dg_Cata_VPN.py
new file mode 100644 (file)
index 0000000..852c6ef
--- /dev/null
@@ -0,0 +1,111 @@
+# -*- coding: utf-8 -*-
+import types
+class Tuple:
+  def __init__(self,ntuple):
+    self.ntuple=ntuple
+
+  def __convert__(self,valeur):
+    if type(valeur) == types.StringType:
+      return None
+    if len(valeur) != self.ntuple:
+      return None
+    return valeur
+
+  def info(self):
+    return "Tuple de %s elements" % self.ntuple
+
+  __repr__=info
+  __str__=info
+
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'CUVE1D-DEFAILLGLOB',
+                 execmodul = None,
+                 regles = ( AU_MOINS_UN ('OPTIONS','DEFAUT', 'CUVE', 'MODELES', 'INITIALISATION', 'REVETEMENT', 'METAL_BASE', 'TRANSITOIRE'), 
+                            A_CLASSER ( ('OPTIONS',), ('DEFAUT', 'CUVE', 'MODELES', 'INITIALISATION', 'REVETEMENT', 'METAL_BASE', 'TRANSITOIRE'))
+                          )
+                 ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+
+
+
+
+
+#================================
+# 1. Definition des OPTIONS
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+
+OPTIONS = PROC ( nom = "OPTIONS",
+                 op = 68,
+                 fr = "Definitions des options", 
+
+#===
+# Liste des paramètres
+#===
+
+# INCRTPS
+  IncrementTemporel = SIMP ( statut = "o",
+                             typ = "I",
+                             defaut = "1",
+                            max = 1,
+                             #val_max = 100,
+                             fr = "Increment temporel (=1 pour calcul deterministe)",
+                             ),
+
+# DTPREC
+  IncrementMaxTemperature = SIMP ( statut = "o", 
+                                   typ = "R", 
+                                  defaut = "0.1", 
+                                  max = 1, 
+                                  val_max = 1., 
+                                  fr = "Increment maximum d'evolution de la temperature par noeud et par instant (°C)",
+                                  ),
+
+# DTARCH
+  IncrementMaxTempsAffichage = SIMP ( statut = "o", 
+                                      typ = "R", 
+                                     defaut = "1000.", 
+                                     max = 1, 
+                                     val_max = 1000., 
+                                     fr = "Increment maximum de temps pour l'affichage (s)",
+                                     ),
+
+# NBO
+# Question : NBO depend-il de TYPGEOM ??
+  NombreNoeudsMaillage = SIMP ( statut = "o", 
+                                typ = "R", 
+                               max=1, 
+                               val_max = 1000., 
+                               fr = "Nombre de noeuds a considerer dans le maillage interne",
+                               ),
+
+# 
+  ListeInstants = SIMP ( statut = "o",
+                         typ = Tuple(2),
+                         max = "**",
+                         fr = "Liste des instants ",
+                         validators=VerifTypeTuple(('R','R')),
+                         ),
+
+  ListeInstants2 = SIMP ( statut = "o",
+                         typ = Tuple(2),
+                         max = "**",
+                         fr = "Liste des instants ",
+                         ),
+
+) # Fin OPER OPTIONS
diff --git a/Cuve2dg/DefaillCUVE_Cata.py b/Cuve2dg/DefaillCUVE_Cata.py
new file mode 100644 (file)
index 0000000..f07d4af
--- /dev/null
@@ -0,0 +1,1427 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# Definition de variables sous forme de tuple
+# --------------------------------------------------
+
+import types
+class Tuple:
+  def __init__(self,ntuple):
+    self.ntuple=ntuple
+
+  def __convert__(self,valeur):
+    if type(valeur) == types.StringType:
+      return None
+    if len(valeur) != self.ntuple:
+      return None
+    return valeur
+
+  def info(self):
+    return "Tuple de %s elements" % self.ntuple
+
+  __repr__=info
+  __str__=info
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'CUVE1D-DEFAILLGLOB',
+                 execmodul = None,
+                 regles = ( AU_MOINS_UN ('OPTIONS'),
+                           AU_MOINS_UN ('INITIALISATION'),
+                           AU_MOINS_UN ('REVETEMENT'),
+                           AU_MOINS_UN ('METAL_BASE'),
+                           AU_MOINS_UN ('TRANSITOIRE'),
+                          )
+                 ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+# --------------------------------------------------
+# RESPONSABLE D. THAI VAN
+# Ce fichier contient la liste des coefficients pour un
+# modele de Weibull generalise
+def Coef_WeibGen() : return FACT(statut='o',min=1,max='**',
+
+  # A1
+  A1 = SIMP ( statut="o", typ="R", defaut=21.263, 
+              fr="coef du coef a(T) d'une Weibull générale", ),
+  # A2
+  A2 = SIMP ( statut="o", typ="R", defaut=9.159, 
+              fr="coef du coef a(T) d'une Weibull générale", ),
+  # A3
+  A3 = SIMP ( statut="o", typ="R", defaut=0.04057, 
+              fr="coef du coef a(T) d'une Weibull générale", ),
+  # B1
+  B1 = SIMP ( statut="o", typ="R", defaut=17.153, 
+              fr="coef du coef b(T) d'une Weibull générale", ),
+  # B2
+  B2 = SIMP ( statut="o", typ="R", defaut=55.089, 
+              fr="coef du coef b(T) d'une Weibull générale", ),
+  # B3
+  B3 = SIMP ( statut="o", typ="R", defaut=0.0144, 
+              fr="coef du coef b(T) d'une Weibull générale", ),
+  # C1
+  C1 = SIMP ( statut="o", typ="R", defaut=4., 
+              fr="coef du coef c(T) d'une Weibull générale", ),
+  # C2
+  C2 = SIMP ( statut="o", typ="R", defaut=0., 
+              fr="coef du coef c(T) d'une Weibull générale", ),
+  # C3
+  C3 = SIMP ( statut="o", typ="R", defaut=0., 
+              fr="coef du coef c(T) d'une Weibull générale", ),
+
+); # FIN def Coef_WeibGen
+
+
+# --------------------------------------------------
+# RESPONSABLE D. THAI VAN
+# Ce fichier contient la liste des coefficients 
+def Coef_Fluence() : return FACT(statut='o',min=1,max='**',
+
+  # COEFFLUENCE1
+  Azimut_0deg  = SIMP ( statut="o", typ="R", defaut=5.8, 
+                        fr="Fluence à l'azimut 0 (10^19 n/cm2)", ),
+  # COEFFLUENCE2
+  Azimut_5deg  = SIMP ( statut="o", typ="R", defaut=5.48, 
+                        fr="Fluence à l'azimut 5 (10^19 n/cm2)", ),
+  # COEFFLUENCE3
+  Azimut_10deg = SIMP ( statut="o", typ="R", defaut=4.46, 
+                        fr="Fluence à l'azimut 10 (10^19 n/cm2)", ),
+  # COEFFLUENCE4
+  Azimut_15deg = SIMP ( statut="o", typ="R", defaut=3.41, 
+                        fr="Fluence à l'azimut 15 (10^19 n/cm2)", ),
+  # COEFFLUENCE5
+  Azimut_20deg = SIMP ( statut="o", typ="R", defaut=3.37, 
+                        fr="Fluence à l'azimut 20 (10^19 n/cm2)", ),
+  # COEFFLUENCE6
+  Azimut_25deg = SIMP ( statut="o", typ="R", defaut=3.16, 
+                        fr="Fluence à l'azimut 25 (10^19 n/cm2)", ),
+  # COEFFLUENCE7
+  Azimut_30deg = SIMP ( statut="o", typ="R", defaut=2.74, 
+                        fr="Fluence à l'azimut 30 (10^19 n/cm2)", ),
+  # COEFFLUENCE8
+  Azimut_35deg = SIMP ( statut="o", typ="R", defaut=2.25, 
+                        fr="Fluence à l'azimut 35 (10^19 n/cm2)", ),
+  # COEFFLUENCE9
+  Azimut_40deg = SIMP ( statut="o", typ="R", defaut=1.89, 
+                        fr="Fluence à l'azimut 40 (10^19 n/cm2)", ),
+  # COEFFLUENCE10
+  Azimut_45deg = SIMP ( statut="o", typ="R", defaut=1.78, 
+                        fr="Fluence à l'azimut 45 (10^19 n/cm2)", ),
+
+); # FIN def Coef_Fluence
+
+#================================
+# 1. Definition des OPTIONS
+#================================
+
+OPTIONS = PROC ( nom = "OPTIONS",
+                 op = 68,
+                repetable = 'n',
+                 fr = "Définitions des options", 
+
+#===
+# Liste des paramètres
+#===
+
+  SortieEcran = FACT (statut="o",
+
+    # MESSAGE_LEVEL
+    NiveauImpression   = SIMP (statut="o", typ="TXM", defaut="Temps total",
+                                fr="Niveau d impression a l ecran",
+                                into=( "Aucune impression", # 0
+                                       "Temps total", # 1
+                                      "Temps intermediaires",), # 2
+                               ),
+
+  ), # FIN FACT SortieEcran
+
+  SortieFichier = FACT (statut="o",
+
+    # DATARESUME_FILE
+    FichierDataIn      = SIMP (statut="o", typ="TXM", defaut="NON",
+                                fr="Fichier recapitulatif des donnees d entree : template.IN",
+                                into=( "OUI", "NON",),
+                                ),
+    # TEMPSIG_FILE
+    FichierTempSigma   = SIMP (statut="o", typ="TXM", defaut="NON",
+                                fr="Fichiers de temperature et de contraintes : template.TEMP et template.SIG",
+                                into=( "OUI", "NON",),
+                                ),
+    # RESU_FILE
+    #FichierResultats  = SIMP (statut="o", typ="TXM", defaut="NON",
+    #                            fr="Fichier resultat : template_DEFAILLCUVE",
+    #                            into=( "OUI", "NON",),
+    #                            ),
+    # CSV_FILE
+    FichierCSV         = SIMP (statut="o", typ="TXM", defaut="NON",
+                                fr="Fichier resultat au format CSV : template_DEFAILLCUVE.CSV",
+                                into=( "OUI", "NON",),
+                                ),
+    # CREARE_FILE
+    FichierCREARE      = SIMP (statut="o", typ="TXM", defaut="NON",
+                                fr="Fichier Tfluide et coefficients d echange : template.CREA",
+                                into=( "OUI", "NON",),
+                                ),
+
+  ), # FIN FACT SortieFichier
+
+  # GRANDEUR
+  GrandeurEvaluee      = SIMP (statut="o", typ="TXM", defaut="Facteur de marge KIc/KCP",
+                                fr="Grandeur sous critere",
+                                into=( "Facteur de marge KIc/KCP", # FM_KICSURKCP
+                                       "Marge KIc-KI", # MARGE_KI
+                                       "Marge KIc-KCP", ), # MARGE_KCP
+                                ),
+
+  AutresParametres = FACT (statut="o",
+
+    # INCRTPS
+    IncrementTemporel          = SIMP ( statut="o", typ="I", defaut=1, 
+                                      fr="Incrément temporel (=1 pour calcul déterministe)", ),
+    # DTPREC
+    IncrementMaxTemperature    = SIMP ( statut="o", typ="R", val_min=0.1, val_max=1., defaut=0.1, 
+                                     fr="Incrément maximum d'évolution de la température par noeud et par instant (°C)", ),
+    # DTARCH
+    IncrementMaxTempsAffichage = SIMP ( statut="o", typ="R", val_min=0., val_max=1000., defaut=1000., 
+                                     fr="Incrément maximum de temps pour l'affichage (s)", ),
+    # 
+    ListeInstants              = SIMP ( statut="o", typ="R", max="**",
+                                      fr = "Liste des instants pour lesquels la température et les contraintes seront archivés", ),
+
+  ), # FIN FACT AutresParametres
+
+) # Fin PROC OPTIONS
+
+#================================
+# 2. Caracteristiques de la CUVE
+#================================
+
+CUVE = PROC (nom = "CUVE",
+             op = 68,
+            repetable = 'n',
+             fr = "Caractéristiques de la cuve", 
+
+#===
+# Liste des paramètres
+#===
+
+  # TYPEGEOM
+  TraitementGeometrie = SIMP ( statut="o", typ="TXM", defaut="Topologie",
+                               fr="Choix de la définition de la geométrie d'une cuve",
+                              into=( "Topologie", # GEOMETRIE 
+                                       "Maillage"), # MAILLAGE
+                               ),
+
+#====
+# Definition des parametres selon le type de traitement de la geometrie
+#====
+
+  Geometrie = BLOC ( condition = "TraitementGeometrie=='Topologie'",
+
+    # RINT
+    RayonInterne        = SIMP ( statut="o", typ="R", val_min=0.,  defaut=1.994, 
+                                 fr="Rayon interne de la cuve (en m)", ),
+    # RINT_MESSAGE
+    RayonInterne_mess   = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                 fr="Affichage ecran du rayon interne de la cuve (en m)",
+                                into=( "NON", "OUI" ), ),
+
+    # DTV : comment preciser que REXT > RINT ?
+    # REXT
+    RayonExterne        = SIMP ( statut="o", typ="R", defaut=2.2015, 
+                                 fr="Rayon externe de la cuve (en m)", ),
+    # REXT_MESSAGE
+    RayonExterne_mess   = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                 fr="Affichage ecran du rayon externe de la cuve (en m)",
+                                into=( "NON", "OUI" ), ),
+
+    # DTV : comment preciser que LREV < RINT ?
+    # LREV
+    EpaisseurRevetement = SIMP ( statut="o", typ="R", defaut=0.0075, 
+                                 fr="Epaisseur du revêtement (m)", ),
+    # LREV_MESSAGE
+    EpaisseurRevetement_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de l'epaisseur du revêtement (m)",
+                                     into=( "NON", "OUI" ), ),
+
+    # LIGMIN
+    LigamentExterneMin  = SIMP ( statut="o", typ="R", defaut=0.75, 
+                                 fr="Ligament externe minimal avant rupture (% de l'épaisseur de cuve)", ),
+    # LIGMIN_MESSAGE
+    LigamentExterneMin_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran du ligament externe minimal avant rupture (% de l'épaisseur de cuve)",
+                                     into=( "NON", "OUI" ), ),
+
+    # NBNO
+    NombreNoeudsMaillage = SIMP ( statut="o", typ="I", defaut=300, max=1, val_min=1, val_max=1000, 
+                                 fr = "Nombre de noeuds à considérer dans le maillage interne", ),
+  
+  ), # Fin BLOC  Geometrie
+
+  Maillage  = BLOC ( condition = "TraitementGeometrie=='Maillage'",
+
+    # DTV : comment preciser que c'est une suite de liste de nombres croissants ?
+    # Question : NBO depend-il de TYPGEOM ??
+    NombreNoeudsMaillage = SIMP ( statut="o", typ="I", defaut=300, max=1, val_min=1, val_max=1000, 
+                                 fr = "Nombre de noeuds à considérer dans le maillage interne", ),
+  
+    ListeAbscisses       = SIMP ( statut="o", typ="R", max="**",
+                                  fr = "Liste des abscisses", ),
+  ), # Fin BLOC Maillage
+
+) # Fin PROC CUVE
+
+#================================
+# 3. Caracteristiques du DEFAUT
+#================================
+
+DEFAUT = PROC ( nom = "DEFAUT",
+                op = 68,
+               repetable = 'n',
+                fr = "Caractéristiques du défaut", 
+
+#===
+# Liste des paramètres
+#===
+
+# TYPEDEF
+  TypeInitial = SIMP ( statut="o", typ="TXM", defaut="Defaut Sous Revetement",
+                       fr="Type initial du défaut : sous revêtement, decale ou débouchant",
+                       into=( "Defaut Sous Revetement", # DSR
+                             "Defaut Decale", # DECALE
+                              "Defaut Debouchant", ), # DEBOUCHANT
+                       ),
+
+#====
+# Definition des parametres selon le type du defaut
+#====
+
+  SousRevetement = BLOC ( condition = "TypeInitial=='Defaut Sous Revetement'",
+
+    # ORIEDEF into LONGITUD, CIRCONF
+    Orientation              = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+                                     fr="Orientation du défaut",
+                                      into=( "Longitudinale", 
+                                            "Circonferentielle" ), ),
+
+    Profondeur_parametres = FACT (statut="o",
+      # PROFDEF
+      # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+      ProfondeurRadiale        = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006, 
+                                      fr="Profondeur radiale du défaut (m)", ),
+      # PROFDEF_MESSAGE
+      ProfondeurRadiale_mess   = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la profondeur radiale du défaut (m)",
+                                     into=( "NON", "OUI" ), ),
+    ), # Fin FACT Profondeur_parametres
+
+    Longueur_parametres = FACT (statut="o",
+      # OPTLONG into VALEUR, FCTAFFINE
+      ModeCalculLongueur     = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+                                        fr="Option pour caractériser la longueur du défaut : soit par valeur, soit par une fonction affine de la profondeur",
+                                        into = ( "Valeur", "Fonction affine de la profondeur" ), ),
+      Mode_Valeur            = BLOC ( condition = "ModeCalculLongueur=='Valeur'",
+        # LONGDEF
+        Longueur                 = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut = 0.060, 
+                                          fr = "Longueur du défaut sous revêtement (m)", ),
+        # LONGDEF_MESSAGE
+        Longueur_mess            = SIMP ( statut="o", typ="TXM", defaut = "NON", 
+                                          fr = "Affichage ecran de la longueur du défaut sous revêtement (m)",
+                                       into=( "NON", "OUI" ), ),
+      ), # Fin BLOC Mode_Valeur
+      Mode_Fctaffine           = BLOC ( condition = "ModeCalculLongueur=='Fonction affine de la profondeur'",
+        # PROFSURLONG
+        CoefDirecteur     = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=10.,
+                         fr="Inverse a1 du coefficient directeur de la fonction affine l=h/a1 + a0", ),
+        # LONGCONST
+        Constante = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=0.,
+                         fr="constante a0 de la fonction affine l=pente*h + a0", ),
+      ), # Fin BLOC Mode_Fctaffine
+    ), # FIN FACT Longueur_parametres
+
+    Azimut_parametres = FACT (statut="o",
+      # ANGLDEF
+      Azimut                   = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+      # ANGLDEF_MESSAGE
+      Azimut_mess              = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Azimut_parametres
+
+    Altitude_parametres = FACT (statut="o",
+      # ALTIDEF
+      # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+      Altitude                 = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4., 
+                                      fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+      # ALTIDEF_MESSAGE
+      Altitude_mess            = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Altitude_parametres
+
+    # POINDEF
+    Pointe                   = SIMP ( statut="o", typ="TXM", defaut="A", 
+                                      fr="Choix du point considéré du défaut sous revêtement",
+                                      into=( "A", "B", "A et B" ), ),
+
+  ), # Fin BLOC SousRevetement
+
+  Decale = BLOC ( condition = "TypeInitial=='Defaut Decale'",
+
+    # ORIEDEF into LONGITUD, CIRCONF
+    Orientation              = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+                                     fr="Orientation du défaut",
+                                      into=( "Longitudinale", 
+                                            "Circonferentielle" ), ),
+
+    Profondeur_parametres = FACT (statut="o",
+      # PROFDEF
+      # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+      ProfondeurRadiale        = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006, 
+                                      fr="Profondeur radiale du défaut (m)", ),
+      # PROFDEF_MESSAGE
+      ProfondeurRadiale_mess   = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la profondeur radiale du défaut (m)",
+                                     into=( "NON", "OUI" ), ),
+    ), # Fin FACT Profondeur_parametres
+
+    Longueur_parametres = FACT (statut="o",
+
+      # OPTLONG into VALEUR, FCTAFFINE
+      ModeCalculLongueur     = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+                                      fr="Option pour caractériser la longueur du défaut : soit par valeur, soit par une fonction affine de la profondeur",
+                                      into = ( "Valeur", "Fonction affine de la profondeur" ), ),
+
+      Mode_Valeur            = BLOC ( condition = "ModeCalculLongueur=='Valeur'",
+        # LONGDEF
+        Longueur                 = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut = 0.060, 
+                                        fr = "Longueur du défaut sous revêtement (m)", ),
+        # LONGDEF_MESSAGE
+        Longueur_mess            = SIMP ( statut="o", typ="TXM", defaut = "NON", 
+                                        fr = "Affichage ecran de la longueur du défaut décalé (m)",
+                                       into=( "NON", "OUI" ), ),
+      ), # Fin BLOC Mode_Valeur
+
+      Mode_Fctaffine           = BLOC ( condition = "ModeCalculLongueur=='Fonction affine de la profondeur'",
+        # PROFSURLONG
+        CoefDirecteur     = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=10.,
+                         fr="Inverse a1 du coefficient directeur de la fonction affine l=h/a1 + a0", ),
+        # LONGCONST
+        Constante = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=0.,
+                         fr="constante a0 de la fonction affine l=pente*h + a0", ),
+      ), # Fin BLOC Mode_Fctaffine
+
+    ), # FIN FACT Longueur_parametres
+
+   
+    Decalage_parametres = FACT (statut="o",
+
+      # DECATYP into NORMALISE, VALEUR
+      ModeCalculDecalage     = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+                                      fr="Option de definition du decalage radial du defaut : soit par valeur reelle, soit par valeur normalisee",
+                                      into = ( "Valeur", 
+                                              "Valeur normalisee" ), ),
+
+      Mode_Decalage_Valeur   = BLOC ( condition = "ModeCalculDecalage=='Valeur'",
+        # DECADEF
+        DecalageRadial           = SIMP ( statut="o", typ="R", defaut=-0.00001, 
+                                      fr="Décalage radial du defaut sous revêtement (en m)", ),
+        # DECADEF_MESSAGE
+        DecalageRadial_mess      = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran du décalage radial du defaut sous revêtement (en m)",
+                                      into = ( "NON", "OUI" ), ),
+      ), # Fin BLOC Mode_Decalage_Valeur
+
+      Mode_Decalage_Normalisee = BLOC ( condition = "ModeCalculDecalage=='Valeur normalisee'",
+        # DECANOR
+        DecalageNormalise          = SIMP ( statut="o", typ="R", defaut=0.01, 
+                                       fr="Décalage radial normalise du defaut sous revêtement (entre 0. et 1.)", ),
+      ), # Fin BLOC Mode_Decalage_Normalisee
+  
+    ), # Fin FACT Decalage_parametres
+
+    Azimut_parametres = FACT (statut="o",
+      # ANGLDEF
+      Azimut                   = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+      # ANGLDEF_MESSAGE
+      Azimut_mess              = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Azimut_parametres
+
+    Altitude_parametres = FACT (statut="o",
+      # ALTIDEF
+      # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+      Altitude                 = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4., 
+                                      fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+      # ALTIDEF_MESSAGE
+      Altitude_mess            = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Altitude_parametres
+
+    # POINDEF
+    Pointe                   = SIMP ( statut="o", typ="TXM", defaut="A", 
+                                      fr="Choix du point considéré du défaut décalé",
+                                      into=( "A", "B", "A et B" ), ),
+
+  ), # Fin BLOC Decale
+
+  Debouchant = BLOC ( condition = "TypeInitial=='Defaut Debouchant'",
+
+    # ORIEDEF into LONGITUD, CIRCONF
+    Orientation              = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+                                      fr="Orientation du défaut : longitudinale ou circonférentielle",
+                                      into=( "Longitudinale",
+                                            "Circonferentielle" ), ),
+
+    Profondeur_parametres = FACT (statut="o",
+      # PROFDEF
+      # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+      ProfondeurRadiale        = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006, 
+                                      fr="Profondeur radiale du défaut (m)", ),
+      # PROFDEF_MESSAGE
+      ProfondeurRadiale_mess   = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la profondeur radiale du défaut (m)",
+                                     into=( "NON", "OUI" ), ),
+    ), # Fin FACT Profondeur_parametres
+
+    Azimut_parametres = FACT (statut="o",
+      # ANGLDEF
+      Azimut                   = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+      # ANGLDEF_MESSAGE
+      Azimut_mess              = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Azimut_parametres
+
+    Altitude_parametres = FACT (statut="o",
+      # ALTIDEF
+      # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+      Altitude                 = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4., 
+                                      fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+      # ALTIDEF_MESSAGE
+      Altitude_mess            = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Altitude_parametres
+
+  ), # Fin BLOC debouchant
+
+) # Fin PROC DEFAUT
+
+
+#====================================================
+# 4. Modeles de fluence, d'irradiation et de tenacite
+#====================================================
+
+#=======================
+# 4.1 Modeles de fluence
+#=======================
+
+MODELES = PROC ( nom = "MODELES",
+                 op = 68,
+                repetable = 'n',
+                 fr = "Modèles de fluence, d'irradiation et de ténacité", 
+
+
+#===
+# Liste des paramètres
+#===
+
+  Fluence = FACT ( statut="o",
+  
+    # MODELFLUENCE
+    ModeleFluence = SIMP ( statut="o", typ="TXM", defaut="Exponentiel sans revetement k=9.7 (Reglementaire)",
+                           fr="Modèle d'atténuation de la fluence dans l'épaisseur de la cuve",
+                          into=( "Exponentiel sans revetement k=9.7 (Reglementaire)", # Reglementaire
+                                 "Exponentiel sans revetement k=9.7 (Reglementaire CUVE1D)", # Cuve1D
+                                 "Exponentiel sans revetement k=12.7 (France)", # France 
+                                  "Exponentiel sans revetement k=0. (ValeurImposee)", # ValeurImposee 
+                                  "Donnees francaises du palier CPY (SDM)", # SDM 
+                                  "Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)", # GrandeDev 
+                                  "Regulatory Guide 1.99 rev 2 (USNRC)", # USNRC 
+                                  "Dossier 900 MWe AP9701 rev 2 (REV_2)", # REV_2 
+                                  "Lissage du modele ajuste (SDM_Lissage)", # SDM_Lissage 
+                                  "Grand developpement (GD_Cuve)"), # GD_Cuve 
+                         ),
+
+#====
+# Definition des parametres selon le modele de fluence
+#====
+    
+    # H1COEUR
+    ZoneActiveCoeur_AltitudeSup    = SIMP ( statut="o", typ="R", defaut=-3.536, 
+                             fr="Cote supérieure de la zone active de coeur", ),
+    # H2COEUR
+    ZoneActiveCoeur_AltitudeInf    = SIMP ( statut="o", typ="R", defaut=-7.194, 
+                             fr="Cote inférieure de la zone active de coeur", ),
+
+    Reglementaire = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=9.7 (Reglementaire)', ) ",
+      # DTV : comment proposer une liste de valeurs, tout en proposant de fournir d'autres valeurs ?
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+    ), # Fin BLOC Reglementaire
+
+    Cuve1D = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=9.7 (Reglementaire CUVE1D)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC Cuve1D
+
+    France        = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=12.7 (France)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+      # KPFRANCE
+      KPFrance      = SIMP ( statut="o", typ="R", defaut = 12.7,
+                             fr="Paramètre exponentiel du modèle France", ),
+    ), # Fin BLOC France
+
+    ValeurImposee = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=0. (ValeurImposee)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC ValeurImposee
+
+    SDM           = BLOC ( condition = " ModeleFluence in ( 'Donnees francaises du palier CPY (SDM)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC SDM
+
+    USNRC         = BLOC ( condition = " ModeleFluence in ( 'Regulatory Guide 1.99 rev 2 (USNRC)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+      KPUS          = SIMP ( statut="o", typ="R", defaut=9.4488,
+                             fr="Paramètre exponentiel du modèle US", ),
+    ), # Fin BLOC USNRC
+
+    REV_2         = BLOC ( condition = " ModeleFluence in ( 'Dossier 900 MWe AP9701 rev 2 (REV_2)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC REV_2
+
+    SDM_Lissage   = BLOC ( condition = " ModeleFluence in ( 'Lissage du modele ajuste (SDM_Lissage)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+    ), # Fin BLOC SDM_Lissage
+
+    GrandeDev     = BLOC ( condition = " ModeleFluence in ( 'Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+    ), # Fin BLOC GrandeDev
+
+    GD_Cuve       = BLOC ( condition = " ModeleFluence in ( 'Grand developpement (GD_Cuve)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+      Coefficients  = Coef_Fluence(),
+    ), # Fin BLOC GD_Cuve
+
+  ), # Fin FACT Fluence
+
+#==========================
+# 4.2 Modeles d'irradiation
+#==========================
+
+  Irradiation = FACT ( statut="o",
+
+    # TYPEIRR INTO RTNDT, FLUENCE
+    TypeIrradiation = SIMP ( statut = "o", typ = "TXM", defaut="RTndt de la cuve a l instant de l analyse",
+                       fr = "Type d'irradiation",
+                      into = ( "RTndt de la cuve a l instant de l analyse", # RTNDT 
+                               "Modele d irradiation" ), # FLUENCE
+                       ),
+
+#====
+# Definition des parametres selon le type d'irradiation
+#====
+
+    IrradiationParValeur = BLOC ( condition = "TypeIrradiation=='RTndt de la cuve a l instant de l analyse'",
+      RTNDT = SIMP ( statut="o", typ="R", defaut=73., 
+                     fr="RTNDT de la cuve à l'instant de l'analyse (°C)", ),
+
+    ), # Fin BLOC IrradiationParValeur
+
+    IrradiationParModele = BLOC ( condition = "TypeIrradiation=='Modele d irradiation'",
+      # MODELIRR
+      ModeleIrradiation = SIMP ( statut="o", typ="TXM", defaut="Metal de Base : formule de FIM/FIS Houssin",
+                                fr="Modèle d'irradiation pour virole ou joint soudé",
+                               into=( "Metal de Base : formule de FIM/FIS Houssin", # HOUSSIN 
+                                      "Metal de Base : formule de FIM/FIS Persoz", # PERSOZ
+                                      "Metal de Base : formule de FIM/FIS Lefebvre", # LEFEBVRE
+                                      "Metal de Base : Regulatory Guide 1.00 rev 2", # USNRCmdb
+                                      "Joint Soude : formulation de FIM/FIS Brillaud", # BRILLAUD
+                                      "Joint Soude : Regulatory Guide 1.00 rev 2" ), # USNRCsoud
+                                ),
+      Parametres_FIMFIS = BLOC ( condition = " ModeleIrradiation in ( 'Metal de Base : formule de FIM/FIS Houssin' , 'Metal de Base : formule de FIM/FIS Persoz', 'Metal de Base : formule de FIM/FIS Lefebvre', 'Joint Soude : formulation de FIM/FIS Brillaud', ) ",
+        # CU
+        TeneurCuivre         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Teneur en cuivre (%)", ),
+        # CU_MESSAGE
+        TeneurCuivre_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la teneur en cuivre (%)",
+                                     into=( "NON","OUI" ), ),
+        # NI
+        TeneurNickel         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Teneur en nickel (%)", ),
+        # NI_MESSAGE
+        TeneurNickel_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la teneur en nickel (%)",
+                                     into=( "NON","OUI" ), ),
+        # P
+        TeneurPhosphore      = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Teneur en phosphore (%)", ),
+        # P_MESSAGE
+        TeneurPhosphore_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la teneur en phosphore (%)",
+                                     into=( "NON","OUI" ), ),
+        # RTimoy
+        MoyenneRTndt         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)", ),
+        # RTimoy_MESSAGE
+        MoyenneRTndt_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la moyenne de RTNDT",
+                                     into=( "NON","OUI" ), ),
+        # nbectDRTNDT
+        NombreEcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=2., 
+                                      fr="Nombre d'écart-type par rapport à la moyenne de DRTNDT", ),
+        # nbectDRTNDT_MESSAGE
+        NombreEcartTypeRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran du nombre d'écart-type par rapport à la moyenne de DRTNDT",
+                                     into=( "NON","OUI" ), ),
+      ), # Fin BLOC Parametres_FIMFIS
+
+      Parametres_USNRC = BLOC ( condition = " ModeleIrradiation in ( 'Metal de Base : Regulatory Guide 1.00 rev 2' , 'Joint Soude : Regulatory Guide 1.00 rev 2', ) ",
+        # CU
+        TeneurCuivre         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Teneur en cuivre (%)", ),
+        # CU_MESSAGE
+        TeneurCuivre_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la teneur en cuivre (%)",
+                                     into=( "NON","OUI" ), ),
+        # NI
+        TeneurNickel         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Teneur en nickel (%)", ),
+        # NI_MESSAGE
+        TeneurNickel_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la teneur en nickel (%)",
+                                     into=( "NON","OUI" ), ),
+        # RTimoy
+        MoyenneRTndt         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)", ),
+        # RTimoy_MESSAGE
+        MoyenneRTndt_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la moyenne de RTNDT",
+                                     into=( "NON","OUI" ), ),
+        # RTicov
+        CoefVariationRTndt   = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Coefficient de variation de la RTNDT initiale", ),
+        # RTicov_MESSAGE
+        CoefVariationRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                         fr="Affichage ecran du coefficient de variation de la RTNDT initiale",
+                                        into=( "NON","OUI" ), ),
+        # USectDRT
+        EcartTypeRTndt       = SIMP ( statut="o", typ="R", defaut=28., 
+                                      fr="Ecart-type du décalage de RTNDT (°F) (28. pour js et 17. pour mdb)", ),
+        # nbectDRTNDT
+        NombreEcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=2., 
+                                      fr="Nombre d'écart-type par rapport à la moyenne de DRTNDT", ),
+        # nbectDRTNDT_MESSAGE
+        NombreEcartTypeRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran du nombre d'écart-type par rapport à la moyenne de DRTNDT",
+                                     into=( "NON","OUI" ), ),
+      ), # Fin BLOC Parametres_USNRC 
+
+    ), # Fin BLOC IrradiationParModele
+
+  ), # Fin FACT Irradiation
+
+#========================
+# 4.3 Modeles de tenacite
+#========================
+
+  Tenacite = FACT ( statut = "o",
+
+    # MODELKIC
+    ModeleTenacite = SIMP ( statut="o", typ="TXM", defaut="RCC-M/ASME coefficient=2",
+                    fr="Modèle de calcul de la ténacité à l'amorçage KIc", 
+                   into=( "RCC-M/ASME coefficient=2", # RCC-M
+                          "RCC-M/ASME coefficient=2 CUVE1D", # RCC-M_simpl
+                          "RCC-M/ASME coefficient=2.33 (Houssin)", # Houssin_RC
+                          "RCC-M/ASME avec KI=KIpalier", # RCC-M_pal
+                          "RCC-M/ASME avec KI~exponentiel", # RCC-M_exp
+                          "Weibull basee sur la master cuve", # Wallin
+                          "Weibull basee sur la master cuve (REME)", # REME
+                          "Weibull n°1 (etude ORNL)", # ORNL
+                          "Weibull n°2", # WEIB2
+                          "Weibull n°3", # WEIB3
+                          "Weibull generalisee", # WEIB-GEN
+                          "Exponentielle n°1 (Frama)", # Frama
+                          "Exponentielle n°2 (LOGWOLF)" ), # LOGWOLF
+                   ),
+
+
+#====
+# Definition des parametres selon le modele de tenacité
+#====
+
+# Modeles type RCC-M
+
+    KIc_RCCM = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME coefficient=2', 'RCC-M/ASME coefficient=2.33 (Houssin)', 'RCC-M/ASME avec KI=KIpalier', ) ",
+
+      # nbectKIc
+      NbEcartType_MoyKIc       = SIMP ( statut="o", typ="R", defaut=-2., 
+                                        fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+      # nbectKIc_MESSAGE
+      NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                        fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                       into = ( "NON","OUI" ), ),
+
+      # KICPAL
+      PalierDuctile_KIc        = SIMP ( statut="o", typ="R", defaut=195., 
+                                        fr="Palier déterministe de K1c ou valeur du palier ductile plafonnant la courbe (en MPa(m^0.5)) ", ),
+
+      # KICCDV
+      CoefficientVariation_KIc = SIMP ( statut="o", typ="R", defaut = 0.15, 
+                                        fr = "Coefficient de variation de la loi normale de K1c ", ),
+
+    ), # Fin BLOC KIc_RCCM
+
+    KIc_RCCM_exp = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME avec KI~exponentiel', ) ",
+
+      # nbectKIc
+      NbEcartType_MoyKIc       = SIMP ( statut="o", typ="R", defaut=-2., 
+                                        fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+      # nbectKIc_MESSAGE
+      NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                        fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                       into = ( "NON","OUI" ), ),
+
+      # KICCDV
+      CoefficientVariation_KIc = SIMP ( statut="o", typ="R", defaut = 0.15, 
+                                        fr = "Coefficient de variation de la loi normale de K1c ", ),
+
+    ), # Fin BLOC KIc_RCCM_exp
+
+# Modeles type exponentiel (Frama, LOGWOLF)
+
+    KIc_Exponentielle = BLOC ( condition = " ModeleTenacite in ( 'Exponentielle n°1 (Frama)', 'Exponentielle n°2 (LOGWOLF)', ) ",
+
+      # nbectKIc
+      NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2., 
+                                  fr="Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+      # nbectKIc_MESSAGE
+      NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                        fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                       into = ( "NON","OUI" ), ),
+
+    ), # Fin BLOC KIc_Exponentielle
+
+# Modeles type Weibull
+
+    KIc_Weibull = BLOC ( condition = " ModeleTenacite in ( 'Weibull basee sur la master cuve (REME)', 'Weibull n°1 (etude ORNL)', 'Weibull n°2', 'Weibull n°3', ) ",
+      # NBCARAC
+      NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE", 
+                                        fr="Nombre caracteristique : ORDRE ou QUANTILE",
+                                        into=( "ORDRE", "QUANTILE" ), ),
+
+      QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+        # nbectKIc
+        NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2., 
+                                    fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+        # nbectKIc_MESSAGE
+        NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                          fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                          into = ( "NON","OUI" ), ),
+      ), # Fin BLOC QUANTILE 
+
+      ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+        # fractKIc
+        Fractile_KIc       = SIMP ( statut="o", typ="R", defaut=5., 
+                                  fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+        # fractKIc_MESSAGE
+        Fractile_KIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                    fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+                                    into = ( "NON","OUI" ), ),
+      ), # Fin BLOC ORDRE 
+
+    ), # Fin BLOC KIc_Weibull
+
+    KIc_MasterCuve = BLOC ( condition = " ModeleTenacite in ( 'Weibull basee sur la master cuve', ) ",
+      # NBCARAC
+      NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE", 
+                                        fr="Nombre caracteristique : ORDRE ou QUANTILE",
+                                        into=( "ORDRE", "QUANTILE" ), ),
+
+      QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+        # nbectKIc
+        NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2., 
+                                    fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+        # nbectKIc_MESSAGE
+        NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                          fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                          into = ( "NON","OUI" ), ),
+      ), # Fin BLOC QUANTILE 
+
+      ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+        # fractKIc
+        Fractile_KIc       = SIMP ( statut="o", typ="R", defaut=5., 
+                                  fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+        # fractKIc_MESSAGE
+        Fractile_KIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                    fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+                                    into = ( "NON","OUI" ), ),
+      ), # Fin BLOC ORDRE 
+
+      # T0WALLIN
+      Temperature_KIc100 = SIMP ( statut="o", typ="I", defaut=-27, 
+                                  fr="Paramètre T0 du modèle Wallin (°C) : température pour laquelle la téncité du matériau vaut en moyenne 100MPa.m^5", ),
+
+    ), # Fin BLOC KIc_MasterCuve
+
+    Weibull_Generalisee = BLOC ( condition = " ModeleTenacite in ( 'Weibull generalisee',) ",
+      # NBCARAC
+      NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE", 
+                                        fr="Nombre caracteristique : ORDRE ou QUANTILE",
+                                        into=( "ORDRE", "QUANTILE" ), ),
+
+      QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+        # nbectKIc
+        NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2., 
+                                    fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+        # nbectKIc_MESSAGE
+        NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                          fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                          into = ( "NON","OUI" ), ),
+      ), # Fin BLOC QUANTILE 
+
+      ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+        # fractKIc
+        Fractile_KIc       = SIMP ( statut="o", typ="R", defaut=5., 
+                                  fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+        # fractKIc_MESSAGE
+        Fractile_KIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                    fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+                                    into = ( "NON","OUI" ), ),
+      ), # Fin BLOC ORDRE 
+
+      Coefficients       = Coef_WeibGen(),
+
+    ), # Fin BLOC Weibull_Generalisee
+
+    # ATTNCORRBETA - CORRIRWIN
+    CorrectionPlastique  = SIMP ( statut="o", typ="TXM", defaut="Correction plastique BETA (pour DSR et defaut decale)", 
+                                  fr="Correction plastique dans le calcul du facteur d'intensité de contraintes",
+                                  into=( "Correction plastique BETA (pour DSR et defaut decale)", # ATTNCORRBETA = NON
+                                         "Correction plastique BETA attenuee (pour DSR et défaut decale)", # ATTNCORRBETA = OUI
+                                        "Correction plastique IRWIN (pour defaut debouchant)" ), ), # CORRIRWIN = OUI
+
+    Fissure = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME coefficient=2', 'RCC-M/ASME coefficient=2.33 (Houssin)', 'RCC-M/ASME avec KI=KIpalier', 'RCC-M/ASME avec KI~exponentiel', )",
+
+      # ARRETFISSURE
+      ArretDeFissure = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                              fr="Prise en compte de l'arrêt de fissure",
+                              into=( "OUI", "NON" ), ),
+
+      KIa_RCCM = BLOC ( condition = "ArretDeFissure=='OUI'",
+        # INCRDEF
+        IncrementTailleFissure   = SIMP ( statut="o", typ="R", defaut=0.005, 
+                                          fr="Incrément de la taille de fissure pour la propagation (en m)", ),
+        # INCRDEF_MESSAGE
+        IncrementTailleFissure_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                             fr="Affichage ecran de l incrément de la taille de fissure pour la propagation (en m)",
+                                            into = ("NON", "OUI"), ),
+
+        # nbectKIa
+        NbEcartType_MoyKIa       = SIMP ( statut="o", typ="R", defaut=-2., 
+                                          fr="Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ", ),
+
+        # KIAPAL
+        PalierDuctile_KIa        = SIMP ( statut="o", typ="R", defaut=195., 
+                                          fr="Palier déterministe de K1a -ténacite à l'arrêt- (en MPa(m^0.5)) ", ),
+        # KIACDV
+        CoefficientVariation_KIa = SIMP ( statut="o", typ="R", defaut=0.10, 
+                                          fr="Coefficient de variation de la loi normale de K1a -ténacite à l'arrêt- ", ),
+
+      ), # Fin BLOC KIa_RCCM
+
+    ), # Fin BLOC Fissure
+
+  ), # Fin FACT Tenacite
+
+) # Fin PROC MODELES
+
+
+#==================
+# 5. Initialisation
+#==================
+
+INITIALISATION = PROC ( nom = "INITIALISATION",
+                        op = 68,
+                       repetable = 'n',
+                        fr = "Initialisation : instant initial, profils radiaux de température et contraintes", 
+
+  TemperatureInitiale = FACT ( statut = "o",
+
+    ProfilRadial_TemperatureInitiale = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                              fr="Profil radial de la température initiale dans la cuve (en m : °C) ", ),
+    Amont_TemperatureInitiale        = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                              fr="Prolongation à la frontière amont",
+                                              into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_TemperatureInitiale         = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                              fr="Prolongation à la frontière aval",
+                                              into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT TemperatureInitiale
+
+  ContraintesInitiales = FACT ( statut = "o",
+
+    ProfilRadial_ContraintesInitiales = SIMP ( statut="o", typ=Tuple(4), max="**",
+                                               fr="Profil radial des contraintes radiale, circonférentielle et longitudinale dans la cuve (en m : xx : xx : xx) ", ),
+    Amont_ContraintesInitiales        = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                               fr="Prolongation à la frontière amont",
+                                               into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ContraintesInitiales         = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                               fr="Prolongation à la frontière aval",
+                                               into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ContraintesInitiales
+
+  # INSTINIT
+  InstantInitialisation = SIMP ( statut="o", typ="R", defaut = -1., 
+                                 fr="Instant initial auquel sont définies la température, ainsi que les contraintes initiales (en s) ", ),
+
+) # Fin PROC INITIALISATION
+
+
+#==================================
+# 6. CARACTERISTIQUES DU REVETEMENT
+#==================================
+
+REVETEMENT = PROC ( nom = "REVETEMENT",
+                    op = 68,
+                   repetable = 'n',
+                    fr = "Caracteristiques du revêtement", 
+
+  # KTHREV
+  ConditionLimiteThermiqueREV = SIMP ( statut="o", typ="TXM", defaut="CHALEUR",
+                                       fr="Option pour définir les caractéristiques du revêtement ",
+                                       into=( "ENTHALPIE", "CHALEUR",),
+                                       ),
+
+  EnthalpieREV = BLOC ( condition = "ConditionLimiteThermiqueREV=='ENTHALPIE'",
+
+    EnthalpieREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                          fr="Température (°C) / enthalpie massique  (J/kg) ", ),
+    Amont_EnthalpieREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                          fr="Prolongation à la frontière amont",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_EnthalpieREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                          fr="Prolongation à la frontière aval",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC EnthalpieREV
+
+
+  ChaleurREV = BLOC ( condition = "ConditionLimiteThermiqueREV=='CHALEUR'",
+
+    ChaleurREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                        fr="Température (°C) / chaleur volumique (J/kg/K) ", ),
+    Amont_ChaleurREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                        fr="Prolongation à la frontière amont",
+                                        into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ChaleurREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                        fr="Prolongation à la frontière aval",
+                                        into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC ChaleurREV
+
+  ConductiviteREV = FACT (statut = "o",
+
+    ConductiviteREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                             fr="Température (°C) / conductivité thermique (W/m/°C) ", ),
+    Amont_ConductiviteREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                             fr="Prolongation à la frontière amont",
+                                             into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ConductiviteREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                             fr="Prolongation à la frontière aval",
+                                             into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ConductiviteREV
+
+  ModuleYoungREV = FACT (statut = "o",
+
+    ModuleYoungREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                            fr="Température (°C) / module d'Young (MPa) ", ),
+    Amont_ModuleYoungREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                            fr="Prolongation à la frontière amont",
+                                            into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ModuleYoungREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                            fr="Prolongation à la frontière aval",
+                                            into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ModuleYoungREV
+
+  CoeffDilatThermREV = FACT (statut = "o",
+
+    CoeffDilatThermREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                fr="Température (°C) / coefficient de dilatation thermique (°C-1) ", ),
+    Amont_CoeffDilatThermREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                fr="Prolongation à la frontière amont",
+                                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_CoeffDilatThermREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                fr="Prolongation à la frontière aval",
+                                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT CoeffDilatThermREV
+
+  LimiteElasticiteREV = FACT (statut = "o",
+
+    LimiteElasticiteREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                 fr="Température (°C) / limite d'élasticite (MPa) ", ),
+    Amont_LimiteElasticiteREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                 fr="Prolongation à la frontière amont",
+                                                 into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_LimiteElasticiteREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                 fr="Prolongation à la frontière aval",
+                                                 into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT LimiteElasticiteREV
+
+  AutresParametresREV = FACT (statut = "o",
+
+    # TREFREV
+    TemperatureDeformationNulleREV   = SIMP ( statut="o", typ="R", defaut=20.,
+                                              fr="Température de référence pour laquelle les déformations thermiques sont nulles (°C) ", ),
+    # TDETREV
+    TemperaturePourCoefDilatThermREV = SIMP ( statut="o", typ="R", defaut=287.,
+                                              fr="Température de définition du coefficient de dilatation thermique (°C) ", ),
+    # NUREV
+    CoefficientPoissonREV            = SIMP ( statut="o", typ="R", defaut=0.3,
+                                              fr="Coefficient de Poisson ", ),
+
+  ), # Fin FACT AutresParametresREV
+
+) # Fin PROC REVETEMENT
+
+
+#=====================================
+# 7. CARACTERISTIQUES DU METAL DE BASE
+#=====================================
+
+METAL_BASE = PROC ( nom = "METAL_BASE",
+                    op = 68,
+                   repetable = 'n',
+                    fr = "Caracteristiques du metal de base", 
+
+  # KTHMDB
+  ConditionLimiteThermiqueMDB = SIMP ( statut="o", typ="TXM", defaut="CHALEUR",
+                                       fr="Option pour definir les caractéristiques du revêtement ",
+                                       into=( "ENTHALPIE", "CHALEUR",), ),
+
+  EnthalpieMDB = BLOC ( condition = "ConditionLimiteThermiqueMDB=='ENTHALPIE'",
+
+    EnthalpieMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                          fr="Température (°C) / enthalpie massique (J/kg) ", ),
+    Amont_EnthalpieMDB           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                          fr="Prolongation à la frontière amont",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_EnthalpieMDB            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                          fr="Prolongation à la frontière aval",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC EnthalpieMDB
+
+  ChaleurMDB = BLOC ( condition = "ConditionLimiteThermiqueMDB=='CHALEUR'",
+
+    ChaleurMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                        fr="Température (°C) / chaleur volumique (J/kg/K) ", ),
+    Amont_ChaleurMDB           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                        fr="Prolongation à la frontière amont",
+                                        into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ChaleurMDB            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                        fr="Prolongation à la frontière aval",
+                                        into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC ChaleurMDB
+
+  ConductiviteMDB = FACT ( statut = "o",
+
+    ConductiviteMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                             fr="Température (°C) / conductivité thermique (W/m/°C) ", ),
+    Amont_ConductiviteMDB           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                             fr="Prolongation à la frontière amont",
+                                             into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ConductiviteMDB            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                             fr="Prolongation à la frontière aval",
+                                             into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ConductiviteMDB
+
+  ModuleYoungMDB = FACT ( statut="o",
+
+    ModuleYoungMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                            fr="Température (°C) / module d'Young (MPa) ", ),
+    Amont_ModuleYoungMDB           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                            fr="Prolongation à la frontière amont",
+                                            into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ModuleYoungMDB            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                            fr="Prolongation à la frontière aval",
+                                            into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ModuleYoungMDB
+
+  CoeffDilatThermMDB = FACT ( statut="o",
+
+    CoeffDilatThermMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                fr="Température (°C) / coefficient de dilatation thermique (°C-1) ", ),
+    Amont_CoeffDilatThermMDB           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                fr="Prolongation à la frontière amont",
+                                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_CoeffDilatThermMDB            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                fr="Prolongation à la frontière aval",
+                                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT CoeffDilatThermMDB
+
+  AutresParametresMDB = FACT ( statut = "o",
+
+    # TREFMDB
+    TemperatureDeformationNulleMDB   = SIMP ( statut="o", typ="R", defaut=20.,
+                                              fr="Température de référence pour laquelle les déformations thermiques sont nulles (°C) ", ),
+    # TDETMDB
+    TemperaturePourCoefDilatThermMDB = SIMP ( statut="o", typ="R", defaut=287.,
+                                              fr="Température de définition du coefficient de dilatation thermique (°C) ", ),
+    # NUMDB
+    CoefficientPoissonMDB            = SIMP ( statut="o", typ="R", defaut=0.3,
+                                              fr="Coefficient de Poisson ", ),
+
+  ), # Fin FACT TemperatureDeformationNulleMDB
+
+) # Fin PROC METAL_BASE
+
+
+#===============================
+# 8. TRANSITOIRE THERMOMECANIQUE
+#===============================
+
+TRANSITOIRE = PROC ( nom = "TRANSITOIRE",
+                     op = 68,
+                    repetable = 'n',
+                     fr = "Description du transitoire thermohydraulique", 
+
+  Pression = FACT ( statut = "o",
+
+    ProfilTemporel_Pression = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                     fr = "Instant (s) / pression (MPa) ", ),
+    Amont_Pression          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                     fr="Prolongation à la frontière amont",
+                                     into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_Pression           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                     fr="Prolongation à la frontière aval",
+                                     into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # FIN FACT Pression
+
+
+  CL_thermique = FACT ( statut = "o",
+
+    # TYPCLTH
+    TypeConditionLimiteThermique = SIMP ( statut="o", typ="TXM",
+                                         fr="Type de condition thermique en paroi interne ",
+                                         into=( "Temperature imposee en paroi", # TEMP_IMPO
+                                               "Flux de chaleur impose en paroi", # FLUX_REP
+                                               "Temperature imposee du fluide et coefficient echange", # ECHANGE
+                                               "Debit massique et temperature d injection de securite", # DEBIT
+                                               "Temperature imposee du fluide et debit d injection de securite", # TEMP_FLU
+                                               "Courbe APRP"), # APRP
+                                        ),
+
+    APRP = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Courbe APRP', ) ",
+
+      # INSTANT1
+      Instant_1              = SIMP ( statut="o", typ="R", defaut=21.,
+                                    fr="Palier 2 à T1 : borne inférieure (en s) ", ),
+      # INSTANT2
+      Instant_2              = SIMP ( statut="o", typ="R", defaut=45.,
+                                      fr="Palier 2 à T1 : borne supérieure (en s) ", ),
+      # QACCU
+      DebitAccumule          = SIMP ( statut="o", typ="R", defaut=2.3,
+                                      fr="Debit accumule (en m3/h) ", ),
+      # QIS
+      DebitInjectionSecurite = SIMP ( statut="o", typ="R", defaut=0.375,
+                                      fr="Debit injection securite (en m3/h) ", ),
+      # TIS_MESSAGE
+      TempInjectionSecurite_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                      fr="Affichage ecran de la temperature injection securite",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin BLOC APRP
+
+    TemperatureImposeeFluide     = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee en paroi','Temperature imposee du fluide et coefficient echange', 'Temperature imposee du fluide et debit d injection de securite', 'Courbe APRP' ) ",
+
+      ProfilTemporel_TemperatureImposeeFluide = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                       fr = "Instant (s) / Température imposée (°C) ", ),
+      Amont_TemperatureImposeeFluide          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                       fr="Prolongation à la frontière amont",
+                                                       into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_TemperatureImposeeFluide           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                       fr="Prolongation à la frontière aval",
+                                                       into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+    ), # Fin BLOC TemperatureImposeeFluide
+
+    FluxChaleur                  = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Flux de chaleur impose en paroi', ) ",
+
+      ProfilTemporel_FluxChaleur    = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                          fr="Instant (s) / Flux de chaleur impose (W/m2) ", ),
+      Amont_FluxChaleur             = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                           fr="Prolongation à la frontière amont",
+                                           into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_FluxChaleur              = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                           fr="Prolongation à la frontière aval",
+                                           into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+    ), # Fin BLOC FluxChaleur
+
+    CoefficientEchange          = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et coefficient echange', ) ",
+
+      ProfilTemporel_CoefficientEchange = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                               fr="Instant (s) / Coefficient d'échange (W/m2/K) ", ),
+      Amont_CoefficientEchange          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                               fr="Prolongation à la frontière amont",
+                                               into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_CoefficientEchange           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                               fr="Prolongation à la frontière aval",
+                                               into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+    ), # Fin BLOC CoefficientEchange
+
+    DebitMassique               = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+      ProfilTemporel_DebitMassique = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                          fr="Instant (s) / Débit massique (kg/s) ", ),
+      Amont_DebitMassique          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                          fr="Prolongation à la frontière amont",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_DebitMassique = SIMP ( statut="o", typ="TXM",
+                                fr="Prolongation à la frontière aval", defaut="Continu",
+                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+    ), # Fin BLOC DebitMassique
+
+    TemperatureInjection        = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+      ProfilTemporel_TemperatureInjection = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                 fr="Instant (s) / Température d'injection de sécurité  (°C) ", ),
+      Amont_TemperatureInjection          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                 fr="Prolongation à la frontière amont",
+                                                 into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_TemperatureInjection           = SIMP ( statut="o", typ = "TXM", defaut="Continu",
+                                                 fr="Prolongation à la frontière aval",
+                                                 into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    ), # Fin BLOC TemperatureInjection
+
+    DebitInjection              = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', 'Courbe APRP', ) ",
+
+      ProfilTemporel_DebitInjection = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                           fr="Instant (s) / Débit d'injection de sécurité (kg/s) ", ),
+      Amont_DebitInjection          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                           fr="Prolongation à la frontière amont",
+                                           into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_DebitInjection           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                           fr="Prolongation à la frontière aval",
+                                           into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+    ), # Fin BLOC DebitInjection
+
+    Vestale = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', 'Debit massique et temperature d injection de securite', 'Courbe APRP', ) ",
+
+      # DH
+      DiametreHydraulique             = SIMP ( statut="o", typ="R", defaut=0.3816,
+                                             fr="Diamètre hydraulique (m) ", ),
+      # DH_MESSAGE
+      DiametreHydraulique_mess        = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                             fr="Affichage ecran du diamètre hydraulique (m) ",
+                                            into = ( "NON", "OUI" ), ),
+      # SECTION
+      SectionEspaceAnnulaire          = SIMP ( statut="o", typ="R", defaut=0.21712,
+                                             fr="Section espace annulaire (m2) ", ),
+      # SECTION_MESSAGE
+      SectionEspaceAnnulaire_mess     = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                             fr="Affichage ecran de la section espace annulaire (m2) ",
+                                            into = ( "NON", "OUI" ), ),
+      # DELTA
+      HauteurCaracConvectionNaturelle = SIMP ( statut="o", typ="R", defaut=6.,
+                                             fr="Hauteur caractéristique convection naturelle (m) ", ),
+      # DELTA_MESSAGE
+      HauteurCaracConvectionNaturelle_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                                  fr="Affichage ecran de la hauteur caractéristique convection naturelle (m) ",
+                                                 into = ( "NON", "OUI" ), ),
+      # EPS
+      CritereConvergenceRelative      = SIMP ( statut="o", typ="R", defaut=0.00001,
+                                             fr="Critère convergence relative (-) ", ),
+      # COEFVESTALE
+      CoefficientsVestale             = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                             fr="Application des coefficients de Vestale", 
+                                             into=( 'OUI', 'NON' ), ),
+
+    ), # Fin BLOC Vestale
+
+    Creare = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+      # VM
+      VolumeMelange_CREARE           = SIMP ( statut="o", typ="R", defaut=14.9,
+                                            fr = "Volume de mélange CREARE (m3) ", ),
+      # VM_MESSAGE
+      VolumeMelange_CREARE_mess      = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                            fr = "Affichage ecran du volume de mélange CREARE (m3) ",
+                                             into=( 'OUI', 'NON' ), ),
+      # T0
+      TemperatureInitiale_CREARE     = SIMP ( statut="o", typ="R", defaut=250.,
+                                            fr="Température initiale CREARE (°C) ", ),
+      # T0_MESSAGE
+      TemperatureInitiale_CREARE_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                             fr="Affichage ecran de la température initiale CREARE (°C) ",
+                                             into=( 'OUI', 'NON' ), ),
+      # SE
+      SurfaceEchange_FluideStructure = SIMP ( statut="o", typ="R", defaut=0.,
+                                            fr="Surface d'échange fluide/structure (m2) ", ),
+      # SE_MESSAGE
+      SurfaceEchange_FluideStructure_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                                 fr="Affichage ecran de la surface d'échange fluide/structure (m2) ",
+                                                 into=( 'OUI', 'NON' ), ),
+
+    ), # Fin BLOC Creare
+
+  ), # FIN FACT CL_thermique
+
+) # Fin PROC TRANSITOIRE
diff --git a/Cuve2dg/DefaillCUVE_Cata.py_V1 b/Cuve2dg/DefaillCUVE_Cata.py_V1
new file mode 100644 (file)
index 0000000..c8dcfb9
--- /dev/null
@@ -0,0 +1,1427 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# Definition de variables sous forme de tuple
+# --------------------------------------------------
+
+import types
+class Tuple:
+  def __init__(self,ntuple):
+    self.ntuple=ntuple
+
+  def __convert__(self,valeur):
+    if type(valeur) == types.StringType:
+      return None
+    if len(valeur) != self.ntuple:
+      return None
+    return valeur
+
+  def info(self):
+    return "Tuple de %s elements" % self.ntuple
+
+  __repr__=info
+  __str__=info
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'CUVE1D-DEFAILLGLOB',
+                 execmodul = None,
+                 regles = ( AU_MOINS_UN ('OPTIONS'),
+                           AU_MOINS_UN ('INITIALISATION'),
+                           AU_MOINS_UN ('REVETEMENT'),
+                           AU_MOINS_UN ('METAL_BASE'),
+                           AU_MOINS_UN ('TRANSITOIRE'),
+                          )
+                 ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+# --------------------------------------------------
+# RESPONSABLE D. THAI VAN
+# Ce fichier contient la liste des coefficients pour un
+# modele de Weibull generalise
+def Coef_WeibGen() : return FACT(statut='o',min=1,max='**',
+
+  # A1
+  A1 = SIMP ( statut="o", typ="R", defaut=21.263, 
+              fr="coef du coef a(T) d'une Weibull générale", ),
+  # A2
+  A2 = SIMP ( statut="o", typ="R", defaut=9.159, 
+              fr="coef du coef a(T) d'une Weibull générale", ),
+  # A3
+  A3 = SIMP ( statut="o", typ="R", defaut=0.04057, 
+              fr="coef du coef a(T) d'une Weibull générale", ),
+  # B1
+  B1 = SIMP ( statut="o", typ="R", defaut=17.153, 
+              fr="coef du coef b(T) d'une Weibull générale", ),
+  # B2
+  B2 = SIMP ( statut="o", typ="R", defaut=55.089, 
+              fr="coef du coef b(T) d'une Weibull générale", ),
+  # B3
+  B3 = SIMP ( statut="o", typ="R", defaut=0.0144, 
+              fr="coef du coef b(T) d'une Weibull générale", ),
+  # C1
+  C1 = SIMP ( statut="o", typ="R", defaut=4., 
+              fr="coef du coef c(T) d'une Weibull générale", ),
+  # C2
+  C2 = SIMP ( statut="o", typ="R", defaut=0., 
+              fr="coef du coef c(T) d'une Weibull générale", ),
+  # C3
+  C3 = SIMP ( statut="o", typ="R", defaut=0., 
+              fr="coef du coef c(T) d'une Weibull générale", ),
+
+); # FIN def Coef_WeibGen
+
+
+# --------------------------------------------------
+# RESPONSABLE D. THAI VAN
+# Ce fichier contient la liste des coefficients 
+def Coef_Fluence() : return FACT(statut='o',min=1,max='**',
+
+  # COEFFLUENCE1
+  Azimut_0deg  = SIMP ( statut="o", typ="R", defaut=5.8, 
+                        fr="Fluence à l'azimut 0 (10^19 n/cm2)", ),
+  # COEFFLUENCE2
+  Azimut_5deg  = SIMP ( statut="o", typ="R", defaut=5.48, 
+                        fr="Fluence à l'azimut 5 (10^19 n/cm2)", ),
+  # COEFFLUENCE3
+  Azimut_10deg = SIMP ( statut="o", typ="R", defaut=4.46, 
+                        fr="Fluence à l'azimut 10 (10^19 n/cm2)", ),
+  # COEFFLUENCE4
+  Azimut_15deg = SIMP ( statut="o", typ="R", defaut=3.41, 
+                        fr="Fluence à l'azimut 15 (10^19 n/cm2)", ),
+  # COEFFLUENCE5
+  Azimut_20deg = SIMP ( statut="o", typ="R", defaut=3.37, 
+                        fr="Fluence à l'azimut 20 (10^19 n/cm2)", ),
+  # COEFFLUENCE6
+  Azimut_25deg = SIMP ( statut="o", typ="R", defaut=3.16, 
+                        fr="Fluence à l'azimut 25 (10^19 n/cm2)", ),
+  # COEFFLUENCE7
+  Azimut_30deg = SIMP ( statut="o", typ="R", defaut=2.74, 
+                        fr="Fluence à l'azimut 30 (10^19 n/cm2)", ),
+  # COEFFLUENCE8
+  Azimut_35deg = SIMP ( statut="o", typ="R", defaut=2.25, 
+                        fr="Fluence à l'azimut 35 (10^19 n/cm2)", ),
+  # COEFFLUENCE9
+  Azimut_40deg = SIMP ( statut="o", typ="R", defaut=1.89, 
+                        fr="Fluence à l'azimut 40 (10^19 n/cm2)", ),
+  # COEFFLUENCE10
+  Azimut_45deg = SIMP ( statut="o", typ="R", defaut=1.78, 
+                        fr="Fluence à l'azimut 45 (10^19 n/cm2)", ),
+
+); # FIN def Coef_Fluence
+
+#================================
+# 1. Definition des OPTIONS
+#================================
+
+OPTIONS = PROC ( nom = "OPTIONS",
+                 op = 68,
+                repetable = 'n',
+                 fr = "Définitions des options", 
+
+#===
+# Liste des paramètres
+#===
+
+  SortieEcran = FACT (statut="o",
+
+    # MESSAGE_LEVEL
+    NiveauImpression   = SIMP (statut="o", typ="TXM", defaut="Temps total",
+                                fr="Niveau d impression a l ecran",
+                                into=( "Aucune impression", # 0
+                                       "Temps total", # 1
+                                      "Temps intermediaires",), # 2
+                               ),
+
+  ), # FIN FACT SortieEcran
+
+  SortieFichier = FACT (statut="o",
+
+    # DATARESUME_FILE
+    FichierDataIn      = SIMP (statut="o", typ="TXM", defaut="NON",
+                                fr="Fichier recapitulatif des donnees d entree : template.IN",
+                                into=( "OUI", "NON",),
+                                ),
+    # TEMPSIG_FILE
+    FichierTempSigma   = SIMP (statut="o", typ="TXM", defaut="NON",
+                                fr="Fichiers de temperature et de contraintes : template.TEMP et template.SIG",
+                                into=( "OUI", "NON",),
+                                ),
+    # RESU_FILE
+    FichierResultats   = SIMP (statut="o", typ="TXM", defaut="NON",
+                                fr="Fichier resultat : template_DEFAILLCUVE",
+                                into=( "OUI", "NON",),
+                                ),
+    # CSV_FILE
+    FichierCSV         = SIMP (statut="o", typ="TXM", defaut="NON",
+                                fr="Fichier resultat au format CSV : template_DEFAILLCUVE.CSV",
+                                into=( "OUI", "NON",),
+                                ),
+    # CREARE_FILE
+    FichierCREARE      = SIMP (statut="o", typ="TXM", defaut="NON",
+                                fr="Fichier Tfluide et coefficients d echange : template.CREA",
+                                into=( "OUI", "NON",),
+                                ),
+
+  ), # FIN FACT SortieFichier
+
+  # GRANDEUR
+  GrandeurEvaluee      = SIMP (statut="o", typ="TXM", defaut="Facteur de marge KIc/KCP",
+                                fr="Grandeur sous critere",
+                                into=( "Facteur de marge KIc/KCP", # FM_KICSURKCP
+                                       "Marge KIc-KI", # MARGE_KI
+                                       "Marge KIc-KCP", ), # MARGE_KCP
+                                ),
+
+  AutresParametres = FACT (statut="o",
+
+    # INCRTPS
+    IncrementTemporel          = SIMP ( statut="o", typ="I", defaut=1, 
+                                      fr="Incrément temporel (=1 pour calcul déterministe)", ),
+    # DTPREC
+    IncrementMaxTemperature    = SIMP ( statut="o", typ="R", val_min=0.1, val_max=1., defaut=0.1, 
+                                     fr="Incrément maximum d'évolution de la température par noeud et par instant (°C)", ),
+    # DTARCH
+    IncrementMaxTempsAffichage = SIMP ( statut="o", typ="R", val_min=0., val_max=1000., defaut=1000., 
+                                     fr="Incrément maximum de temps pour l'affichage (s)", ),
+    # 
+    ListeInstants              = SIMP ( statut="o", typ="R", max="**",
+                                      fr = "Liste des instants pour lesquels la température et les contraintes seront archivés", ),
+
+  ), # FIN FACT AutresParametres
+
+) # Fin PROC OPTIONS
+
+#================================
+# 2. Caracteristiques de la CUVE
+#================================
+
+CUVE = PROC (nom = "CUVE",
+             op = 68,
+            repetable = 'n',
+             fr = "Caractéristiques de la cuve", 
+
+#===
+# Liste des paramètres
+#===
+
+  # TYPEGEOM
+  TraitementGeometrie = SIMP ( statut="o", typ="TXM", defaut="Topologie",
+                               fr="Choix de la définition de la geométrie d'une cuve",
+                              into=( "Topologie", # GEOMETRIE 
+                                       "Maillage"), # MAILLAGE
+                               ),
+
+#====
+# Definition des parametres selon le type de traitement de la geometrie
+#====
+
+  Geometrie = BLOC ( condition = "TraitementGeometrie=='Topologie'",
+
+    # RINT
+    RayonInterne        = SIMP ( statut="o", typ="R", val_min=0.,  defaut=1.994, 
+                                 fr="Rayon interne de la cuve (en m)", ),
+    # RINT_MESSAGE
+    RayonInterne_mess   = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                 fr="Affichage ecran du rayon interne de la cuve (en m)",
+                                into=( "NON", "OUI" ), ),
+
+    # DTV : comment preciser que REXT > RINT ?
+    # REXT
+    RayonExterne        = SIMP ( statut="o", typ="R", defaut=2.2015, 
+                                 fr="Rayon externe de la cuve (en m)", ),
+    # REXT_MESSAGE
+    RayonExterne_mess   = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                 fr="Affichage ecran du rayon externe de la cuve (en m)",
+                                into=( "NON", "OUI" ), ),
+
+    # DTV : comment preciser que LREV < RINT ?
+    # LREV
+    EpaisseurRevetement = SIMP ( statut="o", typ="R", defaut=0.0075, 
+                                 fr="Epaisseur du revêtement (m)", ),
+    # LREV_MESSAGE
+    EpaisseurRevetement_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de l'epaisseur du revêtement (m)",
+                                     into=( "NON", "OUI" ), ),
+
+    # LIGMIN
+    LigamentExterneMin  = SIMP ( statut="o", typ="R", defaut=0.75, 
+                                 fr="Ligament externe minimal avant rupture (% de l'épaisseur de cuve)", ),
+    # LIGMIN_MESSAGE
+    LigamentExterneMin_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran du ligament externe minimal avant rupture (% de l'épaisseur de cuve)",
+                                     into=( "NON", "OUI" ), ),
+
+    # NBNO
+    NombreNoeudsMaillage = SIMP ( statut="o", typ="I", defaut=300, max=1, val_min=1, val_max=1000, 
+                                 fr = "Nombre de noeuds à considérer dans le maillage interne", ),
+  
+  ), # Fin BLOC  Geometrie
+
+  Maillage  = BLOC ( condition = "TraitementGeometrie=='Maillage'",
+
+    # DTV : comment preciser que c'est une suite de liste de nombres croissants ?
+    # Question : NBO depend-il de TYPGEOM ??
+    NombreNoeudsMaillage = SIMP ( statut="o", typ="I", defaut=300, max=1, val_min=1, val_max=1000, 
+                                 fr = "Nombre de noeuds à considérer dans le maillage interne", ),
+  
+    ListeAbscisses       = SIMP ( statut="o", typ="R", max="**",
+                                  fr = "Liste des abscisses", ),
+  ), # Fin BLOC Maillage
+
+) # Fin PROC CUVE
+
+#================================
+# 3. Caracteristiques du DEFAUT
+#================================
+
+DEFAUT = PROC ( nom = "DEFAUT",
+                op = 68,
+               repetable = 'n',
+                fr = "Caractéristiques du défaut", 
+
+#===
+# Liste des paramètres
+#===
+
+# TYPEDEF
+  TypeInitial = SIMP ( statut="o", typ="TXM", defaut="Defaut Sous Revetement",
+                       fr="Type initial du défaut : sous revêtement, decale ou débouchant",
+                       into=( "Defaut Sous Revetement", # DSR
+                             "Defaut Decale", # DECALE
+                              "Defaut Debouchant", ), # DEBOUCHANT
+                       ),
+
+#====
+# Definition des parametres selon le type du defaut
+#====
+
+  SousRevetement = BLOC ( condition = "TypeInitial=='Defaut Sous Revetement'",
+
+    # ORIEDEF into LONGITUD, CIRCONF
+    Orientation              = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+                                     fr="Orientation du défaut",
+                                      into=( "Longitudinale", 
+                                            "Circonferentielle" ), ),
+
+    Profondeur_parametres = FACT (statut="o",
+      # PROFDEF
+      # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+      ProfondeurRadiale        = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006, 
+                                      fr="Profondeur radiale du défaut (m)", ),
+      # PROFDEF_MESSAGE
+      ProfondeurRadiale_mess   = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la profondeur radiale du défaut (m)",
+                                     into=( "NON", "OUI" ), ),
+    ), # Fin FACT Profondeur_parametres
+
+    Longueur_parametres = FACT (statut="o",
+      # OPTLONG into VALEUR, FCTAFFINE
+      ModeCalculLongueur     = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+                                        fr="Option pour caractériser la longueur du défaut : soit par valeur, soit par une fonction affine de la profondeur",
+                                        into = ( "Valeur", "Fonction affine de la profondeur" ), ),
+      Mode_Valeur            = BLOC ( condition = "ModeCalculLongueur=='Valeur'",
+        # LONGDEF
+        Longueur                 = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut = 0.060, 
+                                          fr = "Longueur du défaut sous revêtement (m)", ),
+        # LONGDEF_MESSAGE
+        Longueur_mess            = SIMP ( statut="o", typ="TXM", defaut = "NON", 
+                                          fr = "Affichage ecran de la longueur du défaut sous revêtement (m)",
+                                       into=( "NON", "OUI" ), ),
+      ), # Fin BLOC Mode_Valeur
+      Mode_Fctaffine           = BLOC ( condition = "ModeCalculLongueur=='Fonction affine de la profondeur'",
+        # PROFSURLONG
+        CoefDirecteur     = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=10.,
+                         fr="Inverse a1 du coefficient directeur de la fonction affine l=h/a1 + a0", ),
+        # LONGCONST
+        Constante = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=0.,
+                         fr="constante a0 de la fonction affine l=pente*h + a0", ),
+      ), # Fin BLOC Mode_Fctaffine
+    ), # FIN FACT Longueur_parametres
+
+    Azimut_parametres = FACT (statut="o",
+      # ANGLDEF
+      Azimut                   = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+      # ANGLDEF_MESSAGE
+      Azimut_mess              = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Azimut_parametres
+
+    Altitude_parametres = FACT (statut="o",
+      # ALTIDEF
+      # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+      Altitude                 = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4., 
+                                      fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+      # ALTIDEF_MESSAGE
+      Altitude_mess            = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Altitude_parametres
+
+    # POINDEF
+    Pointe                   = SIMP ( statut="o", typ="TXM", defaut="A", 
+                                      fr="Choix du point considéré du défaut sous revêtement",
+                                      into=( "A", "B", "A et B" ), ),
+
+  ), # Fin BLOC SousRevetement
+
+  Decale = BLOC ( condition = "TypeInitial=='Defaut Decale'",
+
+    # ORIEDEF into LONGITUD, CIRCONF
+    Orientation              = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+                                     fr="Orientation du défaut",
+                                      into=( "Longitudinale", 
+                                            "Circonferentielle" ), ),
+
+    Profondeur_parametres = FACT (statut="o",
+      # PROFDEF
+      # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+      ProfondeurRadiale        = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006, 
+                                      fr="Profondeur radiale du défaut (m)", ),
+      # PROFDEF_MESSAGE
+      ProfondeurRadiale_mess   = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la profondeur radiale du défaut (m)",
+                                     into=( "NON", "OUI" ), ),
+    ), # Fin FACT Profondeur_parametres
+
+    Longueur_parametres = FACT (statut="o",
+
+      # OPTLONG into VALEUR, FCTAFFINE
+      ModeCalculLongueur     = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+                                      fr="Option pour caractériser la longueur du défaut : soit par valeur, soit par une fonction affine de la profondeur",
+                                      into = ( "Valeur", "Fonction affine de la profondeur" ), ),
+
+      Mode_Valeur            = BLOC ( condition = "ModeCalculLongueur=='Valeur'",
+        # LONGDEF
+        Longueur                 = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut = 0.060, 
+                                        fr = "Longueur du défaut sous revêtement (m)", ),
+        # LONGDEF_MESSAGE
+        Longueur_mess            = SIMP ( statut="o", typ="TXM", defaut = "NON", 
+                                        fr = "Affichage ecran de la longueur du défaut décalé (m)",
+                                       into=( "NON", "OUI" ), ),
+      ), # Fin BLOC Mode_Valeur
+
+      Mode_Fctaffine           = BLOC ( condition = "ModeCalculLongueur=='Fonction affine de la profondeur'",
+        # PROFSURLONG
+        CoefDirecteur     = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=10.,
+                         fr="Inverse a1 du coefficient directeur de la fonction affine l=h/a1 + a0", ),
+        # LONGCONST
+        Constante = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=0.,
+                         fr="constante a0 de la fonction affine l=pente*h + a0", ),
+      ), # Fin BLOC Mode_Fctaffine
+
+    ), # FIN FACT Longueur_parametres
+
+   
+    Decalage_parametres = FACT (statut="o",
+
+      # DECATYP into NORMALISE, VALEUR
+      ModeCalculDecalage     = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+                                      fr="Option de definition du decalage radial du defaut : soit par valeur reelle, soit par valeur normalisee",
+                                      into = ( "Valeur", 
+                                              "Valeur normalisee" ), ),
+
+      Mode_Decalage_Valeur   = BLOC ( condition = "ModeCalculDecalage=='Valeur'",
+        # DECADEF
+        DecalageRadial           = SIMP ( statut="o", typ="R", defaut=-0.00001, 
+                                      fr="Décalage radial du defaut sous revêtement (en m)", ),
+        # DECADEF_MESSAGE
+        DecalageRadial_mess      = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran du décalage radial du defaut sous revêtement (en m)",
+                                      into = ( "NON", "OUI" ), ),
+      ), # Fin BLOC Mode_Decalage_Valeur
+
+      Mode_Decalage_Normalisee = BLOC ( condition = "ModeCalculDecalage=='Valeur normalisee'",
+        # DECANOR
+        DecalageNormalise          = SIMP ( statut="o", typ="R", defaut=0.01, 
+                                       fr="Décalage radial normalise du defaut sous revêtement (entre 0. et 1.)", ),
+      ), # Fin BLOC Mode_Decalage_Normalisee
+  
+    ), # Fin FACT Decalage_parametres
+
+    Azimut_parametres = FACT (statut="o",
+      # ANGLDEF
+      Azimut                   = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+      # ANGLDEF_MESSAGE
+      Azimut_mess              = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Azimut_parametres
+
+    Altitude_parametres = FACT (statut="o",
+      # ALTIDEF
+      # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+      Altitude                 = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4., 
+                                      fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+      # ALTIDEF_MESSAGE
+      Altitude_mess            = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Altitude_parametres
+
+    # POINDEF
+    Pointe                   = SIMP ( statut="o", typ="TXM", defaut="A", 
+                                      fr="Choix du point considéré du défaut décalé",
+                                      into=( "A", "B", "A et B" ), ),
+
+  ), # Fin BLOC Decale
+
+  Debouchant = BLOC ( condition = "TypeInitial=='Defaut Debouchant'",
+
+    # ORIEDEF into LONGITUD, CIRCONF
+    Orientation              = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+                                      fr="Orientation du défaut : longitudinale ou circonférentielle",
+                                      into=( "Longitudinale",
+                                            "Circonferentielle" ), ),
+
+    Profondeur_parametres = FACT (statut="o",
+      # PROFDEF
+      # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+      ProfondeurRadiale        = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006, 
+                                      fr="Profondeur radiale du défaut (m)", ),
+      # PROFDEF_MESSAGE
+      ProfondeurRadiale_mess   = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la profondeur radiale du défaut (m)",
+                                     into=( "NON", "OUI" ), ),
+    ), # Fin FACT Profondeur_parametres
+
+    Azimut_parametres = FACT (statut="o",
+      # ANGLDEF
+      Azimut                   = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+      # ANGLDEF_MESSAGE
+      Azimut_mess              = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Azimut_parametres
+
+    Altitude_parametres = FACT (statut="o",
+      # ALTIDEF
+      # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+      Altitude                 = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4., 
+                                      fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+      # ALTIDEF_MESSAGE
+      Altitude_mess            = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Altitude_parametres
+
+  ), # Fin BLOC debouchant
+
+) # Fin PROC DEFAUT
+
+
+#====================================================
+# 4. Modeles de fluence, d'irradiation et de tenacite
+#====================================================
+
+#=======================
+# 4.1 Modeles de fluence
+#=======================
+
+MODELES = PROC ( nom = "MODELES",
+                 op = 68,
+                repetable = 'n',
+                 fr = "Modèles de fluence, d'irradiation et de ténacité", 
+
+
+#===
+# Liste des paramètres
+#===
+
+  Fluence = FACT ( statut="o",
+  
+    # MODELFLUENCE
+    ModeleFluence = SIMP ( statut="o", typ="TXM", defaut="Exponentiel sans revetement k=9.7 (Reglementaire)",
+                           fr="Modèle d'atténuation de la fluence dans l'épaisseur de la cuve",
+                          into=( "Exponentiel sans revetement k=9.7 (Reglementaire)", # Reglementaire
+                                 "Exponentiel sans revetement k=9.7 (Reglementaire CUVE1D)", # Cuve1D
+                                 "Exponentiel sans revetement k=12.7 (France)", # France 
+                                  "Exponentiel sans revetement k=0. (ValeurImposee)", # ValeurImposee 
+                                  "Donnees francaises du palier CPY (SDM)", # SDM 
+                                  "Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)", # GrandeDev 
+                                  "Regulatory Guide 1.99 rev 2 (USNRC)", # USNRC 
+                                  "Dossier 900 MWe AP9701 rev 2 (REV_2)", # REV_2 
+                                  "Lissage du modele ajuste (SDM_Lissage)", # SDM_Lissage 
+                                  "Grand developpement (GD_Cuve)"), # GD_Cuve 
+                         ),
+
+#====
+# Definition des parametres selon le modele de fluence
+#====
+    
+    # H1COEUR
+    ZoneActiveCoeur_AltitudeSup    = SIMP ( statut="o", typ="R", defaut=-3.536, 
+                             fr="Cote supérieure de la zone active de coeur", ),
+    # H2COEUR
+    ZoneActiveCoeur_AltitudeInf    = SIMP ( statut="o", typ="R", defaut=-7.194, 
+                             fr="Cote inférieure de la zone active de coeur", ),
+
+    Reglementaire = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=9.7 (Reglementaire)', ) ",
+      # DTV : comment proposer une liste de valeurs, tout en proposant de fournir d'autres valeurs ?
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+    ), # Fin BLOC Reglementaire
+
+    Cuve1D = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=9.7 (Reglementaire CUVE1D)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC Cuve1D
+
+    France        = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=12.7 (France)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+      # KPFRANCE
+      KPFrance      = SIMP ( statut="o", typ="R", defaut = 12.7,
+                             fr="Paramètre exponentiel du modèle France", ),
+    ), # Fin BLOC France
+
+    ValeurImposee = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=0. (ValeurImposee)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC ValeurImposee
+
+    SDM           = BLOC ( condition = " ModeleFluence in ( 'Donnees francaises du palier CPY (SDM)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC SDM
+
+    USNRC         = BLOC ( condition = " ModeleFluence in ( 'Regulatory Guide 1.99 rev 2 (USNRC)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+      KPUS          = SIMP ( statut="o", typ="R", defaut=9.4488,
+                             fr="Paramètre exponentiel du modèle US", ),
+    ), # Fin BLOC USNRC
+
+    REV_2         = BLOC ( condition = " ModeleFluence in ( 'Dossier 900 MWe AP9701 rev 2 (REV_2)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC REV_2
+
+    SDM_Lissage   = BLOC ( condition = " ModeleFluence in ( 'Lissage du modele ajuste (SDM_Lissage)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+    ), # Fin BLOC SDM_Lissage
+
+    GrandeDev     = BLOC ( condition = " ModeleFluence in ( 'Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+    ), # Fin BLOC GrandeDev
+
+    GD_Cuve       = BLOC ( condition = " ModeleFluence in ( 'Grand developpement (GD_Cuve)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+      Coefficients  = Coef_Fluence(),
+    ), # Fin BLOC GD_Cuve
+
+  ), # Fin FACT Fluence
+
+#==========================
+# 4.2 Modeles d'irradiation
+#==========================
+
+  Irradiation = FACT ( statut="o",
+
+    # TYPEIRR INTO RTNDT, FLUENCE
+    TypeIrradiation = SIMP ( statut = "o", typ = "TXM", defaut="RTndt de la cuve a l instant de l analyse",
+                       fr = "Type d'irradiation",
+                      into = ( "RTndt de la cuve a l instant de l analyse", # RTNDT 
+                               "Modele d irradiation" ), # FLUENCE
+                       ),
+
+#====
+# Definition des parametres selon le type d'irradiation
+#====
+
+    IrradiationParValeur = BLOC ( condition = "TypeIrradiation=='RTndt de la cuve a l instant de l analyse'",
+      RTNDT = SIMP ( statut="o", typ="R", defaut=73., 
+                     fr="RTNDT de la cuve à l'instant de l'analyse (°C)", ),
+
+    ), # Fin BLOC IrradiationParValeur
+
+    IrradiationParModele = BLOC ( condition = "TypeIrradiation=='Modele d irradiation'",
+      # MODELIRR
+      ModeleIrradiation = SIMP ( statut="o", typ="TXM", defaut="Metal de Base : formule de FIM/FIS Houssin",
+                                fr="Modèle d'irradiation pour virole ou joint soudé",
+                               into=( "Metal de Base : formule de FIM/FIS Houssin", # HOUSSIN 
+                                      "Metal de Base : formule de FIM/FIS Persoz", # PERSOZ
+                                      "Metal de Base : formule de FIM/FIS Lefebvre", # LEFEBVRE
+                                      "Metal de Base : Regulatory Guide 1.00 rev 2", # USNRCmdb
+                                      "Joint Soude : formulation de FIM/FIS Brillaud", # BRILLAUD
+                                      "Joint Soude : Regulatory Guide 1.00 rev 2" ), # USNRCsoud
+                                ),
+      Parametres_FIMFIS = BLOC ( condition = " ModeleIrradiation in ( 'Metal de Base : formule de FIM/FIS Houssin' , 'Metal de Base : formule de FIM/FIS Persoz', 'Metal de Base : formule de FIM/FIS Lefebvre', 'Joint Soude : formulation de FIM/FIS Brillaud', ) ",
+        # CU
+        TeneurCuivre         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Teneur en cuivre (%)", ),
+        # CU_MESSAGE
+        TeneurCuivre_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la teneur en cuivre (%)",
+                                     into=( "NON","OUI" ), ),
+        # NI
+        TeneurNickel         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Teneur en nickel (%)", ),
+        # NI_MESSAGE
+        TeneurNickel_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la teneur en nickel (%)",
+                                     into=( "NON","OUI" ), ),
+        # P
+        TeneurPhosphore      = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Teneur en phosphore (%)", ),
+        # P_MESSAGE
+        TeneurPhosphore_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la teneur en phosphore (%)",
+                                     into=( "NON","OUI" ), ),
+        # RTimoy
+        MoyenneRTndt         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)", ),
+        # RTimoy_MESSAGE
+        MoyenneRTndt_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la moyenne de RTNDT",
+                                     into=( "NON","OUI" ), ),
+        # nbectDRTNDT
+        NombreEcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=2., 
+                                      fr="Nombre d'écart-type par rapport à la moyenne de DRTNDT", ),
+        # nbectDRTNDT_MESSAGE
+        NombreEcartTypeRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran du nombre d'écart-type par rapport à la moyenne de DRTNDT",
+                                     into=( "NON","OUI" ), ),
+      ), # Fin BLOC Parametres_FIMFIS
+
+      Parametres_USNRC = BLOC ( condition = " ModeleIrradiation in ( 'Metal de Base : Regulatory Guide 1.00 rev 2' , 'Joint Soude : Regulatory Guide 1.00 rev 2', ) ",
+        # CU
+        TeneurCuivre         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Teneur en cuivre (%)", ),
+        # CU_MESSAGE
+        TeneurCuivre_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la teneur en cuivre (%)",
+                                     into=( "NON","OUI" ), ),
+        # NI
+        TeneurNickel         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Teneur en nickel (%)", ),
+        # NI_MESSAGE
+        TeneurNickel_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la teneur en nickel (%)",
+                                     into=( "NON","OUI" ), ),
+        # RTimoy
+        MoyenneRTndt         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)", ),
+        # RTimoy_MESSAGE
+        MoyenneRTndt_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la moyenne de RTNDT",
+                                     into=( "NON","OUI" ), ),
+        # RTicov
+        CoefVariationRTndt   = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Coefficient de variation de la RTNDT initiale", ),
+        # RTicov_MESSAGE
+        CoefVariationRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                         fr="Affichage ecran du coefficient de variation de la RTNDT initiale",
+                                        into=( "NON","OUI" ), ),
+        # USectDRT
+        EcartTypeRTndt       = SIMP ( statut="o", typ="R", defaut=28., 
+                                      fr="Ecart-type du décalage de RTNDT (°F) (28. pour js et 17. pour mdb)", ),
+        # nbectDRTNDT
+        NombreEcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=2., 
+                                      fr="Nombre d'écart-type par rapport à la moyenne de DRTNDT", ),
+        # nbectDRTNDT_MESSAGE
+        NombreEcartTypeRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran du nombre d'écart-type par rapport à la moyenne de DRTNDT",
+                                     into=( "NON","OUI" ), ),
+      ), # Fin BLOC Parametres_USNRC 
+
+    ), # Fin BLOC IrradiationParModele
+
+  ), # Fin FACT Irradiation
+
+#========================
+# 4.3 Modeles de tenacite
+#========================
+
+  Tenacite = FACT ( statut = "o",
+
+    # MODELKIC
+    ModeleTenacite = SIMP ( statut="o", typ="TXM", defaut="RCC-M/ASME coefficient=2",
+                    fr="Modèle de calcul de la ténacité à l'amorçage KIc", 
+                   into=( "RCC-M/ASME coefficient=2", # RCC-M
+                          "RCC-M/ASME coefficient=2 CUVE1D", # RCC-M_simpl
+                          "RCC-M/ASME coefficient=2.33 (Houssin)", # Houssin_RC
+                          "RCC-M/ASME avec KI=KIpalier", # RCC-M_pal
+                          "RCC-M/ASME avec KI~exponentiel", # RCC-M_exp
+                          "Weibull basee sur la master cuve", # Wallin
+                          "Weibull basee sur la master cuve (REME)", # REME
+                          "Weibull n°1 (etude ORNL)", # ORNL
+                          "Weibull n°2", # WEIB2
+                          "Weibull n°3", # WEIB3
+                          "Weibull generalisee", # WEIB_GEN
+                          "Exponentielle n°1 (Frama)", # Frama
+                          "Exponentielle n°2 (LOGWOLF)" ), # LOGWOLF
+                   ),
+
+
+#====
+# Definition des parametres selon le modele de tenacité
+#====
+
+# Modeles type RCC-M
+
+    KIc_RCCM = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME coefficient=2', 'RCC-M/ASME coefficient=2.33 (Houssin)', 'RCC-M/ASME avec KI=KIpalier', ) ",
+
+      # nbectKIc
+      NbEcartType_MoyKIc       = SIMP ( statut="o", typ="R", defaut=-2., 
+                                        fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+      # nbectKIc_MESSAGE
+      NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                        fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                       into = ( "NON","OUI" ), ),
+
+      # KICPAL
+      PalierDuctile_KIc        = SIMP ( statut="o", typ="R", defaut=195., 
+                                        fr="Palier déterministe de K1c ou valeur du palier ductile plafonnant la courbe (en MPa(m^0.5)) ", ),
+
+      # KICCDV
+      CoefficientVariation_KIc = SIMP ( statut="o", typ="R", defaut = 0.15, 
+                                        fr = "Coefficient de variation de la loi normale de K1c ", ),
+
+    ), # Fin BLOC KIc_RCCM
+
+    KIc_RCCM_exp = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME avec KI~exponentiel', ) ",
+
+      # nbectKIc
+      NbEcartType_MoyKIc       = SIMP ( statut="o", typ="R", defaut=-2., 
+                                        fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+      # nbectKIc_MESSAGE
+      NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                        fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                       into = ( "NON","OUI" ), ),
+
+      # KICCDV
+      CoefficientVariation_KIc = SIMP ( statut="o", typ="R", defaut = 0.15, 
+                                        fr = "Coefficient de variation de la loi normale de K1c ", ),
+
+    ), # Fin BLOC KIc_RCCM_exp
+
+# Modeles type exponentiel (Frama, LOGWOLF)
+
+    KIc_Exponentielle = BLOC ( condition = " ModeleTenacite in ( 'Exponentielle n°1 (Frama)', 'Exponentielle n°2 (LOGWOLF)', ) ",
+
+      # nbectKIc
+      NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2., 
+                                  fr="Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+      # nbectKIc_MESSAGE
+      NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                        fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                       into = ( "NON","OUI" ), ),
+
+    ), # Fin BLOC KIc_Exponentielle
+
+# Modeles type Weibull
+
+    KIc_Weibull = BLOC ( condition = " ModeleTenacite in ( 'Weibull basee sur la master cuve (REME)', 'Weibull n°1 (etude ORNL)', 'Weibull n°2', 'Weibull n°3', ) ",
+      # NBCARAC
+      NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE", 
+                                        fr="Nombre caracteristique : ORDRE ou QUANTILE",
+                                        into=( "ORDRE", "QUANTILE" ), ),
+
+      ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+        # nbectKIc
+        NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2., 
+                                    fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+        # nbectKIc_MESSAGE
+        NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                          fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                          into = ( "NON","OUI" ), ),
+      ), # Fin BLOC ORDRE 
+
+      QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+        # fractKIc
+        Fractile_KIc       = SIMP ( statut="o", typ="R", defaut=5., 
+                                  fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+        # fractKIc_MESSAGE
+        Fractile_KIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                    fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+                                    into = ( "NON","OUI" ), ),
+      ), # Fin BLOC ORDRE 
+
+    ), # Fin BLOC KIc_Weibull
+
+    KIc_MasterCuve = BLOC ( condition = " ModeleTenacite in ( 'Weibull basee sur la master cuve', ) ",
+      # NBCARAC
+      NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE", 
+                                        fr="Nombre caracteristique : ORDRE ou QUANTILE",
+                                        into=( "ORDRE", "QUANTILE" ), ),
+
+      ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+        # nbectKIc
+        NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2., 
+                                    fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+        # nbectKIc_MESSAGE
+        NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                          fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                          into = ( "NON","OUI" ), ),
+      ), # Fin BLOC ORDRE 
+
+      QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+        # fractKIc
+        Fractile_KIc       = SIMP ( statut="o", typ="R", defaut=5., 
+                                  fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+        # fractKIc_MESSAGE
+        Fractile_KIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                    fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+                                    into = ( "NON","OUI" ), ),
+      ), # Fin BLOC ORDRE 
+
+      # T0WALLIN
+      Temperature_KIc100 = SIMP ( statut="o", typ="I", defaut=-27, 
+                                  fr="Paramètre T0 du modèle Wallin (°C) : température pour laquelle la téncité du matériau vaut en moyenne 100MPa.m^5", ),
+
+    ), # Fin BLOC KIc_MasterCuve
+
+    Weibull_Generalisee = BLOC ( condition = " ModeleTenacite in ( 'Weibull generalisee',) ",
+      # NBCARAC
+      NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE", 
+                                        fr="Nombre caracteristique : ORDRE ou QUANTILE",
+                                        into=( "ORDRE", "QUANTILE" ), ),
+
+      ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+        # nbectKIc
+        NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2., 
+                                    fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+        # nbectKIc_MESSAGE
+        NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                          fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                          into = ( "NON","OUI" ), ),
+      ), # Fin BLOC ORDRE 
+
+      QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+        # fractKIc
+        Fractile_KIc       = SIMP ( statut="o", typ="R", defaut=5., 
+                                  fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+        # fractKIc_MESSAGE
+        Fractile_KIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                    fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+                                    into = ( "NON","OUI" ), ),
+      ), # Fin BLOC ORDRE 
+
+      Coefficients       = Coef_WeibGen(),
+
+    ), # Fin BLOC Weibull_Generalisee
+
+    # ATTNCORRBETA - CORRIRWIN
+    CorrectionPlastique  = SIMP ( statut="o", typ="TXM", defaut="Correction plastique BETA (pour DSR et defaut decale)", 
+                                  fr="Correction plastique dans le calcul du facteur d'intensité de contraintes",
+                                  into=( "Correction plastique BETA (pour DSR et defaut decale)", # ATTNCORRBETA = NON
+                                         "Correction plastique BETA attenuee (pour DSR et défaut decale)", # ATTNCORRBETA = OUI
+                                        "Correction plastique IRWIN (pour defaut debouchant)" ), ), # CORRIRWIN = OUI
+
+    Fissure = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME coefficient=2', 'RCC-M/ASME coefficient=2.33 (Houssin)', 'RCC-M/ASME avec KI=KIpalier', 'RCC-M/ASME avec KI~exponentiel', )",
+
+      # ARRETFISSURE
+      ArretDeFissure = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                              fr="Prise en compte de l'arrêt de fissure",
+                              into=( "OUI", "NON" ), ),
+
+      KIa_RCCM = BLOC ( condition = "ArretDeFissure=='OUI'",
+        # INCRDEF
+        IncrementTailleFissure   = SIMP ( statut="o", typ="R", defaut=0.005, 
+                                          fr="Incrément de la taille de fissure pour la propagation (en m)", ),
+        # INCRDEF_MESSAGE
+        IncrementTailleFissure_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                             fr="Affichage ecran de l incrément de la taille de fissure pour la propagation (en m)",
+                                            into = ("NON", "OUI"), ),
+
+        # nbectKIa
+        NbEcartType_MoyKIa       = SIMP ( statut="o", typ="R", defaut=-2., 
+                                          fr="Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ", ),
+
+        # KIAPAL
+        PalierDuctile_KIa        = SIMP ( statut="o", typ="R", defaut=195., 
+                                          fr="Palier déterministe de K1a -ténacite à l'arrêt- (en MPa(m^0.5)) ", ),
+        # KIACDV
+        CoefficientVariation_KIa = SIMP ( statut="o", typ="R", defaut=0.10, 
+                                          fr="Coefficient de variation de la loi normale de K1a -ténacite à l'arrêt- ", ),
+
+      ), # Fin BLOC KIa_RCCM
+
+    ), # Fin BLOC Fissure
+
+  ), # Fin FACT Tenacite
+
+) # Fin PROC MODELES
+
+
+#==================
+# 5. Initialisation
+#==================
+
+INITIALISATION = PROC ( nom = "INITIALISATION",
+                        op = 68,
+                       repetable = 'n',
+                        fr = "Initialisation : instant initial, profils radiaux de température et contraintes", 
+
+  TemperatureInitiale = FACT ( statut = "o",
+
+    ProfilRadial_TemperatureInitiale = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                              fr="Profil radial de la température initiale dans la cuve (en m : °C) ", ),
+    Amont_TemperatureInitiale        = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                              fr="Prolongation à la frontière amont",
+                                              into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_TemperatureInitiale         = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                              fr="Prolongation à la frontière aval",
+                                              into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT TemperatureInitiale
+
+  ContraintesInitiales = FACT ( statut = "o",
+
+    ProfilRadial_ContraintesInitiales = SIMP ( statut="o", typ=Tuple(4), max="**",
+                                               fr="Profil radial des contraintes radiale, circonférentielle et longitudinale dans la cuve (en m : xx : xx : xx) ", ),
+    Amont_ContraintesInitiales        = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                               fr="Prolongation à la frontière amont",
+                                               into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ContraintesInitiales         = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                               fr="Prolongation à la frontière aval",
+                                               into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ContraintesInitiales
+
+  # INSTINIT
+  InstantInitialisation = SIMP ( statut="o", typ="R", defaut = -1., 
+                                 fr="Instant initial auquel sont définies la température, ainsi que les contraintes initiales (en s) ", ),
+
+) # Fin PROC INITIALISATION
+
+
+#==================================
+# 6. CARACTERISTIQUES DU REVETEMENT
+#==================================
+
+REVETEMENT = PROC ( nom = "REVETEMENT",
+                    op = 68,
+                   repetable = 'n',
+                    fr = "Caracteristiques du revêtement", 
+
+  # KTHREV
+  ConditionLimiteThermiqueREV = SIMP ( statut="o", typ="TXM", defaut="CHALEUR",
+                                       fr="Option pour définir les caractéristiques du revêtement ",
+                                       into=( "ENTHALPIE", "CHALEUR",),
+                                       ),
+
+  EnthalpieREV = BLOC ( condition = "ConditionLimiteThermiqueREV=='ENTHALPIE'",
+
+    EnthalpieREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                          fr="Température (°C) / enthalpie massique  (J/kg) ", ),
+    Amont_EnthalpieREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                          fr="Prolongation à la frontière amont",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_EnthalpieREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                          fr="Prolongation à la frontière aval",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC EnthalpieREV
+
+
+  ChaleurREV = BLOC ( condition = "ConditionLimiteThermiqueREV=='CHALEUR'",
+
+    ChaleurREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                        fr="Température (°C) / chaleur volumique (J/kg/K) ", ),
+    Amont_ChaleurREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                        fr="Prolongation à la frontière amont",
+                                        into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ChaleurREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                        fr="Prolongation à la frontière aval",
+                                        into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC ChaleurREV
+
+  ConductiviteREV = FACT (statut = "o",
+
+    ConductiviteREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                             fr="Température (°C) / conductivité thermique (W/m/°C) ", ),
+    Amont_ConductiviteREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                             fr="Prolongation à la frontière amont",
+                                             into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ConductiviteREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                             fr="Prolongation à la frontière aval",
+                                             into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ConductiviteREV
+
+  ModuleYoungREV = FACT (statut = "o",
+
+    ModuleYoungREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                            fr="Température (°C) / module d'Young (MPa) ", ),
+    Amont_ModuleYoungREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                            fr="Prolongation à la frontière amont",
+                                            into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ModuleYoungREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                            fr="Prolongation à la frontière aval",
+                                            into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ModuleYoungREV
+
+  CoeffDilatThermREV = FACT (statut = "o",
+
+    CoeffDilatThermREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                fr="Température (°C) / coefficient de dilatation thermique (°C-1) ", ),
+    Amont_CoeffDilatThermREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                fr="Prolongation à la frontière amont",
+                                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_CoeffDilatThermREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                fr="Prolongation à la frontière aval",
+                                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT CoeffDilatThermREV
+
+  LimiteElasticiteREV = FACT (statut = "o",
+
+    LimiteElasticiteREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                 fr="Température (°C) / limite d'élasticite (MPa) ", ),
+    Amont_LimiteElasticiteREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                 fr="Prolongation à la frontière amont",
+                                                 into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_LimiteElasticiteREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                 fr="Prolongation à la frontière aval",
+                                                 into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT LimiteElasticiteREV
+
+  AutresParametresREV = FACT (statut = "o",
+
+    # TREFREV
+    TemperatureDeformationNulleREV   = SIMP ( statut="o", typ="R", defaut=20.,
+                                              fr="Température de référence pour laquelle les déformations thermiques sont nulles (°C) ", ),
+    # TDETREV
+    TemperaturePourCoefDilatThermREV = SIMP ( statut="o", typ="R", defaut=287.,
+                                              fr="Température de définition du coefficient de dilatation thermique (°C) ", ),
+    # NUREV
+    CoefficientPoissonREV            = SIMP ( statut="o", typ="R", defaut=0.3,
+                                              fr="Coefficient de Poisson ", ),
+
+  ), # Fin FACT AutresParametresREV
+
+) # Fin PROC REVETEMENT
+
+
+#=====================================
+# 7. CARACTERISTIQUES DU METAL DE BASE
+#=====================================
+
+METAL_BASE = PROC ( nom = "METAL_BASE",
+                    op = 68,
+                   repetable = 'n',
+                    fr = "Caracteristiques du metal de base", 
+
+  # KTHMDB
+  ConditionLimiteThermiqueMDB = SIMP ( statut="o", typ="TXM", defaut="CHALEUR",
+                                       fr="Option pour definir les caractéristiques du revêtement ",
+                                       into=( "ENTHALPIE", "CHALEUR",), ),
+
+  EnthalpieMDB = BLOC ( condition = "ConditionLimiteThermiqueMDB=='ENTHALPIE'",
+
+    EnthalpieMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                          fr="Température (°C) / enthalpie massique (J/kg) ", ),
+    Amont_EnthalpieMDB           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                          fr="Prolongation à la frontière amont",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_EnthalpieMDB            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                          fr="Prolongation à la frontière aval",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC EnthalpieMDB
+
+  ChaleurMDB = BLOC ( condition = "ConditionLimiteThermiqueMDB=='CHALEUR'",
+
+    ChaleurMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                        fr="Température (°C) / chaleur volumique (J/kg/K) ", ),
+    Amont_ChaleurMDB           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                        fr="Prolongation à la frontière amont",
+                                        into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ChaleurMDB            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                        fr="Prolongation à la frontière aval",
+                                        into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC ChaleurMDB
+
+  ConductiviteMDB = FACT ( statut = "o",
+
+    ConductiviteMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                             fr="Température (°C) / conductivité thermique (W/m/°C) ", ),
+    Amont_ConductiviteMDB           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                             fr="Prolongation à la frontière amont",
+                                             into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ConductiviteMDB            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                             fr="Prolongation à la frontière aval",
+                                             into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ConductiviteMDB
+
+  ModuleYoungMDB = FACT ( statut="o",
+
+    ModuleYoungMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                            fr="Température (°C) / module d'Young (MPa) ", ),
+    Amont_ModuleYoungMDB           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                            fr="Prolongation à la frontière amont",
+                                            into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ModuleYoungMDB            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                            fr="Prolongation à la frontière aval",
+                                            into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ModuleYoungMDB
+
+  CoeffDilatThermMDB = FACT ( statut="o",
+
+    CoeffDilatThermMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                fr="Température (°C) / coefficient de dilatation thermique (°C-1) ", ),
+    Amont_CoeffDilatThermMDB           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                fr="Prolongation à la frontière amont",
+                                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_CoeffDilatThermMDB            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                fr="Prolongation à la frontière aval",
+                                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT CoeffDilatThermMDB
+
+  AutresParametresMDB = FACT ( statut = "o",
+
+    # TREFMDB
+    TemperatureDeformationNulleMDB   = SIMP ( statut="o", typ="R", defaut=20.,
+                                              fr="Température de référence pour laquelle les déformations thermiques sont nulles (°C) ", ),
+    # TDETMDB
+    TemperaturePourCoefDilatThermMDB = SIMP ( statut="o", typ="R", defaut=287.,
+                                              fr="Température de définition du coefficient de dilatation thermique (°C) ", ),
+    # NUMDB
+    CoefficientPoissonMDB            = SIMP ( statut="o", typ="R", defaut=0.3,
+                                              fr="Coefficient de Poisson ", ),
+
+  ), # Fin FACT TemperatureDeformationNulleMDB
+
+) # Fin PROC METAL_BASE
+
+
+#===============================
+# 8. TRANSITOIRE THERMOMECANIQUE
+#===============================
+
+TRANSITOIRE = PROC ( nom = "TRANSITOIRE",
+                     op = 68,
+                    repetable = 'n',
+                     fr = "Description du transitoire thermohydraulique", 
+
+  Pression = FACT ( statut = "o",
+
+    ProfilTemporel_Pression = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                     fr = "Instant (s) / pression (MPa) ", ),
+    Amont_Pression          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                     fr="Prolongation à la frontière amont",
+                                     into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_Pression           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                     fr="Prolongation à la frontière aval",
+                                     into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # FIN FACT Pression
+
+
+  CL_thermique = FACT ( statut = "o",
+
+    # TYPCLTH
+    TypeConditionLimiteThermique = SIMP ( statut="o", typ="TXM",
+                                         fr="Type de condition thermique en paroi interne ",
+                                         into=( "Temperature imposee en paroi", # TEMP_IMPO
+                                               "Flux de chaleur impose en paroi", # FLUX_REP
+                                               "Temperature imposee du fluide et coefficient echange", # ECHANGE
+                                               "Debit massique et temperature d injection de securite", # DEBIT
+                                               "Temperature imposee du fluide et debit d injection de securite", # TEMP_FLU
+                                               "Courbe APRP"), # APRP
+                                        ),
+
+    APRP = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Courbe APRP', ) ",
+
+      # INSTANT1
+      Instant_1              = SIMP ( statut="o", typ="R", defaut=21.,
+                                    fr="Palier 2 à T1 : borne inférieure (en s) ", ),
+      # INSTANT2
+      Instant_2              = SIMP ( statut="o", typ="R", defaut=45.,
+                                      fr="Palier 2 à T1 : borne supérieure (en s) ", ),
+      # QACCU
+      DebitAccumule          = SIMP ( statut="o", typ="R", defaut=2.3,
+                                      fr="Debit accumule (en m3/h) ", ),
+      # QIS
+      DebitInjectionSecurite = SIMP ( statut="o", typ="R", defaut=0.375,
+                                      fr="Debit injection securite (en m3/h) ", ),
+      # TIS_MESSAGE
+      TempInjectionSecurite_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                      fr="Affichage ecran de la temperature injection securite",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin BLOC APRP
+
+    TemperatureImposeeFluide     = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee en paroi','Temperature imposee du fluide et coefficient echange', 'Temperature imposee du fluide et debit d injection de securite', 'Courbe APRP' ) ",
+
+      ProfilTemporel_TemperatureImposeeFluide = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                       fr = "Instant (s) / Température imposée (°C) ", ),
+      Amont_TemperatureImposeeFluide          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                       fr="Prolongation à la frontière amont",
+                                                       into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_TemperatureImposeeFluide           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                       fr="Prolongation à la frontière aval",
+                                                       into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+    ), # Fin BLOC TemperatureImposeeFluide
+
+    FluxChaleur                  = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Flux de chaleur impose en paroi', ) ",
+
+      ProfilTemporel_FluxChaleur    = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                          fr="Instant (s) / Flux de chaleur impose (W/m2) ", ),
+      Amont_FluxChaleur             = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                           fr="Prolongation à la frontière amont",
+                                           into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_FluxChaleur              = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                           fr="Prolongation à la frontière aval",
+                                           into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+    ), # Fin BLOC FluxChaleur
+
+    CoefficientEchange          = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et coefficient echange', ) ",
+
+      ProfilTemporel_CoefficientEchange = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                               fr="Instant (s) / Coefficient d'échange (W/m2/K) ", ),
+      Amont_CoefficientEchange          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                               fr="Prolongation à la frontière amont",
+                                               into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_CoefficientEchange           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                               fr="Prolongation à la frontière aval",
+                                               into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+    ), # Fin BLOC CoefficientEchange
+
+    DebitMassique               = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+      ProfilTemporel_DebitMassique = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                          fr="Instant (s) / Débit massique (kg/s) ", ),
+      Amont_DebitMassique          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                          fr="Prolongation à la frontière amont",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_DebitMassique = SIMP ( statut="o", typ="TXM",
+                                fr="Prolongation à la frontière aval", defaut="Continu",
+                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+    ), # Fin BLOC DebitMassique
+
+    TemperatureInjection        = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+      ProfilTemporel_TemperatureInjection = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                 fr="Instant (s) / Température d'injection de sécurité  (°C) ", ),
+      Amont_TemperatureInjection          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                 fr="Prolongation à la frontière amont",
+                                                 into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_TemperatureInjection           = SIMP ( statut="o", typ = "TXM", defaut="Continu",
+                                                 fr="Prolongation à la frontière aval",
+                                                 into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    ), # Fin BLOC TemperatureInjection
+
+    DebitInjection              = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', 'Courbe APRP', ) ",
+
+      ProfilTemporel_DebitInjection = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                           fr="Instant (s) / Débit d'injection de sécurité (kg/s) ", ),
+      Amont_DebitInjection          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                           fr="Prolongation à la frontière amont",
+                                           into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_DebitInjection           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                           fr="Prolongation à la frontière aval",
+                                           into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+    ), # Fin BLOC DebitInjection
+
+    Vestale = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', 'Debit massique et temperature d injection de securite', 'Courbe APRP', ) ",
+
+      # DH
+      DiametreHydraulique             = SIMP ( statut="o", typ="R", defaut=0.3816,
+                                             fr="Diamètre hydraulique (m) ", ),
+      # DH_MESSAGE
+      DiametreHydraulique_mess        = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                             fr="Affichage ecran du diamètre hydraulique (m) ",
+                                            into = ( "NON", "OUI" ), ),
+      # SECTION
+      SectionEspaceAnnulaire          = SIMP ( statut="o", typ="R", defaut=0.21712,
+                                             fr="Section espace annulaire (m2) ", ),
+      # SECTION_MESSAGE
+      SectionEspaceAnnulaire_mess     = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                             fr="Affichage ecran de la section espace annulaire (m2) ",
+                                            into = ( "NON", "OUI" ), ),
+      # DELTA
+      HauteurCaracConvectionNaturelle = SIMP ( statut="o", typ="R", defaut=6.,
+                                             fr="Hauteur caractéristique convection naturelle (m) ", ),
+      # DELTA_MESSAGE
+      HauteurCaracConvectionNaturelle_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                                  fr="Affichage ecran de la hauteur caractéristique convection naturelle (m) ",
+                                                 into = ( "NON", "OUI" ), ),
+      # EPS
+      CritereConvergenceRelative      = SIMP ( statut="o", typ="R", defaut=0.00001,
+                                             fr="Critère convergence relative (-) ", ),
+      # COEFVESTALE
+      CoefficientsVestale             = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                             fr="Application des coefficients de Vestale", 
+                                             into=( 'OUI', 'NON' ), ),
+
+    ), # Fin BLOC Vestale
+
+    Creare = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+      # VM
+      VolumeMelange_CREARE           = SIMP ( statut="o", typ="R", defaut=14.9,
+                                            fr = "Volume de mélange CREARE (m3) ", ),
+      # VM_MESSAGE
+      VolumeMelange_CREARE_mess      = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                            fr = "Affichage ecran du volume de mélange CREARE (m3) ",
+                                             into=( 'OUI', 'NON' ), ),
+      # T0
+      TemperatureInitiale_CREARE     = SIMP ( statut="o", typ="R", defaut=250.,
+                                            fr="Température initiale CREARE (°C) ", ),
+      # T0_MESSAGE
+      TemperatureInitiale_CREARE_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                             fr="Affichage ecran de la température initiale CREARE (°C) ",
+                                             into=( 'OUI', 'NON' ), ),
+      # SE
+      SurfaceEchange_FluideStructure = SIMP ( statut="o", typ="R", defaut=0.,
+                                            fr="Surface d'échange fluide/structure (m2) ", ),
+      # SE_MESSAGE
+      SurfaceEchange_FluideStructure_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                                 fr="Affichage ecran de la surface d'échange fluide/structure (m2) ",
+                                                 into=( 'OUI', 'NON' ), ),
+
+    ), # Fin BLOC Creare
+
+  ), # FIN FACT CL_thermique
+
+) # Fin PROC TRANSITOIRE
diff --git a/Cuve2dg/DefaillCUVE_Cata.py_V2 b/Cuve2dg/DefaillCUVE_Cata.py_V2
new file mode 100644 (file)
index 0000000..6ba33e5
--- /dev/null
@@ -0,0 +1,1427 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# Definition de variables sous forme de tuple
+# --------------------------------------------------
+
+import types
+class Tuple:
+  def __init__(self,ntuple):
+    self.ntuple=ntuple
+
+  def __convert__(self,valeur):
+    if type(valeur) == types.StringType:
+      return None
+    if len(valeur) != self.ntuple:
+      return None
+    return valeur
+
+  def info(self):
+    return "Tuple de %s elements" % self.ntuple
+
+  __repr__=info
+  __str__=info
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'CUVE1D-DEFAILLGLOB',
+                 execmodul = None,
+                 regles = ( AU_MOINS_UN ('OPTIONS'),
+                           AU_MOINS_UN ('INITIALISATION'),
+                           AU_MOINS_UN ('REVETEMENT'),
+                           AU_MOINS_UN ('METAL_BASE'),
+                           AU_MOINS_UN ('TRANSITOIRE'),
+                          )
+                 ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+# --------------------------------------------------
+# RESPONSABLE D. THAI VAN
+# Ce fichier contient la liste des coefficients pour un
+# modele de Weibull generalise
+def Coef_WeibGen() : return FACT(statut='o',min=1,max='**',
+
+  # A1
+  A1 = SIMP ( statut="o", typ="R", defaut=21.263, 
+              fr="coef du coef a(T) d'une Weibull générale", ),
+  # A2
+  A2 = SIMP ( statut="o", typ="R", defaut=9.159, 
+              fr="coef du coef a(T) d'une Weibull générale", ),
+  # A3
+  A3 = SIMP ( statut="o", typ="R", defaut=0.04057, 
+              fr="coef du coef a(T) d'une Weibull générale", ),
+  # B1
+  B1 = SIMP ( statut="o", typ="R", defaut=17.153, 
+              fr="coef du coef b(T) d'une Weibull générale", ),
+  # B2
+  B2 = SIMP ( statut="o", typ="R", defaut=55.089, 
+              fr="coef du coef b(T) d'une Weibull générale", ),
+  # B3
+  B3 = SIMP ( statut="o", typ="R", defaut=0.0144, 
+              fr="coef du coef b(T) d'une Weibull générale", ),
+  # C1
+  C1 = SIMP ( statut="o", typ="R", defaut=4., 
+              fr="coef du coef c(T) d'une Weibull générale", ),
+  # C2
+  C2 = SIMP ( statut="o", typ="R", defaut=0., 
+              fr="coef du coef c(T) d'une Weibull générale", ),
+  # C3
+  C3 = SIMP ( statut="o", typ="R", defaut=0., 
+              fr="coef du coef c(T) d'une Weibull générale", ),
+
+); # FIN def Coef_WeibGen
+
+
+# --------------------------------------------------
+# RESPONSABLE D. THAI VAN
+# Ce fichier contient la liste des coefficients 
+def Coef_Fluence() : return FACT(statut='o',min=1,max='**',
+
+  # COEFFLUENCE1
+  Azimut_0deg  = SIMP ( statut="o", typ="R", defaut=5.8, 
+                        fr="Fluence à l'azimut 0 (10^19 n/cm2)", ),
+  # COEFFLUENCE2
+  Azimut_5deg  = SIMP ( statut="o", typ="R", defaut=5.48, 
+                        fr="Fluence à l'azimut 5 (10^19 n/cm2)", ),
+  # COEFFLUENCE3
+  Azimut_10deg = SIMP ( statut="o", typ="R", defaut=4.46, 
+                        fr="Fluence à l'azimut 10 (10^19 n/cm2)", ),
+  # COEFFLUENCE4
+  Azimut_15deg = SIMP ( statut="o", typ="R", defaut=3.41, 
+                        fr="Fluence à l'azimut 15 (10^19 n/cm2)", ),
+  # COEFFLUENCE5
+  Azimut_20deg = SIMP ( statut="o", typ="R", defaut=3.37, 
+                        fr="Fluence à l'azimut 20 (10^19 n/cm2)", ),
+  # COEFFLUENCE6
+  Azimut_25deg = SIMP ( statut="o", typ="R", defaut=3.16, 
+                        fr="Fluence à l'azimut 25 (10^19 n/cm2)", ),
+  # COEFFLUENCE7
+  Azimut_30deg = SIMP ( statut="o", typ="R", defaut=2.74, 
+                        fr="Fluence à l'azimut 30 (10^19 n/cm2)", ),
+  # COEFFLUENCE8
+  Azimut_35deg = SIMP ( statut="o", typ="R", defaut=2.25, 
+                        fr="Fluence à l'azimut 35 (10^19 n/cm2)", ),
+  # COEFFLUENCE9
+  Azimut_40deg = SIMP ( statut="o", typ="R", defaut=1.89, 
+                        fr="Fluence à l'azimut 40 (10^19 n/cm2)", ),
+  # COEFFLUENCE10
+  Azimut_45deg = SIMP ( statut="o", typ="R", defaut=1.78, 
+                        fr="Fluence à l'azimut 45 (10^19 n/cm2)", ),
+
+); # FIN def Coef_Fluence
+
+#================================
+# 1. Definition des OPTIONS
+#================================
+
+OPTIONS = PROC ( nom = "OPTIONS",
+                 op = 68,
+                repetable = 'n',
+                 fr = "Définitions des options", 
+
+#===
+# Liste des paramètres
+#===
+
+  SortieEcran = FACT (statut="o",
+
+    # MESSAGE_LEVEL
+    NiveauImpression   = SIMP (statut="o", typ="TXM", defaut="Temps total",
+                                fr="Niveau d impression a l ecran",
+                                into=( "Aucune impression", # 0
+                                       "Temps total", # 1
+                                      "Temps intermediaires",), # 2
+                               ),
+
+  ), # FIN FACT SortieEcran
+
+  SortieFichier = FACT (statut="o",
+
+    # DATARESUME_FILE
+    FichierDataIn      = SIMP (statut="o", typ="TXM", defaut="NON",
+                                fr="Fichier recapitulatif des donnees d entree : template.IN",
+                                into=( "OUI", "NON",),
+                                ),
+    # TEMPSIG_FILE
+    FichierTempSigma   = SIMP (statut="o", typ="TXM", defaut="NON",
+                                fr="Fichiers de temperature et de contraintes : template.TEMP et template.SIG",
+                                into=( "OUI", "NON",),
+                                ),
+    # RESU_FILE
+    FichierResultats   = SIMP (statut="o", typ="TXM", defaut="NON",
+                                fr="Fichier resultat : template_DEFAILLCUVE",
+                                into=( "OUI", "NON",),
+                                ),
+    # CSV_FILE
+    FichierCSV         = SIMP (statut="o", typ="TXM", defaut="NON",
+                                fr="Fichier resultat au format CSV : template_DEFAILLCUVE.CSV",
+                                into=( "OUI", "NON",),
+                                ),
+    # CREARE_FILE
+    FichierCREARE      = SIMP (statut="o", typ="TXM", defaut="NON",
+                                fr="Fichier Tfluide et coefficients d echange : template.CREA",
+                                into=( "OUI", "NON",),
+                                ),
+
+  ), # FIN FACT SortieFichier
+
+  # GRANDEUR
+  GrandeurEvaluee      = SIMP (statut="o", typ="TXM", defaut="Facteur de marge KIc/KCP",
+                                fr="Grandeur sous critere",
+                                into=( "Facteur de marge KIc/KCP", # FM_KICSURKCP
+                                       "Marge KIc-KI", # MARGE_KI
+                                       "Marge KIc-KCP", ), # MARGE_KCP
+                                ),
+
+  AutresParametres = FACT (statut="o",
+
+    # INCRTPS
+    IncrementTemporel          = SIMP ( statut="o", typ="I", defaut=1, 
+                                      fr="Incrément temporel (=1 pour calcul déterministe)", ),
+    # DTPREC
+    IncrementMaxTemperature    = SIMP ( statut="o", typ="R", val_min=0.1, val_max=1., defaut=0.1, 
+                                     fr="Incrément maximum d'évolution de la température par noeud et par instant (°C)", ),
+    # DTARCH
+    IncrementMaxTempsAffichage = SIMP ( statut="o", typ="R", val_min=0., val_max=1000., defaut=1000., 
+                                     fr="Incrément maximum de temps pour l'affichage (s)", ),
+    # 
+    ListeInstants              = SIMP ( statut="o", typ="R", max="**",
+                                      fr = "Liste des instants pour lesquels la température et les contraintes seront archivés", ),
+
+  ), # FIN FACT AutresParametres
+
+) # Fin PROC OPTIONS
+
+#================================
+# 2. Caracteristiques de la CUVE
+#================================
+
+CUVE = PROC (nom = "CUVE",
+             op = 68,
+            repetable = 'n',
+             fr = "Caractéristiques de la cuve", 
+
+#===
+# Liste des paramètres
+#===
+
+  # TYPEGEOM
+  TraitementGeometrie = SIMP ( statut="o", typ="TXM", defaut="Topologie",
+                               fr="Choix de la définition de la geométrie d'une cuve",
+                              into=( "Topologie", # GEOMETRIE 
+                                       "Maillage"), # MAILLAGE
+                               ),
+
+#====
+# Definition des parametres selon le type de traitement de la geometrie
+#====
+
+  Geometrie = BLOC ( condition = "TraitementGeometrie=='Topologie'",
+
+    # RINT
+    RayonInterne        = SIMP ( statut="o", typ="R", val_min=0.,  defaut=1.994, 
+                                 fr="Rayon interne de la cuve (en m)", ),
+    # RINT_MESSAGE
+    RayonInterne_mess   = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                 fr="Affichage ecran du rayon interne de la cuve (en m)",
+                                into=( "NON", "OUI" ), ),
+
+    # DTV : comment preciser que REXT > RINT ?
+    # REXT
+    RayonExterne        = SIMP ( statut="o", typ="R", defaut=2.2015, 
+                                 fr="Rayon externe de la cuve (en m)", ),
+    # REXT_MESSAGE
+    RayonExterne_mess   = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                 fr="Affichage ecran du rayon externe de la cuve (en m)",
+                                into=( "NON", "OUI" ), ),
+
+    # DTV : comment preciser que LREV < RINT ?
+    # LREV
+    EpaisseurRevetement = SIMP ( statut="o", typ="R", defaut=0.0075, 
+                                 fr="Epaisseur du revêtement (m)", ),
+    # LREV_MESSAGE
+    EpaisseurRevetement_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de l'epaisseur du revêtement (m)",
+                                     into=( "NON", "OUI" ), ),
+
+    # LIGMIN
+    LigamentExterneMin  = SIMP ( statut="o", typ="R", defaut=0.75, 
+                                 fr="Ligament externe minimal avant rupture (% de l'épaisseur de cuve)", ),
+    # LIGMIN_MESSAGE
+    LigamentExterneMin_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran du ligament externe minimal avant rupture (% de l'épaisseur de cuve)",
+                                     into=( "NON", "OUI" ), ),
+
+    # NBNO
+    NombreNoeudsMaillage = SIMP ( statut="o", typ="I", defaut=300, max=1, val_min=1, val_max=1000, 
+                                 fr = "Nombre de noeuds à considérer dans le maillage interne", ),
+  
+  ), # Fin BLOC  Geometrie
+
+  Maillage  = BLOC ( condition = "TraitementGeometrie=='Maillage'",
+
+    # DTV : comment preciser que c'est une suite de liste de nombres croissants ?
+    # Question : NBO depend-il de TYPGEOM ??
+    NombreNoeudsMaillage = SIMP ( statut="o", typ="I", defaut=300, max=1, val_min=1, val_max=1000, 
+                                 fr = "Nombre de noeuds à considérer dans le maillage interne", ),
+  
+    ListeAbscisses       = SIMP ( statut="o", typ="R", max="**",
+                                  fr = "Liste des abscisses", ),
+  ), # Fin BLOC Maillage
+
+) # Fin PROC CUVE
+
+#================================
+# 3. Caracteristiques du DEFAUT
+#================================
+
+DEFAUT = PROC ( nom = "DEFAUT",
+                op = 68,
+               repetable = 'n',
+                fr = "Caractéristiques du défaut", 
+
+#===
+# Liste des paramètres
+#===
+
+# TYPEDEF
+  TypeInitial = SIMP ( statut="o", typ="TXM", defaut="Defaut Sous Revetement",
+                       fr="Type initial du défaut : sous revêtement, decale ou débouchant",
+                       into=( "Defaut Sous Revetement", # DSR
+                             "Defaut Decale", # DECALE
+                              "Defaut Debouchant", ), # DEBOUCHANT
+                       ),
+
+#====
+# Definition des parametres selon le type du defaut
+#====
+
+  SousRevetement = BLOC ( condition = "TypeInitial=='Defaut Sous Revetement'",
+
+    # ORIEDEF into LONGITUD, CIRCONF
+    Orientation              = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+                                     fr="Orientation du défaut",
+                                      into=( "Longitudinale", 
+                                            "Circonferentielle" ), ),
+
+    Profondeur_parametres = FACT (statut="o",
+      # PROFDEF
+      # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+      ProfondeurRadiale        = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006, 
+                                      fr="Profondeur radiale du défaut (m)", ),
+      # PROFDEF_MESSAGE
+      ProfondeurRadiale_mess   = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la profondeur radiale du défaut (m)",
+                                     into=( "NON", "OUI" ), ),
+    ), # Fin FACT Profondeur_parametres
+
+    Longueur_parametres = FACT (statut="o",
+      # OPTLONG into VALEUR, FCTAFFINE
+      ModeCalculLongueur     = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+                                        fr="Option pour caractériser la longueur du défaut : soit par valeur, soit par une fonction affine de la profondeur",
+                                        into = ( "Valeur", "Fonction affine de la profondeur" ), ),
+      Mode_Valeur            = BLOC ( condition = "ModeCalculLongueur=='Valeur'",
+        # LONGDEF
+        Longueur                 = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut = 0.060, 
+                                          fr = "Longueur du défaut sous revêtement (m)", ),
+        # LONGDEF_MESSAGE
+        Longueur_mess            = SIMP ( statut="o", typ="TXM", defaut = "NON", 
+                                          fr = "Affichage ecran de la longueur du défaut sous revêtement (m)",
+                                       into=( "NON", "OUI" ), ),
+      ), # Fin BLOC Mode_Valeur
+      Mode_Fctaffine           = BLOC ( condition = "ModeCalculLongueur=='Fonction affine de la profondeur'",
+        # PROFSURLONG
+        CoefDirecteur     = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=10.,
+                         fr="Inverse a1 du coefficient directeur de la fonction affine l=h/a1 + a0", ),
+        # LONGCONST
+        Constante = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=0.,
+                         fr="constante a0 de la fonction affine l=pente*h + a0", ),
+      ), # Fin BLOC Mode_Fctaffine
+    ), # FIN FACT Longueur_parametres
+
+    Azimut_parametres = FACT (statut="o",
+      # ANGLDEF
+      Azimut                   = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+      # ANGLDEF_MESSAGE
+      Azimut_mess              = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Azimut_parametres
+
+    Altitude_parametres = FACT (statut="o",
+      # ALTIDEF
+      # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+      Altitude                 = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4., 
+                                      fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+      # ALTIDEF_MESSAGE
+      Altitude_mess            = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Altitude_parametres
+
+    # POINDEF
+    Pointe                   = SIMP ( statut="o", typ="TXM", defaut="A", 
+                                      fr="Choix du point considéré du défaut sous revêtement",
+                                      into=( "A", "B", "A et B" ), ),
+
+  ), # Fin BLOC SousRevetement
+
+  Decale = BLOC ( condition = "TypeInitial=='Defaut Decale'",
+
+    # ORIEDEF into LONGITUD, CIRCONF
+    Orientation              = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+                                     fr="Orientation du défaut",
+                                      into=( "Longitudinale", 
+                                            "Circonferentielle" ), ),
+
+    Profondeur_parametres = FACT (statut="o",
+      # PROFDEF
+      # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+      ProfondeurRadiale        = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006, 
+                                      fr="Profondeur radiale du défaut (m)", ),
+      # PROFDEF_MESSAGE
+      ProfondeurRadiale_mess   = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la profondeur radiale du défaut (m)",
+                                     into=( "NON", "OUI" ), ),
+    ), # Fin FACT Profondeur_parametres
+
+    Longueur_parametres = FACT (statut="o",
+
+      # OPTLONG into VALEUR, FCTAFFINE
+      ModeCalculLongueur     = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+                                      fr="Option pour caractériser la longueur du défaut : soit par valeur, soit par une fonction affine de la profondeur",
+                                      into = ( "Valeur", "Fonction affine de la profondeur" ), ),
+
+      Mode_Valeur            = BLOC ( condition = "ModeCalculLongueur=='Valeur'",
+        # LONGDEF
+        Longueur                 = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=1., defaut = 0.060, 
+                                        fr = "Longueur du défaut sous revêtement (m)", ),
+        # LONGDEF_MESSAGE
+        Longueur_mess            = SIMP ( statut="o", typ="TXM", defaut = "NON", 
+                                        fr = "Affichage ecran de la longueur du défaut décalé (m)",
+                                       into=( "NON", "OUI" ), ),
+      ), # Fin BLOC Mode_Valeur
+
+      Mode_Fctaffine           = BLOC ( condition = "ModeCalculLongueur=='Fonction affine de la profondeur'",
+        # PROFSURLONG
+        CoefDirecteur     = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=10.,
+                         fr="Inverse a1 du coefficient directeur de la fonction affine l=h/a1 + a0", ),
+        # LONGCONST
+        Constante = SIMP ( statut="o", typ="R", max=1, val_max=100., defaut=0.,
+                         fr="constante a0 de la fonction affine l=pente*h + a0", ),
+      ), # Fin BLOC Mode_Fctaffine
+
+    ), # FIN FACT Longueur_parametres
+
+   
+    Decalage_parametres = FACT (statut="o",
+
+      # DECATYP into NORMALISE, VALEUR
+      ModeCalculDecalage     = SIMP ( statut="o", typ="TXM", defaut="Valeur",
+                                      fr="Option de definition du decalage radial du defaut : soit par valeur reelle, soit par valeur normalisee",
+                                      into = ( "Valeur", 
+                                              "Valeur normalisee" ), ),
+
+      Mode_Decalage_Valeur   = BLOC ( condition = "ModeCalculDecalage=='Valeur'",
+        # DECADEF
+        DecalageRadial           = SIMP ( statut="o", typ="R", defaut=-0.00001, 
+                                      fr="Décalage radial du defaut sous revêtement (en m)", ),
+        # DECADEF_MESSAGE
+        DecalageRadial_mess      = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran du décalage radial du defaut sous revêtement (en m)",
+                                      into = ( "NON", "OUI" ), ),
+      ), # Fin BLOC Mode_Decalage_Valeur
+
+      Mode_Decalage_Normalisee = BLOC ( condition = "ModeCalculDecalage=='Valeur normalisee'",
+        # DECANOR
+        DecalageNormalise          = SIMP ( statut="o", typ="R", defaut=0.01, 
+                                       fr="Décalage radial normalise du defaut sous revêtement (entre 0. et 1.)", ),
+      ), # Fin BLOC Mode_Decalage_Normalisee
+  
+    ), # Fin FACT Decalage_parametres
+
+    Azimut_parametres = FACT (statut="o",
+      # ANGLDEF
+      Azimut                   = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+      # ANGLDEF_MESSAGE
+      Azimut_mess              = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Azimut_parametres
+
+    Altitude_parametres = FACT (statut="o",
+      # ALTIDEF
+      # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+      Altitude                 = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4., 
+                                      fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+      # ALTIDEF_MESSAGE
+      Altitude_mess            = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Altitude_parametres
+
+    # POINDEF
+    Pointe                   = SIMP ( statut="o", typ="TXM", defaut="A", 
+                                      fr="Choix du point considéré du défaut décalé",
+                                      into=( "A", "B", "A et B" ), ),
+
+  ), # Fin BLOC Decale
+
+  Debouchant = BLOC ( condition = "TypeInitial=='Defaut Debouchant'",
+
+    # ORIEDEF into LONGITUD, CIRCONF
+    Orientation              = SIMP ( statut="o", typ="TXM", defaut="Longitudinale",
+                                      fr="Orientation du défaut : longitudinale ou circonférentielle",
+                                      into=( "Longitudinale",
+                                            "Circonferentielle" ), ),
+
+    Profondeur_parametres = FACT (statut="o",
+      # PROFDEF
+      # dtv : taille max d'un defaut ? Ici, 0.2 = epaisseur approximative de cuve
+      ProfondeurRadiale        = SIMP ( statut="o", typ="R", max=1, val_min=0., val_max=0.2, defaut=0.006, 
+                                      fr="Profondeur radiale du défaut (m)", ),
+      # PROFDEF_MESSAGE
+      ProfondeurRadiale_mess   = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la profondeur radiale du défaut (m)",
+                                     into=( "NON", "OUI" ), ),
+    ), # Fin FACT Profondeur_parametres
+
+    Azimut_parametres = FACT (statut="o",
+      # ANGLDEF
+      Azimut                   = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Position angulaire du défaut dans le cylindre de cuve (en degrés)", ),
+      # ANGLDEF_MESSAGE
+      Azimut_mess              = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la position angulaire du défaut dans le cylindre de cuve (en degrés)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Azimut_parametres
+
+    Altitude_parametres = FACT (statut="o",
+      # ALTIDEF
+      # dtv : altitude entre -7m et 0m ? zone Vestale : -6.601<z<-3.510
+      Altitude                 = SIMP ( statut="o", typ="R", val_min=-8., val_max=0., defaut=-4., 
+                                      fr="Altitude du défaut sur le cylindre de cuve (en m)", ),
+      # ALTIDEF_MESSAGE
+      Altitude_mess            = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de l altitude du défaut sur le cylindre de cuve (en m)",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin FACT Altitude_parametres
+
+  ), # Fin BLOC debouchant
+
+) # Fin PROC DEFAUT
+
+
+#====================================================
+# 4. Modeles de fluence, d'irradiation et de tenacite
+#====================================================
+
+#=======================
+# 4.1 Modeles de fluence
+#=======================
+
+MODELES = PROC ( nom = "MODELES",
+                 op = 68,
+                repetable = 'n',
+                 fr = "Modèles de fluence, d'irradiation et de ténacité", 
+
+
+#===
+# Liste des paramètres
+#===
+
+  Fluence = FACT ( statut="o",
+  
+    # MODELFLUENCE
+    ModeleFluence = SIMP ( statut="o", typ="TXM", defaut="Exponentiel sans revetement k=9.7 (Reglementaire)",
+                           fr="Modèle d'atténuation de la fluence dans l'épaisseur de la cuve",
+                          into=( "Exponentiel sans revetement k=9.7 (Reglementaire)", # Reglementaire
+                                 "Exponentiel sans revetement k=9.7 (Reglementaire CUVE1D)", # Cuve1D
+                                 "Exponentiel sans revetement k=12.7 (France)", # France 
+                                  "Exponentiel sans revetement k=0. (ValeurImposee)", # ValeurImposee 
+                                  "Donnees francaises du palier CPY (SDM)", # SDM 
+                                  "Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)", # GrandeDev 
+                                  "Regulatory Guide 1.99 rev 2 (USNRC)", # USNRC 
+                                  "Dossier 900 MWe AP9701 rev 2 (REV_2)", # REV_2 
+                                  "Lissage du modele ajuste (SDM_Lissage)", # SDM_Lissage 
+                                  "Grand developpement (GD_Cuve)"), # GD_Cuve 
+                         ),
+
+#====
+# Definition des parametres selon le modele de fluence
+#====
+    
+    # H1COEUR
+    ZoneActiveCoeur_AltitudeSup    = SIMP ( statut="o", typ="R", defaut=-3.536, 
+                             fr="Cote supérieure de la zone active de coeur", ),
+    # H2COEUR
+    ZoneActiveCoeur_AltitudeInf    = SIMP ( statut="o", typ="R", defaut=-7.194, 
+                             fr="Cote inférieure de la zone active de coeur", ),
+
+    Reglementaire = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=9.7 (Reglementaire)', ) ",
+      # DTV : comment proposer une liste de valeurs, tout en proposant de fournir d'autres valeurs ?
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+    ), # Fin BLOC Reglementaire
+
+    Cuve1D = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=9.7 (Reglementaire CUVE1D)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC Cuve1D
+
+    France        = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=12.7 (France)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+      # KPFRANCE
+      KPFrance      = SIMP ( statut="o", typ="R", defaut = 12.7,
+                             fr="Paramètre exponentiel du modèle France", ),
+    ), # Fin BLOC France
+
+    ValeurImposee = BLOC ( condition = " ModeleFluence in ( 'Exponentiel sans revetement k=0. (ValeurImposee)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC ValeurImposee
+
+    SDM           = BLOC ( condition = " ModeleFluence in ( 'Donnees francaises du palier CPY (SDM)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC SDM
+
+    USNRC         = BLOC ( condition = " ModeleFluence in ( 'Regulatory Guide 1.99 rev 2 (USNRC)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+      KPUS          = SIMP ( statut="o", typ="R", defaut=9.4488,
+                             fr="Paramètre exponentiel du modèle US", ),
+    ), # Fin BLOC USNRC
+
+    REV_2         = BLOC ( condition = " ModeleFluence in ( 'Dossier 900 MWe AP9701 rev 2 (REV_2)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2) ; HP-26/99/045 : p.31 : fluence max = 7.3/9.125/10/95", ),
+    ), # Fin BLOC REV_2
+
+    SDM_Lissage   = BLOC ( condition = " ModeleFluence in ( 'Lissage du modele ajuste (SDM_Lissage)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+    ), # Fin BLOC SDM_Lissage
+
+    GrandeDev     = BLOC ( condition = " ModeleFluence in ( 'Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+    ), # Fin BLOC GrandeDev
+
+    GD_Cuve       = BLOC ( condition = " ModeleFluence in ( 'Grand developpement (GD_Cuve)', ) ",
+      # fmax
+      FluenceMax    = SIMP ( statut="o", typ="R", defaut=6.5, 
+                             fr="Fluence maximale en surface interne assimilée par la cuve (10^19 n/cm2)", ),
+      Coefficients  = Coef_Fluence(),
+    ), # Fin BLOC GD_Cuve
+
+  ), # Fin FACT Fluence
+
+#==========================
+# 4.2 Modeles d'irradiation
+#==========================
+
+  Irradiation = FACT ( statut="o",
+
+    # TYPEIRR INTO RTNDT, FLUENCE
+    TypeIrradiation = SIMP ( statut = "o", typ = "TXM", defaut="RTndt de la cuve a l instant de l analyse",
+                       fr = "Type d'irradiation",
+                      into = ( "RTndt de la cuve a l instant de l analyse", # RTNDT 
+                               "Modele d irradiation" ), # FLUENCE
+                       ),
+
+#====
+# Definition des parametres selon le type d'irradiation
+#====
+
+    IrradiationParValeur = BLOC ( condition = "TypeIrradiation=='RTndt de la cuve a l instant de l analyse'",
+      RTNDT = SIMP ( statut="o", typ="R", defaut=73., 
+                     fr="RTNDT de la cuve à l'instant de l'analyse (°C)", ),
+
+    ), # Fin BLOC IrradiationParValeur
+
+    IrradiationParModele = BLOC ( condition = "TypeIrradiation=='Modele d irradiation'",
+      # MODELIRR
+      ModeleIrradiation = SIMP ( statut="o", typ="TXM", defaut="Metal de Base : formule de FIM/FIS Houssin",
+                                fr="Modèle d'irradiation pour virole ou joint soudé",
+                               into=( "Metal de Base : formule de FIM/FIS Houssin", # HOUSSIN 
+                                      "Metal de Base : formule de FIM/FIS Persoz", # PERSOZ
+                                      "Metal de Base : formule de FIM/FIS Lefebvre", # LEFEBVRE
+                                      "Metal de Base : Regulatory Guide 1.00 rev 2", # USNRCmdb
+                                      "Joint Soude : formulation de FIM/FIS Brillaud", # BRILLAUD
+                                      "Joint Soude : Regulatory Guide 1.00 rev 2" ), # USNRCsoud
+                                ),
+      Parametres_FIMFIS = BLOC ( condition = " ModeleIrradiation in ( 'Metal de Base : formule de FIM/FIS Houssin' , 'Metal de Base : formule de FIM/FIS Persoz', 'Metal de Base : formule de FIM/FIS Lefebvre', 'Joint Soude : formulation de FIM/FIS Brillaud', ) ",
+        # CU
+        TeneurCuivre         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Teneur en cuivre (%)", ),
+        # CU_MESSAGE
+        TeneurCuivre_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la teneur en cuivre (%)",
+                                     into=( "NON","OUI" ), ),
+        # NI
+        TeneurNickel         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Teneur en nickel (%)", ),
+        # NI_MESSAGE
+        TeneurNickel_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la teneur en nickel (%)",
+                                     into=( "NON","OUI" ), ),
+        # P
+        TeneurPhosphore      = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Teneur en phosphore (%)", ),
+        # P_MESSAGE
+        TeneurPhosphore_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la teneur en phosphore (%)",
+                                     into=( "NON","OUI" ), ),
+        # RTimoy
+        MoyenneRTndt         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)", ),
+        # RTimoy_MESSAGE
+        MoyenneRTndt_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la moyenne de RTNDT",
+                                     into=( "NON","OUI" ), ),
+        # nbectDRTNDT
+        NombreEcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=2., 
+                                      fr="Nombre d'écart-type par rapport à la moyenne de DRTNDT", ),
+        # nbectDRTNDT_MESSAGE
+        NombreEcartTypeRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran du nombre d'écart-type par rapport à la moyenne de DRTNDT",
+                                     into=( "NON","OUI" ), ),
+      ), # Fin BLOC Parametres_FIMFIS
+
+      Parametres_USNRC = BLOC ( condition = " ModeleIrradiation in ( 'Metal de Base : Regulatory Guide 1.00 rev 2' , 'Joint Soude : Regulatory Guide 1.00 rev 2', ) ",
+        # CU
+        TeneurCuivre         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Teneur en cuivre (%)", ),
+        # CU_MESSAGE
+        TeneurCuivre_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la teneur en cuivre (%)",
+                                     into=( "NON","OUI" ), ),
+        # NI
+        TeneurNickel         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Teneur en nickel (%)", ),
+        # NI_MESSAGE
+        TeneurNickel_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la teneur en nickel (%)",
+                                     into=( "NON","OUI" ), ),
+        # RTimoy
+        MoyenneRTndt         = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Moyenne de RTNDT : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)", ),
+        # RTimoy_MESSAGE
+        MoyenneRTndt_mess    = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran de la moyenne de RTNDT",
+                                     into=( "NON","OUI" ), ),
+        # RTicov
+        CoefVariationRTndt   = SIMP ( statut="o", typ="R", defaut=0., 
+                                      fr="Coefficient de variation de la RTNDT initiale", ),
+        # RTicov_MESSAGE
+        CoefVariationRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                         fr="Affichage ecran du coefficient de variation de la RTNDT initiale",
+                                        into=( "NON","OUI" ), ),
+        # USectDRT
+        EcartTypeRTndt       = SIMP ( statut="o", typ="R", defaut=28., 
+                                      fr="Ecart-type du décalage de RTNDT (°F) (28. pour js et 17. pour mdb)", ),
+        # nbectDRTNDT
+        NombreEcartTypeRTndt = SIMP ( statut="o", typ="R", defaut=2., 
+                                      fr="Nombre d'écart-type par rapport à la moyenne de DRTNDT", ),
+        # nbectDRTNDT_MESSAGE
+        NombreEcartTypeRTndt_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                      fr="Affichage ecran du nombre d'écart-type par rapport à la moyenne de DRTNDT",
+                                     into=( "NON","OUI" ), ),
+      ), # Fin BLOC Parametres_USNRC 
+
+    ), # Fin BLOC IrradiationParModele
+
+  ), # Fin FACT Irradiation
+
+#========================
+# 4.3 Modeles de tenacite
+#========================
+
+  Tenacite = FACT ( statut = "o",
+
+    # MODELKIC
+    ModeleTenacite = SIMP ( statut="o", typ="TXM", defaut="RCC-M/ASME coefficient=2",
+                    fr="Modèle de calcul de la ténacité à l'amorçage KIc", 
+                   into=( "RCC-M/ASME coefficient=2", # RCC-M
+                          "RCC-M/ASME coefficient=2 CUVE1D", # RCC-M_simpl
+                          "RCC-M/ASME coefficient=2.33 (Houssin)", # Houssin_RC
+                          "RCC-M/ASME avec KI=KIpalier", # RCC-M_pal
+                          "RCC-M/ASME avec KI~exponentiel", # RCC-M_exp
+                          "Weibull basee sur la master cuve", # Wallin
+                          "Weibull basee sur la master cuve (REME)", # REME
+                          "Weibull n°1 (etude ORNL)", # ORNL
+                          "Weibull n°2", # WEIB2
+                          "Weibull n°3", # WEIB3
+                          "Weibull generalisee", # WEIB-GEN
+                          "Exponentielle n°1 (Frama)", # Frama
+                          "Exponentielle n°2 (LOGWOLF)" ), # LOGWOLF
+                   ),
+
+
+#====
+# Definition des parametres selon le modele de tenacité
+#====
+
+# Modeles type RCC-M
+
+    KIc_RCCM = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME coefficient=2', 'RCC-M/ASME coefficient=2.33 (Houssin)', 'RCC-M/ASME avec KI=KIpalier', ) ",
+
+      # nbectKIc
+      NbEcartType_MoyKIc       = SIMP ( statut="o", typ="R", defaut=-2., 
+                                        fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+      # nbectKIc_MESSAGE
+      NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                        fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                       into = ( "NON","OUI" ), ),
+
+      # KICPAL
+      PalierDuctile_KIc        = SIMP ( statut="o", typ="R", defaut=195., 
+                                        fr="Palier déterministe de K1c ou valeur du palier ductile plafonnant la courbe (en MPa(m^0.5)) ", ),
+
+      # KICCDV
+      CoefficientVariation_KIc = SIMP ( statut="o", typ="R", defaut = 0.15, 
+                                        fr = "Coefficient de variation de la loi normale de K1c ", ),
+
+    ), # Fin BLOC KIc_RCCM
+
+    KIc_RCCM_exp = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME avec KI~exponentiel', ) ",
+
+      # nbectKIc
+      NbEcartType_MoyKIc       = SIMP ( statut="o", typ="R", defaut=-2., 
+                                        fr = "Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+      # nbectKIc_MESSAGE
+      NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                        fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                       into = ( "NON","OUI" ), ),
+
+      # KICCDV
+      CoefficientVariation_KIc = SIMP ( statut="o", typ="R", defaut = 0.15, 
+                                        fr = "Coefficient de variation de la loi normale de K1c ", ),
+
+    ), # Fin BLOC KIc_RCCM_exp
+
+# Modeles type exponentiel (Frama, LOGWOLF)
+
+    KIc_Exponentielle = BLOC ( condition = " ModeleTenacite in ( 'Exponentielle n°1 (Frama)', 'Exponentielle n°2 (LOGWOLF)', ) ",
+
+      # nbectKIc
+      NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2., 
+                                  fr="Nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+      # nbectKIc_MESSAGE
+      NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                        fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                       into = ( "NON","OUI" ), ),
+
+    ), # Fin BLOC KIc_Exponentielle
+
+# Modeles type Weibull
+
+    KIc_Weibull = BLOC ( condition = " ModeleTenacite in ( 'Weibull basee sur la master cuve (REME)', 'Weibull n°1 (etude ORNL)', 'Weibull n°2', 'Weibull n°3', ) ",
+      # NBCARAC
+      NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE", 
+                                        fr="Nombre caracteristique : ORDRE ou QUANTILE",
+                                        into=( "ORDRE", "QUANTILE" ), ),
+
+      QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+        # nbectKIc
+        NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2., 
+                                    fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+        # nbectKIc_MESSAGE
+        NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                          fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                          into = ( "NON","OUI" ), ),
+      ), # Fin BLOC QUANTILE 
+
+      ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+        # fractKIc
+        Fractile_KIc       = SIMP ( statut="o", typ="R", defaut=5., 
+                                  fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+        # fractKIc_MESSAGE
+        Fractile_KIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                    fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+                                    into = ( "NON","OUI" ), ),
+      ), # Fin BLOC ORDRE 
+
+    ), # Fin BLOC KIc_Weibull
+
+    KIc_MasterCuve = BLOC ( condition = " ModeleTenacite in ( 'Weibull basee sur la master cuve', ) ",
+      # NBCARAC
+      NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE", 
+                                        fr="Nombre caracteristique : ORDRE ou QUANTILE",
+                                        into=( "ORDRE", "QUANTILE" ), ),
+
+      QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+        # nbectKIc
+        NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2., 
+                                    fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+        # nbectKIc_MESSAGE
+        NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                          fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                          into = ( "NON","OUI" ), ),
+      ), # Fin BLOC QUANTILE 
+
+      ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+        # fractKIc
+        Fractile_KIc       = SIMP ( statut="o", typ="R", defaut=5., 
+                                  fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+        # fractKIc_MESSAGE
+        Fractile_KIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                    fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+                                    into = ( "NON","OUI" ), ),
+      ), # Fin BLOC ORDRE 
+
+      # T0WALLIN
+      Temperature_KIc100 = SIMP ( statut="o", typ="I", defaut=-27, 
+                                  fr="Paramètre T0 du modèle Wallin (°C) : température pour laquelle la téncité du matériau vaut en moyenne 100MPa.m^5", ),
+
+    ), # Fin BLOC KIc_MasterCuve
+
+    Weibull_Generalisee = BLOC ( condition = " ModeleTenacite in ( 'Weibull generalisee',) ",
+      # NBCARAC
+      NBRE_CARACTERISTIQUE = SIMP ( statut="o", typ="TXM", defaut="QUANTILE", 
+                                        fr="Nombre caracteristique : ORDRE ou QUANTILE",
+                                        into=( "ORDRE", "QUANTILE" ), ),
+
+      QUANTILE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='QUANTILE'",
+        # nbectKIc
+        NbEcartType_MoyKIc = SIMP ( statut="o", typ="R", defaut=-2., 
+                                    fr="Valeur caractéristique de KIc exprimée en nombre d'écart-type par rapport à la moyenne de KIc (nb sigma) : det = -2 ", ),
+        # nbectKIc_MESSAGE
+        NbEcartType_MoyKIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                          fr = "Affichage ecran du nombre d'écart-type par rapport à la moyenne de KIc",
+                                          into = ( "NON","OUI" ), ),
+      ), # Fin BLOC QUANTILE 
+
+      ORDRE = BLOC ( condition = "NBRE_CARACTERISTIQUE=='ORDRE'",
+        # fractKIc
+        Fractile_KIc       = SIMP ( statut="o", typ="R", defaut=5., 
+                                  fr="Valeur caractéristique de KIc exprimée en ordre de fractile (%) ", ),
+        # fractKIc_MESSAGE
+        Fractile_KIc_mess  = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                    fr="Affichage ecran de la valeur caractéristique de KIc exprimée en ordre de fractile (%) ",
+                                    into = ( "NON","OUI" ), ),
+      ), # Fin BLOC ORDRE 
+
+      Coefficients       = Coef_WeibGen(),
+
+    ), # Fin BLOC Weibull_Generalisee
+
+    # ATTNCORRBETA - CORRIRWIN
+    CorrectionPlastique  = SIMP ( statut="o", typ="TXM", defaut="Correction plastique BETA (pour DSR et defaut decale)", 
+                                  fr="Correction plastique dans le calcul du facteur d'intensité de contraintes",
+                                  into=( "Correction plastique BETA (pour DSR et defaut decale)", # ATTNCORRBETA = NON
+                                         "Correction plastique BETA attenuee (pour DSR et défaut decale)", # ATTNCORRBETA = OUI
+                                        "Correction plastique IRWIN (pour defaut debouchant)" ), ), # CORRIRWIN = OUI
+
+    Fissure = BLOC ( condition = " ModeleTenacite in ( 'RCC-M/ASME coefficient=2', 'RCC-M/ASME coefficient=2.33 (Houssin)', 'RCC-M/ASME avec KI=KIpalier', 'RCC-M/ASME avec KI~exponentiel', )",
+
+      # ARRETFISSURE
+      ArretDeFissure = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                              fr="Prise en compte de l'arrêt de fissure",
+                              into=( "OUI", "NON" ), ),
+
+      KIa_RCCM = BLOC ( condition = "ArretDeFissure=='OUI'",
+        # INCRDEF
+        IncrementTailleFissure   = SIMP ( statut="o", typ="R", defaut=0.005, 
+                                          fr="Incrément de la taille de fissure pour la propagation (en m)", ),
+        # INCRDEF_MESSAGE
+        IncrementTailleFissure_mess = SIMP ( statut="o", typ="TXM", defaut="NON", 
+                                             fr="Affichage ecran de l incrément de la taille de fissure pour la propagation (en m)",
+                                            into = ("NON", "OUI"), ),
+
+        # nbectKIa
+        NbEcartType_MoyKIa       = SIMP ( statut="o", typ="R", defaut=-2., 
+                                          fr="Nombre d'écart-type par rapport à la moyenne de KIa (nb sigma) ", ),
+
+        # KIAPAL
+        PalierDuctile_KIa        = SIMP ( statut="o", typ="R", defaut=195., 
+                                          fr="Palier déterministe de K1a -ténacite à l'arrêt- (en MPa(m^0.5)) ", ),
+        # KIACDV
+        CoefficientVariation_KIa = SIMP ( statut="o", typ="R", defaut=0.10, 
+                                          fr="Coefficient de variation de la loi normale de K1a -ténacite à l'arrêt- ", ),
+
+      ), # Fin BLOC KIa_RCCM
+
+    ), # Fin BLOC Fissure
+
+  ), # Fin FACT Tenacite
+
+) # Fin PROC MODELES
+
+
+#==================
+# 5. Initialisation
+#==================
+
+INITIALISATION = PROC ( nom = "INITIALISATION",
+                        op = 68,
+                       repetable = 'n',
+                        fr = "Initialisation : instant initial, profils radiaux de température et contraintes", 
+
+  TemperatureInitiale = FACT ( statut = "o",
+
+    ProfilRadial_TemperatureInitiale = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                              fr="Profil radial de la température initiale dans la cuve (en m : °C) ", ),
+    Amont_TemperatureInitiale        = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                              fr="Prolongation à la frontière amont",
+                                              into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_TemperatureInitiale         = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                              fr="Prolongation à la frontière aval",
+                                              into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT TemperatureInitiale
+
+  ContraintesInitiales = FACT ( statut = "o",
+
+    ProfilRadial_ContraintesInitiales = SIMP ( statut="o", typ=Tuple(4), max="**",
+                                               fr="Profil radial des contraintes radiale, circonférentielle et longitudinale dans la cuve (en m : xx : xx : xx) ", ),
+    Amont_ContraintesInitiales        = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                               fr="Prolongation à la frontière amont",
+                                               into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ContraintesInitiales         = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                               fr="Prolongation à la frontière aval",
+                                               into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ContraintesInitiales
+
+  # INSTINIT
+  InstantInitialisation = SIMP ( statut="o", typ="R", defaut = -1., 
+                                 fr="Instant initial auquel sont définies la température, ainsi que les contraintes initiales (en s) ", ),
+
+) # Fin PROC INITIALISATION
+
+
+#==================================
+# 6. CARACTERISTIQUES DU REVETEMENT
+#==================================
+
+REVETEMENT = PROC ( nom = "REVETEMENT",
+                    op = 68,
+                   repetable = 'n',
+                    fr = "Caracteristiques du revêtement", 
+
+  # KTHREV
+  ConditionLimiteThermiqueREV = SIMP ( statut="o", typ="TXM", defaut="CHALEUR",
+                                       fr="Option pour définir les caractéristiques du revêtement ",
+                                       into=( "ENTHALPIE", "CHALEUR",),
+                                       ),
+
+  EnthalpieREV = BLOC ( condition = "ConditionLimiteThermiqueREV=='ENTHALPIE'",
+
+    EnthalpieREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                          fr="Température (°C) / enthalpie massique  (J/kg) ", ),
+    Amont_EnthalpieREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                          fr="Prolongation à la frontière amont",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_EnthalpieREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                          fr="Prolongation à la frontière aval",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC EnthalpieREV
+
+
+  ChaleurREV = BLOC ( condition = "ConditionLimiteThermiqueREV=='CHALEUR'",
+
+    ChaleurREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                        fr="Température (°C) / chaleur volumique (J/kg/K) ", ),
+    Amont_ChaleurREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                        fr="Prolongation à la frontière amont",
+                                        into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ChaleurREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                        fr="Prolongation à la frontière aval",
+                                        into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC ChaleurREV
+
+  ConductiviteREV = FACT (statut = "o",
+
+    ConductiviteREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                             fr="Température (°C) / conductivité thermique (W/m/°C) ", ),
+    Amont_ConductiviteREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                             fr="Prolongation à la frontière amont",
+                                             into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ConductiviteREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                             fr="Prolongation à la frontière aval",
+                                             into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ConductiviteREV
+
+  ModuleYoungREV = FACT (statut = "o",
+
+    ModuleYoungREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                            fr="Température (°C) / module d'Young (MPa) ", ),
+    Amont_ModuleYoungREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                            fr="Prolongation à la frontière amont",
+                                            into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ModuleYoungREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                            fr="Prolongation à la frontière aval",
+                                            into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ModuleYoungREV
+
+  CoeffDilatThermREV = FACT (statut = "o",
+
+    CoeffDilatThermREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                fr="Température (°C) / coefficient de dilatation thermique (°C-1) ", ),
+    Amont_CoeffDilatThermREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                fr="Prolongation à la frontière amont",
+                                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_CoeffDilatThermREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                fr="Prolongation à la frontière aval",
+                                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT CoeffDilatThermREV
+
+  LimiteElasticiteREV = FACT (statut = "o",
+
+    LimiteElasticiteREV_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                 fr="Température (°C) / limite d'élasticite (MPa) ", ),
+    Amont_LimiteElasticiteREV           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                 fr="Prolongation à la frontière amont",
+                                                 into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_LimiteElasticiteREV            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                 fr="Prolongation à la frontière aval",
+                                                 into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT LimiteElasticiteREV
+
+  AutresParametresREV = FACT (statut = "o",
+
+    # TREFREV
+    TemperatureDeformationNulleREV   = SIMP ( statut="o", typ="R", defaut=20.,
+                                              fr="Température de référence pour laquelle les déformations thermiques sont nulles (°C) ", ),
+    # TDETREV
+    TemperaturePourCoefDilatThermREV = SIMP ( statut="o", typ="R", defaut=287.,
+                                              fr="Température de définition du coefficient de dilatation thermique (°C) ", ),
+    # NUREV
+    CoefficientPoissonREV            = SIMP ( statut="o", typ="R", defaut=0.3,
+                                              fr="Coefficient de Poisson ", ),
+
+  ), # Fin FACT AutresParametresREV
+
+) # Fin PROC REVETEMENT
+
+
+#=====================================
+# 7. CARACTERISTIQUES DU METAL DE BASE
+#=====================================
+
+METAL_BASE = PROC ( nom = "METAL_BASE",
+                    op = 68,
+                   repetable = 'n',
+                    fr = "Caracteristiques du metal de base", 
+
+  # KTHMDB
+  ConditionLimiteThermiqueMDB = SIMP ( statut="o", typ="TXM", defaut="CHALEUR",
+                                       fr="Option pour definir les caractéristiques du revêtement ",
+                                       into=( "ENTHALPIE", "CHALEUR",), ),
+
+  EnthalpieMDB = BLOC ( condition = "ConditionLimiteThermiqueMDB=='ENTHALPIE'",
+
+    EnthalpieMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                          fr="Température (°C) / enthalpie massique (J/kg) ", ),
+    Amont_EnthalpieMDB           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                          fr="Prolongation à la frontière amont",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_EnthalpieMDB            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                          fr="Prolongation à la frontière aval",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC EnthalpieMDB
+
+  ChaleurMDB = BLOC ( condition = "ConditionLimiteThermiqueMDB=='CHALEUR'",
+
+    ChaleurMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                        fr="Température (°C) / chaleur volumique (J/kg/K) ", ),
+    Amont_ChaleurMDB           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                        fr="Prolongation à la frontière amont",
+                                        into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ChaleurMDB            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                        fr="Prolongation à la frontière aval",
+                                        into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin BLOC ChaleurMDB
+
+  ConductiviteMDB = FACT ( statut = "o",
+
+    ConductiviteMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                             fr="Température (°C) / conductivité thermique (W/m/°C) ", ),
+    Amont_ConductiviteMDB           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                             fr="Prolongation à la frontière amont",
+                                             into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ConductiviteMDB            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                             fr="Prolongation à la frontière aval",
+                                             into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ConductiviteMDB
+
+  ModuleYoungMDB = FACT ( statut="o",
+
+    ModuleYoungMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                            fr="Température (°C) / module d'Young (MPa) ", ),
+    Amont_ModuleYoungMDB           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                            fr="Prolongation à la frontière amont",
+                                            into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_ModuleYoungMDB            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                            fr="Prolongation à la frontière aval",
+                                            into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT ModuleYoungMDB
+
+  CoeffDilatThermMDB = FACT ( statut="o",
+
+    CoeffDilatThermMDB_Fct_Temperature = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                fr="Température (°C) / coefficient de dilatation thermique (°C-1) ", ),
+    Amont_CoeffDilatThermMDB           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                fr="Prolongation à la frontière amont",
+                                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_CoeffDilatThermMDB            = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                fr="Prolongation à la frontière aval",
+                                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # Fin FACT CoeffDilatThermMDB
+
+  AutresParametresMDB = FACT ( statut = "o",
+
+    # TREFMDB
+    TemperatureDeformationNulleMDB   = SIMP ( statut="o", typ="R", defaut=20.,
+                                              fr="Température de référence pour laquelle les déformations thermiques sont nulles (°C) ", ),
+    # TDETMDB
+    TemperaturePourCoefDilatThermMDB = SIMP ( statut="o", typ="R", defaut=287.,
+                                              fr="Température de définition du coefficient de dilatation thermique (°C) ", ),
+    # NUMDB
+    CoefficientPoissonMDB            = SIMP ( statut="o", typ="R", defaut=0.3,
+                                              fr="Coefficient de Poisson ", ),
+
+  ), # Fin FACT TemperatureDeformationNulleMDB
+
+) # Fin PROC METAL_BASE
+
+
+#===============================
+# 8. TRANSITOIRE THERMOMECANIQUE
+#===============================
+
+TRANSITOIRE = PROC ( nom = "TRANSITOIRE",
+                     op = 68,
+                    repetable = 'n',
+                     fr = "Description du transitoire thermohydraulique", 
+
+  Pression = FACT ( statut = "o",
+
+    ProfilTemporel_Pression = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                     fr = "Instant (s) / pression (MPa) ", ),
+    Amont_Pression          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                     fr="Prolongation à la frontière amont",
+                                     into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    Aval_Pression           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                     fr="Prolongation à la frontière aval",
+                                     into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+  ), # FIN FACT Pression
+
+
+  CL_thermique = FACT ( statut = "o",
+
+    # TYPCLTH
+    TypeConditionLimiteThermique = SIMP ( statut="o", typ="TXM",
+                                         fr="Type de condition thermique en paroi interne ",
+                                         into=( "Temperature imposee en paroi", # TEMP_IMPO
+                                               "Flux de chaleur impose en paroi", # FLUX_REP
+                                               "Temperature imposee du fluide et coefficient echange", # ECHANGE
+                                               "Debit massique et temperature d injection de securite", # DEBIT
+                                               "Temperature imposee du fluide et debit d injection de securite", # TEMP_FLU
+                                               "Courbe APRP"), # APRP
+                                        ),
+
+    APRP = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Courbe APRP', ) ",
+
+      # INSTANT1
+      Instant_1              = SIMP ( statut="o", typ="R", defaut=21.,
+                                    fr="Palier 2 à T1 : borne inférieure (en s) ", ),
+      # INSTANT2
+      Instant_2              = SIMP ( statut="o", typ="R", defaut=45.,
+                                      fr="Palier 2 à T1 : borne supérieure (en s) ", ),
+      # QACCU
+      DebitAccumule          = SIMP ( statut="o", typ="R", defaut=2.3,
+                                      fr="Debit accumule (en m3/h) ", ),
+      # QIS
+      DebitInjectionSecurite = SIMP ( statut="o", typ="R", defaut=0.375,
+                                      fr="Debit injection securite (en m3/h) ", ),
+      # TIS_MESSAGE
+      TempInjectionSecurite_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                      fr="Affichage ecran de la temperature injection securite",
+                                      into = ( "NON", "OUI" ), ),
+    ), # Fin BLOC APRP
+
+    TemperatureImposeeFluide     = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee en paroi','Temperature imposee du fluide et coefficient echange', 'Temperature imposee du fluide et debit d injection de securite', 'Courbe APRP' ) ",
+
+      ProfilTemporel_TemperatureImposeeFluide = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                       fr = "Instant (s) / Température imposée (°C) ", ),
+      Amont_TemperatureImposeeFluide          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                       fr="Prolongation à la frontière amont",
+                                                       into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_TemperatureImposeeFluide           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                       fr="Prolongation à la frontière aval",
+                                                       into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+    ), # Fin BLOC TemperatureImposeeFluide
+
+    FluxChaleur                  = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Flux de chaleur impose en paroi', ) ",
+
+      ProfilTemporel_FluxChaleur    = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                          fr="Instant (s) / Flux de chaleur impose (W/m2) ", ),
+      Amont_FluxChaleur             = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                           fr="Prolongation à la frontière amont",
+                                           into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_FluxChaleur              = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                           fr="Prolongation à la frontière aval",
+                                           into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+    ), # Fin BLOC FluxChaleur
+
+    CoefficientEchange          = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et coefficient echange', ) ",
+
+      ProfilTemporel_CoefficientEchange = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                               fr="Instant (s) / Coefficient d'échange (W/m2/K) ", ),
+      Amont_CoefficientEchange          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                               fr="Prolongation à la frontière amont",
+                                               into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_CoefficientEchange           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                               fr="Prolongation à la frontière aval",
+                                               into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+    ), # Fin BLOC CoefficientEchange
+
+    DebitMassique               = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+      ProfilTemporel_DebitMassique = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                          fr="Instant (s) / Débit massique (kg/s) ", ),
+      Amont_DebitMassique          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                          fr="Prolongation à la frontière amont",
+                                          into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_DebitMassique = SIMP ( statut="o", typ="TXM",
+                                fr="Prolongation à la frontière aval", defaut="Continu",
+                                into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+    ), # Fin BLOC DebitMassique
+
+    TemperatureInjection        = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+      ProfilTemporel_TemperatureInjection = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                                 fr="Instant (s) / Température d'injection de sécurité  (°C) ", ),
+      Amont_TemperatureInjection          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                                 fr="Prolongation à la frontière amont",
+                                                 into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_TemperatureInjection           = SIMP ( statut="o", typ = "TXM", defaut="Continu",
+                                                 fr="Prolongation à la frontière aval",
+                                                 into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+    ), # Fin BLOC TemperatureInjection
+
+    DebitInjection              = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', 'Courbe APRP', ) ",
+
+      ProfilTemporel_DebitInjection = SIMP ( statut="o", typ=Tuple(2), max="**",
+                                           fr="Instant (s) / Débit d'injection de sécurité (kg/s) ", ),
+      Amont_DebitInjection          = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                           fr="Prolongation à la frontière amont",
+                                           into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+      Aval_DebitInjection           = SIMP ( statut="o", typ="TXM", defaut="Continu",
+                                           fr="Prolongation à la frontière aval",
+                                           into=( 'Continu', 'Exclu', 'Lineaire' ), ),
+
+    ), # Fin BLOC DebitInjection
+
+    Vestale = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Temperature imposee du fluide et debit d injection de securite', 'Debit massique et temperature d injection de securite', 'Courbe APRP', ) ",
+
+      # DH
+      DiametreHydraulique             = SIMP ( statut="o", typ="R", defaut=0.3816,
+                                             fr="Diamètre hydraulique (m) ", ),
+      # DH_MESSAGE
+      DiametreHydraulique_mess        = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                             fr="Affichage ecran du diamètre hydraulique (m) ",
+                                            into = ( "NON", "OUI" ), ),
+      # SECTION
+      SectionEspaceAnnulaire          = SIMP ( statut="o", typ="R", defaut=0.21712,
+                                             fr="Section espace annulaire (m2) ", ),
+      # SECTION_MESSAGE
+      SectionEspaceAnnulaire_mess     = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                             fr="Affichage ecran de la section espace annulaire (m2) ",
+                                            into = ( "NON", "OUI" ), ),
+      # DELTA
+      HauteurCaracConvectionNaturelle = SIMP ( statut="o", typ="R", defaut=6.,
+                                             fr="Hauteur caractéristique convection naturelle (m) ", ),
+      # DELTA_MESSAGE
+      HauteurCaracConvectionNaturelle_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                                  fr="Affichage ecran de la hauteur caractéristique convection naturelle (m) ",
+                                                 into = ( "NON", "OUI" ), ),
+      # EPS
+      CritereConvergenceRelative      = SIMP ( statut="o", typ="R", defaut=0.00001,
+                                             fr="Critère convergence relative (-) ", ),
+      # COEFVESTALE
+      CoefficientsVestale             = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                             fr="Application des coefficients de Vestale", 
+                                             into=( 'OUI', 'NON' ), ),
+
+    ), # Fin BLOC Vestale
+
+    Creare = BLOC ( condition = " TypeConditionLimiteThermique in ( 'Debit massique et temperature d injection de securite', ) ",
+
+      # VM
+      VolumeMelange_CREARE           = SIMP ( statut="o", typ="R", defaut=14.9,
+                                            fr = "Volume de mélange CREARE (m3) ", ),
+      # VM_MESSAGE
+      VolumeMelange_CREARE_mess      = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                            fr = "Affichage ecran du volume de mélange CREARE (m3) ",
+                                             into=( 'OUI', 'NON' ), ),
+      # T0
+      TemperatureInitiale_CREARE     = SIMP ( statut="o", typ="R", defaut=250.,
+                                            fr="Température initiale CREARE (°C) ", ),
+      # T0_MESSAGE
+      TemperatureInitiale_CREARE_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                             fr="Affichage ecran de la température initiale CREARE (°C) ",
+                                             into=( 'OUI', 'NON' ), ),
+      # SE
+      SurfaceEchange_FluideStructure = SIMP ( statut="o", typ="R", defaut=0.,
+                                            fr="Surface d'échange fluide/structure (m2) ", ),
+      # SE_MESSAGE
+      SurfaceEchange_FluideStructure_mess = SIMP ( statut="o", typ="TXM", defaut="NON",
+                                                 fr="Affichage ecran de la surface d'échange fluide/structure (m2) ",
+                                                 into=( 'OUI', 'NON' ), ),
+
+    ), # Fin BLOC Creare
+
+  ), # FIN FACT CL_thermique
+
+) # Fin PROC TRANSITOIRE
diff --git a/Cuve2dg/catalogues_cuve2dg.ini b/Cuve2dg/catalogues_cuve2dg.ini
new file mode 100644 (file)
index 0000000..4c9412e
--- /dev/null
@@ -0,0 +1,11 @@
+# Choix des catalogues
+import os
+#rep_cata=os.path.dirname(os.path.abspath(__file__))
+rep_cata=os.getcwd()
+
+catalogues = (
+# (code,version,catalogue,formatIn,formatOut)
+#  ('CUVE2DG','V1',os.path.join(rep_cata,'Cuve2dg_Cata_VPN.py'),'cuve2dg','cuve2dg'),
+  ('CUVE2DG','V2',os.path.join(rep_cata,'DefaillCUVE_Cata.py'),'cuve2dg','cuve2dg'),
+)
+
diff --git a/Cuve2dg/configuration_CUVE2DG.py b/Cuve2dg/configuration_CUVE2DG.py
new file mode 100644 (file)
index 0000000..da942b5
--- /dev/null
@@ -0,0 +1,171 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+"""
+    Ce module sert pour charger les paramètres de configuration d'EFICAS
+"""
+# Modules Python
+print "passage dans la surcharge de configuration pour OTW"
+import os, sys, string, types, re
+import traceback
+from PyQt4.QtGui  import *
+from utils import read_file
+
+# Modules Eficas
+from Editeur import utils
+
+class CONFIG:
+
+  #-----------------------------------
+  def __init__(self,appli,repIni):
+  #-----------------------------------
+
+  # Classe de base permettant de lire, afficher
+  # et sauvegarder les fichiers utilisateurs 
+  # On a deux directories : la directory generale (Repertoire d instal + Nom du code
+  #                       Par exemple : ~/Install_Eficas/EficasV1_14/Cuve2dg
+  # et la directorie de l utilisateur 
+  #                      HOME/.Eficas_Cuve2dg
+  # Le fichier prefs.py va etre lu dans la directory generale puis surcharge eventuellement 
+  # par celui de l utilisateur
+  # le fichier de catalogue va etre lu dans la directory de l utilisateur s il exite
+  # dans le fichier general sinon
+      self.appli   = appli  
+      self.code    = appli.code
+      self.salome  = appli.salome
+      self.repIni  = repIni
+     
+      if self.appli: 
+         self.parent=appli.top
+         self.appli.mode_nouv_commande='initial'
+      else:         self.parent=None
+
+
+      # Valeurs par defaut
+      self.rep_user     = os.path.join(os.environ['HOME'],'.Eficas_Cuve2dg')
+      if not os.path.isdir(self.rep_user) : os.mkdir(self.rep_user)
+      self.initialdir   = self.rep_user
+      self.path_doc     = self.rep_user
+      self.savedir      = os.path.join(os.environ['HOME'],'Eficas_Cuve2dg')
+      if not os.path.isdir(self.savedir) : os.mkdir(self.savedir)
+      self.exec_acrobat = self.rep_user
+      self.labels_user=('exec_acrobat', 'catalogues','savedir','path_doc')
+      self.labels_eficas=("rep_user","INSTALLDIR","path_doc","exec_acrobat","rep_cata","initialdir","savedir","catalogues")
+
+      #Lecture des fichiers utilisateurs
+      self.lecture_fichier_ini_standard()
+      self.lecture_fichier_ini_utilisateur()
+      self.lecture_catalogues()
+      rep_mat=" " # Compatibilite Aster
+
+
+  #--------------------------------------
+  def lecture_fichier_ini_standard(self):
+  #--------------------------------------
+  # Verifie l'existence du fichier "standard"
+  # appelle la lecture de ce fichier
+      import prefs
+      name='prefs_'+prefs.code
+      prefsCode=__import__(name)
+      self.prefsUser=name+".py"
+      for k in self.labels_eficas :
+         try :
+            valeur=getattr(prefsCode,k)
+            setattr(self,k,valeur)
+         except :
+            pass
+              
+
+  #--------------------------------------
+  def lecture_fichier_ini_utilisateur(self):
+  #--------------------------------------
+  # Surcharge les paramètres standards par les paramètres utilisateur s'ils existent
+      self.fic_ini_utilisateur = os.path.join(self.rep_user,self.prefsUser)
+      if not os.path.isfile(self.fic_ini_utilisateur): return
+
+      txt = utils.read_file(self.fic_ini_utilisateur)
+      from styles import style
+      d=locals()
+      try:
+         exec txt in d
+      except :
+         l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+         QMessageBox.critical( None, "Import du fichier de Configuration", 
+                       "Erreur à la lecture du fichier de configuration " + self.fic_ini_utilisateur )
+         sys.exit(0)
+      for k in self.labels_user :
+         try :
+            setattr(self,k,d[k])
+         except :
+            pass
+
+
+  #--------------------------------------
+  def lecture_catalogues(self):
+  #--------------------------------------
+      rep_mat=" " # Compatibilite Aster
+      if hasattr(self,"catalogues") :
+         return
+      fic_ini = os.path.join(self.repIni,"catalogues_cuve2dg.ini")
+      if not os.path.isfile(fic_ini) :
+         QMessageBox.critical( None, "Erreur a l'import du fichier des Catalogues", 
+                   "Le fichier de configuration des catalogues "+fic_ini+" n a pas été trouvé" )
+         sys.exit(0)
+
+      txt = utils.read_file(fic_ini)
+      d=locals()
+      try:
+         exec txt in d
+         self.catalogues=d["catalogues"]
+      except :
+         l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+         QMessageBox.critical( None, "Import du fichier de Configuration", 
+                       "Erreur à la lecture du fichier de configuration " + fic_ini )
+         sys.exit(0)
+
+
+
+  #--------------------------------------
+  def save_params(self):
+  #--------------------------------------
+  # sauvegarde
+  # les nouveaux paramètres dans le fichier de configuration utilisateur
+  #
+      texte=""
+      for clef in self.labels_user :
+          if hasattr(self,clef):
+             valeur=getattr(self,clef)
+             texte= texte + clef+"     = " + repr(valeur) +"\n"
+      f=open(self.fic_ini_utilisateur,'w+')
+      print self.fic_ini_utilisateur
+      f.write(texte) 
+      f.close()
+#
+
+
+def make_config(appli,rep):
+    return CONFIG(appli,rep)
+
+def make_config_style(appli,rep):
+    return None
+
+
diff --git a/Cuve2dg/generator_cuve2dg.py b/Cuve2dg/generator_cuve2dg.py
new file mode 100644 (file)
index 0000000..bfb6b44
--- /dev/null
@@ -0,0 +1,1537 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+"""
+    Ce module contient le plugin generateur de fichier au format 
+    DefaillCUVE pour EFICAS.
+
+"""
+import traceback
+import types,string,re
+
+from Noyau import N_CR
+from Accas import MCSIMP
+from generator_python import PythonGenerator
+
+def entryPoint():
+   """
+       Retourne les informations nécessaires pour le chargeur de plugins
+
+       Ces informations sont retournées dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 'cuve2dg',
+        # La factory pour créer une instance du plugin
+          'factory' : Cuve2dgGenerator,
+          }
+
+
+class Cuve2dgGenerator(PythonGenerator):
+   """
+       Ce generateur parcourt un objet de type JDC et produit
+       un texte au format eficas et 
+       un texte au format DefaillCUVE
+
+   """
+   # Les extensions de fichier préconisées
+   extensions=('.comm',)
+
+   def __init__(self,cr=None):
+      # Si l'objet compte-rendu n'est pas fourni, on utilise le compte-rendu standard
+      if cr :
+         self.cr=cr
+      else:
+         self.cr=N_CR.CR(debut='CR generateur format DefaillCUVE pour DefaillCUVE',
+                         fin='fin CR format DefaillCUVE pour DefaillCUVE')
+      # Le texte au format DefaillCUVE est stocké dans l'attribut textCuve
+      self.textCuve=''
+
+      # Ce dictionnaire liste le nom des variables utilisees dans le script
+      self.variable = {
+         "NiveauImpression" : "MESSAGE_LEVEL",
+        "FichierDataIn"    : "DATARESUME_FILE",
+        "FichierTempSigma" : "TEMPSIG_FILE",
+        "FichierResultats" : "RESU_FILE",
+        "FichierCSV"       : "CSV_FILE",
+        "FichierCREARE" : "CREARE_FILE",
+        "GrandeurEvaluee" : "GRANDEUR",
+        "IncrementTemporel" : "INCRTPS",
+        "IncrementMaxTemperature" : "DTPREC",
+        "IncrementMaxTempsAffichage" : "DTARCH",
+        "TraitementGeometrie" : "TYPEGEOM",
+        "RayonInterne" : "RINT",
+        "RayonInterne_mess" : "RINT_MESSAGE",
+        "RayonExterne" : "REXT",
+        "RayonExterne_mess" : "REXT_MESSAGE",
+        "EpaisseurRevetement" : "LREV",
+        "EpaisseurRevetement_mess" : "LREV_MESSAGE",
+        "LigamentExterneMin" : "LIGMIN",
+        "LigamentExterneMin_mess" : "LIGMIN_MESSAGE",
+        "NombreNoeudsMaillage" : "NBNO",
+        "TypeInitial" : "TYPEDEF",
+        "Orientation" : "ORIEDEF",
+        "ProfondeurRadiale" : "PROFDEF",
+        "ProfondeurRadiale_mess" : "PROFDEF_MESSAGE",
+        "ModeCalculLongueur" : "OPTLONG",
+        "Longueur" : "LONGDEF",
+        "Longueur_mess" : "LONGDEF_MESSAGE",
+        "CoefDirecteur" : "PROFSURLONG",
+        "CoefDirecteur_mess" : "PROFSURLONG_MESSAGE",
+        "Constante" : "LONGCONST",
+        "ModeCalculDecalage" : "DECATYP",
+        "DecalageNormalise" : "DECANOR",
+        "DecalageNormalise_mess" : "DECANOR_MESSAGE",
+        "DecalageRadial" : "DECADEF",
+        "DecalageRadial_mess" : "DECADEF_MESSAGE",
+        "Azimut" : "ANGLDEF",
+        "Azimut_mess" : "ANGLDEF_MESSAGE",
+        "Altitude_mess" : "ANGLDEF_MESSAGE",
+        "Altitude" : "ALTIDEF",
+        "Altitude_mess" : "ALTIDEF_MESSAGE",
+        "Pointe" : "POINDEF",
+        "ModeleFluence" : "MODELFLUENCE",
+        "ZoneActiveCoeur_AltitudeSup" : "H1COEUR",
+        "ZoneActiveCoeur_AltitudeInf" : "H2COEUR",
+        "FluenceMax" : "fmax",
+        "KPFrance" : "KPFRANCE",
+        "KPUS" : "KPUS",
+        "Azimut_0deg" : "COEFFLUENCE1",
+        "Azimut_5deg" : "COEFFLUENCE2",
+        "Azimut_10deg" : "COEFFLUENCE3",
+        "Azimut_15deg" : "COEFFLUENCE4",
+        "Azimut_20deg" : "COEFFLUENCE5",
+        "Azimut_25deg" : "COEFFLUENCE6",
+        "Azimut_30deg" : "COEFFLUENCE7",
+        "Azimut_35deg" : "COEFFLUENCE8",
+        "Azimut_40deg" : "COEFFLUENCE9",
+        "Azimut_45deg" : "COEFFLUENCE10",
+        "TypeIrradiation" : "TYPEIRR",
+        "RTNDT" : "RTNDT",
+        "ModeleIrradiation" : "MODELIRR",
+        "TeneurCuivre" : "CU",
+        "TeneurCuivre_mess" : "CU_MESSAGE",
+        "TeneurNickel" : "NI",
+        "TeneurNickel_mess" : "NI_MESSAGE",
+        "TeneurPhosphore" : "P",
+        "TeneurPhosphore_mess" : "P_MESSAGE",
+        "MoyenneRTndt" : "RTimoy",
+        "MoyenneRTndt_mess" : "RTimoy_MESSAGE",
+        "CoefVariationRTndt" : "RTicov",
+        "CoefVariationRTndt_mess" : "RTicov_MESSAGE",
+        "EcartTypeRTndt" : "USectDRT",
+        "EcartTypeRTndt_mess" : "USectDRT_MESSAGE",
+        "NombreEcartTypeRTndt" : "nbectDRTNDT",
+        "NombreEcartTypeRTndt_mess" : "nbectDRTNDT_MESSAGE",
+        "ModeleTenacite" : "MODELKIC",
+        "NBRE_CARACTERISTIQUE" : "NBCARAC",
+        "NbEcartType_MoyKIc" : "nbectKIc",
+        "NbEcartType_MoyKIc_mess" : "nbectKIc_MESSAGE",
+        "PalierDuctile_KIc" : "KICPAL",
+        "CoefficientVariation_KIc" : "KICCDV",
+        "Fractile_KIc" : "fractKIc",
+        "Fractile_KIc_mess" : "fractKIc_MESSAGE",
+        "Temperature_KIc100" : "T0WALLIN",
+        "A1" : "A1",
+        "A2" : "A2",
+        "A3" : "A3",
+        "B1" : "B1",
+        "B2" : "B2",
+        "B3" : "B3",
+        "C1" : "C1",
+        "C2" : "C2",
+        "C3" : "C3",
+        "AttnCorrBeta" : "ATTNCORRBETA",
+        "CorrIrwin" : "CORRIRWIN",
+        "ArretDeFissure" : "ARRETFISSURE",
+        "IncrementTailleFissure" : "INCRDEF",
+        "IncrementTailleFissure_mess" : "INCRDEF_MESSAGE",
+        "NbEcartType_MoyKIa" : "nbectKIa",
+        "PalierDuctile_KIa" : "KIAPAL",
+        "CoefficientVariation_KIa" : "KIACDV",
+        "InstantInitialisation" : "INSTINIT",
+        "ConditionLimiteThermiqueREV" : "KTHREV",
+        "TemperatureDeformationNulleREV" : "TREFREV",
+        "TemperaturePourCoefDilatThermREV" : "TDETREV",
+        "CoefficientPoissonREV" : "NUREV",
+        "ConditionLimiteThermiqueMDB" : "KTHMDB",
+        "TemperatureDeformationNulleMDB" : "TREFMDB",
+        "TemperaturePourCoefDilatThermMDB" : "TDETMDB",
+        "CoefficientPoissonMDB" : "NUMDB",
+        "TypeConditionLimiteThermique" : "TYPCLTH",
+        "Instant_1" : "INSTANT1",
+        "Instant_2" : "INSTANT2",
+        "DebitAccumule" : "QACCU",
+        "DebitInjectionSecurite" : "QIS",
+        "TempInjectionSecurite_mess" : "TIS_MESSAGE",
+        "DiametreHydraulique" : "DH",
+        "DiametreHydraulique_mess" : "DH_MESSAGE",
+        "SectionEspaceAnnulaire" : "SECTION",
+        "SectionEspaceAnnulaire_mess" : "SECTION_MESSAGE",
+        "HauteurCaracConvectionNaturelle" : "DELTA",
+        "HauteurCaracConvectionNaturelle_mess" : "DELTA_MESSAGE",
+        "CritereConvergenceRelative" : "EPS",
+        "CoefficientsVestale" : "COEFVESTALE",
+        "VolumeMelange_CREARE" : "VM",
+        "VolumeMelange_CREARE_mess" : "VM_MESSAGE",
+        "TemperatureInitiale_CREARE" : "T0",
+        "TemperatureInitiale_CREARE_mess" : "T0_MESSAGE",
+        "SurfaceEchange_FluideStructure" : "SE",
+        "SurfaceEchange_FluideStructure_mess" : "SE_MESSAGE",
+         }
+
+      # Ce dictionnaire liste le commentaire des variables utilisees dans le script
+      self.comment = {
+         "NiveauImpression" : "Niveau d impression des messages a l ecran (=0 : rien, =1 : temps calcul total, =2 : temps intermediaires)",
+        "FichierDataIn"    : "sortie du fichier recapitulatif des donnees d entree {OUI ; NON}",
+        "FichierTempSigma" : "sortie des fichiers temperature et contraintes {OUI ; NON}",
+        "FichierResultats" : "sortie du fichier resultat template_DEFAILLCUVE {OUI ; NON}",
+        "FichierCSV" : "sortie du fichier resultat template_DEFAILLCUVE.CSV {OUI ; NON}",
+        "FichierCREARE" : "sortie du fichier Tfluide et Coef Echange {OUI ; NON}",
+        "GrandeurEvaluee" : "choix de la grandeur sous critere evaluee {FM_KICSURKCP ; MARGE_KI ; MARGE_KCP}",
+        "IncrementTemporel" : "increment temporel pour l analyse PROBABILISTE (si DETERMINISTE, fixer a 1)",
+        "IncrementMaxTemperature" : "increment max de temp/noeud/instant (°C)",
+        "IncrementMaxTempsAffichage" : "increment max de temps pour affichage (s)",
+        "TraitementGeometrie" : "traitement de la geometrie de la cuve : {GEOMETRIE, MAILLAGE}",
+        "RayonInterne" : "rayon interne (m)",
+        "RayonInterne_mess" : "affichage ecran du rayon interne (m)",
+        "RayonExterne" : "rayon externe (m)",
+        "RayonExterne_mess" : "affichage ecran du rayon externe (m)",
+        "EpaisseurRevetement" : "epaisseur revetement (m)",
+        "EpaisseurRevetement_mess" : "affichage ecran de l epaisseur revetement (m)",
+        "LigamentExterneMin" : "ligament externe minimal avant rupture (% de l'epaisseur de cuve)",
+        "LigamentExterneMin_mess" : "affichage ecran du ligament externe minimal avant rupture (% de l'epaisseur de cuve)",
+        "NombreNoeudsMaillage" : "nbre de noeuds dans l'épaisseur de la cuve",
+        "TypeInitial" : "type initial du defaut : DEBOUCHANT=Defaut Debouchant, DSR=Defaut Sous Revetement, DECALE=Defaut Decale",
+        "Orientation" : "orientation (LONGITUD / CIRCONF)",
+        "ProfondeurRadiale" : "profondeur radiale ou encore hauteur (m)",
+        "ProfondeurRadiale_mess" : "affichage ecran de la profondeur radiale ou encore hauteur (m)",
+        "ModeCalculLongueur" : "option pour definir la longueur du defaut (VALEUR pour une valeur fixe, FCTAFFINE pour une fct affine de la profondeur)",
+        "Longueur" : "longueur (m) pour defaut Sous Revetement",
+        "Longueur_mess" : "affichage ecran de la longueur (m) pour defaut Sous Revetement",
+        "CoefDirecteur" : "pente de la fonction affine l = h/profsurlong + a0",
+        "CoefDirecteur_mess" : "affichage ecran de la pente de la fonction affine l = h/profsurlong + a0",
+        "Constante" : "constante de la fonction affine a0",
+        "ModeCalculDecalage" : "type de decalage : normalise (NORMALISE) ou reel (VALEUR)",
+        "DecalageNormalise" : "decalage radial normalise (valeur comprise entre 0. et 1.) pour defaut Sous Revetement",
+        "DecalageNormalise_mess" : "affichage ecran du decalage radial normalise (valeur comprise entre 0. et 1.) pour defaut Sous Revetement",
+        "DecalageRadial" : "decalage radial reel (m) pour defaut decale",
+        "DecalageRadial_mess" : "affichage ecran du decalage radial reel (m) pour defaut decale",
+        "Azimut" : "coordonnee angulaire (degre)",
+        "Azimut_mess" : "affichage ecran de la coordonnee angulaire (degre)",
+        "Altitude" : "altitude (m) : valeur négative",
+        "Altitude_mess" : "affichage ecran de l altitude (m) : valeur négative",
+        "Pointe" : "choix du(des) point(s) du defaut considere {'A','B','BOTH'} pour DSR et DECALE (pour DEBOUCHANT : automatiquement 'B')",
+        "ModeleFluence" : "modele de fluence : {Reglementaire, France, ValeurImposee, SDM, USNRC, REV_2, SDM_Lissage, GrandeDev, GD_Cuve, Cuve1D}",
+        "ZoneActiveCoeur_AltitudeSup" : "cote superieure de la zone active de coeur (ici pour cuve palier 900Mw)",
+        "ZoneActiveCoeur_AltitudeInf" : "cote inferieure de la zone active de coeur (ici pour cuve palier 900Mw)",
+        "FluenceMax" : "fluence maximale assimilee par la cuve (n/cm2)",
+        "KPFrance" : "parametre exponentiel du modele France",
+        "KPUS" : "parametre exponentiel du modele US",
+        "Azimut_0deg" : "fluence a l'azimut 0 (10^19 n/cm)",
+        "Azimut_5deg" : "fluence a l'azimut 5 (10^19 n/cm)",
+        "Azimut_10deg" : "fluence a l'azimut 10 (10^19 n/cm)",
+        "Azimut_15deg" : "fluence a l'azimut 15 (10^19 n/cm)",
+        "Azimut_20deg" : "fluence a l'azimut 20 (10^19 n/cm)",
+        "Azimut_25deg" : "fluence a l'azimut 25 (10^19 n/cm)",
+        "Azimut_30deg" : "fluence a l'azimut 30 (10^19 n/cm)",
+        "Azimut_35deg" : "fluence a l'azimut 35 (10^19 n/cm)",
+        "Azimut_40deg" : "fluence a l'azimut 40 (10^19 n/cm)",
+        "Azimut_45deg" : "fluence a l'azimut 45 (10^19 n/cm)",
+        "TypeIrradiation" : "type irradiation : {RTNDT, FLUENCE}",
+        "RTNDT" : "RTNDT finale (°C)",
+        "ModeleIrradiation" : "modele d irradiation : {HOUSSIN, PERSOZ, LEFEBVRE, USNRCmdb} pour virole et {BRILLAUD,USNRCsoud} pour jointsoude",
+        "TeneurCuivre" : "teneur en cuivre (%)",
+        "TeneurCuivre_mess" : "affichage ecran de la teneur en cuivre (%)",
+        "TeneurNickel" : "teneur en nickel (%)",
+        "TeneurNickel_mess" : "affichage ecran de la teneur en nickel (%)",
+        "TeneurPhosphore" : "teneur en phosphore (%)",
+        "TeneurPhosphore_mess" : "affichage ecran de la teneur en phosphore (%)",
+        "MoyenneRTndt" : "moyenne de la RTNDT initiale : virole C1 de cuve Chinon : mdb=>-17.°C et js=>42.°C (HT-56/05/038 : p.52)",
+        "MoyenneRTndt_mess" : "affichage ecran de la moyenne de la RTNDT initiale",
+        "CoefVariationRTndt" : "coef de variation de la RTNDT initiale",
+        "CoefVariationRTndt_mess" : "affichage ecran du coef de variation de la RTNDT initiale",
+        "EcartTypeRTndt" : "pour modeles USNRCsoud ou USNRCmdb, ecart-type du decalage de RTNDT (°F) (28. pour js et 17. pour mdb)",
+        "EcartTypeRTndt_mess" : "affichage ecran, pour modeles USNRCsoud ou USNRCmdb, ecart-type du decalage de RTNDT (°F) (28. pour js et 17. pour mdb)",
+        "NombreEcartTypeRTndt" : "Nbre d ecart-type par rapport a la moyenne de DRTNDT si analyse PROBABILISTE (en DETERMINISTE, fixer a 2.)",
+        "NombreEcartTypeRTndt_mess" : "affichage ecran du nbre d ecart-type par rapport a la moyenne de DRTNDT si analyse PROBABILISTE",
+        "ModeleTenacite" : "modele de tenacite : {RCC-M, RCC-M_pal, RCC-M_exp, RCC-M_simpl, Houssin_RC, Wallin, REME, ORNL, Frama, WEIB3, WEIB2, LOGWOLF, WEIB-GEN}",
+        "NBRE_CARACTERISTIQUE" : "Nb caracteristique : ORDRE ou QUANTILE",
+        "NbEcartType_MoyKIc" : "Nbre d ecart-type par rapport a la moyenne de KIc si analyse PROBABILISTE (en DETERMINISTE, fixer a -2.)",
+        "NbEcartType_MoyKIc_mess" : "affichage ecran du nbre d ecart-type par rapport a la moyenne de KIc si analyse PROBABILISTE",
+        "PalierDuctile_KIc" : "palier deterministe de K1c (MPa(m^0.5))",
+        "CoefficientVariation_KIc" : "coef de variation de la loi normale de K1c",
+        "Fractile_KIc" : "valeur caracteristique de KIc exprimee en ordre de fractile (%)",
+        "Fractile_KIc_mess" : "affichage ecran de la valeur caracteristique de KIc exprimee en ordre de fractile (%)",
+        "Temperature_KIc100" : "parametre T0 du modele Wallin (°C)",
+        "A1" : "coef des coefs d une WEIBULL generale",
+        "A2" : "",
+        "A3" : "",
+        "B1" : "",
+        "B2" : "",
+        "B3" : "",
+        "C1" : "",
+        "C2" : "",
+        "C3" : "",
+        "AttnCorrBeta" : "Attenuation de la correction plastique : {OUI, NON} ==> uniquement pour DSR ou DECALE",
+        "CorrIrwin" : "Correction plastique IRWIN : {OUI, NON} ==> uniquement pour DEBOUCHANT",
+        "ArretDeFissure" : "prise en compte de l arret de fissure {OUI, NON} (en PROBABILISTE, fixer a NON)",
+        "IncrementTailleFissure" : "increment de la taille de fissure (m)",
+        "IncrementTailleFissure_mess" : "affichage ecran de l increment de la taille de fissure (m)",
+        "NbEcartType_MoyKIa" : "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma)",
+        "PalierDuctile_KIa" : "palier deterministe de K1a quand modele RCC-M  (MPa(m^0.5))",
+        "CoefficientVariation_KIa" : "coef de variation de la loi normale de K1a",
+        "InstantInitialisation" : "instant initial (s)",
+        "ConditionLimiteThermiqueREV" : "Option 'ENTHALPIE' ou 'CHALEUR'",
+        "TemperatureDeformationNulleREV" : "temperature de deformation nulle (°C)",
+        "TemperaturePourCoefDilatThermREV" : "temperature de definition du coefficient de dilatation thermique (°C)",
+        "CoefficientPoissonREV" : "coefficient de Poisson",
+        "ConditionLimiteThermiqueMDB" : "Option 'ENTHALPIE' ou 'CHALEUR'",
+        "TemperatureDeformationNulleMDB" : "temperature de deformation nulle (°C)",
+        "TemperaturePourCoefDilatThermMDB" : "temperature de definition du coefficient de dilatation thermique (°C)",
+        "CoefficientPoissonMDB" : "coefficient de Poisson",
+        "TypeConditionLimiteThermique" : "Type de condition thermique en paroi interne {TEMP_IMPO,FLUX_REP,ECHANGE,DEBIT,TEMP_FLU,APRP}",
+        "Instant_1" : "Borne inferieure de l intervalle de temps du 2nd palier T1",
+        "Instant_2" : "Borne superieure de l intervalle de temps du 2nd palier T1",
+        "DebitAccumule" : "Debit accumule (en m3/h)",
+        "DebitInjectionSecurite" : "Debit injection de securite (en m3/h)",
+        "TempInjectionSecurite_mess" : "affichage ecran de la temperature injection de securite",
+        "DiametreHydraulique" : "Diametre hydraulique (m)",
+        "DiametreHydraulique_mess" : "affichage ecran du diametre hydraulique (m)",
+        "SectionEspaceAnnulaire" : "Section espace annulaire (m2)",
+        "SectionEspaceAnnulaire_mess" : "affichage ecran de la section espace annulaire (m2)",
+        "HauteurCaracConvectionNaturelle" : "Hauteur caracteristique convection naturelle (m)",
+        "HauteurCaracConvectionNaturelle_mess" : "affichage ecran de la hauteur caracteristique convection naturelle (m)",
+        "CritereConvergenceRelative" : "Critere convergence relative (-)",
+        "CoefficientsVestale" : "Application des coefs de Vestale {OUI;NON}",
+        "VolumeMelange_CREARE" : "Volume de melange CREARE (m3)",
+        "VolumeMelange_CREARE_mess" : "affichage ecran du volume de melange CREARE (m3)",
+        "TemperatureInitiale_CREARE" : "Temperature initiale CREARE (degC)",
+        "TemperatureInitiale_CREARE_mess" : "affichage ecran de la temperature initiale CREARE (degC)",
+        "SurfaceEchange_FluideStructure" : "Surface d'echange fluide/structure (m2)",
+        "SurfaceEchange_FluideStructure_mess" : "affichage ecran de la surface d'echange fluide/structure (m2)",
+         }
+
+      # Ce dictionnaire liste la valeur par defaut des variables utilisees dans le script
+      self.default = {
+         "NiveauImpression" : "1",
+        "FichierDataIn" : "NON",
+        "FichierTempSigma" : "NON",
+        "FichierResultats" : "NON",
+        "FichierCSV" : "NON",
+        "FichierCREARE" : "NON",
+        "GrandeurEvaluee" : "FM_KICSURKCP",
+        "IncrementTemporel" : "1",
+        "IncrementMaxTemperature" : "0.1",
+        "IncrementMaxTempsAffichage" : "1000.",
+        "TraitementGeometrie" : "GEOMETRIE",
+        "RayonInterne" : "1.994",
+        "RayonInterne_mess" : "NON",
+        "RayonExterne" : "2.2015",
+        "RayonExterne_mess" : "NON",
+        "EpaisseurRevetement" : "0.0075",
+        "EpaisseurRevetement_mess" : "NON",
+        "LigamentExterneMin" : "0.75",
+        "LigamentExterneMin_mess" : "NON",
+        "NombreNoeudsMaillage" : "300",
+        "TypeInitial" : "DSR",
+        "Orientation" : "LONGITUD",
+        "ProfondeurRadiale" : "0.006",
+        "ProfondeurRadiale_mess" : "NON",
+        "ModeCalculLongueur" : "VALEUR",
+        "Longueur" : "0.060",
+        "Longueur_mess" : "NON",
+        "CoefDirecteur" : "10.",
+        "CoefDirecteur_mess" : "NON",
+        "Constante" : "0.",
+        "ModeCalculDecalage" : "VALEUR",
+        "DecalageNormalise" : "0.1",
+        "DecalageNormalise_mess" : "NON",
+        "DecalageRadial" : "0.",
+        "DecalageRadial_mess" : "NON",
+        "Azimut" : "0.",
+        "Azimut_mess" : "NON",
+        "Altitude" : "-4.",
+        "Altitude_mess" : "NON",
+        "Pointe" : "B",
+        "ModeleFluence" : "Reglementaire",
+        "ZoneActiveCoeur_AltitudeSup" : "-3.536",
+        "ZoneActiveCoeur_AltitudeInf" : "-7.194",
+        "FluenceMax" : "6.5",
+        "KPFrance" : "12.7",
+        "KPUS" : "9.4488",
+        "Azimut_0deg" : "5.8",
+        "Azimut_5deg" : "5.48",
+        "Azimut_10deg" : "4.46",
+        "Azimut_15deg" : "3.41",
+        "Azimut_20deg" : "3.37",
+        "Azimut_25deg" : "3.16",
+        "Azimut_30deg" : "2.74",
+        "Azimut_35deg" : "2.25",
+        "Azimut_40deg" : "1.89",
+        "Azimut_45deg" : "1.78",
+        "TypeIrradiation" : "RTNDT",
+        "RTNDT" : "64.",
+        "ModeleIrradiation" : "HOUSSIN",
+        "TeneurCuivre" : "0.0972",
+        "TeneurCuivre_mess" : "NON",
+        "TeneurNickel" : "0.72",
+        "TeneurNickel_mess" : "NON",
+        "TeneurPhosphore" : "0.00912",
+        "TeneurPhosphore_mess" : "NON",
+        "MoyenneRTndt" : "-12.0",
+        "MoyenneRTndt_mess" : "NON",
+        "CoefVariationRTndt" : "0.1",
+        "CoefVariationRTndt_mess" : "NON",
+        "EcartTypeRTndt" : "-2.",
+        "EcartTypeRTndt_mess" : "NON",
+        "NombreEcartTypeRTndt" : "2.",
+        "NombreEcartTypeRTndt_mess" : "NON",
+        "ModeleTenacite" : "RCC-M",
+        "NBRE_CARACTERISTIQUE" : "QUANTILE",
+        "NbEcartType_MoyKIc" : "-2.",
+        "NbEcartType_MoyKIc_mess" : "NON",
+        "PalierDuctile_KIc" : "195.",
+        "CoefficientVariation_KIc" : "0.15",
+        "Fractile_KIc" : "5.",
+        "Fractile_KIc_mess" : "NON",
+        "Temperature_KIc100" : "-27.",
+        "A1" : "21.263",
+        "A2" : "9.159",
+        "A3" : "0.04057",
+        "B1" : "17.153",
+        "B2" : "55.089",
+        "B3" : "0.0144",
+        "C1" : "4.",
+        "C2" : "0.",
+        "C3" : "0.",
+        "AttnCorrBeta" : "NON",
+        "CorrIrwin" : "NON",
+        "ArretDeFissure" : "NON",
+        "IncrementTailleFissure" : "0.",
+        "IncrementTailleFissure_mess" : "NON",
+        "NbEcartType_MoyKIa" : "0.",
+        "PalierDuctile_KIa" : "0.",
+        "CoefficientVariation_KIa" : "0.",
+        "InstantInitialisation" : "-1.",
+        "ConditionLimiteThermiqueREV" : "CHALEUR",
+        "TemperatureDeformationNulleREV" : "20.",
+        "TemperaturePourCoefDilatThermREV" : "287.",
+        "CoefficientPoissonREV" : "0.3",
+        "ConditionLimiteThermiqueMDB" : "CHALEUR",
+        "TemperatureDeformationNulleMDB" : "20.",
+        "TemperaturePourCoefDilatThermMDB" : "287.",
+        "CoefficientPoissonMDB" : "0.3",
+        "TypeConditionLimiteThermique" : "TEMP_IMPO",
+        "Instant_1" : "21.",
+        "Instant_2" : "45.",
+        "DebitAccumule" : "2.3",
+        "DebitInjectionSecurite" : "0.375",
+        "TempInjectionSecurite_mess" : "NON",
+        "DiametreHydraulique" : "0.3816",
+        "DiametreHydraulique_mess" : "NON",
+        "SectionEspaceAnnulaire" : "0.21712",
+        "SectionEspaceAnnulaire_mess" : "NON",
+        "HauteurCaracConvectionNaturelle" : "6.",
+        "HauteurCaracConvectionNaturelle_mess" : "NON",
+        "CritereConvergenceRelative" : "0.00001",
+        "CoefficientsVestale" : "NON",
+        "VolumeMelange_CREARE" : "14.9",
+        "VolumeMelange_CREARE_mess" : "NON",
+        "TemperatureInitiale_CREARE" : "250.",
+        "TemperatureInitiale_CREARE_mess" : "NON",
+        "SurfaceEchange_FluideStructure" : "0.",
+        "SurfaceEchange_FluideStructure_mess" : "NON",
+         }
+
+      # Ce dictionnaire liste la rubrique d'appartenance des variables utilisees dans le script
+      self.bloc = {
+         "NiveauImpression" : "OPTIONS",
+        "FichierDataIn" : "OPTIONS",
+        "FichierTempSigma" : "OPTIONS",
+        "FichierResultats" : "OPTIONS",
+        "FichierCSV" : "OPTIONS",
+        "FichierCREARE" : "OPTIONS",
+        "GrandeurEvaluee" : "OPTIONS",
+        "IncrementTemporel" : "OPTIONS",
+        "IncrementMaxTemperature" : "OPTIONS",
+        "IncrementMaxTempsAffichage" : "OPTIONS",
+        "TraitementGeometrie" : "DONNEES DE LA CUVE",
+        "RayonInterne" : "DONNEES DE LA CUVE",
+        "RayonInterne_mess" : "DONNEES DE LA CUVE",
+        "RayonExterne" : "DONNEES DE LA CUVE",
+        "RayonExterne_mess" : "DONNEES DE LA CUVE",
+        "EpaisseurRevetement" : "DONNEES DE LA CUVE",
+        "EpaisseurRevetement_mess" : "DONNEES DE LA CUVE",
+        "LigamentExterneMin" : "DONNEES DE LA CUVE",
+        "LigamentExterneMin_mess" : "DONNEES DE LA CUVE",
+        "NombreNoeudsMaillage" : "DONNEES DE LA CUVE",
+        "TypeInitial" : "CARACTERISTIQUES DU DEFAUT",
+        "Orientation" : "CARACTERISTIQUES DU DEFAUT",
+        "ProfondeurRadiale" : "CARACTERISTIQUES DU DEFAUT",
+        "ProfondeurRadiale_mess" : "CARACTERISTIQUES DU DEFAUT",
+        "ModeCalculLongueur" : "CARACTERISTIQUES DU DEFAUT",
+        "Longueur" : "CARACTERISTIQUES DU DEFAUT",
+        "Longueur_mess" : "CARACTERISTIQUES DU DEFAUT",
+        "CoefDirecteur" : "CARACTERISTIQUES DU DEFAUT",
+        "CoefDirecteur_mess" : "CARACTERISTIQUES DU DEFAUT",
+        "Constante" : "CARACTERISTIQUES DU DEFAUT",
+        "ModeCalculDecalage" : "CARACTERISTIQUES DU DEFAUT",
+        "DecalageNormalise" : "CARACTERISTIQUES DU DEFAUT",
+        "DecalageNormalise_mess" : "CARACTERISTIQUES DU DEFAUT",
+        "DecalageRadial" : "CARACTERISTIQUES DU DEFAUT",
+        "DecalageRadial_mess" : "CARACTERISTIQUES DU DEFAUT",
+        "Azimut" : "CARACTERISTIQUES DU DEFAUT",
+        "Azimut_mess" : "CARACTERISTIQUES DU DEFAUT",
+        "Altitude" : "CARACTERISTIQUES DU DEFAUT",
+        "Altitude_mess" : "CARACTERISTIQUES DU DEFAUT",
+        "Pointe" : "CARACTERISTIQUES DU DEFAUT",
+        "ModeleFluence" : "MODELES",
+        "ZoneActiveCoeur_AltitudeSup" : "MODELES",
+        "ZoneActiveCoeur_AltitudeInf" : "MODELES",
+        "FluenceMax" : "MODELES",
+        "KPFrance" : "MODELES",
+        "KPUS" : "MODELES",
+        "Azimut_0deg" : "MODELES",
+        "Azimut_5deg" : "MODELES",
+        "Azimut_10deg" : "MODELES",
+        "Azimut_15deg" : "MODELES",
+        "Azimut_20deg" : "MODELES",
+        "Azimut_25deg" : "MODELES",
+        "Azimut_30deg" : "MODELES",
+        "Azimut_35deg" : "MODELES",
+        "Azimut_40deg" : "MODELES",
+        "Azimut_45deg" : "MODELES",
+        "TypeIrradiation" : "MODELES",
+        "RTNDT" : "MODELES",
+        "ModeleIrradiation" : "MODELES",
+        "TeneurCuivre" : "MODELES",
+        "TeneurCuivre_mess" : "MODELES",
+        "TeneurNickel" : "MODELES",
+        "TeneurNickel_mess" : "MODELES",
+        "TeneurPhosphore" : "MODELES",
+        "TeneurPhosphore_mess" : "MODELES",
+        "MoyenneRTndt" : "MODELES",
+        "MoyenneRTndt_mess" : "MODELES",
+        "CoefVariationRTndt" : "MODELES",
+        "CoefVariationRTndt_mess" : "MODELES",
+        "EcartTypeRTndt" : "MODELES",
+        "EcartTypeRTndt_mess" : "MODELES",
+        "NombreEcartTypeRTndt" : "MODELES",
+        "NombreEcartTypeRTndt_mess" : "MODELES",
+        "ModeleTenacite" : "MODELES",
+        "NBRE_CARACTERISTIQUE" : "MODELES",
+        "NbEcartType_MoyKIc" : "MODELES",
+        "NbEcartType_MoyKIc_mess" : "MODELES",
+        "PalierDuctile_KIc" : "MODELES",
+        "CoefficientVariation_KIc" : "MODELES",
+        "Fractile_KIc" : "MODELES",
+        "Fractile_KIc_mess" : "MODELES",
+        "Temperature_KIc100" : "MODELES",
+        "A1" : "MODELES",
+        "A2" : "MODELES",
+        "A3" : "MODELES",
+        "B1" : "MODELES",
+        "B2" : "MODELES",
+        "B3" : "MODELES",
+        "C1" : "MODELES",
+        "C2" : "MODELES",
+        "C3" : "MODELES",
+        "AttnCorrBeta" : "MODELES",
+        "CorrIrwin" : "MODELES",
+        "ArretDeFissure" : "MODELES",
+        "IncrementTailleFissure" : "MODELES",
+        "IncrementTailleFissure_mess" : "MODELES",
+        "NbEcartType_MoyKIa" : "MODELES",
+        "PalierDuctile_KIa" : "MODELES",
+        "CoefficientVariation_KIa" : "MODELES",
+        "InstantInitialisation" : "ETAT INITIAL",
+        "ConditionLimiteThermiqueREV" : "CARACTERISTIQUES DU REVETEMENT",
+        "TemperatureDeformationNulleREV" : "CARACTERISTIQUES DU REVETEMENT",
+        "TemperaturePourCoefDilatThermREV" : "CARACTERISTIQUES DU REVETEMENT",
+        "CoefficientPoissonREV" : "CARACTERISTIQUES DU REVETEMENT",
+        "ConditionLimiteThermiqueMDB" : "CARACTERISTIQUES DU MDB",
+        "TemperatureDeformationNulleMDB" : "CARACTERISTIQUES DU MDB",
+        "TemperaturePourCoefDilatThermMDB" : "CARACTERISTIQUES DU MDB",
+        "CoefficientPoissonMDB" : "CARACTERISTIQUES DU MDB",
+        "TypeConditionLimiteThermique" : "TRANSITOIRE",
+        "Instant_1" : "TRANSITOIRE",
+        "Instant_2" : "TRANSITOIRE",
+        "DebitAccumule" : "TRANSITOIRE",
+        "DebitInjectionSecurite" : "TRANSITOIRE",
+        "TempInjectionSecurite_mess" : "TRANSITOIRE",
+        "DiametreHydraulique" : "TRANSITOIRE",
+        "DiametreHydraulique_mess" : "TRANSITOIRE",
+        "SectionEspaceAnnulaire" : "TRANSITOIRE",
+        "SectionEspaceAnnulaire_mess" : "TRANSITOIRE",
+        "HauteurCaracConvectionNaturelle" : "TRANSITOIRE",
+        "HauteurCaracConvectionNaturelle_mess" : "TRANSITOIRE",
+        "CritereConvergenceRelative" : "TRANSITOIRE",
+        "CoefficientsVestale" : "TRANSITOIRE",
+        "VolumeMelange_CREARE" : "TRANSITOIRE",
+        "VolumeMelange_CREARE_mess" : "TRANSITOIRE",
+        "TemperatureInitiale_CREARE" : "TRANSITOIRE",
+        "TemperatureInitiale_CREARE_mess" : "TRANSITOIRE",
+        "SurfaceEchange_FluideStructure" : "TRANSITOIRE",
+        "SurfaceEchange_FluideStructure_mess" : "TRANSITOIRE",
+         }
+
+   def gener(self,obj,format='brut'):
+      self.text=''
+      self.textCuve=''
+      self.dico_mot={}
+      self.dico_genea={}
+      self.text=PythonGenerator.gener(self,obj,format)
+      return self.text
+
+   def generMCSIMP(self,obj) :
+       self.dico_mot[obj.nom]=obj.valeur
+       clef=""
+       for i in obj.get_genealogie() :
+           clef=clef+"_"+i
+       self.dico_genea[clef]=obj.valeur
+       s=PythonGenerator.generMCSIMP(self,obj)
+       return s
+
+   def writeCuve2DG(self):
+      print "je passe dans writeCuve2DG"
+      self.genereTexteCuve()
+      f = open( "/tmp/data_template", 'wb')
+      print self.texteCuve
+      f.write( self.texteCuve )
+      f.close()
+
+   def entete(self):
+      '''
+      Ecrit l'entete du fichier data_template
+      '''
+      texte  = "############################################################################################"+"\n"
+      texte += "#"+"\n"
+      texte += "#                OUTIL D'ANALYSE PROBABILISTE DE LA DUREE DE VIE DES CUVES REP"+"\n"
+      texte += "#                                     ---------------"+"\n"
+      texte += "#                               FICHIER DE MISE EN DONNEES"+"\n"
+      texte += "#"+"\n"
+      texte += "# SI CALCUL DETERMINISTE :"+"\n"
+      texte += "#       - fixer INCRTPS=1, nbectDRTNDT=2., nbectKIc=-2."+"\n"
+      texte += "#       - les calculs ne sont possibles qu'en une seule pointe du defaut (POINDEF<>BOTH)"+"\n"
+      texte += "# SI CALCUL PROBABILISTE :"+"\n"
+      texte += "#       - fixer ARRETFISSURE=NON"+"\n"
+      texte += "#"+"\n"
+      texte += "############################################################################################"+"\n"
+      texte += "#"+"\n"
+      return texte
+
+   def rubrique(self, titre):
+      '''
+      Rubrique 
+      '''
+      texte  = "#"+"\n"
+      texte += "############################################################################################"+"\n"
+      texte += "# " + titre + "\n"
+      texte += "############################################################################################"+"\n"
+      texte += "#"+"\n"
+      return texte
+
+   def sousRubrique(self, soustitre, numtitre):
+      '''
+      Sous-rubrique 
+      '''
+      texte  = "#"+"\n"
+      texte += "# " + numtitre + soustitre + "\n"
+      texte += "#==========================================================================================="+"\n"
+      texte += "#"+"\n"
+      return texte
+
+   def ecritLigne(self, variablelue):
+      '''
+      Ecrit l'affectation d'une valeur a sa variable, suivie d'un commentaire
+      '''
+      texte = "%s = %s   # %s\n" % (self.variable[variablelue], str(self.dico_mot[variablelue]), self.comment[variablelue])
+      return texte
+
+   def affecteValeurDefaut(self, variablelue):
+      '''
+      Affecte une valeur par defaut a une variable, suivie d'un commentaire
+      '''
+      print "Warning ==> Dans la rubrique",self.bloc[variablelue],", valeur par defaut pour ",variablelue," = ",self.default[variablelue]
+      texte = "%s = %s   # %s\n" % (self.variable[variablelue], self.default[variablelue], self.comment[variablelue])
+      return texte
+
+   def affecteValeur(self, variablelue, valeuraffectee):
+      '''
+      Affecte une valeur a une variable, suivie d'un commentaire
+      '''
+      texte = "%s = %s   # %s\n" % (self.variable[variablelue], valeuraffectee, self.comment[variablelue])
+      return texte
+
+   def ecritVariable(self, variablelue):
+      if self.dico_mot.has_key(variablelue):
+         texte = self.ecritLigne(variablelue)
+      else :
+         texte = self.affecteValeurDefaut(variablelue)
+      return texte
+
+   def amontAval(self, amont, aval):
+      if str(self.dico_mot[amont])=='Continu':
+         if str(self.dico_mot[aval])=='Continu':
+            texte = 'CC'+"\n"
+        if str(self.dico_mot[aval])=='Lineaire':
+            texte = 'CL'+"\n"
+        if str(self.dico_mot[aval])=='Exclu':
+            texte = 'CE'+"\n"
+      if str(self.dico_mot[amont])=='Lineaire':
+         if str(self.dico_mot[aval])=='Continu':
+            texte = 'LC'+"\n"
+        if str(self.dico_mot[aval])=='Lineaire':
+            texte = 'LL'+"\n"
+        if str(self.dico_mot[aval])=='Exclu':
+            texte = 'LE'+"\n"
+      if str(self.dico_mot[amont])=='Exclu':
+         if str(self.dico_mot[aval])=='Continu':
+            texte = 'EC'+"\n"
+        if str(self.dico_mot[aval])=='Lineaire':
+            texte = 'EL'+"\n"
+        if str(self.dico_mot[aval])=='Exclu':
+            texte = 'EE'+"\n"
+      return texte
+
+   def genereTexteCuve(self):
+      self.texteCuve  = ""
+      self.texteCuve += self.entete()
+
+      # Rubrique OPTIONS
+      self.texteCuve += self.rubrique('OPTIONS')
+
+      self.texteCuve += self.sousRubrique('Impression a l ecran', '')
+      if self.dico_mot.has_key('NiveauImpression'):
+         if str(self.dico_mot["NiveauImpression"])=='Aucune impression':
+            self.texteCuve += self.affecteValeur('NiveauImpression', '0')
+         if str(self.dico_mot["NiveauImpression"])=='Temps total':
+            self.texteCuve += self.affecteValeur('NiveauImpression', '1')
+         if str(self.dico_mot["NiveauImpression"])=='Temps intermediaires':
+            self.texteCuve += self.affecteValeur('NiveauImpression', '2')
+
+      self.texteCuve += self.sousRubrique('Generation de fichiers', '')
+      self.texteCuve += self.ecritVariable('FichierDataIn')
+      self.texteCuve += self.ecritVariable('FichierTempSigma')
+      self.texteCuve += self.ecritVariable('FichierResultats')
+      self.texteCuve += self.ecritVariable('FichierCSV')
+      self.texteCuve += self.ecritVariable('FichierCREARE')
+
+      self.texteCuve += self.sousRubrique('Grandeur evaluee', '')
+      if self.dico_mot.has_key('GrandeurEvaluee'):
+         if str(self.dico_mot["GrandeurEvaluee"])=='Facteur de marge KIc/KCP':
+            self.texteCuve += self.affecteValeur('GrandeurEvaluee', 'FM_KICSURKCP')
+         if str(self.dico_mot["GrandeurEvaluee"])=='Marge KIc-KI':
+            self.texteCuve += self.affecteValeur('GrandeurEvaluee', 'MARGE_KI')
+         if str(self.dico_mot["GrandeurEvaluee"])=='Marge KIc-KCP':
+            self.texteCuve += self.affecteValeur('GrandeurEvaluee', 'MARGE_KCP')
+
+      self.texteCuve += self.sousRubrique('Divers', '')
+      self.texteCuve += self.ecritVariable('IncrementTemporel')
+      self.texteCuve += self.ecritVariable('IncrementMaxTemperature')
+      self.texteCuve += self.ecritVariable('IncrementMaxTempsAffichage')
+      if self.dico_mot.has_key('ListeInstants'):
+         self.texteCuve += "# liste des instants pour ecriture des resultats (s)"+"\n"
+         self.imprime(1,(self.dico_mot["ListeInstants"]))
+      else :
+         print "Warning ==> Dans la rubrique OPTIONS, fournir ListeInstants."
+         self.texteCuve += "# liste des instants pour ecriture des resultats (s)"+"\n"
+         self.texteCuve += "  0.\n"
+         self.texteCuve += "  1.\n"
+
+
+      # Rubrique DONNEES DE LA CUVE
+      self.texteCuve += self.rubrique('DONNEES DE LA CUVE')
+      if self.dico_mot.has_key('TraitementGeometrie'):
+         if str(self.dico_mot["TraitementGeometrie"])=='Topologie':
+            self.texteCuve += self.affecteValeur('TraitementGeometrie', 'GEOMETRIE')
+            self.texteCuve+="# - si MAILLAGE, fournir NBNO et liste des abscisses (m)"+"\n"
+            self.texteCuve+="# - si GEOMETRIE, fournir (RINT, RINT_MESSAGE),"+"\n"
+            self.texteCuve+="#                         (REXT, REXT_MESSAGE),"+"\n"
+            self.texteCuve+="#                         (LREV, LREV_MESSAGE),"+"\n"
+            self.texteCuve+="#                         (LIGMIN, LIGMIN_MESSAGE),"+"\n"
+            self.texteCuve+="#                         NBNO"+"\n"
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('RayonInterne')
+            self.texteCuve += self.ecritVariable('RayonInterne_mess')
+            self.texteCuve += self.ecritVariable('RayonExterne')
+            self.texteCuve += self.ecritVariable('RayonExterne_mess')
+            self.texteCuve += self.ecritVariable('EpaisseurRevetement')
+            self.texteCuve += self.ecritVariable('EpaisseurRevetement_mess')
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('LigamentExterneMin')
+            self.texteCuve += self.ecritVariable('LigamentExterneMin_mess')
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('NombreNoeudsMaillage')
+         if str(self.dico_mot["TraitementGeometrie"])=='Maillage':
+            self.texteCuve += self.affecteValeur('TraitementGeometrie', 'MAILLAGE')
+            self.texteCuve+="# - si MAILLAGE, fournir NBNO et liste des abscisses (m)"+"\n"
+            self.texteCuve+="# - si GEOMETRIE, fournir (RINT, RINT_MESSAGE),"+"\n"
+            self.texteCuve+="#                         (REXT, REXT_MESSAGE),"+"\n"
+            self.texteCuve+="#                         (LREV, LREV_MESSAGE),"+"\n"
+            self.texteCuve+="#                         (LIGMIN, LIGMIN_MESSAGE),"+"\n"
+            self.texteCuve+="#                         NBNO"+"\n"
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('NombreNoeudsMaillage')
+            self.imprime(1,(self.dico_mot["ListeAbscisses"]))
+      else :
+         self.texteCuve += self.affecteValeurDefaut('TraitementGeometrie')
+         self.texteCuve+="# - si MAILLAGE, fournir NBNO et liste des abscisses (m)"+"\n"
+         self.texteCuve+="# - si GEOMETRIE, fournir (RINT, RINT_MESSAGE),"+"\n"
+         self.texteCuve+="#                         (REXT, REXT_MESSAGE),"+"\n"
+         self.texteCuve+="#                         (LREV, LREV_MESSAGE),"+"\n"
+         self.texteCuve+="#                         (LIGMIN, LIGMIN_MESSAGE),"+"\n"
+         self.texteCuve+="#                         NBNO"+"\n"
+         self.texteCuve+="#"+"\n"
+         self.texteCuve += self.affecteValeurDefaut('RayonInterne')
+         self.texteCuve += self.affecteValeurDefaut('RayonInterne_mess')
+         self.texteCuve += self.affecteValeurDefaut('RayonExterne')
+         self.texteCuve += self.affecteValeurDefaut('RayonExterne_mess')
+         self.texteCuve += self.affecteValeurDefaut('EpaisseurRevetement')
+         self.texteCuve += self.affecteValeurDefaut('EpaisseurRevetement_mess')
+         self.texteCuve+="#"+"\n"
+         self.texteCuve += self.affecteValeurDefaut('LigamentExterneMin')
+         self.texteCuve += self.affecteValeurDefaut('LigamentExterneMin_mess')
+         self.texteCuve+="#"+"\n"
+         self.texteCuve += self.affecteValeurDefaut('NombreNoeudsMaillage')
+
+
+      # Rubrique CARACTERISTIQUES DU DEFAUT
+      self.texteCuve += self.rubrique('CARACTERISTIQUES DU DEFAUT')
+
+      if self.dico_mot.has_key('TypeInitial'):
+         if str(self.dico_mot["TypeInitial"])=='Defaut Sous Revetement':
+            self.texteCuve += self.affecteValeur('TypeInitial', 'DSR')
+         if str(self.dico_mot["TypeInitial"])=='Defaut Decale':
+            self.texteCuve += self.affecteValeur('TypeInitial', 'DECALE')
+         if str(self.dico_mot["TypeInitial"])=='Defaut Debouchant':
+            self.texteCuve += self.affecteValeur('TypeInitial', 'DEBOUCHANT')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('TypeInitial')
+
+      self.texteCuve+="# Fournir ORIEDEF, (PROFDEF, PROFDEF_MESSAGE)"+"\n"
+      self.texteCuve+="# - Si DSR, fournir OPTLONG, (LONGDEF,LONGDEF_MESSAGE) ou (PROFSURLONG,PROFSURLONG_MESSAGE,LONGCONST)"+"\n"
+      self.texteCuve+="# - Si DECALE, fournir OPTLONG, (LONGDEF,LONGDEF_MESSAGE) ou (PROFSURLONG,PROFSURLONG_MESSAGE,LONGCONST), DECATYP, (DECANOR,DECANOR_MESSAGE) ou (DECADEF,DECADEF_MESSAGE)"+"\n"
+      self.texteCuve+="# - Si DEBOUCHANT, fournir IRWIN"+"\n"
+      self.texteCuve+="# Fournir (ANGLDEF, ANGLDEF_MESSAGE), (ALTIDEF, ALTIDEF_MESSAGE)"+"\n"
+      self.texteCuve+="# - Si DSR ou DECALE, fournir POINDEF"+"\n"
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Remarque :"+"\n"
+      self.texteCuve+="# - si DSR ou DECALE, dans la rubrique 'Modele de tenacite', fournir ATTNCORRBETA (ne pas fournir CORRIRWIN)"+"\n"
+      self.texteCuve+="# - si DEBOUCHANT,    dans la rubrique 'Modele de tenacite', fournir CORRIRWIN    (ne pas fournir ATTNCORRBETA)"+"\n"
+
+      self.texteCuve+="#"+"\n"
+
+      if self.dico_mot.has_key('Orientation'):
+         if str(self.dico_mot["Orientation"])=='Longitudinale':
+            self.texteCuve += self.affecteValeur('Orientation', 'LONGITUD')
+         if str(self.dico_mot["Orientation"])=='Circonferentielle':
+            self.texteCuve += self.affecteValeur('Orientation', 'CIRCONF')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('Orientation')
+        
+      self.texteCuve+="#"+"\n"
+      self.texteCuve += self.ecritVariable('ProfondeurRadiale')
+      self.texteCuve += self.ecritVariable('ProfondeurRadiale_mess')
+
+      self.texteCuve+="#"+"\n"
+      if self.dico_mot.has_key('ModeCalculLongueur'):
+         if str(self.dico_mot["ModeCalculLongueur"])=='Valeur':
+            self.texteCuve += self.affecteValeur('ModeCalculLongueur', 'VALEUR')
+            self.texteCuve+="# - Si VALEUR,    fournir (LONGDEF, LONGDEF_MESSAGE)"+"\n"
+            self.texteCuve+="# - Si FCTAFFINE, fournir (PROFSURLONG, PROFSURLONG_MESSAGE) et LONGCONST : LONGDEF=PROFDEF/PROFSURLONG + LONGCONST"+"\n"
+            self.texteCuve += self.ecritVariable('Longueur')
+            self.texteCuve += self.ecritVariable('Longueur_mess')
+         if str(self.dico_mot["ModeCalculLongueur"])=='Fonction affine de la profondeur':
+            self.texteCuve += self.affecteValeur('ModeCalculLongueur', 'FCTAFFINE')
+            self.texteCuve+="# - Si VALEUR,    fournir (LONGDEF, LONGDEF_MESSAGE)"+"\n"
+            self.texteCuve+="# - Si FCTAFFINE, fournir (PROFSURLONG, PROFSURLONG_MESSAGE) et LONGCONST : LONGDEF=PROFDEF/PROFSURLONG + LONGCONST"+"\n"
+            self.texteCuve += self.ecritVariable('CoefDirecteur')
+            self.texteCuve += self.ecritVariable('CoefDirecteur_mess')
+            self.texteCuve += self.ecritVariable('Constante')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('ModeCalculLongueur')
+         self.texteCuve+="# - Si VALEUR,    fournir (LONGDEF, LONGDEF_MESSAGE)"+"\n"
+         self.texteCuve+="# - Si FCTAFFINE, fournir (PROFSURLONG, PROFSURLONG_MESSAGE) et LONGCONST : LONGDEF=PROFDEF/PROFSURLONG + LONGCONST"+"\n"
+         self.texteCuve += self.affecteValeurDefaut('Longueur')
+         self.texteCuve += self.affecteValeurDefaut('Longueur_mess')
+
+      if self.dico_mot.has_key('TypeInitial'):
+         if str(self.dico_mot["TypeInitial"])!='Defaut Sous Revetement':
+            self.texteCuve+="#"+"\n"
+            if self.dico_mot.has_key('ModeCalculDecalage'):
+               if str(self.dico_mot["ModeCalculDecalage"])=='Valeur normalisee':
+                  self.texteCuve += self.affecteValeur('ModeCalculDecalage', 'NORMALISE')
+                  self.texteCuve+="# - Si NORMALISE, fournir (DECANOR, DECANOR_MESSAGE)"+"\n"
+                  self.texteCuve+="# - Si VALEUR,    fournir (DECADEF, DECADEF_MESSAGE)"+"\n"
+                  self.texteCuve += self.ecritVariable('DecalageNormalise')
+                  self.texteCuve += self.ecritVariable('DecalageNormalise_mess')
+               if str(self.dico_mot["ModeCalculDecalage"])=='Valeur':
+                  self.texteCuve += self.affecteValeur('ModeCalculDecalage', 'VALEUR')
+                  self.texteCuve+="# - Si NORMALISE, fournir (DECANOR, DECANOR_MESSAGE)"+"\n"
+                  self.texteCuve+="# - Si VALEUR,    fournir (DECADEF, DECADEF_MESSAGE)"+"\n"
+                  self.texteCuve += self.ecritVariable('DecalageRadial')
+                  self.texteCuve += self.ecritVariable('DecalageRadial_mess')
+            else :
+               self.texteCuve += self.affecteValeurDefaut('ModeCalculDecalage')
+               self.texteCuve+="# - Si NORMALISE, fournir (DECANOR, DECANOR_MESSAGE)"+"\n"
+               self.texteCuve+="# - Si VALEUR, fournir (DECADEF, DECADEF_MESSAGE)"+"\n"
+               self.texteCuve += self.affecteValeurDefaut('DecalageRadial')
+               self.texteCuve += self.affecteValeurDefaut('DecalageRadial_mess')
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve += self.ecritVariable('Azimut')
+      self.texteCuve += self.ecritVariable('Azimut_mess')
+      self.texteCuve+="#"+"\n"
+      self.texteCuve += self.ecritVariable('Altitude')
+      self.texteCuve += self.ecritVariable('Altitude_mess')
+      self.texteCuve+="#"+"\n"
+      if self.dico_mot.has_key('Pointe'):
+         if str(self.dico_mot["Pointe"])=='A':
+            self.texteCuve += self.affecteValeur('Pointe', 'A')
+         if str(self.dico_mot["Pointe"])=='B':
+            self.texteCuve += self.affecteValeur('Pointe', 'B')
+         if str(self.dico_mot["Pointe"])=='A et B':
+            self.texteCuve += self.affecteValeur('Pointe', 'BOTH')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('Pointe')
+
+      # Rubrique MODELES FLUENCE, IRRADIATION, TENACITE
+      self.texteCuve += self.rubrique('MODELES FLUENCE, IRRADIATION, TENACITE')
+      self.texteCuve += self.sousRubrique('Modele d attenuation de la fluence dans l epaisseur','A.')
+
+      if self.dico_mot.has_key('ModeleFluence'):
+         if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=9.7 (Reglementaire)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'Reglementaire')
+         if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=12.7 (France)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'France')
+         if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=0. (ValeurImposee)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'ValeurImposee')
+         if str(self.dico_mot["ModeleFluence"])=='Donnees francaises du palier CPY (SDM)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'SDM')
+         if str(self.dico_mot["ModeleFluence"])=='Regulatory Guide 1.99 rev 2 (USNRC)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'USNRC')
+         if str(self.dico_mot["ModeleFluence"])=='Dossier 900 MWe AP9701 rev 2 (REV_2)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'REV_2')
+         if str(self.dico_mot["ModeleFluence"])=='Lissage du modele ajuste (SDM_Lissage)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'SDM_Lissage')
+         if str(self.dico_mot["ModeleFluence"])=='Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'GrandeDev')
+         if str(self.dico_mot["ModeleFluence"])=='Grand developpement (GD_Cuve)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'GD_Cuve')
+         if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=9.7 (Reglementaire CUVE1D)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'Cuve1D')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('ModeleFluence')
+
+      self.texteCuve+="# - si France,          fournir KPFRANCE"+"\n"
+      self.texteCuve+="# - si USNRC,           fournir KPUS"+"\n"
+      self.texteCuve+="# - si modele GD_Cuve,  fournir COEFFLUENCE1, COEFFLUENCE2, ..., COEFFLUENCE9, COEFFLUENCE10"+"\n"
+      self.texteCuve+="#"+"\n"
+
+      self.texteCuve += self.ecritVariable('ZoneActiveCoeur_AltitudeSup')
+      self.texteCuve += self.ecritVariable('ZoneActiveCoeur_AltitudeInf')
+      self.texteCuve += self.ecritVariable('FluenceMax')
+      if self.dico_mot.has_key('ModeleFluence'):
+         if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=12.7 (France)':
+            self.texteCuve += self.ecritVariable('KPFrance')
+         if str(self.dico_mot["ModeleFluence"])=='Regulatory Guide 1.99 rev 2 (USNRC)':
+            self.texteCuve += self.ecritVariable('KPUS')
+         if str(self.dico_mot["ModeleFluence"])=='Grand developpement (GD_Cuve)':
+            self.texteCuve += self.ecritVariable('Azimut_0deg')
+            self.texteCuve += self.ecritVariable('Azimut_5deg')
+            self.texteCuve += self.ecritVariable('Azimut_10deg')
+            self.texteCuve += self.ecritVariable('Azimut_15deg')
+            self.texteCuve += self.ecritVariable('Azimut_20deg')
+            self.texteCuve += self.ecritVariable('Azimut_25deg')
+            self.texteCuve += self.ecritVariable('Azimut_30deg')
+            self.texteCuve += self.ecritVariable('Azimut_35deg')
+            self.texteCuve += self.ecritVariable('Azimut_40deg')
+            self.texteCuve += self.ecritVariable('Azimut_45deg')
+
+      self.texteCuve += self.sousRubrique('Irradiation','B.')
+
+      if self.dico_mot.has_key('TypeIrradiation'):
+
+         if str(self.dico_mot["TypeIrradiation"])=='RTndt de la cuve a l instant de l analyse':
+            self.texteCuve += self.affecteValeur('TypeIrradiation', 'RTNDT')
+            self.texteCuve+="# - si RTNDT, fournir RTNDT"+"\n"
+            self.texteCuve+="# - si FLUENCE, fournir MODELIRR, et autres parametres selon MODELIRR (voir ci-dessous)"+"\n"
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('RTNDT')
+
+         if str(self.dico_mot["TypeIrradiation"])=='Modele d irradiation':
+            self.texteCuve += self.affecteValeur('TypeIrradiation', 'FLUENCE')
+            self.texteCuve+="# - si RTNDT, fournir RTNDT"+"\n"
+            self.texteCuve+="# - si FLUENCE, fournir MODELIRR, et autres parametres selon MODELIRR (voir ci-dessous)"+"\n"
+            self.texteCuve+="#"+"\n"
+            if self.dico_mot.has_key('ModeleIrradiation'):
+               if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Houssin':
+                  self.texteCuve += self.affecteValeur('ModeleIrradiation', 'HOUSSIN')
+               if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Persoz':
+                  self.texteCuve += self.affecteValeur('ModeleIrradiation', 'PERSOZ')
+               if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Lefebvre':
+                  self.texteCuve += self.affecteValeur('ModeleIrradiation', 'LEFEBVRE')
+               if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : Regulatory Guide 1.00 rev 2':
+                  self.texteCuve += self.affecteValeur('ModeleIrradiation', 'USNRCmdb')
+               if str(self.dico_mot["ModeleIrradiation"])=='Joint Soude : formulation de FIM/FIS Brillaud':
+                  self.texteCuve += self.affecteValeur('ModeleIrradiation', 'BRILLAUD')
+               if str(self.dico_mot["ModeleIrradiation"])=='Joint Soude : Regulatory Guide 1.00 rev 2':
+                  self.texteCuve += self.affecteValeur('ModeleIrradiation', 'USNRCsoud')
+            else :
+              self.texteCuve += self.affecteValeurDefaut('ModeleIrradiation')
+            self.texteCuve+="# - pour tout modele,                       fournir (CU, CU_MESSAGE),"+"\n"
+            self.texteCuve+="#                                                   (NI, NI_MESSAGE),"+"\n"
+            self.texteCuve+="# - si HOUSSIN, PERSOZ, LEFEBVRE, BRILLAUD, fournir (P, P_MESSAGE)"+"\n"
+            self.texteCuve+="# - pour tout modele,                       fournir (RTimoy, RTimoy_MESSAGE),"+"\n"
+            self.texteCuve+="# - si USNRCsoud ou USNRCmdb,               fournir (RTicov, RTicov_MESSAGE)"+"\n"
+            self.texteCuve+="#                                                   (USectDRT, USectDRT_MESSAGE)"+"\n"
+            self.texteCuve+="# - pour tout modele,                       fournir (nbectDRTNDT, nbectDRTNDT_MESSAGE)"+"\n"
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('TeneurCuivre')
+            self.texteCuve += self.ecritVariable('TeneurCuivre_mess')
+            self.texteCuve += self.ecritVariable('TeneurNickel')
+            self.texteCuve += self.ecritVariable('TeneurNickel_mess')
+            if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Houssin' or str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Persoz' or str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Lefebvre' or str(self.dico_mot["ModeleIrradiation"])=='Joint Soude : formulation de FIM/FIS Brillaud':
+               self.texteCuve += self.ecritVariable('TeneurPhosphore')
+               self.texteCuve += self.ecritVariable('TeneurPhosphore_mess')
+            self.texteCuve += self.ecritVariable('MoyenneRTndt')
+            self.texteCuve += self.ecritVariable('MoyenneRTndt_mess')
+            if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : Regulatory Guide 1.00 rev 2' or str(self.dico_mot["ModeleIrradiation"])=='Joint Soude : Regulatory Guide 1.00 rev 2':
+               self.texteCuve += self.ecritVariable('CoefVariationRTndt')
+               self.texteCuve += self.ecritVariable('CoefVariationRTndt_mess')
+               self.texteCuve += self.ecritVariable('EcartTypeRTndt')
+               self.texteCuve += self.ecritVariable('EcartTypeRTndt_mess')
+            self.texteCuve += self.ecritVariable('NombreEcartTypeRTndt')
+            self.texteCuve += self.ecritVariable('NombreEcartTypeRTndt_mess')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('TypeIrradiation')
+         self.texteCuve+="# - si RTNDT, fournir RTNDT"+"\n"
+         self.texteCuve+="# - si FLUENCE, fournir MODELIRR, et autres parametres selon MODELIRR (voir ci-dessous)"+"\n"
+         self.texteCuve+="#"+"\n"
+         self.texteCuve += self.affecteValeurDefaut('RTNDT')
+
+      self.texteCuve += self.sousRubrique('Modele de tenacite','C.')
+      self.texteCuve+="# tenacite d amorcage"+"\n"
+
+      if self.dico_mot.has_key('ModeleTenacite'):
+         if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'RCC-M')
+         if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2 CUVE1D':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'RCC-M_simpl')
+         if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2.33 (Houssin)':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'Houssin_RC')
+         if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME avec KI=KIpalier':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'RCC-M_pal')
+         if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME avec KI~exponentiel':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'RCC-M_exp')
+         if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'Wallin')
+         if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve (REME)':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'REME')
+         if str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb01 (etude ORNL)':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'ORNL')
+         if str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb02':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'WEIB2')
+         if str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb03':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'WEIB3')
+         if str(self.dico_mot["ModeleTenacite"])=='Weibull generalisee':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'WEIB_GEN')
+         if str(self.dico_mot["ModeleTenacite"])=='Exponentielle n\xb01 (Frama)':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'Frama')
+         if str(self.dico_mot["ModeleTenacite"])=='Exponentielle n\xb02 (LOGWOLF)':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'LOGWOLF')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('ModeleTenacite')
+      self.texteCuve+="# - si RCC-M, RCC-M_pal, Houssin_RC, fournir (nbectKIc, nbectKIc_MESSAGE), KICPAL, KICCDV"+"\n"
+      self.texteCuve+="# - si RCC-M_exp,                    fournir (nbectKIc, nbectKIc_MESSAGE), KICCDV"+"\n"
+      self.texteCuve+="# - si RCC-M_simpl,                  ne rien fournir"+"\n"
+      self.texteCuve+="# - si Frama, LOGWOLF,               fournir (nbectKIc, nbectKIc_MESSAGE)"+"\n"
+      self.texteCuve+="# - si REME, ORNL, WEIB3, WEIB2,     fournir NBCARAC, puis (nbectKIc, nbectKIc_MESSAGE) ou (fractKIc, fractKIc_MESSAGE) selon valeur de NBCARAC"+"\n"
+      self.texteCuve+="# - si Wallin,                       fournir NBCARAC, puis (nbectKIc, nbectKIc_MESSAGE) ou (fractKIc, fractKIc_MESSAGE) selon valeur de NBCARAC,"+"\n"
+      self.texteCuve+="#                                                     puis T0WALLIN"+"\n"
+      self.texteCuve+="# - si WEIB-GEN,                     fournir NBCARAC, puis (nbectKIc, nbectKIc_MESSAGE) ou (fractKIc, fractKIc_MESSAGE) selon valeur de NBCARAC,"+"\n"
+      self.texteCuve+="#                                                     puis A1, A2, A3, B1, B2, B3, C1, C2, C3"+"\n"
+      self.texteCuve+="#   loi de Weibull P(K<x) = 1 - exp{-[ (x-a(T)) / b(T) ]^c(T) }"+"\n"
+      self.texteCuve+="#   avec        a(T) = A1 + A2*exp[A3*(T-RTNDT)]"+"\n"
+      self.texteCuve+="#               b(T) = B1 + B2*exp[B3*(T-RTNDT)]"+"\n"
+      self.texteCuve+="#               c(T) = C1 + C2*exp[C3*(T-RTNDT)]"+"\n"
+      self.texteCuve+="#"+"\n"
+      if self.dico_mot.has_key('ModeleTenacite'):
+         if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb01 (etude ORNL)' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb03' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb02' :
+            self.texteCuve += self.ecritVariable('NBRE_CARACTERISTIQUE')
+            self.texteCuve+="# - Si CARAC = QUANTILE, fournir (nbectKIc, nbectKIc_MESSAGE)"+"\n"
+            self.texteCuve+="# - Si CARAC = ORDRE,    fournir (fractKIc, fractKIc_MESSAGE)"+"\n"
+
+         if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2' or str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME avec KI=KIpalier' or str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2.33 (Houssin)' :
+            self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc')
+            self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc_mess')
+            self.texteCuve += self.ecritVariable('PalierDuctile_KIc')
+            self.texteCuve += self.ecritVariable('CoefficientVariation_KIc')
+
+         if str(self.dico_mot["ModeleTenacite"])=='Exponentielle n\xb01 (Frama)' or str(self.dico_mot["ModeleTenacite"])=='Exponentielle n\xb02 (LOGWOLF)' :
+            self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc')
+            self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc_mess')
+
+         if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve (REME)' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb01 (etude ORNL)' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb03' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb02' or str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve' or str(self.dico_mot["ModeleTenacite"])=='Weibull generalisee':
+            if str(self.dico_mot["NBRE_CARACTERISTIQUE"])=='QUANTILE' :
+               self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc')
+               self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc_mess')
+            if str(self.dico_mot["NBRE_CARACTERISTIQUE"])=='ORDRE' :
+               self.texteCuve += self.ecritVariable('Fractile_KIc')
+               self.texteCuve += self.ecritVariable('Fractile_KIc_mess')
+
+            if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve' :
+               self.texteCuve += self.ecritVariable('Temperature_KIc100')
+
+            if str(self.dico_mot["ModeleTenacite"])=='Weibull generalisee' :
+               self.texteCuve += self.ecritVariable('A1')
+               self.texteCuve += self.ecritVariable('A2')
+               self.texteCuve += self.ecritVariable('A3')
+               self.texteCuve += self.ecritVariable('B1')
+               self.texteCuve += self.ecritVariable('B2')
+               self.texteCuve += self.ecritVariable('B3')
+               self.texteCuve += self.ecritVariable('C1')
+               self.texteCuve += self.ecritVariable('C2')
+               self.texteCuve += self.ecritVariable('C3')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('NbEcartType_MoyKIc')
+         self.texteCuve += self.affecteValeurDefaut('NbEcartType_MoyKIc_mess')
+         self.texteCuve += self.affecteValeurDefaut('PalierDuctile_KIc')
+         self.texteCuve += self.affecteValeurDefaut('CoefficientVariation_KIc')
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Correction plastique"+"\n"
+
+      if self.dico_mot.has_key('CorrectionPlastique'):
+         if str(self.dico_mot["CorrectionPlastique"])=='Correction plastique BETA (pour DSR et defaut decale)':
+            self.texteCuve += self.affecteValeur('AttnCorrBeta','NON')
+         if str(self.dico_mot["CorrectionPlastique"])=='Correction plastique BETA attenuee (pour DSR et defaut decale)':
+            self.texteCuve += self.affecteValeur('AttnCorrBeta','OUI')
+         if str(self.dico_mot["CorrectionPlastique"])=='Correction plastique IRWIN (pour defaut debouchant)':
+            self.texteCuve += self.affecteValeur('CorrIrwin','OUI')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('AttnCorrBeta')
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Prise en compte de l'arret de fissure si DETERMINISTE"+"\n"
+
+      self.texteCuve += self.ecritVariable('ArretDeFissure')
+      self.texteCuve+="# - si ARRETFISSURE=OUI, fournir (INCRDEF, INCRDEF_MESSAGE), nbectKIa, KIAPAL, KIACDV"+"\n"
+      if self.dico_mot.has_key('ArretDeFissure'):
+         if str(self.dico_mot["ArretDeFissure"])=='OUI':
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('IncrementTailleFissure')
+            self.texteCuve += self.ecritVariable('IncrementTailleFissure_mess')
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# Parametres pour le calcul de la tenacite a l arret"+"\n"
+            self.texteCuve += self.ecritVariable('NbEcartType_MoyKIa')
+            self.texteCuve += self.ecritVariable('PalierDuctile_KIa')
+            self.texteCuve += self.ecritVariable('CoefficientVariation_KIa')
+
+      # Rubrique Etat initial
+      self.texteCuve += self.rubrique('ETAT INITIAL')
+
+      self.texteCuve+="# Profil radial de la temperature initiale dans la cuve"+"\n"
+      self.texteCuve+="# abscisse (m) / temp initiale dans la cuve"+"\n"
+      self.texteCuve+="# Prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+      if self.dico_mot.has_key('ProfilRadial_TemperatureInitiale'):
+         self.imprime(2,(self.dico_mot["ProfilRadial_TemperatureInitiale"]))
+         self.texteCuve += self.amontAval('Amont_TemperatureInitiale','Aval_TemperatureInitiale')
+      else :
+         self.texteCuve+="    1.9940    287."+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Profils radiaux des contraintes résiduelles dans la cuve"+"\n"
+      self.texteCuve+="# abscisse (m) / sigma rr / sigma tt / sigma zz"+"\n"
+      self.texteCuve+="# Prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+      if self.dico_mot.has_key('ProfilRadial_ContraintesInitiales'):
+         self.imprime(4,(self.dico_mot["ProfilRadial_ContraintesInitiales"]))
+         self.texteCuve += self.amontAval('Amont_ContraintesInitiales','Aval_ContraintesInitiales')
+      else :
+         self.texteCuve+="1.994     0. 0.  0."+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Instant initial"+"\n"
+      self.texteCuve += self.ecritVariable('InstantInitialisation')
+
+      # Rubrique CARACTERISTIQUES DU REVETEMENT
+      self.texteCuve += self.rubrique('CARACTERISTIQUES DU REVETEMENT')
+
+      self.texteCuve += self.ecritVariable('ConditionLimiteThermiqueREV')
+      self.texteCuve+="# - si CHALEUR,   fournir Temperature (°C) / chaleur volumique (J/kg/K)"+"\n"
+      self.texteCuve+="# - si ENTHALPIE, fournir Temperature (°C) / enthalpie (J/kg)"+"\n"
+      self.texteCuve+="# Finir chacune des listes par la prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+      self.texteCuve+="#"+"\n"
+      if self.dico_mot.has_key('ChaleurREV_Fct_Temperature'):
+         self.texteCuve+="# Temperature (°C) / chaleur volumique (J/kg/K)"+"\n"
+         self.imprime(2,(self.dico_mot["ChaleurREV_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_ChaleurREV','Aval_ChaleurREV')
+      elif self.dico_mot.has_key('EnthalpieREV_Fct_Temperature'):
+         self.texteCuve+="# Temperature (°C) / enthalpie (J/kg)"+"\n"
+         self.imprime(2,(self.dico_mot["EnthalpieREV_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_EnthalpieREV','Aval_EnthalpieREV')
+      else :
+         self.texteCuve+="# Temperature (°C) / chaleur volumique (J/kg/K)"+"\n"
+         self.texteCuve+="0.    36.03E5 "+"\n"
+         self.texteCuve+="20.   36.03E5 "+"\n"
+         self.texteCuve+="200.  41.65E5 "+"\n"
+         self.texteCuve+="350.  43.47E5 "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Temperature (°C) / conductivite thermique (W/m/°C)"+"\n"
+      if self.dico_mot.has_key('ConductiviteREV_Fct_Temperature'):
+         self.imprime(2,(self.dico_mot["ConductiviteREV_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_ConductiviteREV','Aval_ConductiviteREV')
+      else :
+         self.texteCuve+="0.    14.7 "+"\n"
+         self.texteCuve+="20.   14.7 "+"\n"
+         self.texteCuve+="200.  17.2 "+"\n"
+         self.texteCuve+="350.  19.3 "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Temperature (°C) / module d'Young (MPa)"+"\n"
+      if self.dico_mot.has_key('ModuleYoungREV_Fct_Temperature'):
+         self.imprime(2,(self.dico_mot["ModuleYoungREV_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_ModuleYoungREV','Aval_ModuleYoungREV')
+      else :
+         self.texteCuve+="0.    198500. "+"\n"
+         self.texteCuve+="20.   197000. "+"\n"
+         self.texteCuve+="200.  184000. "+"\n"
+         self.texteCuve+="350.  172000. "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Temperature (°C) / coefficient de dilatation thermique (°C-1)"+"\n"
+      if self.dico_mot.has_key('CoeffDilatThermREV_Fct_Temperature'):
+         self.imprime(2,(self.dico_mot["CoeffDilatThermREV_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_CoeffDilatThermREV','Aval_CoeffDilatThermREV')
+      else :
+         self.texteCuve+="0.    16.40E-6 "+"\n"
+         self.texteCuve+="20.   16.40E-6 "+"\n"
+         self.texteCuve+="200.  17.20E-6 "+"\n"
+         self.texteCuve+="350.  17.77E-6 "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Temperature (°C) / limite d'elasticite (MPa)"+"\n"
+      if self.dico_mot.has_key('LimiteElasticiteREV_Fct_Temperature'):
+         self.imprime(2,(self.dico_mot["LimiteElasticiteREV_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_LimiteElasticiteREV','Aval_LimiteElasticiteREV')
+      else :
+         self.texteCuve+="0.    380. "+"\n"
+         self.texteCuve+="20.   370. "+"\n"
+         self.texteCuve+="100.  330. "+"\n"
+         self.texteCuve+="300.  270. "+"\n"
+         self.texteCuve+="LL"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve += self.ecritVariable('TemperatureDeformationNulleREV')
+      self.texteCuve += self.ecritVariable('TemperaturePourCoefDilatThermREV')
+      self.texteCuve += self.ecritVariable('CoefficientPoissonREV')
+
+      # Rubrique CARACTERISTIQUES DU METAL DE BASE
+      self.texteCuve += self.rubrique('CARACTERISTIQUES DU METAL DE BASE')
+
+      self.texteCuve += self.ecritVariable('ConditionLimiteThermiqueMDB')
+
+      self.texteCuve+="# - si CHALEUR,   fournir Temperature (°C) / chaleur volumique (J/kg/K)"+"\n"
+      self.texteCuve+="# - si ENTHALPIE, fournir Temperature (°C) / enthalpie (J/kg)"+"\n"
+      self.texteCuve+="# Finir chacune des listes par la prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+      self.texteCuve+="#"+"\n"
+
+      if self.dico_mot.has_key('ChaleurMDB_Fct_Temperature'):
+         self.texteCuve+="# Temperature (°C) / chaleur volumique (J/kg/K)"+"\n"
+         self.imprime(2,(self.dico_mot["ChaleurMDB_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_ChaleurMDB','Aval_ChaleurMDB')
+      elif self.dico_mot.has_key('EnthalpieMDB_Fct_Temperature'):
+         self.texteCuve+="# Temperature (°C) / enthalpie (J/kg)"+"\n"
+         self.imprime(2,(self.dico_mot["EnthalpieMDB_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_EnthalpieMDB','Aval_EnthalpieMDB')
+      else :
+         self.texteCuve+="# Temperature (°C) / chaleur volumique (J/kg/K)"+"\n"
+         self.texteCuve+="0.    34.88E+05 "+"\n"
+         self.texteCuve+="20.   34.88E+05 "+"\n"
+         self.texteCuve+="200.  40.87E+05 "+"\n"
+         self.texteCuve+="350.  46.02E+05 "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Temperature (°C) / conductivite thermique (W/m/°C)"+"\n"
+      if self.dico_mot.has_key('ConductiviteMDB_Fct_Temperature'):
+         self.imprime(2,(self.dico_mot["ConductiviteMDB_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_ConductiviteMDB','Aval_ConductiviteMDB')
+      else :
+         self.texteCuve+="0.    37.7 "+"\n"
+         self.texteCuve+="20.   37.7 "+"\n"
+         self.texteCuve+="200.  40.5 "+"\n"
+         self.texteCuve+="350.  38.7 "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Temperature (°C) / module d'Young (MPa)"+"\n"
+      if self.dico_mot.has_key('ModuleYoungMDB_Fct_Temperature'):
+         self.imprime(2,(self.dico_mot["ModuleYoungMDB_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Aval_ModuleYoungMDB','Aval_ModuleYoungMDB')
+      else :
+         self.texteCuve+="0.    205000. "+"\n"
+         self.texteCuve+="20.   204000. "+"\n"
+         self.texteCuve+="200.  193000. "+"\n"
+         self.texteCuve+="350.  180000. "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Temperature (°C) / coefficient de dilatation thermique (°C-1)"+"\n"
+      if self.dico_mot.has_key('CoeffDilatThermMDB_Fct_Temperature'):
+         self.imprime(2,(self.dico_mot["CoeffDilatThermMDB_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_CoeffDilatThermMDB','Aval_CoeffDilatThermMDB')
+      else :
+         self.texteCuve+="0.    11.22E-6 "+"\n"
+         self.texteCuve+="20.   11.22E-6 "+"\n"
+         self.texteCuve+="200.  12.47E-6 "+"\n"
+         self.texteCuve+="350.  13.08E-6 "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve += self.ecritVariable('TemperatureDeformationNulleMDB')
+      self.texteCuve += self.ecritVariable('TemperaturePourCoefDilatThermMDB')
+      self.texteCuve += self.ecritVariable('CoefficientPoissonMDB')
+
+      # Rubrique CARACTERISTIQUES DU TRANSITOIRE MECANIQUE-THERMOHYDRAULIQUE
+      self.texteCuve += self.rubrique('CARACTERISTIQUES DU TRANSITOIRE MECANIQUE-THERMOHYDRAULIQUE')
+      self.texteCuve += self.sousRubrique('Chargement mecanique : transitoire de pression','')
+
+      self.texteCuve+="# instant (s) / pression (MPa)"+"\n"
+      self.texteCuve+="# Prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+      if self.dico_mot.has_key('ProfilTemporel_Pression'):
+         self.imprime(2,(self.dico_mot["ProfilTemporel_Pression"]))
+         self.texteCuve += self.amontAval('Amont_Pression','Aval_Pression')
+      else :
+         self.texteCuve+="0.    15.5 "+"\n"
+         self.texteCuve+="20.   0.1 "+"\n"
+         self.texteCuve+="200.  0.1 "+"\n"
+         self.texteCuve+="1000. 0.1 "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve += self.sousRubrique('Chargement thermo-hydraulique','')
+      if self.dico_mot.has_key('TypeConditionLimiteThermique'):
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee en paroi':
+            self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'TEMP_IMPO')
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Flux de chaleur impose en paroi':
+            self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'FLUX_REP')
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et coefficient echange':
+            self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'ECHANGE')
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Debit massique et temperature d injection de securite':
+            self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'DEBIT')
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et debit d injection de securite':
+            self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'TEMP_FLU')
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP':
+            self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'APRP')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('TypeConditionLimiteThermique')
+
+      self.texteCuve+="# - si TEMP_IMPO, fournir Instant (s) / Temperature imposee (°C)"+"\n"
+      self.texteCuve+="# - si FLUX_REP,  fournir Instant (s) / Flux de chaleur impose (W/m2)"+"\n"
+      self.texteCuve+="# - si ECHANGE,   fournir Instant (s) / Temperature impose (°C)"+"\n"
+      self.texteCuve+="#                    puis Instant (s) / Coefficient d echange (W/m2/K)"+"\n"
+      self.texteCuve+="# - si DEBIT,     fournir Instant (s) / Debit massique (kg/s)"+"\n"
+      self.texteCuve+="#                    puis Instant (s) / Temperature d injection de securite  (°C)"+"\n"
+      self.texteCuve+="#                    puis Modele VESTALE : (DH, DH_MESSAGE), (SECTION, SECTION_MESSAGE), (DELTA, DELTA_MESSAGE), EPS, COEFVESTALE"+"\n"
+      self.texteCuve+="#                    puis Modele CREARE  : (VM, VM_MESSAGE), (T0, T0_MESSAGE), (SE, SE_MESSAGE)"+"\n"
+      self.texteCuve+="# - si TEMP_FLU,  fournir Instant (s) / Temperature du fluide (°C)"+"\n"
+      self.texteCuve+="#                    puis Instant (s) / Debit d injection de securite  (kg/s)"+"\n"
+      self.texteCuve+="#                    puis Modele VESTALE : (DH, DH_MESSAGE), (SECTION, SECTION_MESSAGE), (DELTA, DELTA_MESSAGE), EPS, COEFVESTALE"+"\n"
+      self.texteCuve+="# - si APRP,      fournir INSTANT1, INSTANT2, QACCU, QIS"+"\n"
+      self.texteCuve+="#                    puis TIS_MESSAGE"+"\n"
+      self.texteCuve+="#                    puis Instant (s) / Temperature du fluide (°C) tel que dans l'exemple ci-dessous"+"\n"
+      self.texteCuve+="#                         0.    286."+"\n"
+      self.texteCuve+="#                         12.   20.             # 1er palier à T=TACCU"+"\n"
+      self.texteCuve+="#                         20.   20.             # idem que ci-dessus"+"\n"
+      self.texteCuve+="#                         21.   18.             # 2nd palier à T=T1 : sera remplace par nouvelle valeur calculee par fonction idoine"+"\n"
+      self.texteCuve+="#                         45.   18.             # idem que ci-dessus"+"\n"
+      if self.dico_mot.has_key('TypeConditionLimiteThermique'):
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP':
+            self.texteCuve+="#                         46.   9999999999.     # 3eme palier à T=Tis, temperature d injection de securite"+"\n"
+         else :
+            self.texteCuve+="#                         46.   %INLET-TIS%     # 3eme palier à T=Tis, temperature d injection de securite"+"\n"
+      else :
+         self.texteCuve+="#                         46.   %INLET-TIS%     # 3eme palier à T=Tis, temperature d injection de securite"+"\n"
+      self.texteCuve+="#                         1870. 9999999999.     # idem que ci-dessus"+"\n"
+      self.texteCuve+="#                         1871. 80."+"\n"
+      self.texteCuve+="#                         3871. 80."+"\n"
+      self.texteCuve+="#                    puis Instant (s) / Debit d injection de securite  (kg/s)"+"\n"
+      self.texteCuve+="#                    puis Modele VESTALE : (DH, DH_MESSAGE), (SECTION, SECTION_MESSAGE), (DELTA, DELTA_MESSAGE), EPS, COEFVESTALE"+"\n"
+      self.texteCuve+="# Finir chacune des listes par la prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+      self.texteCuve+="#"+"\n"
+
+      if self.dico_mot.has_key('TypeConditionLimiteThermique'):
+
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP':
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# Definition de parametres pour le cas d un transitoire APRP"+"\n"
+            self.texteCuve += self.ecritVariable('Instant_1')
+            self.texteCuve += self.ecritVariable('Instant_2')
+            self.texteCuve += self.ecritVariable('DebitAccumule')
+            self.texteCuve += self.ecritVariable('DebitInjectionSecurite')
+            self.texteCuve += self.ecritVariable('TempInjectionSecurite_mess')
+
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee en paroi' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et coefficient echange' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et debit d injection de securite' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP' :
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# instant (s) / temperature imposee du fluide (°C)"+"\n"
+            if self.dico_mot.has_key('ProfilTemporel_TemperatureImposeeFluide'):
+               self.imprime(2,(self.dico_mot["ProfilTemporel_TemperatureImposeeFluide"]))
+               self.texteCuve += self.amontAval('Amont_TemperatureImposeeFluide','Aval_TemperatureImposeeFluide')
+           else :
+               self.texteCuve+="0.    286. "+"\n"
+               self.texteCuve+="20.   20. "+"\n"
+               self.texteCuve+="200.  7. "+"\n"
+               self.texteCuve+="1000. 80. "+"\n"
+               self.texteCuve+="CC"+"\n"
+
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Flux de chaleur impose en paroi':
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# instant (s) / flux de chaleur impose (W/m2)"+"\n"
+            if self.dico_mot.has_key('ProfilTemporel_FluxChaleur'):
+               self.imprime(2,(self.dico_mot["ProfilTemporel_FluxChaleur"]))
+               self.texteCuve += self.amontAval('Amont_FluxChaleur','Aval_FluxChaleur')
+               self.texteCuve+="#"+"\n"
+           else :
+               self.texteCuve+="0.    -0. "+"\n"
+               self.texteCuve+="20.   -366290. "+"\n"
+               self.texteCuve+="200.  -121076. "+"\n"
+               self.texteCuve+="1000.  -56372."+"\n"
+               self.texteCuve+="CC"+"\n"
+
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et debit d injection de securite' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP':
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# instant (s) / Debit d injection de securite  (kg/s)"+"\n"
+            if self.dico_mot.has_key('ProfilTemporel_DebitInjection'):
+               self.imprime(2,(self.dico_mot["ProfilTemporel_DebitInjection"]))
+               self.texteCuve += self.amontAval('Amont_DebitInjection','Aval_DebitInjection')
+           else :
+               self.texteCuve+="0.    4590. "+"\n"
+               self.texteCuve+="20.   4590. "+"\n"
+               self.texteCuve+="200.  340. "+"\n"
+               self.texteCuve+="1000. 31.1 "+"\n"
+               self.texteCuve+="CC"+"\n"
+
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et coefficient echange' :
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# instant (s) / Coefficient d echange (W/m2/K)"+"\n"
+            if self.dico_mot.has_key('ProfilTemporel_CoefficientEchange'):
+               self.imprime(2,(self.dico_mot["ProfilTemporel_CoefficientEchange"]))
+               self.texteCuve += self.amontAval('Amont_CoefficientEchange','Aval_CoefficientEchange')
+           else :
+               self.texteCuve+="0.    138454. "+"\n"
+               self.texteCuve+="20.   19972. "+"\n"
+               self.texteCuve+="200.  2668. "+"\n"
+               self.texteCuve+="1000. 2668. "+"\n"
+               self.texteCuve+="CC"+"\n"
+
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Debit massique et temperature d injection de securite' :
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# instant (s) / Debit massique (kg/s)"+"\n"
+            if self.dico_mot.has_key('ProfilTemporel_DebitMassique'):
+               self.imprime(2,(self.dico_mot["ProfilTemporel_DebitMassique"]))
+               self.texteCuve += self.amontAval('Amont_DebitMassique','Aval_DebitMassique')
+           else :
+               self.texteCuve+="0.    18.4 "+"\n"
+               self.texteCuve+="20.   18.4 "+"\n"
+               self.texteCuve+="200.  31.1 "+"\n"
+               self.texteCuve+="1000. 31.1 "+"\n"
+               self.texteCuve+="CC"+"\n"
+
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# instant (s) / Temperature d injection de securite  (°C)"+"\n"
+            if self.dico_mot.has_key('ProfilTemporel_TemperatureInjection'):
+               self.imprime(2,(self.dico_mot["ProfilTemporel_TemperatureInjection"]))
+               self.texteCuve += self.amontAval('Amont_TemperatureInjection','Aval_TemperatureInjection')
+           else :
+               self.texteCuve+="0.    7.0 "+"\n"
+               self.texteCuve+="20.   7.0 "+"\n"
+               self.texteCuve+="200.  7.0 "+"\n"
+               self.texteCuve+="1000. 7.0 "+"\n"
+               self.texteCuve+="CC"+"\n"
+
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Debit massique et temperature d injection de securite' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et debit d injection de securite' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP' :
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# Transitoire des coefficients d echange : modele VESTALE"+"\n"
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('DiametreHydraulique')
+            self.texteCuve += self.ecritVariable('DiametreHydraulique_mess')
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('SectionEspaceAnnulaire')
+            self.texteCuve += self.ecritVariable('SectionEspaceAnnulaire_mess')
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('HauteurCaracConvectionNaturelle')
+            self.texteCuve += self.ecritVariable('HauteurCaracConvectionNaturelle_mess')
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('CritereConvergenceRelative')
+            self.texteCuve += self.ecritVariable('CoefficientsVestale')
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Debit massique et temperature d injection de securite':
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# Transitoire de temperature fluide locale : modele CREARE"+"\n"
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('VolumeMelange_CREARE')
+            self.texteCuve += self.ecritVariable('VolumeMelange_CREARE_mess')
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('TemperatureInitiale_CREARE')
+            self.texteCuve += self.ecritVariable('TemperatureInitiale_CREARE_mess')
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('SurfaceEchange_FluideStructure')
+            self.texteCuve += self.ecritVariable('SurfaceEchange_FluideStructure_mess')
+      else :
+         self.texteCuve+="#"+"\n"
+         self.texteCuve+="# instant (s) / temperature imposee du fluide (°C)"+"\n"
+         self.texteCuve+="0.    286. "+"\n"
+         self.texteCuve+="20.   20. "+"\n"
+         self.texteCuve+="200.  7. "+"\n"
+         self.texteCuve+="1000. 80. "+"\n"
+         self.texteCuve+="CC"+"\n"
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="############################################################################################"+"\n"
+
+
+   def imprime(self,nbdeColonnes,valeur):
+      self.liste=[]
+      self.transforme(valeur)
+      i=0
+      while i < len(self.liste):
+          for k in range(nbdeColonnes) :
+              self.texteCuve+=str(self.liste[i+k]) +"  "
+          self.texteCuve+="\n"
+          i=i+k+1
+               
+
+   def transforme(self,valeur):
+      for i in valeur :
+          if type(i) == tuple :
+             self.transforme(i)
+          else :
+             self.liste.append(i)
+          
+
+
+
diff --git a/Cuve2dg/prefs.py b/Cuve2dg/prefs.py
new file mode 100644 (file)
index 0000000..53f61ec
--- /dev/null
@@ -0,0 +1 @@
+code='CUVE2DG'
diff --git a/Cuve2dg/prefs_CUVE2DG.py b/Cuve2dg/prefs_CUVE2DG.py
new file mode 100644 (file)
index 0000000..9398a33
--- /dev/null
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import os, sys
+# Les variables pouvant positionnees sont :
+# "rep_user","INSTALLDIR","path_doc","exec_acrobat","rep_cata"
+print "import des prefs de CUVE2DG"
+
+
+# REPINI sert à localiser le fichier 
+# initialdir sert comme directory initial des QFileDialog
+# positionnee a repin au debut mise a jour dans configuration
+REPINI=os.path.dirname(os.path.abspath(__file__))
+initialdir=REPINI 
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+INSTALLDIR=os.path.join(REPINI,'..')
+
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+encoding='iso-8859-1'
+
+# Acces a la documentation
+rep_cata        = INSTALLDIR
+path_doc        = os.path.join(rep_cata,'Doc')
+exec_acrobat    = "/usr/bin/xpdf"
+
+
+# Choix des catalogues
+sys.path[:0]=[INSTALLDIR]
+
diff --git a/Cuve2dg/properties.py b/Cuve2dg/properties.py
new file mode 100644 (file)
index 0000000..8ba0ed7
--- /dev/null
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+#@ MODIF properties Accas DATE 10/10/2002 AUTEUR gcbhhhh M.ADMINISTRATEUR
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# RESPONSABLE D6BHHHH J-P.LEFEBVRE
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+#     IDENTIFICATION DU GESTIONNAIRE DE COMMANDE ACCAS A PARTIR
+#     DE LA VERSION DU CODE_ASTER ASSOCIE
+#----------------------------------------------------------------------
+version = "7.1.0"
+date = "23/04/2003"
diff --git a/Cuve2dg/qtEficas_cuve2dg.py b/Cuve2dg/qtEficas_cuve2dg.py
new file mode 100755 (executable)
index 0000000..5c86549
--- /dev/null
@@ -0,0 +1,35 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+"""
+   Ce module sert à lancer EFICAS configuré pour Openturns
+"""
+# Modules Python
+
+# Modules Eficas
+import prefs
+name='prefs_'+prefs.code
+__import__(name)
+
+import sys
+from InterfaceQT4 import eficas_go
+eficas_go.lance_eficas(code=prefs.code)
diff --git a/Cuve2dg/sdistCuveqt.py b/Cuve2dg/sdistCuveqt.py
new file mode 100644 (file)
index 0000000..5ec2452
--- /dev/null
@@ -0,0 +1,102 @@
+# -*- coding: utf-8 -*-
+"""
+     Ce module sert à construire les distributions d'EFICAS pour Openturns
+     en fonction du tag CVS courant
+     Les distributions sont :
+      - un tar.gz pour UNIX ne contenant pas mxTextTools
+     L'utilisation de ce module est la suivante :
+      1- Se mettre dans un répertoire de travail
+      2- Configurer son environnement pour utiliser le référentiel CVS EFICAS
+      3- Exporter les sources d'EficasV1 par la commande :
+            cvs export -r TAG -d Eficas_export EficasV1
+         ou TAG est le tag CVS de la version que l'on veut distribuer (par exemple V1_1p1)
+      5- Aller dans le répertoire Eficas_export
+      6- Executer le script sdist.py
+             python sdist.py
+         Ce qui a pour effet de creer un repertoire dist contenant la distribution
+         et de la copier dans le répertoire indiqué par dir_download s'il est accessible
+
+"""
+import os,shutil,glob,sys
+import types
+
+nom_distrib="QTEficasOpenturns_V1_0"
+path_distrib=os.path.join("dist",nom_distrib)
+path_TextTools="/home/eficas/pkg/mxTools/egenix2.0.2pourWindows/mx/TextTools"
+dir_download= "/home/eficas/WWW/telechargement/eficas"
+
+def main():
+   if os.path.isdir('dist'):shutil.rmtree('dist')
+
+   copyfiles('.',path_distrib,['LICENSE.TERMS','INSTALL','NEWS'])
+
+   copyfiles('../Editeur',os.path.join(path_distrib,'Editeur'),['*.py','faqs.txt'])
+   copyfiles('../InterfaceQT4',os.path.join(path_distrib,'InterfaceQT4'),['*.py','faqs.txt'])
+   copyfiles('../UiQT4',os.path.join(path_distrib,'UiQT4'),['*.ui','makefile'])
+   copyfiles('../Cuve2dg',os.path.join(path_distrib,'Cuve2dg'),['*.py','*.ini'])
+   copyfiles('../Ihm',os.path.join(path_distrib,'Ihm'),['*.py'])
+   copyfiles('../Extensions',os.path.join(path_distrib,'Extensions'),['*.py'])
+   copyfiles('../Misc',os.path.join(path_distrib,'Misc'),['*.py'])
+   copyfiles('../Accas',os.path.join(path_distrib,'Accas'),['*.py'])
+   copyfiles('../Accas',os.path.join(path_distrib,'Noyau'),['*.py'])
+   copyfiles('../Accas',os.path.join(path_distrib,'Validation'),['*.py'])
+   # AIDE
+   copyfiles('../AIDE',os.path.join(path_distrib,'AIDE'),['*.py'])
+   copyfiles('../AIDE/fichiers',os.path.join(path_distrib,'AIDE','fichiers'),['*'])
+   copyfiles('.',os.path.join(path_distrib,'AIDE','fichiers'),['INSTALL','NEWS'])
+   copyfiles('../Editeur',os.path.join(path_distrib,'AIDE','fichiers'),['faqs.txt'])
+   #                           ______________________
+
+   copyfiles('../convert',os.path.join(path_distrib,'convert'),['*.py'])
+   copyfiles('../convert/Parserv5',os.path.join(path_distrib,'convert','Parserv5'),['*.py'])
+   copyfiles('../generator',os.path.join(path_distrib,'generator'),['*.py'])
+   copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.gif'])
+   copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.png'])
+   copyfiles('../Editeur/Patrons/',os.path.join(path_distrib,'Editeur','Patrons'),['*.com*'])
+   copyfiles('../Editeur/Patrons/CUVE2DG',os.path.join(path_distrib,'Editeur','Patrons','CUVE2DG'),['*.com*'])
+
+   copyfiles('../Noyau',os.path.join(path_distrib,'Noyau'),['*.py'])
+   copyfiles('../Validation',os.path.join(path_distrib,'Validation'),['*.py'])
+
+   
+   tarball= maketarball('dist',nom_distrib,nom_distrib)
+   try:
+      shutil.copy(tarball,dir_download)
+   except:
+      print "Repertoire de download inconnu : ",dir_download
+
+
+
+def make_dir(dir_cible):
+   if type(dir_cible) is not types.StringType:
+      raise "make_dir : dir_cible doit etre une string (%s)" % `dir_cible`
+   head,tail=os.path.split(dir_cible)
+   tails=[tail]
+   while head and tail and not os.path.isdir(head):
+      head,tail=os.path.split(head)
+      tails.insert(0, tail)
+
+   for d in tails:
+      head = os.path.join(head, d)
+      if not os.path.isdir(head):os.mkdir(head)
+
+
+def copyfiles(dir_origin,dir_cible,listfiles):
+   if not os.path.isdir(dir_cible):make_dir(dir_cible)
+   for glob_files in listfiles:
+      for file in glob.glob(os.path.join(dir_origin,glob_files)):
+         shutil.copy(file,dir_cible)
+
+
+def maketarball(dir_trav,dir_cible,nom_tar):
+   prev=os.getcwd()
+   print prev
+   os.chdir(dir_trav)
+   os.system("tar -cf "+nom_tar+".tar "+dir_cible)
+   os.system("gzip -f9 "+nom_tar+".tar ")
+   os.chdir(prev)
+   return os.path.join(dir_trav,nom_tar+".tar.gz")
+
+
+main()
+
diff --git a/Cuve2dg/style.py b/Cuve2dg/style.py
new file mode 100644 (file)
index 0000000..7da9d53
--- /dev/null
@@ -0,0 +1 @@
+# Necessaire pour compatibilite avec Aster
diff --git a/Editeur/CMakeLists.txt b/Editeur/CMakeLists.txt
new file mode 100644 (file)
index 0000000..4de6eaa
--- /dev/null
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python, texte et images du repertoire et des sous-repertoires (sauf CVS)
+install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+          DESTINATION ${CMAKE_INSTALL_PREFIX}
+         FILES_MATCHING PATTERN *.py PATTERN *.txt PATTERN *.gif PATTERN *.png
+          PATTERN CMakeLists.txt EXCLUDE
+          PATTERN Patrons EXCLUDE
+          PATTERN CVS EXCLUDE
+       )
+add_subdirectory ( Patrons )
+
+### Local Variables:
+### mode: cmake
+### End:
index 0882abb5962dab745363280c0bf6c8ff8f11a4fd..352e45d4a3da799e541d39c119edaf0cd4ae4092 100644 (file)
@@ -474,7 +474,7 @@ class SequenceTreeItem(ObjectTreeItem):
         try :
             self._object.remove(item.getObject())
             # la liste peut être retournée vide !
-            message = "Mot-clé " + item.getObject().nom + " supprimé"
+            message = "Mot-clef " + item.getObject().nom + " supprime"
             self.appli.affiche_infos(message)
             return 1
         except:
diff --git a/Editeur/Patrons/CMakeLists.txt b/Editeur/Patrons/CMakeLists.txt
new file mode 100644 (file)
index 0000000..a9788de
--- /dev/null
@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Question : Doit-on installer le repertoire Patrons meme s'il est vide ?
+
+# Installation des fichiers d'aide : Open TURNS
+#if (WITH_OPENTURNS)
+#  install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/OPENTURNS_STUDY
+#            DESTINATION ${CMAKE_INSTALL_PREFIX}/Editeur/Patrons
+#            FILES_MATCHING PATTERN *.comm
+#            PATTERN CVS EXCLUDE
+#        )
+#endif (WITH_OPENTURNS)
+
+# Installation des fichiers d'aide : Aster
+if (WITH_ASTER)
+  install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ASTER
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/Editeur/Patrons
+           FILES_MATCHING PATTERN *.comm
+            PATTERN CVS EXCLUDE
+         )
+endif (WITH_ASTER)
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/Editeur/analyse_catalogue_initial.py b/Editeur/analyse_catalogue_initial.py
new file mode 100644 (file)
index 0000000..298eac7
--- /dev/null
@@ -0,0 +1,76 @@
+# -*- coding: utf-8 -*-
+#                                                CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002        EDF R&D                                                                        WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#                1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+from string import split,strip,lowercase,uppercase
+import re,string,os
+
+
+#
+__Id__="$Id: analyse_catalogue_initial.py,v 1.1.2.2 2010-03-17 15:49:19 pnoyret Exp $"
+__version__="$Name: V2_0 $"
+#
+
+                
+class Catalogue_initial:
+        def __init__(self,fichier):
+                self.liste_commandes=[]
+                self.lignes=[]
+                self.fichier=fichier
+                self.ouvrir_fichier()
+                self.constr_list_txt_cmd()
+
+        def ouvrir_fichier(self):
+                try :
+                        f=open(self.fichier,'r')
+                        self.lignes=f.readlines()
+                        f.close()
+                except :
+                        print "Impossible d'ouvrir le fichier :",self.fichier
+
+        def constr_list_txt_cmd(self):
+                pattern = '^# Ordre Catalogue '
+                for i in self.lignes :
+                    if (re.search(pattern,i)):
+                        i=i.replace('# Ordre Catalogue ','')
+                        i=i.replace('\n','')
+                        self.liste_commandes.append(i)
+
+
+def analyse_catalogue(nom_cata):
+        cata = Catalogue_initial(nom_cata)
+        return cata.liste_commandes
+
+
+if __name__ == "__main__" :
+       monCata="/local/noyret/Install_Eficas/EficasQT4/Openturns_StudyOpenTURNS_Cata_Study_V4.py"
+        analyse_catalogue(monCata)
+
+
+
+
+
+
+
+
+
+
+
+                                
+                                
diff --git a/Editeur/catadesc.py b/Editeur/catadesc.py
new file mode 100644 (file)
index 0000000..ad5d099
--- /dev/null
@@ -0,0 +1,87 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+class CatalogDescription:
+    
+    def __init__(self, identifier, cata_file_path, file_format = "python",
+                 default = False, code = None, user_name = None,
+                 selectable = True, file_format_in = "python"):
+        """
+        This class can be used to describe an Eficas catalog.
+
+        :type  identifier: string
+        :param identifier: unique identifier for the catalog
+                
+        :type  cata_file_path: string
+        :param cata_file_path: path of the file containing the catalog itself
+                
+        :type  file_format: string
+        :param file_format: format of the files generated when using this
+                            catalog
+                
+        :type  default: boolean
+        :param default: indicate if this catalog is the default one (appear on
+                        the top of the catalogs list)
+                
+        :type  code: string
+        :param code: Deprecated. Used to indicate the code associated to this
+                     catalog
+                
+        :type  user_name: string
+        :param user_name: name of the catalog as it will appear in the list
+                
+        :type  selectable: boolean
+        :param selectable: indicate if this catalog appears in the list.
+                           Setting this parameter to False is useful to keep
+                           old catalogs to edit existing files but to forbid
+                           to use them to create new files.
+                
+        """
+        self.identifier = identifier
+        self.cata_file_path = cata_file_path
+        self.file_format = file_format
+        self.default = default
+        self.code = code
+        if user_name is None:
+            self.user_name = identifier
+        else:
+            self.user_name = user_name
+        self.selectable = selectable
+        self.file_format_in = file_format_in
+
+    @staticmethod
+    def create_from_tuple(cata_tuple):
+        #print "Warning: Describing a catalog with a tuple is deprecated. " \
+        #      "Please create a CatalogDescription instance directly."
+        desc = CatalogDescription(code = cata_tuple[0],
+                                  identifier = cata_tuple[1],
+                                  cata_file_path = cata_tuple[2],
+                                  file_format = cata_tuple[3])
+        if len(cata_tuple) == 5 :
+           if cata_tuple[4] == "defaut":
+            desc.default = True
+           else:
+             desc = CatalogDescription(code = cata_tuple[0],
+                                       identifier = cata_tuple[1],
+                                       cata_file_path = cata_tuple[2],
+                                       file_format = cata_tuple[3],
+                                       file_format_in = cata_tuple[4])
+        return desc
index b20bfa9f2b95c1870d7dbfe2c740f4f5a588ef5e..ba43dbfbc72858afef46d00a11856fbf9d0d2f3b 100644 (file)
@@ -49,8 +49,10 @@ def charger_composants(Ihm="TK"):
        repertoire=reper+"/../InterfaceTK"
        package="InterfaceTK"
     else :
-       repertoire=reper+"/../InterfaceQT"
-       package="InterfaceQT"
+       repertoire=reper+"/../InterfaceQT4"
+       package="InterfaceQT4"
+       #repertoire=reper+"/../InterfaceQT"
+       #package="InterfaceQT"
     listfich=glob.glob(os.path.join(repertoire, "compo*.py"))
     for fichier in listfich:
         m= os.path.basename(fichier)[:-3]
diff --git a/Editeur/icons/application.gif b/Editeur/icons/application.gif
new file mode 100644 (file)
index 0000000..0b05d5c
Binary files /dev/null and b/Editeur/icons/application.gif differ
diff --git a/Editeur/icons/block_node.png b/Editeur/icons/block_node.png
new file mode 100644 (file)
index 0000000..94b97ba
Binary files /dev/null and b/Editeur/icons/block_node.png differ
diff --git a/Editeur/icons/compute.png b/Editeur/icons/compute.png
new file mode 100644 (file)
index 0000000..6c56a46
Binary files /dev/null and b/Editeur/icons/compute.png differ
diff --git a/Editeur/icons/map.ppm b/Editeur/icons/map.ppm
new file mode 100644 (file)
index 0000000..92deac8
Binary files /dev/null and b/Editeur/icons/map.ppm differ
index 3d34eaa677d1bca46d63280c557c790d74c6149f..b4c24b706f298e71c6b604615402fffc0d613a15 100644 (file)
@@ -26,26 +26,30 @@ import sys
 import os
 
 import prefs
+name='prefs_'+prefs.code
+prefs_Code=__import__(name)
 
-INSTALLDIR=prefs.INSTALLDIR
+INSTALLDIR=prefs_Code.INSTALLDIR
 sys.path.append(INSTALLDIR)
-sys.path.append(INSTALLDIR+"/Ui")
-sys.path.append(INSTALLDIR+"/InterfaceQT")
+sys.path.append(INSTALLDIR+"/UiQT4")
+sys.path.append(INSTALLDIR+"/InterfaceQT4")
+#sys.path.append(INSTALLDIR+"/Ui")
+#sys.path.append(INSTALLDIR+"/InterfaceQT")
 sys.path.append(INSTALLDIR+"/Editeur")
 
 # Ce chemin permet d'importer les modules Noyau et Validation
 # représentant le code utilisé (si fourni)
 # Ensuite on utilise les packages de l'intallation
-if hasattr(prefs,'CODE_PATH'):
-   if prefs.CODE_PATH:
-      sys.path[:0]=[prefs.CODE_PATH]
+if hasattr(prefs_Code,'CODE_PATH'):
+   if prefs_Code.CODE_PATH:
+      sys.path[:0]=[prefs_Code.CODE_PATH]
       import Noyau,Validation
       del sys.path[0]
-sys.path[:0]=[prefs.INSTALLDIR]
+sys.path[:0]=[prefs_Code.INSTALLDIR]
 
 # Ensuite on surcharge eventuellement
-#if hasattr(prefs,'CODE_PATH_SURCHARGE'):
-#   if prefs.CODE_PATH_SURCHARGE:
-#       sys.path.insert(0,prefs.CODE_PATH_SURCHARGE)
+#if hasattr(prefs_Code,'CODE_PATH_SURCHARGE'):
+#   if prefs_Code.CODE_PATH_SURCHARGE:
+#       sys.path.insert(0,prefs_Code.CODE_PATH_SURCHARGE)
 
 import Accas
index 19f81ef5dab846f045fe36c241e9c4c6a2e413cd..872f290bcf8b88487846795083028659d7679f00 100644 (file)
@@ -4,9 +4,6 @@ import re
 sous_menus={"ASTER" : {0:{"3D":"3D.comm"},1:{"poutre":"pou.comm"},2:{"salome":"salome.comm"},3:{"divers":"comm"}},
            "OPENTURNS_STUDY" : {0:{"Anne":"Std.comm"}},
             "OPENTURNS_WRAPPER" : {0:{"Anne":"wrapper_exemple.comm"}},
-           "HOMARD" : {},
-           "CUVE2DG" : {},
-            'SEP' : {}
            }
 
 class listePatrons :
@@ -14,12 +11,15 @@ class listePatrons :
     def __init__(self,code = "ASTER"):
        repIni=os.path.dirname(os.path.abspath(__file__))
        self.rep_patrons=repIni+"/Patrons/"+code
-       self.sous_menu=sous_menus[code]
+       self.sous_menu={}
+       if code in sous_menus.keys()  :
+          self.sous_menu=sous_menus[code]
        self.code=code
        self.liste={}
        self.traite_liste()
 
     def traite_liste(self):
+        if not (self.code in sous_menus.keys()) : return
         if not (os.path.exists(self.rep_patrons)) : return
         for file in os.listdir(self.rep_patrons):
             for i in range(len(self.sous_menu)):
index 2d5fc4a2fd06b1566a61a046abd1ad923e87d299..9d1265a35e08f6a9de15f31cdab4bac3fc56e17a 100644 (file)
@@ -1,10 +1,12 @@
 # -*- coding: utf-8 -*-
 import os
 import prefs
+name='prefs_'+prefs.code
+prefsCode=__import__(name)
 import basestyle
 from basestyle import STYLE,style
 
-inistylefile=os.path.join(prefs.REPINI,"style.py")
+inistylefile=os.path.join(prefsCode.REPINI,"style.py")
 if os.path.isfile(inistylefile):
    execfile(inistylefile)
 
diff --git a/Extensions/CMakeLists.txt b/Extensions/CMakeLists.txt
new file mode 100644 (file)
index 0000000..e3ce058
--- /dev/null
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python du repertoire et des sous-repertoires (sauf CVS)
+install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+          DESTINATION ${CMAKE_INSTALL_PREFIX}
+         FILES_MATCHING PATTERN *.py
+          PATTERN CVS EXCLUDE
+       )
+
+
+### Local Variables:
+### mode: cmake
+### End:
index e91e3e1bacf20700c7aa2ec209d97831025585e5..3259ce305d23356a9ede5f67109f344b5496902b 100644 (file)
@@ -1,9 +1,14 @@
 # -*- coding: utf-8 -*-
 from __future__ import division
 import math
-import Numeric
 import types
 
+try:
+  import Numeric
+except:
+  import numpy
+  Numeric = numpy
+
 def mkf(value):
     if type(value) in (type(1), type(1L), type(1.5), type(1j),type("hh")) :
         return Constant(value)
index 58ceefa2f4f128493252edb4e0ea0be1d1aa3f12..2c3ed69898900c7745192eb02d1d8e0aaae33979 100644 (file)
@@ -130,6 +130,7 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
     Remplace la valeur de self par new_valeur interprétée
     """
     self.valeur = self.interprete_valeur(new_valeur)
+    self.parent.update_concept_after_etape(self,self)
     self.init_modif()
 
   def set_nom(self,new_nom):
@@ -249,6 +250,7 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) :
     paramètres du JDC
     """
     self.jdc.delete_param(self)
+    self.parent.delete_concept(self)
 
   def update_context(self,d):
     """
diff --git a/Ihm/CMakeLists.txt b/Ihm/CMakeLists.txt
new file mode 100644 (file)
index 0000000..e3ce058
--- /dev/null
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python du repertoire et des sous-repertoires (sauf CVS)
+install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+          DESTINATION ${CMAKE_INSTALL_PREFIX}
+         FILES_MATCHING PATTERN *.py
+          PATTERN CVS EXCLUDE
+       )
+
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/Ihm/I_AVANT.py b/Ihm/I_AVANT.py
new file mode 100644 (file)
index 0000000..f3a4678
--- /dev/null
@@ -0,0 +1,78 @@
+#@ MODIF V_AU_MOINS_UN Validation  DATE 14/09/2004   AUTEUR PNOYRET  
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+#                                                                       
+#                                                                       
+# ======================================================================
+
+import types
+
+
+class I_AVANT:
+   """
+      La règle I_AVANT vérifie que l'on trouve l ordre  des mots-clés
+      de la règle parmi les arguments d'un JDC.
+
+      Ces arguments sont transmis à la règle pour validation sous la forme 
+      d'une liste de noms de mots-clés ou d'un dictionnaire dont 
+      les clés sont des noms de mots-clés.
+   """
+
+   def __init__(self,*args):
+      if len(args) > 2 :
+        print "Erreur à la création de la règle A_CLASSER(",args,")"
+        return
+      if type(args[0]) == types.TupleType:
+        self.listeAvant=args[0]
+      else :
+        self.listeAvant=(args[0],)
+      if type(args[1]) == types.TupleType:
+        self.listeApres=args[1]
+      else :
+        self.listeApres=(args[1],)
+
+   def verif(self,args):
+      """
+          args peut etre un dictionnaire ou une liste. Les éléments de args
+          sont soit les éléments de la liste soit les clés du dictionnaire.
+      """
+      #  on compte le nombre de mots cles presents
+      text =''
+      boolListeAvant=0
+      boolListeApres=0
+      boolOK=1
+      for nom in args:
+         if nom in self.listeAvant :
+             boolListeAvant=1
+            if boolListeApres == 1 :
+                boolOK = 0
+          if nom in self.listeApres :
+             boolListeApres=1
+      if boolListeAvant == 0 and boolListeApres == 1 : boolOK = 0
+      return text,boolOK
+
+
+   def gettext(self):
+       text = "Regle de classement "' :\n'
+       for mc in self.listeAvant : 
+           text = text + mc + ', '
+       text = text  + " \nAvant : \n" 
+       for mc in self.listeApres : 
+           text = text + mc + ','
+       return text
+
index a4648fd2648279f9b7ee773c3e5a4681bbe535e2..b8b076bf1d3c4bf3ade6eeb0f8961f08aa535058 100644 (file)
@@ -28,13 +28,13 @@ from copy import copy
 # Objet re pour controler les identificateurs Python
 concept_re=re.compile(r'[a-zA-Z_]\w*$')
 
-# import rajoutés suite à l'ajout de Build_sd --> à résorber
+# import rajoutés suite à l'ajout de Build_sd --> à résorber
 import traceback
 import Noyau
 from Noyau import N_Exception
 from Noyau.N_Exception import AsException
 import Validation
-# fin import à résorber
+# fin import à résorber
 
 # Modules EFICAS
 import I_MCCOMPO
@@ -54,7 +54,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
       else:
         if self.sd:sdname=self.sd.get_name()
       if string.find(sdname,'sansnom') != -1 or string.find(sdname,'SD_') != -1:
-        # dans le cas où la SD est 'sansnom' ou 'SD_' on retourne la chaîne vide
+        # dans le cas où la SD est 'sansnom' ou 'SD_' on retourne la chaîne vide
         return ''
       return sdname
 
@@ -66,12 +66,12 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
 
    def init_modif(self):
       """
-         Met l'état de l'étape à : modifié
+         Met l'état de l'étape à : modifié
          Propage la modification au parent
       """
-      # init_modif doit etre appelé avant de réaliser une modification
-      # La validité devra etre recalculée apres cette modification
-      # mais dans l'appel à fin_modif pour préserver l'état modified
+      # init_modif doit etre appelé avant de réaliser une modification
+      # La validité devra etre recalculée apres cette modification
+      # mais dans l'appel à fin_modif pour préserver l'état modified
       # de tous les objets entre temps
       #print "init_modif",self,self.parent
       self.state = 'modified'
@@ -80,32 +80,23 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
 
    def fin_modif(self):
       """
-          Méthode appelée une fois qu'une modification a été faite afin de 
-          déclencher d'éventuels traitements post-modification
+          Méthode appelée une fois qu'une modification a été faite afin de 
+          déclencher d'éventuels traitements post-modification
           ex : INCLUDE et POURSUITE
+          Ne pas mettre de traitement qui risque d'induire des recursions (soit a peu pres rien)
       """
-      #print "fin_modif",self,self.parent
-      if self.nom == "DETRUIRE":
-         #Il n'est pas conseillé de mettre des traitements dans fin_modif. Ceci est une
-         # exception qu'il faut supprimer à terme.
-         #une commande DETRUIRE a été modifiée. Il faut verifier les commandes
-         #suivantes
-         #ATTENTION: aux eventuelles recursions
-         self.parent.control_context_apres(self)
-         pass
-
       CONNECTOR.Emit(self,"valid")
       if self.parent:
         self.parent.fin_modif()
 
    def nomme_sd(self,nom) :
       """
-          Cette méthode a pour fonction de donner un nom (nom) au concept 
-          produit par l'étape (self).
-            - si le concept n'existe pas, on essaye de le créer (à condition que l'étape soit valide ET non réentrante)
-            - si il existe déjà, on le renomme et on répercute les changements dans les autres étapes    
+          Cette méthode a pour fonction de donner un nom (nom) au concept 
+          produit par l'étape (self).
+            - si le concept n'existe pas, on essaye de le créer (à condition que l'étape soit valide ET non réentrante)
+            - si il existe déjà, on le renomme et on répercute les changements dans les autres étapes    
           Les valeurs de retour sont :
-            - 0 si le nommage n'a pas pu etre mené à son terme,
+            - 0 si le nommage n'a pas pu etre mené à son terme,
             - 1 dans le cas contraire
       """
       # Le nom d'un concept doit etre un identificateur Python (toujours vrai ?)
@@ -113,15 +104,15 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
          return 0,"Un nom de concept doit etre un identificateur Python"
 
       if len(nom) > 8 and self.jdc.definition.code == 'ASTER':
-        return 0,"Nom de concept trop long (maxi 8 caractères)"
+        return 0,"Nom de concept trop long (maxi 8 caractères)"
 
       self.init_modif()
       #
       # On verifie d'abord si les mots cles sont valides
       #
-      if not self.isvalid(sd='non') : return 0,"Nommage du concept refusé : l'opérateur n'est pas valide"
+      if not self.isvalid(sd='non') : return 0,"Nommage du concept refusé : l'opérateur n'est pas valide"
       #
-      # Cas particulier des opérateurs obligatoirement réentrants
+      # Cas particulier des opérateurs obligatoirement réentrants
       #
       if self.definition.reentrant == 'o':
         self.sd = self.reuse = self.jdc.get_sd_avant_etape(nom,self)
@@ -130,32 +121,32 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
           self.fin_modif()
           return 1,"Concept existant"
         else:
-          return 0,"Opérateur réentrant mais concept non existant"
+          return 0,"Opérateur réentrant mais concept non existant"
       #
-      # Cas particulier des opérateurs facultativement réentrants
+      # Cas particulier des opérateurs facultativement réentrants
       #
       old_reuse=None
       if self.definition.reentrant == 'f' :
         sd = self.jdc.get_sd_avant_etape(nom,self)
         if sd != None :
-          # FR : il faut tester que la sd trouvée est du bon type !!!!!!!!!!!!!!!!!
+          # FR : il faut tester que la sd trouvée est du bon type !!!!!!!!!!!!!!!!!
           if isinstance(sd,self.get_type_produit()) :
              self.sd = self.reuse = sd
              self.sdnom = sd.nom
              self.fin_modif()
-             return 1,"Opérateur facultativement réentrant et concept existant trouvé"
+             return 1,"Opérateur facultativement réentrant et concept existant trouvé"
           else:
-             return 0,"Concept déjà existant et de mauvais type"
+             return 0,"Concept déjà existant et de mauvais type"
         else :
           # il faut enlever le lien vers une SD existante car si on passe ici
-          # cela signifie que l'opérateur n'est pas utilisé en mode réentrant.
-          # Si on ne fait pas cela, on risque de modifier une SD produite par un autre opérateur
+          # cela signifie que l'opérateur n'est pas utilisé en mode réentrant.
+          # Si on ne fait pas cela, on risque de modifier une SD produite par un autre opérateur
           if self.reuse :
              old_reuse=self.reuse
              self.sd = self.reuse = self.sdnom = None
       #
-      # On est dans le cas ou l'opérateur n'est pas réentrant ou est facultativement reentrant
-      # mais est utilisé en mode non réentrant
+      # On est dans le cas ou l'opérateur n'est pas réentrant ou est facultativement reentrant
+      # mais est utilisé en mode non réentrant
       #
       if self.sd == None :
           #Pas de concept produit preexistant
@@ -168,8 +159,8 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
             return 0,"Nommage du concept refuse : un concept de meme nom existe deja"
           else:
             # Il n'existe pas de concept de ce nom dans le voisinage de l'etape courante
-            # On peut donc créer le concept retourné.
-            # Il est créé sans nom mais enregistré dans la liste des concepts existants
+            # On peut donc créer le concept retourné.
+            # Il est créé sans nom mais enregistré dans la liste des concepts existants
             try:
                self.get_sd_prod()
                # Renommage du concept : Il suffit de changer son attribut nom pour le nommer
@@ -177,16 +168,16 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
                self.sdnom=nom
                self.parent.update_concept_after_etape(self,self.sd)
                self.fin_modif()
-               return 1,"Nommage du concept effectué"
+               return 1,"Nommage du concept effectué"
             except:
                return 0,"Nommage impossible"+str(sys.exc_info()[1])
       else :
           #Un concept produit preexiste
           old_nom=self.sd.nom
           if string.find(old_nom,'sansnom') :
-            # Dans le cas où old_nom == sansnom, isvalid retourne 0 alors que ...
-            # par contre si le concept existe et qu'il s'appelle sansnom c'est que l'étape est valide
-            # on peut donc le nommer sans test préalable
+            # Dans le cas où old_nom == sansnom, isvalid retourne 0 alors que ...
+            # par contre si le concept existe et qu'il s'appelle sansnom c'est que l'étape est valide
+            # on peut donc le nommer sans test préalable
             if self.parent.get_sd_autour_etape(nom,self):
               return 0,"Nommage du concept refuse : un concept de meme nom existe deja"
             else:
@@ -195,11 +186,11 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
               self.sdnom=nom
               self.parent.update_concept_after_etape(self,self.sd)
               self.fin_modif()
-              return 1,"Nommage du concept effectué"
+              return 1,"Nommage du concept effectué"
           if self.isvalid() :
             # Normalement l appel de isvalid a mis a jour le concept produit (son type)
-            # Il suffit de spécifier l attribut nom de sd pour le nommer si le nom n est pas
-            # deja attribué
+            # Il suffit de spécifier l attribut nom de sd pour le nommer si le nom n est pas
+            # deja attribué
             if self.parent.get_sd_autour_etape(nom,self):
               return 0,"Nommage du concept refuse : un concept de meme nom existe deja"
             else:
@@ -208,7 +199,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
               self.sdnom=nom
               self.parent.update_concept_after_etape(self,self.sd)
               self.fin_modif()
-              return 1,"Nommage du concept effectué"
+              return 1,"Nommage du concept effectué"
           else:
             # Normalement on ne devrait pas passer ici
             return 0,'Normalement on ne devrait pas passer ici'
@@ -225,7 +216,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
       """
           Rend l'etape courante active.
           Il faut ajouter la sd si elle existe au contexte global du JDC
-          et à la liste des sd
+          et à la liste des sd
       """
       if self.actif:return
       self.actif = 1
@@ -292,15 +283,15 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
       """ 
             Fonction:
             Lors d'une destruction d'etape, detruit tous les concepts produits
-            Un opérateur n a qu un concept produit 
+            Un opérateur n a qu un concept produit 
             Une procedure n'en a aucun
-            Une macro en a en général plus d'un
+            Une macro en a en général plus d'un
       """
       #print "supprime_sdprods",self
       if self.reuse is self.sd :return
-      # l'étape n'est pas réentrante
-      # le concept retourné par l'étape est à supprimer car il était 
-      # créé par l'étape
+      # l'étape n'est pas réentrante
+      # le concept retourné par l'étape est à supprimer car il était 
+      # créé par l'étape
       if self.sd != None :
          self.parent.del_sdprod(self.sd)
          self.parent.delete_concept(self.sd)
@@ -319,7 +310,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
           Fonction :
           Mettre a jour les mots cles de l etape et eventuellement 
           le concept produit si reuse
-          suite à la disparition du concept sd
+          suite à la disparition du concept sd
           Seuls les mots cles simples MCSIMP font un traitement autre 
           que de transmettre aux fils
       """
@@ -350,7 +341,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
 
    def get_noms_sd_oper_reentrant(self):
       """ 
-          Retourne la liste des noms de concepts utilisés à l'intérieur de la commande
+          Retourne la liste des noms de concepts utilisés à l'intérieur de la commande
           qui sont du type que peut retourner cette commande 
       """
       liste_sd = self.get_sd_utilisees()
@@ -371,14 +362,14 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
    def get_genealogie(self):
       """ 
           Retourne la liste des noms des ascendants de l'objet self
-          en s'arretant à la première ETAPE rencontrée
+          en s'arretant à la première ETAPE rencontrée
       """
       return [self.nom]
 
    def verif_existence_sd(self):
      """
-        Vérifie que les structures de données utilisées dans self existent bien dans le contexte
-        avant étape, sinon enlève la référence à ces concepts
+        Vérifie que les structures de données utilisées dans self existent bien dans le contexte
+        avant étape, sinon enlève la référence à ces concepts
      """
      #print "verif_existence_sd",self.sd
      for motcle in self.mc_liste :
@@ -386,10 +377,10 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
 
    def update_mc_global(self):
      """
-        Met a jour les mots cles globaux enregistrés dans l'étape
+        Met a jour les mots cles globaux enregistrés dans l'étape
         et dans le jdc parent.
         Une etape ne peut pas etre globale. Elle se contente de passer
-        la requete a ses fils apres avoir reinitialisé le dictionnaire 
+        la requete a ses fils apres avoir reinitialisé le dictionnaire 
         des mots cles globaux.
      """
      self.mc_globaux={}
@@ -403,17 +394,17 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
 
    def get_objet_commentarise(self,format):
       """
-          Cette méthode retourne un objet commande commentarisée
+          Cette méthode retourne un objet commande commentarisée
           representant la commande self
       """
       import generator
       g=generator.plugins[format]()
       texte_commande = g.gener(self,format='beautifie')
-      # Il faut enlever la première ligne vide de texte_commande que
+      # Il faut enlever la première ligne vide de texte_commande que
       # rajoute le generator
       #rebut,texte_commande = string.split(texte_commande,'\n',1)
-      # on construit l'objet COMMANDE_COMM repésentatif de self mais non
-      # enregistré dans le jdc (pas ajouté dans jdc.etapes)
+      # on construit l'objet COMMANDE_COMM repésentatif de self mais non
+      # enregistré dans le jdc (pas ajouté dans jdc.etapes)
       parent=self.parent
       pos=self.parent.etapes.index(self)
       commande_comment = commande_comm.COMMANDE_COMM(texte=texte_commande,
@@ -424,6 +415,11 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
 
       return commande_comment
 
+   def modified(self):
+      """Le contenu de l'etape (mots cles, ...) a ete modifie"""
+      if self.nom=="DETRUIRE":
+        self.parent.control_context_apres(self)
+
      
 #ATTENTION SURCHARGE: a garder en synchro ou a reintegrer dans le Noyau
    def Build_sd(self,nom):
@@ -436,8 +432,8 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
       except AsException,e:
          # Une erreur s'est produite lors de la construction du concept
          # Comme on est dans EFICAS, on essaie de poursuivre quand meme
-         # Si on poursuit, on a le choix entre deux possibilités :
-         # 1. on annule la sd associée à self
+         # Si on poursuit, on a le choix entre deux possibilités :
+         # 1. on annule la sd associée à self
          # 2. on la conserve mais il faut la retourner
          # En plus il faut rendre coherents sdnom et sd.nom
          self.sd=None
@@ -447,11 +443,11 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
 
       return self.sd
 
-#ATTENTION SURCHARGE: cette methode doit etre gardée en synchronisation avec Noyau
+#ATTENTION SURCHARGE: cette methode doit etre gardée en synchronisation avec Noyau
    def make_register(self):
       """
-         Initialise les attributs jdc, id, niveau et réalise les
-         enregistrements nécessaires
+         Initialise les attributs jdc, id, niveau et réalise les
+         enregistrements nécessaires
          Pour EFICAS, on tient compte des niveaux
          Surcharge la methode make_register du package Noyau
       """
@@ -460,13 +456,13 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
          self.id=   self.parent.register(self)
          self.UserError=self.jdc.UserError
          if self.definition.niveau :
-            # La définition est dans un niveau. En plus on
+            # La définition est dans un niveau. En plus on
             # l'enregistre dans le niveau
             self.nom_niveau_definition = self.definition.niveau.nom
             self.niveau = self.parent.dict_niveaux[self.nom_niveau_definition]
             self.niveau.register(self)
          else:
-            # La définition est au niveau global
+            # La définition est au niveau global
             self.nom_niveau_definition = 'JDC'
             self.niveau=self.parent
       else:
@@ -477,7 +473,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO):
 
    def report(self):
      cr= Validation.V_ETAPE.ETAPE.report(self)
-     #rafraichissement de la validité de l'etape (probleme avec l'ordre dans les macros : etape puis mots cles)
+     #rafraichissement de la validité de l'etape (probleme avec l'ordre dans les macros : etape puis mots cles)
      self.isvalid()
      return cr
 
index 2b39f2a444d2250267ef4b40e1bb74e975e06bf6..600e8d0a941c64da084c5503abd112ef5500f192 100644 (file)
@@ -73,6 +73,44 @@ class JDC(I_OBJECT.OBJECT):
       l.sort()
       return l
 
+   def get_variables(self,etape):
+      etapeStop=etape
+      l=[]
+      for etapeTraitee in self.etapes :
+          if etapeTraitee==etapeStop:
+             break
+          if etapeTraitee.nom == 'VARIABLE' :
+             variable=etapeTraitee.get_mocle('ModelVariable')
+             if variable != None :
+                l.append(variable.nom)
+      return l
+
+   def set_Copules_recalcule_etat(self):
+      for etapeTraitee in self.etapes :
+          if etapeTraitee.nom == 'CORRELATION' :
+             Matrix=etapeTraitee.get_child('Matrix')
+             if Matrix !=None :
+                Correlation=etapeTraitee.get_child('CorrelationMatrix')
+                if Correlation !=None :
+                   Correlation.state='arecalculer'
+                Matrix.state='arecalculer'
+     
+   def recalcule_etat_correlation(self):
+      for etapeTraitee in self.etapes :
+          if etapeTraitee.nom == 'CORRELATION' :
+             Matrix=etapeTraitee.get_child('Matrix')
+             if Matrix !=None :
+                Matrix.state='arecalculer'
+                Correlation=Matrix.get_child('CorrelationMatrix')
+                if Correlation !=None :
+                   Correlation.state='arecalculer'
+                   Correlation.isvalid()
+                Matrix.isvalid()
+                etapeTraitee.state='arecalculer'
+             if etapeTraitee.state=='arecalculer':
+                etapeTraitee.isvalid()
+                
+        
    def get_sd_avant_du_bon_type_pour_type_de_base(self,etape,type):
       """
           Retourne la liste des concepts avant etape d'1 type de base acceptable
@@ -495,10 +533,6 @@ class JDC(I_OBJECT.OBJECT):
         nb=nb+len(niv.etapes)
       return nb
 
-   def send_message(self,message):
-      if self.appli:
-         self.appli.send_message(message)
-
    def init_modif(self):
       """
       Méthode appelée au moment où une modification va être faite afin de 
@@ -647,9 +681,10 @@ class JDC(I_OBJECT.OBJECT):
           Seuls les mots cles simples MCSIMP font un traitement autre
           que de transmettre aux fils
       """
-      #print "delete_concept",self,sd
       for etape in self.etapes :
         etape.delete_concept(sd)
+        #PN PN PN pour les matrices ????
+        #self.get_variables_avant(etape)
 
    def replace_concept_after_etape(self,etape,old_sd,sd):
       """
index 357fc5b783db4caf605f10980c99d792afe3fc83..8770ce39a2319ab81de6564fe75029e10d8eca8a 100644 (file)
@@ -390,7 +390,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
        Tente de changer le fichier include. Le precedent include est conservé
        dans old_xxx
     """
-    #print "change_fichier_init",new_fic
+    print "change_fichier_init",new_fic
     if not hasattr(self,'fichier_ini'):
        self.fichier_ini=None
        self.fichier_text=None
@@ -403,11 +403,15 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
        self.JdC_aux=Extensions.jdc_include.JdC_include
 
     self.old_fic = self.fichier_ini
+    print self.old_fic
     self.old_text = self.fichier_text
+    print self.old_text
     self.old_err = self.fichier_err
     self.old_context=self.contexte_fichier_init
+    print self.old_context
     self.old_units=self.recorded_units
     self.old_etapes=self.etapes
+    print self.old_etapes
     self.old_jdc_aux=self.jdc_aux
 
     self.fichier_ini = new_fic
@@ -763,15 +767,20 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
   def make_include2(self,fichier=None):
       # gestion de l unicite SVP
       unite=999
+
       if hasattr(self,'fichier_ini') : return
-      #print "je passe le if"
+      reevalue=0
+      if hasattr(self,'old_context_fichier_init' ):
+         reevalue=1
+         for concept in self.old_context_fichier_init.values():
+             self.jdc.delete_concept(concept)
+
       if fichier == None :
          fichier=str(self.jdc.appli.get_file_variable())
-         #print fichier
          if fichier  == str("") : 
            self.fichier_ini="badfile"
            self.fichier_text=""
-          self.fichier_err="Le fichier INCLUDE n est pas defini"
+          self.fichier_err="Le fichier n est pas defini"
            self.parent.record_unit(999,self)
            try :
               MCFils=self.get_child('FileName')
@@ -780,12 +789,12 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
               pass
            raise Exception(self.fichier_err)
 
-         # On memorise le fichier retourne
       self.fichier_ini  = fichier
       self.fichier_text = ""
       self.contexte_fichier_init={}
       self.fichier_unite=999
       self.fichier_err=None
+      nbVariableOut=0
       try :
          from openturns import WrapperFile
          monWrapper=WrapperFile(fichier)
@@ -796,24 +805,32 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
              nom=maVariableListe[i].id_
              type=maVariableListe[i].type_
              if type :
-               ligneTexte="%s=DETERMINISTICVARIABLE(N='%s',T='in',R=%d);\n" % (nom, nom, i)
+               #ligneTexte="%s=DETERMINISTICVARIABLE(N='%s',T='out',R=%d);\n" % (nom, nom, i)
+               ligneTexte=""
+               nbVariableOut=nbVariableOut+1
              else :
-               ligneTexte="%s=DETERMINISTICVARIABLE(N='%s',T='out',R=%d);\n" % (nom, nom, i)
+               ligneTexte="%s=DETERMINISTICVARIABLE(N='%s',T='in',R=%d);\n" % (nom, nom, i)
              self.fichier_text = self.fichier_text + ligneTexte
       except:
          self.make_incl2_except()
          raise
 
+      if nbVariableOut != 1 :
+         print nbVariableOut ,"nbVariableOut"
+         self.make_incl2_except(mess="le fichier doit contenir une unique variable de sortie")
+         raise
+
       try:
          import Extensions.jdc_include
+         self.JdC_aux=Extensions.jdc_include.JdC_include
       except:
          traceback.print_exc()
          self.make_incl2_except()
          raise
-      self.JdC_aux=Extensions.jdc_include.JdC_include
       
       try:
          self.make_contexte_include(self.fichier_ini ,self.fichier_text)
+         self.old_context_fichier_init=self.contexte_fichier_init
          self.parent.record_unit(unite,self)
          try :
             MCFils=self.get_child('FileName')
@@ -822,16 +839,39 @@ class MACRO_ETAPE(I_ETAPE.ETAPE):
             pass
       except:
          self.make_incl2_except()
-         raise
 
-  def make_incl2_except(self):
-         #print "make_incl2_except"
+      # recalcul validite pour la matrice eventuelle
+      if reevalue :
+         for e in self.jdc.etapes:
+           if e.nom == "VARIABLE" :
+              e.state="modified"
+              try :
+                 mc=e.get_child('ModelVariable') 
+                 mc.state="modified"
+              except :
+                 pass
+           if e.nom == "CORRELATION" :
+              e.state="modified"
+              try :
+                 mc=e.get_child('Matrix') 
+                 mc.state="modified"
+                 mcFeuille=mc.get_child('CorrelationMatrix')
+                 mcFeuille.state="modified"
+              except :
+                 pass
+              e.isvalid()
+
+  def make_incl2_except(self,mess=None):
          l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
          if self.jdc.appli:
-             self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier inclus",
+             if mess == None :
+                     self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier inclus",
                                             message="Le contenu de ce fichier ne sera pas pris en compte\n"+string.join(l)
                                            )
-         self.parent.record_unit(unite,self)
+             else :
+                     self.jdc.appli.affiche_alerte("Erreur lors de l'evaluation du fichier inclus",
+                                            message=mess )
+         #self.parent.record_unit(unite,self)
          self.g_context={}
          self.etapes=[]
          self.jdc_aux=None
index 5ee3a1fdfb0cc2ebc0f364951d4d8f4038b1c924..f9b03c339ca81e128781062d4bc9419340d702c7 100644 (file)
@@ -186,6 +186,7 @@ class MCCOMPO(I_OBJECT.OBJECT):
     objet.delete_mc_global()
     objet.update_condition_bloc()
     objet.supprime()
+    self.etape.modified()
     self.fin_modif()
     return 1
 
@@ -212,7 +213,7 @@ class MCCOMPO(I_OBJECT.OBJECT):
 
       # On verifie que l'ajout d'objet est autorise
       if self.ispermis(objet) == 0:
-        self.jdc.send_message("L'objet %s ne peut être un fils de %s" %(objet.nom,
+        self.jdc.appli.affiche_alerte("Erreur","L'objet %s ne peut être un fils de %s" %(objet.nom,
                                                                         self.nom))
         self.fin_modif()
         return 0
@@ -240,7 +241,7 @@ class MCCOMPO(I_OBJECT.OBJECT):
          # on cree une liste d'objets. Dans le cas contraire,
          # on emet un message d'erreur.
          if not old_obj.isrepetable():
-            self.jdc.send_message("L'objet %s ne peut pas être répété" %objet.nom)
+            self.jdc.appli.affiche_alerte("Erreur","L'objet %s ne peut pas être répété" %objet.nom)
             self.fin_modif()
             return 0
          else:
index 3565d0dc40f8db55c4299d9fa41390df63d25352..4627bf5502d606990877c139f846c5ac8e972449 100644 (file)
@@ -79,6 +79,7 @@ class MCList:
       CONNECTOR.Emit(self,"supp",obj)
       self.update_condition_bloc()
       obj.supprime()
+      self.etape.modified()
       self.fin_modif()
       return 1
 
@@ -92,7 +93,7 @@ class MCList:
          raise "traitement non prevu"
 
       if not self.ajout_possible():
-         self.jdc.send_message("L'objet %s ne peut pas être ajouté" % obj.nom)
+         self.jdc.appli.affiche_alerte("Erreur","L'objet %s ne peut pas être ajouté" % obj.nom)
          return None
 
       if self.nom != obj.nom:
index bacc1a131e30f8e85ec60309bd445b8bc42c62fa..3c4052a31b0fe598c357f69a797d54390dedab3a 100644 (file)
@@ -30,14 +30,14 @@ from Noyau.N_utils import repr_float
 import Validation
 import CONNECTOR
 
-# Attention : les classes ASSD,.... peuvent etre surchargées
-# dans le package Accas. Il faut donc prendre des précautions si
+# Attention : les classes ASSD,.... peuvent etre surchargées
+# dans le package Accas. Il faut donc prendre des précautions si
 # on utilise les classes du Noyau pour faire des tests (isxxxx, ...)
-# Si on veut créer des objets comme des CO avec les classes du noyau
+# Si on veut créer des objets comme des CO avec les classes du noyau
 # ils n'auront pas les conportements des autres packages (pb!!!)
-# Il vaut mieux les importer d'Accas mais problème d'import circulaire,
-# on ne peut pas les importer au début.
-# On fait donc un import local quand c'est nécessaire (peut occasionner
+# Il vaut mieux les importer d'Accas mais problème d'import circulaire,
+# on ne peut pas les importer au début.
+# On fait donc un import local quand c'est nécessaire (peut occasionner
 # des pbs de prformance).
 from Noyau.N_ASSD import ASSD,assd
 from Noyau.N_GEOM import GEOM,geom
@@ -53,6 +53,15 @@ from I_VALIDATOR import ValError,listProto
 
 class MCSIMP(I_OBJECT.OBJECT):
 
+  def isvalid(self,cr='non'):
+      if self.state == 'unchanged':
+        return self.valid
+      for type_permis in self.definition.type:
+          if hasattr(type_permis, "__class__") and type_permis.__class__.__name__ == 'Matrice':
+             self.monType=type_permis
+             return self.valideMatrice(cr=cr)
+      return Validation.V_MCSIMP.MCSIMP.isvalid(self,cr=cr)
+
   def GetNomConcept(self):
       p=self
       while p.parent :
@@ -70,19 +79,19 @@ class MCSIMP(I_OBJECT.OBJECT):
 
   def GetText(self):
     """
-        Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet
-        pointé par self
+        Retourne le texte à afficher dans l'arbre représentant la valeur de l'objet
+        pointé par self
     """
 
     if self.valeur == None : 
       return None
     elif type(self.valeur) == types.FloatType : 
-      # Traitement d'un flottant isolé
+      # Traitement d'un flottant isolé
       txt = str(self.valeur)
       clefobj=self.GetNomConcept()
-      if self.jdc.appli.dict_reels.has_key(clefobj):
-        if self.jdc.appli.dict_reels[clefobj].has_key(self.valeur):
-           txt=self.jdc.appli.dict_reels[clefobj][self.valeur]
+      if self.jdc.appli.appliEficas.dict_reels.has_key(clefobj):
+        if self.jdc.appli.appliEficas.dict_reels[clefobj].has_key(self.valeur):
+           txt=self.jdc.appli.appliEficas.dict_reels[clefobj][self.valeur]
     elif type(self.valeur) in (types.ListType,types.TupleType) :
       # Traitement des listes
       txt='('
@@ -90,9 +99,9 @@ class MCSIMP(I_OBJECT.OBJECT):
       for val in self.valeur:
         if type(val) == types.FloatType : 
            clefobj=self.GetNomConcept()
-           if self.jdc.appli.dict_reels.has_key(clefobj):
-              if self.jdc.appli.dict_reels[clefobj].has_key(val):
-                 txt=txt + sep +self.jdc.appli.dict_reels[clefobj][val]
+           if self.jdc.appli.appliEficas.dict_reels.has_key(clefobj):
+              if self.jdc.appli.appliEficas.dict_reels[clefobj].has_key(val):
+                 txt=txt + sep +self.jdc.appli.appliEficas.dict_reels[clefobj][val]
               else :
                  txt=txt + sep + str(val)
            else :
@@ -118,14 +127,14 @@ class MCSIMP(I_OBJECT.OBJECT):
 
   def getval(self):
     """ 
-       Retourne une chaîne de caractère représentant la valeur de self 
+       Retourne une chaîne de caractère représentant la valeur de self 
     """
     val=self.valeur
     if type(val) == types.FloatType : 
       clefobj=self.GetNomConcept()
-      if self.jdc.appli.dict_reels.has_key(clefobj):
-        if self.jdc.appli.dict_reels[clefobj].has_key(val):
-           return self.jdc.appli.dict_reels[clefobj][val]
+      if self.jdc.appli.appliEficas.dict_reels.has_key(clefobj):
+        if self.jdc.appli.appliEficas.appliEficas.dict_reels[clefobj].has_key(val):
+           return self.jdc.appli.appliEficas.dict_reels[clefobj][val]
     if type(val) != types.TupleType :
       try:
         return val.get_name()
@@ -143,7 +152,7 @@ class MCSIMP(I_OBJECT.OBJECT):
 
   def wait_co(self):
     """
-        Méthode booléenne qui retourne 1 si l'objet attend un objet ASSD 
+        Méthode booléenne qui retourne 1 si l'objet attend un objet ASSD 
         qui n'existe pas encore (type CO()), 0 sinon
     """
     for typ in self.definition.type:
@@ -154,8 +163,8 @@ class MCSIMP(I_OBJECT.OBJECT):
 
   def wait_assd(self):
     """ 
-        Méthode booléenne qui retourne 1 si le MCS attend un objet de type ASSD 
-        ou dérivé, 0 sinon
+        Méthode booléenne qui retourne 1 si le MCS attend un objet de type ASSD 
+        ou dérivé, 0 sinon
     """
     for typ in self.definition.type:
       if type(typ) == types.ClassType or isinstance(typ,type):
@@ -165,7 +174,7 @@ class MCSIMP(I_OBJECT.OBJECT):
 
   def wait_assd_or_geom(self):
     """ 
-         Retourne 1 si le mot-clé simple attend un objet de type
+         Retourne 1 si le mot-clé simple attend un objet de type
          assd, ASSD, geom ou GEOM
          Retourne 0 dans le cas contraire
     """
@@ -177,7 +186,7 @@ class MCSIMP(I_OBJECT.OBJECT):
 
   def wait_geom(self):
     """ 
-         Retourne 1 si le mot-clé simple attend un objet de type GEOM
+         Retourne 1 si le mot-clé simple attend un objet de type GEOM
          Retourne 0 dans le cas contraire
     """
     for typ in self.definition.type:
@@ -187,7 +196,7 @@ class MCSIMP(I_OBJECT.OBJECT):
 
   def wait_TXM(self):
     """ 
-         Retourne 1 si le mot-clé simple attend un objet de type TXM
+         Retourne 1 si le mot-clé simple attend un objet de type TXM
          Retourne 0 dans le cas contraire
     """
     for typ in self.definition.type:
@@ -217,7 +226,7 @@ class MCSIMP(I_OBJECT.OBJECT):
       lval=listProto.adapt(valeur)
       if lval is None:
          valid=0
-         mess="None n'est pas une valeur autorisée"
+         mess="None n'est pas une valeur autorisée"
       else:
          try:
             for val in lval:
@@ -250,7 +259,7 @@ class MCSIMP(I_OBJECT.OBJECT):
           for val in new_valeur:
               self.typeProto.adapt(val)
               self.intoProto.adapt(val)
-              #on ne verifie pas la cardinalité
+              #on ne verifie pas la cardinalité
               if self.definition.validators:
                   validite=self.definition.validators.valide_liste_partielle(new_valeur)
       except ValError,e:
@@ -274,13 +283,14 @@ class MCSIMP(I_OBJECT.OBJECT):
         self.valeur = new_valeur
         self.val = new_valeur
         self.update_condition_bloc()
+        self.etape.modified()
         self.fin_modif()
         return 1
 
   def eval_valeur(self,new_valeur):
     """
-        Essaie d'évaluer new_valeur comme une SD, une déclaration Python 
-        ou un EVAL: Retourne la valeur évaluée (ou None) et le test de réussite (1 ou 0)
+        Essaie d'évaluer new_valeur comme une SD, une déclaration Python 
+        ou un EVAL: Retourne la valeur évaluée (ou None) et le test de réussite (1 ou 0)
     """
     sd = self.jdc.get_sd_avant_etape(new_valeur,self.etape)
     #sd = self.jdc.get_contexte_avant(self.etape).get(new_valeur,None)
@@ -357,19 +367,23 @@ class MCSIMP(I_OBJECT.OBJECT):
 
   def update_concept(self,sd):
     if type(self.valeur) in (types.ListType,types.TupleType) :
-       if sd in self.valeur:self.fin_modif()
+       if sd in self.valeur:
+         self.init_modif()
+         self.fin_modif()
     else:
-       if sd == self.valeur:self.fin_modif()
+       if sd == self.valeur:
+         self.init_modif()
+         self.fin_modif()
 
   def delete_concept(self,sd):
     """ 
         Inputs :
            - sd=concept detruit
         Fonction :
-        Met a jour la valeur du mot cle simple suite à la disparition 
+        Met a jour la valeur du mot cle simple suite à la disparition 
         du concept sd
+        Attention aux matrices
     """
-    #print "delete_concept",sd
     if type(self.valeur) == types.TupleType :
       if sd in self.valeur:
         self.init_modif()
@@ -387,11 +401,19 @@ class MCSIMP(I_OBJECT.OBJECT):
         self.valeur=None
         self.val=None
         self.fin_modif()
+    # Glut Horrible pour les matrices ???
+    if sd.__class__.__name__== "variable":
+       for type_permis in self.definition.type:
+            if type(type_permis) == types.InstanceType:
+               if type_permis.__class__.__name__ == 'Matrice' :
+                   self.state="changed"
+                   self.isvalid()
+                  
 
   def replace_concept(self,old_sd,sd):
     """
         Inputs :
-           - old_sd=concept remplacé
+           - old_sd=concept remplacé
            - sd=nouveau concept
         Fonction :
         Met a jour la valeur du mot cle simple suite au remplacement 
@@ -420,25 +442,25 @@ class MCSIMP(I_OBJECT.OBJECT):
 
   def set_valeur_co(self,nom_co):
       """
-          Affecte à self l'objet de type CO et de nom nom_co
+          Affecte à self l'objet de type CO et de nom nom_co
       """
       #print "set_valeur_co",nom_co
       step=self.etape.parent
       if nom_co == None or nom_co == '':
          new_objet=None
       else:
-         # Avant de créer un concept il faut s'assurer du contexte : step 
+         # Avant de créer un concept il faut s'assurer du contexte : step 
          # courant
          sd= step.get_sd_autour_etape(nom_co,self.etape,avec='oui')
          if sd:
-            # Si un concept du meme nom existe deja dans la portée de l'étape
-            # on ne crée pas le concept
+            # Si un concept du meme nom existe deja dans la portée de l'étape
+            # on ne crée pas le concept
             return 0,"un concept de meme nom existe deja"
-         # Il n'existe pas de concept de meme nom. On peut donc le créer 
-         # Il faut néanmoins que la méthode NommerSdProd de step gère les 
+         # Il n'existe pas de concept de meme nom. On peut donc le créer 
+         # Il faut néanmoins que la méthode NommerSdProd de step gère les 
          # contextes en mode editeur
-         # Normalement la méthode  du Noyau doit etre surchargée
-         # On déclare l'étape du mot clé comme etape courante pour NommerSdprod
+         # Normalement la méthode  du Noyau doit etre surchargée
+         # On déclare l'étape du mot clé comme etape courante pour NommerSdprod
          cs= CONTEXT.get_current_step()
          CONTEXT.unset_current_step()
          CONTEXT.set_current_step(step)
@@ -455,12 +477,12 @@ class MCSIMP(I_OBJECT.OBJECT):
       self.fin_modif()
       step.reset_context()
       #print "set_valeur_co",new_objet
-      return 1,"Concept créé"
+      return 1,"Concept créé"
         
   def verif_existence_sd(self):
      """
-        Vérifie que les structures de données utilisées dans self existent bien dans le contexte
-        avant étape, sinon enlève la référence à ces concepts
+        Vérifie que les structures de données utilisées dans self existent bien dans le contexte
+        avant étape, sinon enlève la référence à ces concepts
      """
      #print "verif_existence_sd"
      # Attention : possible probleme avec include
@@ -495,7 +517,7 @@ class MCSIMP(I_OBJECT.OBJECT):
 
   def get_type(self):
      """
-     Retourne le type attendu par le mot-clé simple
+     Retourne le type attendu par le mot-clé simple
      """
      return self.definition.type
 
@@ -511,7 +533,7 @@ class MCSIMP(I_OBJECT.OBJECT):
 
   def update_mc_global(self):
      """
-        Met a jour les mots cles globaux enregistrés dans l'étape parente
+        Met a jour les mots cles globaux enregistrés dans l'étape parente
         et dans le jdc parent.
         Un mot cle simple peut etre global. 
      """
@@ -530,14 +552,14 @@ class MCSIMP(I_OBJECT.OBJECT):
      return 0
 
   def valide_item(self,item):
-      """Valide un item isolé. Cet item est candidat à l'ajout à la liste existante"""
+      """Valide un item isolé. Cet item est candidat à l'ajout à la liste existante"""
       valid=1
       try:
           #on verifie le type
           self.typeProto.adapt(item)
           #on verifie les choix possibles
           self.intoProto.adapt(item)
-          #on ne verifie pas la cardinalité
+          #on ne verifie pas la cardinalité
           if self.definition.validators:
               valid=self.definition.validators.verif_item(item)
       except ValError,e:
@@ -552,7 +574,7 @@ class MCSIMP(I_OBJECT.OBJECT):
           self.typeProto.adapt(item)
           #on verifie les choix possibles
           self.intoProto.adapt(item)
-          #on ne verifie pas la cardinalité mais on verifie les validateurs
+          #on ne verifie pas la cardinalité mais on verifie les validateurs
           if self.definition.validators:
               valid=self.definition.validators.verif_item(item)
           comment=""
@@ -563,6 +585,35 @@ class MCSIMP(I_OBJECT.OBJECT):
           valid=0
       return valid,comment
 
+  def valideMatrice(self,cr):
+       #Attention, la matrice contient comme dernier tuple l ordre des variables
+       if self.monType.methodeCalculTaille != None :
+           apply (MCSIMP.__dict__[self.monType.methodeCalculTaille],(self,))
+       try :
+       #if 1 :
+           ok=0
+           if len(self.valeur) == self.monType.nbLigs +1:
+              ok=1
+              for i in range(len(self.valeur) -1):
+                  if len(self.valeur[i])!= self.monType.nbCols:
+                     ok=0
+           if ok: 
+              self.set_valid(1)
+              return 1 
+       except :
+       #else :
+            pass
+       if cr == 'oui' :
+          self.cr.fatal("La matrice n est pas une matrice "+str(self.monType.nbLigs)+","+str(self.monType.nbCols))
+       self.set_valid(0)
+       return 0
+
+  def NbDeVariables(self):
+       listeVariables=self.jdc.get_variables(self.etape)
+       self.monType.nbLigs=len(listeVariables)
+       self.monType.nbCols=len(listeVariables)
+      
+      
 #--------------------------------------------------------------------------------
  
 #ATTENTION SURCHARGE : toutes les methodes ci apres sont des surcharges du Noyau et de Validation
index 7739e04ac877eac94227932e0f3c574c0991904a..7ffbbb4c650465cc53247746fb4e924887cdcd34 100644 (file)
@@ -124,7 +124,7 @@ class FACTTreeItem(Objecttreeitem.ObjectTreeItem):
          return 0
 
       if self.object.suppentite(itemobject):
-         message = "Mot-clé " + itemobject.nom + " supprimé"
+         message = "Mot-clef " + itemobject.nom + " supprime"
          self.appli.affiche_infos(message)
          return 1
       else:
index 9112f96bd6c44e554ed881be17cf30079eed6aa0..2f990a30ab1c68a7d509e2c59e330612ce169146 100644 (file)
@@ -137,7 +137,7 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
           self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
           return 0
       if self.object.suppentite(itemobject):
-          message = "Mot-clé " + itemobject.nom + " supprimé"
+          message = "Mot-clef " + itemobject.nom + " supprime"
           self.appli.affiche_infos(message)
           return 1
       else :
index 6346902abc2d0366d01aaaba6a29c3a9127731cd..f102684ec9efb7c29d6a24ac333152be8c6d2cfe 100644 (file)
@@ -18,7 +18,7 @@ import readercata
 import prefs
 import qtCommun
 
-VERSION_EFICAS  = "EFICAS v1.16"
+VERSION_EFICAS  = "EFICAS v1.17"
 
 
 # -------------------------- #
index cb670c6d1c2e1cb94fee4c0f2d5ed631d2e614cf..31329b42262fa5c82b45acdb73e6c8a9a0a26a67 100644 (file)
@@ -130,7 +130,7 @@ class Appli(Eficas):
         titre = "version "
         monVisu=DVisu(parent=self.viewmanager,fl=Qt.WType_Dialog)
         monVisu.setCaption(titre)
-        monVisu.TB.setText("Eficas V1.16")
+        monVisu.TB.setText("Eficas V2.0")
         monVisu.adjustSize()
         monVisu.show()
 
diff --git a/InterfaceQT4/CMakeLists.txt b/InterfaceQT4/CMakeLists.txt
new file mode 100644 (file)
index 0000000..8c102b6
--- /dev/null
@@ -0,0 +1,66 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python du repertoire et des sous-repertoires (sauf CVS)
+install ( FILES browser.py compobase.py compobloc.py compocommandecomm.py compocomm.py
+                compoerror.py compofact.py compoformule.py compojdc.py compomacro.py
+                compomclist.py componiveau.py componuplet.py compooper.py compoparam.py
+                compoproc.py composimp.py editor.py eficas_go.py 
+                __init__.py monChoixCata.py monCommandePanel.py
+                monCommentairePanel.py monFonctionPanel.py monFormulePanel.py
+                monInactifPanel.py monIncludePanel.py monListeParamPanel.py
+                monMacroPanel.py monMatricePanel.py monMCFactPanel.py
+                monMCListAjoutPanel.py monOptionsPdf.py monParamPanel.py monPixmap.py
+                monPlusieursASSDPanel.py monPlusieursBasePanel.py monPlusieursIntoPanel.py
+                monPoursuitePanel.py monRacinePanel.py monSelectVal.py
+                monUniqueASSDPanel.py monUniqueBasePanel.py monUniqueCompPanel.py monUniqueIntoPanel.py
+                monUniqueSDCOIntoPanel.py monUniqueSDCOPanel.py monVisu.py
+                politiquesValidation.py qtCommun.py qtEficas.py
+                qtSaisie.py readercata.py typeNode.py utilIcons.py viewManager.py
+          DESTINATION ${CMAKE_INSTALL_PREFIX}/InterfaceQT4
+       )
+
+# Installation des fichiers : OpenTURNS
+if (WITH_OPENTURNS)
+  install ( FILES monOptions_OPENTURNS_STUDY.py monOptions_OPENTURNS_WRAPPER.py
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/InterfaceQT4
+          )
+endif (WITH_OPENTURNS)
+
+# Installation des fichiers : Aster
+if (WITH_ASTER)
+  install ( FILES gereTraduction.py monOptions_ASTER.py ssIhm.py
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/InterfaceQT4
+          )
+endif (WITH_ASTER)
+
+# Installatiion des fichiers : MAP
+if (WITH_MAP)
+  install ( FILES monChoixMap.py 
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/InterfaceQT4
+          )
+endif (WITH_MAP)
+
+#monOptions_CUVE2DG.py
+
+### Local Variables:
+### mode: cmake
+### End:
index 785633a0c6930d009f2255051bd9bdda731f7d8f..1a97d5c7e4a12f21e48a943a1d55373f965f41a2 100644 (file)
@@ -41,8 +41,13 @@ class JDCTree( QTreeWidget ):
         mesLabels << self.trUtf8('Commande                   ') << self.trUtf8('Concept/Valeur           ')
         self.setHeaderLabels(mesLabels)
                 
-        self.setMinimumSize(QSize(600,505))
-        self.setColumnWidth(0,300)
+        #self.setMinimumSize(QSize(600,505))
+        try :
+           self.setColumnWidth(0,300)
+        except :
+            QMessageBox.critical(self.editor,'probleme d environnement', "L environnement doit etre en QT4")
+            sys.exit(0)
+        self.itemCourrant=None
 
         self.connect(self, SIGNAL("itemClicked ( QTreeWidgetItem * ,int) "), self.handleOnItem)
         self.racine=self.item.itemNode(self,self.item)
@@ -69,16 +74,21 @@ class JDCTree( QTreeWidget ):
         if item.menu == None:
            item.createPopUpMenu()
         if item.menu != None:
+           if item.item.get_nom() == "DISTRIBUTION" and item.item.isvalid() :
+              item.Graphe.setEnabled(1)
            item.menu.exec_(coord)            
             
     def handleOnItem(self,item,int):
-        item.affichePanneau()
-        try :
+        self.itemCourrant=item
+        #try :
+        if 1 :
            fr = item.item.get_fr()
            if self.editor:
-              self.editor.affiche_infos(fr)
-        except:
+              self.editor.affiche_infos(QString.toUtf8(QString(fr)))
+        #except:
+        else:
             pass
+        item.affichePanneau()
 
 
 # type de noeud
@@ -108,8 +118,9 @@ class JDCNode(QTreeWidgetItem):
         self.existeMenu=1
 
         self.item.connect("valid",self.onValid,())
-        self.item.connect("supp" ,self.onAdd,())
-        self.item.connect("add"  ,self.onSupp,())
+        self.item.connect("supp" ,self.onSupp,())
+        self.item.connect("add"  ,self.onAdd,())
+        self.state=""
 
 
     def build_children(self,posInsertion=10000):
@@ -134,7 +145,6 @@ class JDCNode(QTreeWidgetItem):
             ind=ind+1
 
     def affichePanneau(self) :
-        print self
         if self.item.isactif():
            panel=self.getPanel()
         else:
@@ -264,7 +274,6 @@ class JDCNode(QTreeWidgetItem):
         obj=self.item.additem(name,index) #CS_pbruno emet le signal 'add'
         if obj is None:obj=0
         if obj == 0:return 0
-        self.build_children(index)
         child=self.children[index]
         child.affichePanneau() 
         return child
@@ -276,6 +285,10 @@ class JDCNode(QTreeWidgetItem):
         self.editor.init_modif()
         index = self.treeParent.children.index(self) - 1 
         if index < 0 : index =0
+        recalcule=0
+        if self.item.nom == "VARIABLE" :
+           recalcule=1
+           jdc=self.item.jdc
 
         ret=self.treeParent.item.suppitem(self.item)
         if ret == 0:return
@@ -286,27 +299,31 @@ class JDCNode(QTreeWidgetItem):
            toselect=brothers[index]
         else:
            toselect=self.treeParent
+        if recalcule :
+           jdc.recalcule_etat_correlation()
         toselect.select()
         toselect.affichePanneau()
 
 #        
 #    #------------------------------------------------------------------
     def onValid(self):        
+        if self.item.nom == "VARIABLE" and self.item.isvalid():
+           self.item.jdc.recalcule_etat_correlation()
+        if hasattr(self.item,'forceRecalcul'):
+           self.forceRecalculChildren(self.item.forceRecalcul)
         self.editor.init_modif()
         self.update_node_valid()
         self.update_node_label()
         self.update_node_texte()
 
     def onAdd(self,object):
-        #print "NODE  onAdd", self.item.GetLabelText()
         self.editor.init_modif()
         self.update_nodes()
  
     def onSupp(self,object):
-        #print "NODE onSupp", self.item.GetLabelText()
+        #print "onSupp"
         self.editor.init_modif()
         self.update_nodes()
 
     def update_node_valid(self):
         """Cette methode remet a jour la validite du noeud (icone)
@@ -332,6 +349,17 @@ class JDCNode(QTreeWidgetItem):
     def update_nodes(self):
         #print 'NODE update_nodes', self.item.GetLabelText()
         self.build_children()
+
+    def update_valid(self) :
+        """Cette methode a pour but de mettre a jour la validite du noeud
+           et de propager la demande de mise a jour a son parent
+        """
+        #print "NODE update_valid", self.item.GetLabelText()
+        self.update_node_valid()
+        try :
+          self.treeParent.update_valid()
+        except:
+          pass
             
     def update_texte(self):
         """ Met a jour les noms des SD et valeurs des mots-cles """
@@ -340,15 +368,40 @@ class JDCNode(QTreeWidgetItem):
         if self.isExpanded() :
             for child in self.children:
                 if child.isHidden() == false : child.update_texte()
+
+
+    def forceRecalculChildren(self,niveau):
+        if self.state=='recalcule' : 
+           self.state=""
+           return
+        self.state='recalcule'
+        if hasattr(self.item,'object'):
+           self.item.object.state="modified"
+        for child in self.children:
+           if niveau > 0 : child.forceRecalculChildren(niveau - 1)
+              
         
+
+    def doPaste(self,node_selected):
+        """
+            Déclenche la copie de l'objet item avec pour cible
+            l'objet passé en argument : node_selected
+        """
+        #print 'je passe dans doPaste'
+        objet_a_copier = self.item.get_copie_objet()
+        child=node_selected.doPasteCommande(objet_a_copier)
+        return child
+
     def doPasteCommande(self,objet_a_copier):
         """
           Réalise la copie de l'objet passé en argument qui est nécessairement
           une commande
         """
-        print "objet_a_copier = ", objet_a_copier.item.GetLabelText()
-        child = self.append_brother(objet_a_copier)
+        #print 'je passe dans doPasteCommande'
+        try :
+          child = self.append_brother(objet_a_copier)
+        except :
+           pass
         return child
 
     def doPasteMCF(self,objet_a_copier):
@@ -356,9 +409,11 @@ class JDCNode(QTreeWidgetItem):
            Réalise la copie de l'objet passé en argument (objet_a_copier)
            Il s'agit forcément d'un mot clé facteur
         """
-        child = self.append_child(objet_a_copier,pos='first')
+        #print 'je passe dans doPasteMCF'
+        child = self.append_child(objet_a_copier,pos='first',retour='oui')
         return child
 
+
 if __name__=='__main__':
     from PyQt4 import *
     from PyQt4.QtGui  import *
index 671bc67ec98c2bbb198c96f1f123fdd4c2623fe2..b5d2a322139d8b6846057c929227e6d2b3ead3dc 100644 (file)
@@ -54,6 +54,7 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel):
         debComm=self.item.GetText()
         self.setText(1,debComm)
 
+
     
 class COMMTreeItem(Objecttreeitem.ObjectTreeItem):
     itemNode=Node    
index 305039f0887d8fb412e8f5d80a89aec22a26a29b..af2d3c95653ebc9dd30492532c5d1e11854de9f4 100644 (file)
@@ -19,7 +19,6 @@
 #
 # ======================================================================
 # Modules Python
-from Tkinter import Label,Button
 
 #Modules Eficas
 from Noyau.N_OBJECT import ErrorObj
index 1551befe2c670e5fecf39246faa6edf272a14d84..0e03618aae3d1c35d15310cddc59f63de2c5b4ae 100644 (file)
@@ -39,17 +39,6 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel):
     def createPopUpMenu(self):
         typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self)
 
-    def doPaste(self,node_selected):
-        objetACopier = self.item.get_copie_objet()
-        child=node_selected.doPasteMCF(objetACopier)
-        return child
-
-    def doPasteMCF(self,objetACopier):
-        child = self.parent.append_child(objetACopier,
-                                              pos=self.item,
-                                              retour='oui')
-        return child
-
 
 class FACTTreeItem(Objecttreeitem.ObjectTreeItem):
   itemNode=Node
@@ -62,11 +51,11 @@ class FACTTreeItem(Objecttreeitem.ObjectTreeItem):
 
   def GetLabelText(self):
       """ Retourne 3 valeurs :
-        - le texte à afficher dans le noeud représentant l'item
+        - le texte à afficher dans le noeud représentant l'item
         - la fonte dans laquelle afficher ce texte
         - la couleur du texte
       """
-      # None --> fonte et couleur par défaut
+      # None --> fonte et couleur par défaut
       return self.object.getlabeltext(),None,None
 
   def isvalid(self):
@@ -128,15 +117,15 @@ class FACTTreeItem(Objecttreeitem.ObjectTreeItem):
       """
       itemobject=item.getObject()
       if itemobject.isoblig() :
-         self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
+         self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ',Qt.red)
          return 0
 
       if self.object.suppentite(itemobject):
-         message = "Mot-clé " + itemobject.nom + " supprimé"
+         message = "Mot-clé " + itemobject.nom + " supprimé"
          self.appli.affiche_infos(message)
          return 1
       else:
-         self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
+         self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé',Qt.red)
          return 0
 
 import Accas
index 43ae257a0e238733a4d8ea5ff41326e3cb017c9c..fa3244d073f4e6393c304427f09a389d3047c2c8 100644 (file)
@@ -23,7 +23,7 @@ class FormuleNode(browser.JDCNode,typeNode.PopUpMenuNode):
     def createPopUpMenu(self):
       typeNode.PopUpMenuNode.createPopUpMenu(self)
 
-            
+
 class FORMULETreeItem(compooper.EtapeTreeItem):
     """
     Classe servant a définir l'item porté par le noeud de l'arbre d'EFICAS
@@ -53,7 +53,6 @@ class FORMULETreeItem(compooper.EtapeTreeItem):
       Ce nom dépend de la validité de l'objet
       """
       if self.object.isactif():
-        self.object.state="modified"
         if self.object.isvalid():
           return "ast-green-square"
         else:
index b99bf3c51e352dc6e94113d22e870a0c04e11102..a0614f1c298d25273bfc73587a519a60682ffe0f 100644 (file)
@@ -11,13 +11,6 @@ class Node(browser.JDCNode):
         from monRacinePanel import MonRacinePanel
         return MonRacinePanel(self,parent=self.editor)
 
-    def doPasteCommande(self,objet_a_copier):
-        """
-          Réalise la copie de l'objet passé en argument qui est nécessairement
-          une commande
-        """
-        child = self.append_child(objet_a_copier,pos='first',retour='oui')
-        return child
 
 
 class JDCTreeItem(Objecttreeitem.ObjectTreeItem):
@@ -30,12 +23,12 @@ class JDCTreeItem(Objecttreeitem.ObjectTreeItem):
       return  "    "
 
   def GetLabelText(self):
-      # None --> fonte et couleur par défaut
+      # None --> fonte et couleur par défaut
       return self.object.nom,None,None
 
   def get_jdc(self):
     """
-    Retourne l'objet pointé par self
+    Retourne l'objet pointé par self
     """
     return self.object
   
@@ -56,20 +49,20 @@ class JDCTreeItem(Objecttreeitem.ObjectTreeItem):
       return cmd
 
   def suppitem(self,item) :
-    # item             = item de l'ETAPE à supprimer du JDC
+    # item             = item de l'ETAPE à supprimer du JDC
     # item.getObject() = ETAPE ou COMMENTAIRE
     # self.object      = JDC
 
     itemobject=item.getObject()
     if self.object.suppentite(itemobject):
        if itemobject.nature == "COMMENTAIRE" :
-          message = "Commentaire supprimé"
+          message = "Commentaire supprimé"
        else :
-          message = "Commande " + itemobject.nom + " supprimée"
+          message = "Commande " + itemobject.nom + " supprimée"
        self.appli.affiche_infos(message)
        return 1
     else:
-       self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet")
+       self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet",Qt.red)
        return 0
 
   def GetSubList(self):
@@ -103,7 +96,7 @@ class JDCTreeItem(Objecttreeitem.ObjectTreeItem):
     return self.sublist
 
   def get_l_noms_etapes(self):
-      """ Retourne la liste des noms des étapes de self.object"""
+      """ Retourne la liste des noms des étapes de self.object"""
       return self.object.get_l_noms_etapes()
 
   def get_liste_cmd(self):
index c4e694cb4939281acd433ff6462fc9af0414fe06..961be5be1a5e30af9e60f6e5a0a433746a368162 100644 (file)
@@ -14,13 +14,18 @@ import typeNode
 
 class MACRONode(browser.JDCNode,typeNode.PopUpMenuNode):         
     def getPanel(self):
-      print "MACRONode MACRONode"
       from   monMacroPanel import MonMacroPanel
       return MonMacroPanel (self,parent=self.editor )
     
     def createPopUpMenu(self):
       typeNode.PopUpMenuNode.createPopUpMenu(self)
         
+    #def doPaste(self,node_selected):
+    #    print 'je suis la'
+    #    objetACopier = self.item.get_copie_objet()
+    #    child=self.append_brother(objetACopier)
+    #    return child
+
     
 class MACROTreeItem(compooper.EtapeTreeItem):
 #  """ Cette classe hérite d'une grande partie des comportements
@@ -123,9 +128,10 @@ class MATERIAUNode(MACRONode):
       texte = f.read()
       f.close()
       from desVisu import DVisu
-      monVisu=DVisu(parent=self.editor,fl=Qt.WType_Dialog)
-      monVisu.TB.setText(texte)
-      monVisu.show()
+      monVisuDialg=DVisu(parent=self.editor.appliEficas,fl=0)
+      monVisuDialg.TB.setText(texte)
+      monVisuDialg.show()
+
 
 class INCLUDE_MATERIAUTreeItem(INCLUDETreeItemBase):
     itemNode=MATERIAUNode
index b1104d4e673c761869d0a3c950918c5f60acd7c0..0db1cf88f287da0bfe751e9b6f72540fb89c2439 100644 (file)
@@ -32,36 +32,34 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
         typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self)
 
 
-    def doPaste(self,node_selected):
-        objet_a_copier = self.item.get_copie_objet()
-        child=node_selected.doPasteMCF(objet_a_copier)
+    #def doPaste(self,node_selected):
+    #    objet_a_copier = self.item.get_copie_objet()
+    #    child=node_selected.doPasteMCF(objet_a_copier)
         #print "doPaste",child
-        return child
+    #    return child
 
-    def doPasteMCF(self,objet_a_copier):
-        child=None
+    #def doPasteMCF(self,objet_a_copier):
+    #    child=None
         # le noeud courant est une MCList
-        if self.item.isMCList() :
-          child = self.append_child(objet_a_copier,pos='first',retour='oui')
+    #    if self.item.isMCList() :
+    #      child = self.append_child(objet_a_copier,pos='first',retour='oui')
 
         # le noeud courant est un MCFACT
-        elif self.item.isMCFact() :
+    #    elif self.item.isMCFact() :
           # le noeud selectionne est un MCFACT dans une MCList
-          if self.parent.item.isMCList():
-             child = self.parent.append_child(objet_a_copier,
-                                              pos=self.item,
-                                              retour='oui')
+    #      if self.parent.item.isMCList():
+    #         child = self.parent.append_child(objet_a_copier, pos=self.item, retour='oui')
 
           # le noeud MCFACT selectionne n'est pas dans une MCList
-          else:
-             child = self.parent.append_child(objet_a_copier,retour='oui')
+    #      else:
+    #         child = self.parent.append_child(objet_a_copier,retour='oui')
 
-        else:
-          QMessageBox.information( self, "Copie impossible",
-                   "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")          
-          self.editor.affiche_infos("Copie refusée")
+    #    else:
+    #      QMessageBox.information( self, "Copie impossible",
+    #               "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")          
+    #      self.editor.affiche_infos("Copie refusée")
 
-        return child
+    #    return child
 
 class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
     """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
@@ -149,6 +147,7 @@ class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
 
     def get_docu(self):
         """ Retourne la clef de doc de l'objet pointé par self """
+        print "hhhhhhhhhhhh"
         return self.object.get_docu()    
 
     def iscopiable(self):
@@ -191,11 +190,11 @@ class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
 
         if self.object.suppentite(obj):
            if len(self._object) == 1: self.updateDelegate()     
-           message = "Mot-clef " + obj.nom + " supprimé"
+           message = "Mot-clef " + obj.nom + " supprime"
            self.appli.affiche_infos(message)
            return 1
         else:
-           self.appli.affiche_infos('Impossible de supprimer ce mot-clef')
+           self.appli.affiche_infos('Impossible de supprimer ce mot-clef',Qt.red)
            return 0
 
             
index 3b9539b0b30568d99fa3fc4491061a5f90da3160..0b5923027180de8f9ec6ba1f762ab92c7043c687 100644 (file)
@@ -25,11 +25,15 @@ class NIVEAUTreeItem(Objecttreeitem.ObjectTreeItem):
     
   def GetLabelText(self):
       """ Retourne 3 valeurs :
-        - le texte à afficher dans le noeud représentant l'item
+        - le texte  afficher dans le noeud représentant l'item
         - la fonte dans laquelle afficher ce texte
         - la couleur du texte
       """
-      return self.labeltext,None,None
+      if self.isactif():
+          fonte = Fonte_Niveau
+      else :
+          fonte = Fonte_Niveau_inactif
+      return self.labeltext,fonte,None
     
   def GetIconName(self):
       if self.isactif():
@@ -84,7 +88,7 @@ class NIVEAUTreeItem(Objecttreeitem.ObjectTreeItem):
        self.appli.affiche_infos(message)
        return 1
     else:
-       self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet")
+       self.appli.affiche_infos("Pb interne : impossible de supprimer cet objet",Qt.red)
        return 0
 
   def GetText(self):
index 14d05da758790f4816df9bc8f3d099e8dcad0499..a32274d87e78d0c5bb3d3e57b5ed9657f1a3fc66 100644 (file)
@@ -20,41 +20,64 @@ class Node(browser.JDCNode, typeNode.PopUpMenuNode):
     def createPopUpMenu(self):
         typeNode.PopUpMenuNode.createPopUpMenu(self)
         if ("AFFE_CARA_ELEM" in self.item.get_genealogie()) and self.editor.salome: 
-           self.menu.insertItem( 'View3D', self.view3D )
-
-    def doPaste(self,node_selected):
-        """
-            Déclenche la copie de l'objet item avec pour cible
-            l'objet passé en argument : node_selected
-        """
-        objet_a_copier = self.item.get_copie_objet()
-        child=node_selected.doPasteCommande(objet_a_copier)
-        return child
-
-    def doPasteCommande(self,objet_a_copier):
-        """
-          Réalise la copie de l'objet passé en argument qui est nécessairement
-          une commande
-        """
-        parent=self.parent
-        #child = parent.item.append_child(objet_a_copier,self.item.getObject())
-        child = self.append_brother(objet_a_copier)
-        #if child is None:return 0
-        return child
-
-    def doPasteMCF(self,objet_a_copier):
-        """
-           Réalise la copie de l'objet passé en argument (objet_a_copier)
-           Il s'agit forcément d'un mot clé facteur
-        """
-        child = self.append_child(objet_a_copier,pos='first',retour='oui')
-        return child
+           self.ViewElt = QAction('View3D',self.tree)
+           self.tree.connect(self.ViewElt,SIGNAL("activated()"),self.view3D)
+           self.ViewElt.setStatusTip("affiche dans Geom les elements de structure")
+           self.menu.addAction(self.ViewElt)
+           if self.item.isvalid() :
+             self.ViewElt.setEnabled(1)
+           else:
+             self.ViewElt.setEnabled(0)
+        if  self.item.get_nom() == "DISTRIBUTION" :
+           self.Graphe = QAction('Graphique',self.tree)
+           self.tree.connect(self.Graphe,SIGNAL("activated()"),self.viewPng)
+           self.Graphe.setStatusTip("affiche la distribution ")
+           self.menu.addAction(self.Graphe)
+           if self.item.isvalid() :
+             self.Graphe.setEnabled(1)
+           else:
+             self.Graphe.setEnabled(0)
 
     def view3D(self) :
         from Editeur import TroisDPal
-        troisD=TroisDPal.TroisDPilote(self.item,self.editor.parent.appliEficas)
+        troisD=TroisDPal.TroisDPilote(self.item,self.editor.appliEficas)
         troisD.envoievisu()
 
+    def viewPng(self) :
+        from monPixmap import MonLabelPixmap
+        fichier=self.appliEficas.getName()
+        try :
+           os.remove(fichier)
+        except :
+           pass     
+        #try:
+        if 1:
+            import generator
+            g = generator.plugins[self.appliEficas.format_fichier]()
+            g.gener(self.item.object, format='beautifie')
+            stdGener = g.getGenerateur()
+            if len(g.dictMCLois) != 1:
+                QMessageBox.warning(
+                    None,
+                    self.appliEficas.trUtf8("Erreur interne"),
+                    self.appliEficas.trUtf8("La PDF de la loi ne peut pas etre affichee."),
+                    self.appliEficas.trUtf8("&Annuler"))
+                return
+            loi = g.dictMCLois.keys()[0]
+            nomLoi = loi.get_name()
+            script = stdGener.GraphiquePDF(loi, fichier)
+            #print script
+            d = {}
+            exec script in d
+            widgetPng=MonLabelPixmap(self.appliEficas,fichier,nomLoi)
+            widgetPng.show()
+        #except:
+        else:
+            QMessageBox.warning(
+                None,
+                self.appliEficas.trUtf8("Erreur interne"),
+                self.appliEficas.trUtf8("La PDF de la loi ne peut pas etre affichee."),
+                self.appliEficas.trUtf8("&Annuler"))
 
 class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
   """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
@@ -135,14 +158,14 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
       # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList 
       itemobject=item.getObject()
       if itemobject.isoblig() :
-          self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
+          self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ',Qt.red)
           return 0
       if self.object.suppentite(itemobject):
-          message = "Mot-clé " + itemobject.nom + " supprimé"
+          message = "Mot-clef " + itemobject.nom + " supprime"
           self.appli.affiche_infos(message)
           return 1
       else :
-          self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
+          self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé',Qt.red)
           return 0
 
   def GetText(self):
@@ -224,7 +247,7 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
           représentatif de self.object
       """
       # Format de fichier utilisé
-      format=self.appli.format_fichier
+      format=self.appli.appliEficas.format_fichier
       return self.object.get_objet_commentarise(format)
 
   def get_objet_commentarise_BAK(self):
@@ -234,7 +257,7 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
       """
       import generator,string,Accas
       # Format de fichier utilisé
-      format=self.appli.format_fichier
+      format=self.appli.appliEficas.format_fichier
       g=generator.plugins[format]()
       texte_commande = g.gener(self.object,format='beautifie')
       # Il faut enlever la premiere ligne vide de texte_commande que 
index 5c637496c84361fe7403013d74d7b9c3265cbb21..914132b18d7ea53b3b361392f5cf387515e7f2bf 100644 (file)
@@ -25,6 +25,9 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel):
         typeNode.PopUpMenuNodePartiel.createPopUpMenu(self)
         self.menu.removeAction(self.Documentation)
 
+    def doPaste(self,node_selected):
+        return None
+
 
 
 class PARAMTreeItem(Objecttreeitem.ObjectTreeItem):
index fb0efe8bc7d6b902097fe5d1ab577e190569d7e6..fbbf61b4de05c8c247d61186d5d50c2438757021 100644 (file)
@@ -19,8 +19,11 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
         
         # Attention l ordre des if est important        
 
+        if self.item.wait_matrice ():
+               from monMatricePanel import MonMatricePanel
+                klass=MonMatricePanel
         # l'objet prend sa (ses) valeur(s) dans un ensemble discret de valeurs
-        if self.item.has_into():
+        elif self.item.has_into():
             if self.item.is_list() :
                 from monPlusieursIntoPanel import MonPlusieursIntoPanel
                 klass = MonPlusieursIntoPanel
@@ -81,7 +84,6 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
                 from monFonctionPanel import MonFonctionPanel
                 klass = MonFonctionPanel
 
-        print klass
         if not klass:
             return None
         return klass( self, self.editor )
@@ -139,20 +141,6 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
          is_a_list= self.definition.validators.is_list() * is_a_list
       return is_a_list 
 
-  #def get_into(self,liste_courante=None):
-  #    """
-  #        Cette méthode retourne la liste de choix proposée par le mot cle. Si le mot cle ne propose
-  #        pas de liste de choix, la méthode retourne None.
-  #        L'argument d'entrée liste_courante, s'il est différent de None, donne la liste des choix déja
-  #        effectués par l'utilisateur. Dans ce cas, la méthode get_into doit calculer la liste des choix
-  #        en en tenant compte.
-  #        Cette méthode part du principe que la relation entre into du mot clé et les validateurs est
-  #        une relation de type ET (AndVal).
-  #    """
-  #    if not self.object.definition.validators :
-  #       return self.object.definition.into
-  #    else:
-  #       return self.object.definition.validators.get_into(liste_courante,self.definition.into)
 
   def has_into(self):
       """
@@ -242,6 +230,7 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
 
   def get_liste_param_possible(self):
       liste_param=[]
+      print self.object.jdc.params
       for param in self.object.jdc.params:
           encorevalide=self.valide_item(param.valeur)
           if encorevalide:
@@ -426,12 +415,20 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
         
   def wait_tuple(self):
       """ Méthode booléenne qui retourne 1 si l'objet pointé par self
-      attend un shell, 0 sinon """
+      attend un Tuple, 0 sinon """
       for ss_type in self.object.definition.type:
           if repr(ss_type).find('Tuple') != -1 :
              return 1
       return 0
 
+  def wait_matrice(self):
+      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un Tuple, 0 sinon """
+      for ss_type in self.object.definition.type:
+          if repr(ss_type).find('Matrice') != -1 :
+             return 1
+      return 0
+
   def wait_assd(self):
       """Méthode booléenne qui retourne 1 si l'objet pointé par self
       attend un objet de type ASSD ou dérivé, 0 sinon """
diff --git a/InterfaceQT4/configuration.py b/InterfaceQT4/configuration.py
new file mode 100644 (file)
index 0000000..f3fa809
--- /dev/null
@@ -0,0 +1,162 @@
+# -*- coding: utf-8 -*-\r
+#            CONFIGURATION MANAGEMENT OF EDF VERSION\r
+# ======================================================================\r
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG\r
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY\r
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY\r
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR\r
+# (AT YOUR OPTION) ANY LATER VERSION.\r
+#\r
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT\r
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF\r
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU\r
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.\r
+#\r
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE\r
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,\r
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.\r
+#\r
+#\r
+# ======================================================================\r
+"""\r
+    Ce module sert pour charger les paramètres de configuration d'EFICAS\r
+"""\r
+# Modules Python\r
+import os, sys, string, types, re\r
+import traceback\r
+from PyQt4.QtGui  import *\r
+from utils import read_file\r
+\r
+# Modules Eficas\r
+from Editeur import utils\r
+\r
+class CONFIG_BASE:\r
+\r
+  #--------------------------------------\r
+  def __init__(self,appli,repIni,nomDir):\r
+  #--------------------------------------\r
+\r
+  # Classe de base permettant de lire, afficher\r
+  # et sauvegarder les fichiers utilisateurs \r
+  # On a deux directories : la directory generale (Repertoire d instal + Nom du code\r
+  #                       Par exemple : ~/Install_Eficas/EficasV1_14/Openturns_Wrapper\r
+  # et la directorie de l utilisateur \r
+  #                      HOME/.Eficas_Openturns\r
+  # Le fichier prefs.py va etre lu dans la directory generale puis surcharge eventuellement \r
+  # par celui de l utilisateur\r
+  # le fichier de catalogue va etre lu dans la directory de l utilisateur s il exite\r
+  # dans le fichier general sinon\r
+      self.appli   = appli  \r
+      self.code    = appli.code\r
+      self.salome  = appli.salome\r
+      self.repIni  = repIni\r
+      self.REPINI  = repIni\r
+      self.rep_user   = os.path.join(os.environ['HOME'],nomDir)\r
+     \r
+      if self.appli: \r
+         self.parent=appli.top\r
+         self.appli.mode_nouv_commande='initial'\r
+      else:         self.parent=None\r
+\r
+\r
+\r
+  def setValeurs(self):\r
+  #---------------------\r
+  \r
+      # Valeurs par defaut\r
+      if not os.path.isdir(self.rep_user) : os.mkdir(self.rep_user)\r
+      self.initialdir   = self.rep_user\r
+      self.path_doc     = self.rep_user\r
+      self.savedir      = self.rep_user\r
+      self.exec_acrobat = self.rep_user\r
\r
+      #Lecture des fichiers utilisateurs\r
+      self.lecture_fichier_ini_standard()\r
+      self.lecture_fichier_ini_utilisateur()\r
+      self.lecture_catalogues()\r
+\r
+  #--------------------------------------\r
+  def lecture_fichier_ini_standard(self):\r
+  #--------------------------------------\r
+  # Verifie l'existence du fichier "standard"\r
+  # appelle la lecture de ce fichier\r
+      import prefs\r
+      name='prefs_'+prefs.code\r
+      prefsCode=__import__(name)\r
+      self.prefsUser=name+".py"\r
+      for k in self.labels_eficas :\r
+         try :\r
+            valeur=getattr(prefsCode,k)\r
+            setattr(self,k,valeur)\r
+         except :\r
+            pass\r
+      if hasattr(self,'map_path') :\r
+         oldPath=self.map_path\r
+              \r
+\r
+  #--------------------------------------\r
+  def lecture_fichier_ini_utilisateur(self):\r
+  #--------------------------------------\r
+  # Surcharge les paramètres standards par les paramètres utilisateur s'ils existent\r
+      self.fic_ini_utilisateur = os.path.join(self.rep_user,self.prefsUser)\r
+      if not os.path.isfile(self.fic_ini_utilisateur): return\r
+\r
+      txt = utils.read_file(self.fic_ini_utilisateur)\r
+      from styles import style\r
+      d=locals()\r
+      try:\r
+         exec txt in d\r
+      except :\r
+         l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])\r
+         QMessageBox.critical( None, "Import du fichier de Configuration", \r
+                       "Erreur à la lecture du fichier de configuration " + self.fic_ini_utilisateur )\r
+         sys.exit(0)\r
+      for k in self.labels_user :\r
+         try :\r
+            setattr(self,k,d[k])\r
+         except :\r
+            pass\r
+\r
+\r
+  #--------------------------------------\r
+  def lecture_catalogues(self):\r
+  #--------------------------------------\r
+      rep_mat=" " # Compatibilite Aster\r
+      if hasattr(self,"catalogues") : return\r
\r
+      fic_ini = os.path.join(self.repIni,self.cataFile)\r
+      if not os.path.isfile(fic_ini) :\r
+         QMessageBox.critical( None, "Erreur a l'import du fichier des Catalogues", \r
+                   "Le fichier de configuration des catalogues "+fic_ini+" n a pas été trouvé" )\r
+         sys.exit(0)\r
+\r
+      txt = utils.read_file(fic_ini)\r
+      d=locals()\r
+      try:\r
+         exec txt in d\r
+         self.catalogues=d["catalogues"]\r
+      except :\r
+         l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])\r
+         QMessageBox.critical( None, "Import du fichier de Configuration", \r
+                       "Erreur à la lecture du fichier de configuration " + fic_ini )\r
+         sys.exit(0)\r
+\r
+\r
+\r
+  #--------------------------------------\r
+  def save_params(self):\r
+  #--------------------------------------\r
+  # sauvegarde\r
+  # les nouveaux paramètres dans le fichier de configuration utilisateur\r
+  #\r
+      texte=""\r
+      for clef in self.labels_user :\r
+          if hasattr(self,clef):\r
+             valeur=getattr(self,clef)\r
+             texte= texte + clef+"     = " + repr(valeur) +"\n"\r
+      f=open(self.fic_ini_utilisateur,'w+')\r
+      print self.fic_ini_utilisateur\r
+      f.write(texte) \r
+      f.close()\r
+#\r
+\r
index 0e885a6954544eaec69c82e2a7c37c6a0280784f..e1351b90ae1f5d3d21114cfa4415f45f186e9a34 100644 (file)
@@ -18,7 +18,6 @@
 #
 # ======================================================================
 
-print "INTERFACEQT4"
 import types,sys,os
 import traceback
 from PyQt4 import *
@@ -35,8 +34,8 @@ import browser
 import readercata
 import qtCommun
 
+DictExtensions= {"MAP" : ".map"}
 
-VERSION_EFICAS  = "EFICAS v1.16"
 
 
 class JDCEditor(QSplitter):
@@ -68,7 +67,7 @@ class JDCEditor(QSplitter):
 
         self.code = self.appliEficas.CONFIGURATION.code
         self.version_code = VERSION_CODE
-        self.titre=VERSION_EFICAS + ' pour '+ self.code
+        self.titre=self.appliEficas.VERSION_EFICAS + ' pour '+ self.code
 
         self.dict_reels={}
         self.liste_simp_reel=[]        
@@ -80,6 +79,22 @@ class JDCEditor(QSplitter):
         self.CONFIGURATION = self.appliEficas.CONFIGURATION
         self.CONFIGStyle =   self.appliEficas.CONFIGStyle
 
+        try:
+          self.CONFIGURATION.generator_module
+          _module = __import__(self.CONFIGURATION.generator_module)
+          info = _module.entryPoint()
+          generator.plugins.addEntryPoint(info)
+        except:
+          pass
+
+        try:
+          self.CONFIGURATION.convert_module
+          _module = __import__(self.CONFIGURATION.convert_module)
+          info = _module.entryPoint()
+          convert.plugins.addEntryPoint(info)
+        except :
+          pass
+
         self.sb = None
         if hasattr(self.appliEficas,"statusBar"):
            self.sb = self.appliEficas.statusBar()
@@ -91,10 +106,17 @@ class JDCEditor(QSplitter):
         self.isReadOnly = False
         self.tree = None
         self.node_selected = None
+        self.message=''
         
-        if not hasattr( readercata, 'reader' ) :
-            readercata.reader = readercata.READERCATA( self, self.appliEficas )
-        self.readercata = readercata.reader
+        #if not hasattr( readercata, 'reader' ) :
+        #    readercata.reader = readercata.READERCATA( self, self.appliEficas )
+        #self.readercata = readercata.reader
+        if not hasattr ( self.appliEficas, 'readercata'):
+           self.readercata  = readercata.READERCATA( self, self.appliEficas )
+           self.appliEficas.readercata=self.readercata
+        else :
+           self.readercata=self.appliEficas.readercata
+        if self.readercata.fic_cata == None : return    #Sortie Salome
         self.Commandes_Ordre_Catalogue =self.readercata.Commandes_Ordre_Catalogue
         
         #------- construction du jdc --------------
@@ -130,7 +152,7 @@ class JDCEditor(QSplitter):
             if txt_exception:
                 self.jdc = None
                 qApp.restoreOverrideCursor()
-                self.affiche_infos("Erreur fatale au chargement de %s" %fichier)                
+                self.affiche_infos("Erreur fatale au chargement de %s" %fichier,Qt.red)                
                 QMessageBox.critical( self, "Erreur fatale au chargement d'un fichier", txt_exception)                
             else:
                 comploader.charger_composants("QT")
@@ -206,16 +228,16 @@ class JDCEditor(QSplitter):
         
         jdcName=os.path.basename(fn)
         # Il faut convertir le contenu du fichier en fonction du format
-        if convert.plugins.has_key( self.appliEficas.format_fichier ):
+        if convert.plugins.has_key( self.appliEficas.format_fichier_in ):
              # Le convertisseur existe on l'utilise
-             appli = self 
-             p=convert.plugins[self.appliEficas.format_fichier]()
+             #appli = self 
+             p=convert.plugins[self.appliEficas.format_fichier_in]()
              p.readfile(fn)         
-             text=p.convert('exec',appli)
+             text=p.convert('exec',self.appliEficas)
              if not p.cr.estvide():                 
-                self.affiche_infos("Erreur à la conversion")
+                self.affiche_infos("Erreur à la conversion",Qt.red)
         else :
-            self.affiche_infos("Type de fichier non reconnu")
+            self.affiche_infos("Type de fichier non reconnu",Qt.red)
             QMessageBox.critical( self, "Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")            
             return None
         
@@ -252,11 +274,11 @@ class JDCEditor(QSplitter):
             p.readfile(file)
             text=p.convert('execnoparseur')
             if not p.cr.estvide():
-                self.affiche_infos("Erreur a la conversion")
+                self.affiche_infos("Erreur a la conversion",Qt.red)
             return text
         else:
             # Il n'existe pas c'est une erreur
-            self.affiche_infos("Type de fichier non reconnu")
+            self.affiche_infos("Type de fichier non reconnu",Qt.red)
             QMessageBox.critical( self, "Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")            
             return None
 
@@ -300,23 +322,15 @@ class JDCEditor(QSplitter):
             self.jdc.supprime()
         self.close()
     
-    #------------------------------#
-    def affiche_infos(self,message):
-    #------------------------------#
-        #PN --> devenu inutile avec QT4
-        #if self.salome :
-       #   if not hasattr(self.appliEficas,'MessageLabel') :
-        #      self.appliEficas.leLayout=QDockWidget(self.appliEficas)
-       #      self.appliEficas.MessageLabel = QLabel("MessageLabel",self.appliEficas.leLayout)
-       #      self.appliEficas.MessageLabel.setAlignment(Qt.AlignBottom)
-        #      self.appliEficas.leLayout.setAllowedAreas(Qt.BottomDockWidgetArea)
-        #      self.appliEficas.leLayout.setWidget(self.appliEficas.MessageLabel)
-        #      #self.appliEficas.moveDockWindow(self.appliEficas.leLayout,Qt.DockBottom)
-       #   self.appliEficas.MessageLabel.setText(message)
-       #   self.appliEficas.MessageLabel.show()
-       #   self.appliEficas.leLayout.show()
+    #----------------------------------------------#
+    def affiche_infos(self,message,couleur=Qt.black):
+    #----------------------------------------------#
         if self.sb:
-            self.sb.showMessage(message)#,2000)
+           mapalette=self.sb.palette()
+           from PyQt4.QtGui import QPalette
+          mapalette.setColor( QPalette.WindowText, couleur )
+          self.sb.setPalette( mapalette );
+           self.sb.showMessage(QString.fromUtf8(message))#,2000)
 
     #------------------------------#
     def affiche_alerte(self,titre,message):
@@ -348,20 +362,22 @@ class JDCEditor(QSplitter):
           return
       self.node_selected=self.tree.selectedItems()[0]
       if copie == 0 : return
-      if not self.node_selected.item.iscopiable():
-          QMessageBox.information( self, 
-                      "Copie impossible",
-                      "Cette version d'EFICAS ne permet pas la copie de cet Objet")
-          self.node_selected=None
-          return
     
     
+    #---------------------#
+    def handleSupprimer(self):
+    #---------------------#
+      #print "handleSupprimer"
+      self.chercheNoeudSelectionne()
+      self.node_selected.delete()
+    
     #---------------------#
     def handleEditCut(self):
     #---------------------#
       """
-      Stocke dans Eficas.noeud_a_editer le noeud à couper
+      Stocke dans Eficas.noeud_a_editer le noeud à couper
       """
+      #print "handleEditCut"
       self.chercheNoeudSelectionne()
       self.QWParent.edit="couper"
       self.QWParent.noeud_a_editer = self.node_selected      
@@ -372,6 +388,7 @@ class JDCEditor(QSplitter):
       """
       Stocke dans Eficas.noeud_a_editer le noeud a copier
       """
+      #print "handleEditCut"
       self.chercheNoeudSelectionne()
       self.QWParent.edit="copier"
       self.QWParent.noeud_a_editer = self.node_selected
@@ -383,28 +400,31 @@ class JDCEditor(QSplitter):
       Lance la copie de l'objet place dans self.QWParent.noeud_a_editer
       Ne permet que la copie d'objets de type Commande ou MCF
       """
+      #print "handleEditPaste"
       self.chercheNoeudSelectionne()
-      index_noeud_a_couper=self.QWParent.noeud_a_editer.treeParent.children.index(self.QWParent.noeud_a_editer)
-      if self.QWParent.noeud_a_editer == None :
+      try :
+          index_noeud_a_couper=self.QWParent.noeud_a_editer.treeParent.children.index(self.QWParent.noeud_a_editer)
+      except :
           QMessageBox.information( self, 
                       "Copie impossible",
-                      "Aucun Objet n a ete copie ou colle ")
+                      "Aucun Objet n a ete copie ou coupe ")
           return
+      child=0
       try:
          child=self.QWParent.noeud_a_editer.doPaste(self.node_selected)
       except:
          traceback.print_exc()
          QMessageBox.information( self, 
-                     "Copie impossible",         
-                     "L'action de coller apres un tel objet n'est pas permise")
+                     "Copie refusee",         
+                     "Copie refusee pour ce type d objet a cet endroit")
+         self.message = ''
+         self.affiche_infos("Copie refusée")
          return
-    
      
-      if child == 0:
-          if self.message != '':             
-             QMessageBox.critical( self, "Copie refusee", self.message)
-             self.message = ''
-          self.affiche_infos("Copie refusée")
+      if child == 0 or child == None:
+          QMessageBox.critical( self, "Copie refusee",'Copie refusee pour ce type d objet')
+          self.message = ''
+          self.affiche_infos("Copie refusée",Qt.red)
           return
     
       # il faut declarer le JDCDisplay_courant modifie
@@ -413,7 +433,6 @@ class JDCEditor(QSplitter):
       # si possible on renomme l objet comme le noeud couper
 
       if self.QWParent.edit == "couper":
-         print self.QWParent.noeud_a_editer.child
          index_ajoute=child.treeParent.children.index(child)
          if index_ajoute <= index_noeud_a_couper :
             index_noeud_a_couper=index_noeud_a_couper + 1
@@ -436,7 +455,7 @@ class JDCEditor(QSplitter):
     def get_file_variable(self) :
     #---------------------------#
      titre = "Choix d'un fichier XML"
-     texte = "Le fichier contient une commande INCLUDE\n"
+     texte = "Le fichier contient une commande MODEL\n"
      texte = texte+'Donnez le nom du fichier XML qui contient la description des variables'
      QMessageBox.information( self, titre,texte)
                                         
@@ -444,7 +463,6 @@ class JDCEditor(QSplitter):
                    self.appliEficas.trUtf8('Ouvrir Fichier'),
                    self.appliEficas.CONFIGURATION.savedir,
                    self.appliEficas.trUtf8('Wrapper Files (*.xml);;''All Files (*)'))
-     print fichier
      return  fichier
       
     #----------------------------------#
@@ -484,25 +502,97 @@ class JDCEditor(QSplitter):
       if generator.plugins.has_key(format):
          # Le generateur existe on l'utilise
          self.generator=generator.plugins[format]()
-         jdc_formate=self.generator.gener(self.jdc,format='beautifie')
+         jdc_formate=self.generator.gener(self.jdc,format='beautifie',config=self.appliEficas.CONFIGURATION)
          if not self.generator.cr.estvide():            
-            self.affiche_infos("Erreur à la generation")
+            self.affiche_infos("Erreur à la generation",Qt.red)
             QMessageBox.critical( self, "Erreur a la generation","EFICAS ne sait pas convertir ce JDC")
             return ""
          else:
             return jdc_formate
       else:         
          # Il n'existe pas c'est une erreur
-         self.affiche_infos("Format %s non reconnu" % format)
+         self.affiche_infos("Format %s non reconnu" % format,Qt.red)
          QMessageBox.critical( self, "Format "+format+" non reconnu","EFICAS ne sait pas convertir le JDC selon le format "+format)
          return ""
-      
+
+    #-----------------------------#
+    def run(self,execution="oui"):
+    #-----------------------------#
+      format=self.appliEficas.format_fichier
+      self.textePython=""
+      if generator.plugins.has_key(format):
+         # Le generateur existe on l'utilise
+         self.generator=generator.plugins[format]()
+         self.textePython =self.generator.generRUN(self.jdc,format='beautifie',config=self.appliEficas.CONFIGURATION)
+      if execution=="oui" :
+         os.system(self.textePython)
+      else:
+         return self.textePython
+
+    #------------------------------------------------#
+    def runYACS(self,execution="oui",nomFichier=None):
+    #------------------------------------------------#
+      format=self.appliEficas.format_fichier
+      if generator.plugins.has_key(format):
+         # Le generateur existe on l'utilise
+         self.generator=generator.plugins[format]()
+         self.generator.generRUNYACS(self.jdc,format='beautifie',config=self.appliEficas.CONFIGURATION,nomFichier=nomFichier)
+      if execution=="oui" :
+         print "il faut faire le run dans Salome"
+    
+    #-----------------------------#
+    def saveRun(self):
+    #-----------------------------#
+        texte=self.run(execution="non")
+        path=self.CONFIGURATION.savedir
+        fn = QFileDialog.getSaveFileName( self,
+             self.trUtf8("sauvegarde"), path,
+             self.trUtf8("JDC (*.sh);;" "All Files (*)"),None,
+             QFileDialog.DontConfirmOverwrite)
+        if fn.isNull(): return 
+        ext = QFileInfo(fn).suffix()
+        if ext.isEmpty(): fn.append(".xml")
+
+        if QFileInfo(fn).exists():
+                abort = QMessageBox.warning(self,
+                       self.trUtf8("Sauvegarde du Fichier"),
+                       self.trUtf8("Le fichier <b>%1</b> existe deja.").arg(fn),
+                       self.trUtf8("&Ecraser"),
+                       self.trUtf8("&Abandonner"))
+                if abort == 1 :  return
+
+        fn = unicode(QDir.convertSeparators(fn))
+        self.writeFile( fn, txt = texte)
+    
+    #-----------------------------#
+    def saveYACS(self):
+    #-----------------------------#
+        path=self.CONFIGURATION.savedir
+        fn = QFileDialog.getSaveFileName( self,
+             self.trUtf8("sauvegarde"), path,
+             self.trUtf8("JDC (*.xml);;" "All Files (*)"),None,
+             QFileDialog.DontConfirmOverwrite)
+        if fn.isNull(): return 
+        ext = QFileInfo(fn).suffix()
+        if ext.isEmpty(): fn.append(".xml")
+
+        if QFileInfo(fn).exists():
+                abort = QMessageBox.warning(self,
+                       self.trUtf8("Sauvegarde du Fichier"),
+                       self.trUtf8("Le fichier <b>%1</b> existe deja.").arg(fn),
+                       self.trUtf8("&Ecraser"),
+                       self.trUtf8("&Abandonner"))
+                if abort == 1 :  return
+        fn = unicode(QDir.convertSeparators(fn))
+
+        texte=self.runYACS(execution="non",nomFichier=fn)
+        #self.writeFile( fn, txt = texte)
       
     #-----------------------------------------#
     def cherche_Groupes(self):
-        liste=self.get_text_JDC("GroupMA")
-        return liste
     #-----------------------------------------#
+        listeMA,listeNO=self.get_text_JDC("GroupMA")
+        return listeMA,listeNO
 
     #-----------------------------------------#
     def saveFile(self, path = None, saveas= 0):
@@ -523,14 +613,25 @@ class JDCEditor(QSplitter):
           if path is None: 
              path=self.CONFIGURATION.savedir
           selectedFilter = QString('')
+          if DictExtensions.has_key(self.appli.code) :
+               chaine1="JDC (*"+DictExtensions[self.appli.code]+");;"
+               extensions= self.trUtf8(chaine1+ "All Files (*)")
+          else :
+               extensions= self.trUtf8("JDC (*.comm);;" "All Files (*)")
           fn = QFileDialog.getSaveFileName( self,
                self.trUtf8("sauvegarde"), path,
-               self.trUtf8("JDC (*.comm);;" "All Files (*)"),None,
+               extensions,None,
                QFileDialog.DontConfirmOverwrite)
           if fn.isNull(): return (0, None)
+          ulfile = os.path.abspath(unicode(fn))
+          self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
 
           ext = QFileInfo(fn).suffix()
-          if ext.isEmpty(): fn.append(".comm")
+          if ext.isEmpty():
+             if DictExtensions.has_key(self.appli.code) :
+                fn.append(DictExtensions[self.appli.code])
+             else :
+                fn.append(".comm")
 
           if QFileInfo(fn).exists():
                 abort = QMessageBox.warning(self,
@@ -558,47 +659,34 @@ class JDCEditor(QSplitter):
                 self.tree.racine.item.getObject().nom=os.path.basename(newName)
                 self.tree.racine.update_node_label()
                
-            try : 
-            #if 1 :
-               fileXML = fn[:fn.rfind(".")] + '.xml'
-               self.generator.writeOpenturnsXML( fileXML )
-            except :
-            #else :
-               pass
+            if self.jdc.isvalid() != 0 :
+               try : 
+                  fileXML = fn[:fn.rfind(".")] + '.xml'
+                  self.generator.writeOpenturnsXML( fileXML )
+               except :
+                  pass
                
-            #PNPNPNPN A ecrire
-            try : 
-               fileSTD = fn[:fn.rfind(".")] + '.py'
-               self.generator.writeOpenturnsSTD( fileSTD )
-            except :
-               pass
-
-            try : 
-            #if 1 :
-               self.generator.writeCuve2DG()
-            #else :
-            except :
-               pass
-
-               
-            try : 
-            #if 1 :
-               self.tubePy=self.generator.getTubePy()
-               fileTube = '/tmp/tube.py'
-               if self.tubePy != '' :
-                  f=open(fileTube,'w')
-                  f.write(self.tubePy)
-                  f.close()
-            except :
-            #else :
-               pass
+               try : 
+                  fileSTD = fn[:fn.rfind(".")] + '.py'
+                  self.generator.writeOpenturnsSTD( fileSTD )
+               except :
+                  pass
+
+               try:
+                 self.generator.writeDefault(fn)
+               except:
+                 pass
+
+               try : 
+                  fileCuve2DG = fn[:fn.rfind(".")] + '.don'
+                  self.generator.writeCuve2DG(fileCuve2DG)
+               except :
+                  pass
+
 
             if self.salome : 
                self.appliEficas.addJdcInSalome( self.fichier)
-#               if self.code == 'ASTER':
-#                  self.QWParent.appli.createOrUpdateMesh(self)
-#               #PN ; TODO
-#
+
             return (1, self.fichier)
         else:
             return (0, None)
@@ -629,29 +717,32 @@ class JDCEditor(QSplitter):
         if unite :
             titre = "Choix unite %d " %unite
             texte = "Le fichier %s contient une commande INCLUDE \n" % fic_origine
-            texte = texte+'Donnez le nom du fichier correspondant\n à l unité logique %d' % unite
+            texte = texte+'Donnez le nom du fichier correspondant\n à l unité logique %d' % unite
             labeltexte = 'Fichier pour unite %d :' % unite
         else:
             titre = "Choix d'un fichier de poursuite"
             texte = "Le fichier %s contient une commande %s\n" %(fic_origine,'POURSUITE')
             texte = texte+'Donnez le nom du fichier dont vous \n voulez faire une poursuite'
                                         
-        QMessageBox.information( self, titre,texte)
-        path=self.CONFIGURATION.savedir
-        fn = QFileDialog.getOpenFileName( self, titre,path)
+        QMessageBox.information( self, titre,QString.fromUtf8(texte))
+        fn = QFileDialog.getOpenFileName(self.appliEficas,
+                   titre,
+                   self.appliEficas.CONFIGURATION.savedir)
         
         if fn.isNull(): 
         # ce retour est impose par le get_file d'I_JDC
            return None," "
             
         ulfile = os.path.abspath(unicode(fn))
-        # On utilise le convertisseur défini par format_fichier
+        self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
+       
+        # On utilise le convertisseur défini par format_fichier
         source=self.get_source(ulfile)
         if source:
-            # On a réussi à convertir le fichier self.ulfile                
+            # On a réussi à convertir le fichier self.ulfile                
             jdcText = source
         else:
-            # Une erreur a été rencontrée
+            # Une erreur a été rencontrée
             jdcText = ''
         return ulfile, jdcText
 
index 1b2168c6d8c5e9a0883483b06f2405cf926e6c20..97709247599f82a8d11739efaf1a2a8cae533438 100644 (file)
@@ -30,7 +30,7 @@ from Editeur  import import_code
 from Editeur  import session
 from qtEficas import Appli
 
-def lance_eficas(code=None,fichier=None):
+def lance_eficas(code=None,fichier=None,ssCode=None):
     """
         Lance l'appli EFICAS
     """
@@ -39,14 +39,14 @@ def lance_eficas(code=None,fichier=None):
     code=options.code
 
     app = QApplication(sys.argv)
-    Eficas=Appli(code=code)
+    Eficas=Appli(code=code,ssCode=ssCode)
     Eficas.show()
 
     res=app.exec_()
     sys.exit(res)
 
 
-def lance_eficas_ssIhm(code=None,fichier=None):
+def lance_eficas_ssIhm(code=None,fichier=None,version='v9.5'):
     """
         Lance l'appli EFICAS pour trouver les noms des groupes
     """
@@ -58,11 +58,16 @@ def lance_eficas_ssIhm(code=None,fichier=None):
     Eficas=Appli(code=code)
 
     from ssIhm  import QWParentSSIhm
-    parent=QWParentSSIhm(code,Eficas,'v9.4')
+    parent=QWParentSSIhm(code,Eficas,version)
+
+    import readercata
+    #if not hasattr( readercata, 'reader' ) :
+    #   readercata.reader = readercata.READERCATA( parent, Eficas )
+    if not hasattr ( Eficas, 'readercata'):
+           monreadercata  = readercata.READERCATA( parent, Eficas )
+           Eficas.readercata=monreadercata
+
 
-    from readercata import READERCATA
-    readercata = READERCATA( parent, Eficas )
-   
     from editor import JDCEditor
     monEditeur=JDCEditor(Eficas,fichier)
     print monEditeur.cherche_Groupes()
index 025d63cb2cadc0bb6739a64119f6639965ce9dda..c93edcb0b38b6937146ce0c89fa4d635f39eb754 100644 (file)
@@ -1,5 +1,6 @@
 from PyQt4 import *
 from PyQt4.QtGui import *
+from PyQt4.QtCore import *
 import os
 
 
@@ -10,7 +11,11 @@ def traduction(directPath,editor,version):
     if version == "V8V9" : 
        from Traducteur import traduitV8V9 
        suffixe="v9.comm"
-    fn = QFileDialog.getOpenFileName( QString(directPath) , "")
+    fn = QFileDialog.getOpenFileName( 
+                       editor.appliEficas,
+                        editor.appliEficas.trUtf8('Traduire Fichier'),
+                       QString(directPath) ,
+                        editor.appliEficas.trUtf8('JDC Files (*.comm);;''All Files (*)'))
 
     FichieraTraduire=str(fn)
     if (FichieraTraduire == "" or FichieraTraduire == () ) : return
@@ -23,6 +28,7 @@ def traduction(directPath,editor,version):
     log=directLog+"/convert.log"
     os.system("rm -rf "+log)
     os.system("rm -rf "+FichierTraduit)
+    print "hhhhhhhhhhhhhhhhhhhhhhhhhhhh"
 
     qApp.setOverrideCursor(QCursor(Qt.WaitCursor))
     if version == "V7V8" : traduitV7V8.traduc(FichieraTraduire,FichierTraduit,log)
@@ -43,10 +49,10 @@ def traduction(directPath,editor,version):
        except :
          pass
 
-    from desVisu import DVisu
+    from monVisu import DVisu
     titre = "conversion de "+ FichieraTraduire
-    monVisu=DVisu(parent=editor,fl=Qt.WType_Dialog)
-    monVisu.setCaption(titre)
-    monVisu.TB.setText(texte)
-    monVisu.show()
+    monVisuDialg=DVisu(parent=editor.appliEficas,fl=0)
+    monVisuDialg.setWindowTitle(titre)
+    monVisuDialg.TB.setText(texte)
+    monVisuDialg.show()
 
index 50371d0dec2d7ba4b1fe66516c3c2b0d5403867a..2c1a74982b5487f59b392f2b9a07d94f783bc95c 100644 (file)
@@ -32,31 +32,23 @@ from PyQt4.QtCore import *
 
 class MonChoixCata(Ui_DChoixCata,QtGui.QDialog):
   """
-  Classe définissant le panel associé aux mots-clés qui demandent
-  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
-  discrètes
+  Classe définissant le panel associé aux mots-clés qui demandent
+  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+  discrètes
   """
-  def __init__(self,listeCata,readercata, QWparent , name = None,fl = 0):
-      #print "MonChoixCata"
-      QtGui.QDialog.__init__(self,QWparent)
+  def __init__(self, QWparent, listeCata, title = None):
+      QtGui.QDialog.__init__(self, QWparent)
       self.setModal(True)
       self.setupUi(self)
-      self.listeCata=listeCata
-      self.readercata=readercata
-      for cata in self.listeCata :
-               self.CBChoixCata.insertItem(0,cata)
-      lab  = QString(repr(len(listeCata)))
-      lab += QString(" versions du catalogue sont disponibles")
-      self.TLNb.setText(lab)
-      self.CBChoixCata.setCurrentIndex(0)
-      self.readercata.version_cata=self.CBChoixCata.currentText()
+      self.CBChoixCata.addItems(listeCata)
+      self.TLNb.setText(QString("%d versions du catalogue sont disponibles" %
+                                len(listeCata)))
+      if title is not None:
+          self.setWindowTitle(QString.fromUtf8(title))
 
   def on_buttonCancel_clicked(self):
       QDialog.reject(self)
 
-  def on_CBChoixCata_activated(self):
-      self.readercata.version_cata=self.CBChoixCata.currentText()
-
   def on_buttonOk_clicked(self):
       QDialog.accept(self)
 
diff --git a/InterfaceQT4/monChoixMap.py b/InterfaceQT4/monChoixMap.py
new file mode 100644 (file)
index 0000000..c0d12fb
--- /dev/null
@@ -0,0 +1,130 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desChoixMap import Ui_ChoixMap
+from PyQt4  import *
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+
+labels = {
+"s_oxides_st_1" : "Determination de l'allure de l'interface d'un oxyde donné \npour un niveau a determiner d'irradiation" ,
+"s_oxides_st_2" : "Estimation du champ mecanique dans une couche de zircone" ,
+"s_oxides_mt_1" : "Estimation du champ mecanique dans une couche de zircone \nprésentant des défauts et de l'énergie élastique relaxée",
+"s_scc_st_1"    : "Analyse morphologique et mécanique d'une couche d'oxydes",
+"s_scc_st_2"    : "Analyse statistique de données locales et expérimentales \nou numériques",
+"s_scc_st_3"     : "taux de couverture des joints de grains par des précipités",
+"s_poly_st_1"   : "Estimation numérique 3D de la diffusion effective des gaz dans les polymères chargés",
+
+         }
+
+dico={"oxides" : {"irradiation"            : "s_oxides_st_1",
+                   "mecanique"             : "s_oxides_st_2",
+                   "mecanique avec defaut" : "s_oxides_mt_1"},
+      "scc" : {"analyse morphologique" : "s_scc_st_1",
+               "analyse statistique"   : "s_scc_st_2",
+               "taux de couverture"    : "s_scc_st_3"},
+      "concrete" : {},
+      "polycristals" : {},
+      "polymers" : {"numerique 3D" : "s_poly_st_1"},
+      "micro" : {},
+      "seal" : {},
+      "mox" : {},
+      "nano" : {},
+      "insulator" : {}}
+    
+# Import des panels
+
+class MonRadioBouton(QRadioButton) :
+
+  def setModule(self,module,fenetreMere):
+      self.module=module
+      self.fenetreMere=fenetreMere
+
+  def enterEvent(self,e):
+      schema=str(self.text())
+      nomCata=dico[self.module][schema]
+      self.fenetreMere.labelScheme.setText(labels[nomCata])
+
+class MonChoixMap(Ui_ChoixMap,QtGui.QDialog):
+  """
+  Classe définissant le panel associé aux mots-clés qui demandent
+  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+  discrètes
+  """
+  def __init__(self, choixCata,parentQT=None,parentAppli=None):
+      QtGui.QDialog.__init__(self,parentQT)
+      self.setMinimumSize(50, 50);
+      self.setModal(True)
+      self.setupUi(self)
+      self.ajouteCeQuilFaut()
+      self.choixCata=choixCata
+      self.parentAppli=parentAppli
+
+  def ajouteCeQuilFaut(self) :
+        self.groupModules=QButtonGroup(self.groupBoxModule)
+        self.vLayoutScheme=QVBoxLayout(self.groupBoxScheme)
+        self.groupModules.addButton(self.RBM1)
+        self.groupModules.addButton(self.RBM2)
+        self.groupModules.addButton(self.RBM3)
+        self.groupModules.addButton(self.RBM4)
+        self.groupModules.addButton(self.RBM5)
+        self.groupModules.addButton(self.RBM6)
+        self.groupModules.addButton(self.RBM7)
+        self.groupModules.addButton(self.RBM8)
+        self.groupModules.addButton(self.RBM9)
+        self.groupModules.addButton(self.RBM10)
+        self.groupScheme=QButtonGroup(self.groupBoxScheme)
+        self.connect(self.groupModules,SIGNAL("buttonClicked (QAbstractButton*)"),self.modifieModule)
+        self.connect(self.groupScheme,SIGNAL("buttonClicked (QAbstractButton*)"),self.choisitSchema)
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap("../Editeur/icons/map.ppm"),QtGui.QIcon.Normal,QtGui.QIcon.Off)
+        self.PBIconeMap.setIcon(icon)
+
+      
+  def modifieModule(self):
+      self.module=str(self.groupModules.checkedButton().text())
+      dicoModules=dico[self.module]
+      self.choixCata.module=self.module
+      for bouton in self.groupScheme.buttons():
+          self.groupScheme.removeButton(bouton)
+          bouton.close()
+      for label in dicoModules.keys():
+          bouton=MonRadioBouton(QString(label),self.groupBoxScheme)
+          bouton.setModule(self.module,self)
+          self.vLayoutScheme.addWidget(bouton)
+          self.groupScheme.addButton(bouton)
+
+      
+  def choisitSchema(self):
+      schema=str(self.groupScheme.checkedButton().text())
+      self.choixCata.schema=schema
+      nomCata= dico[self.module][schema]
+      if self.parentAppli==None :
+         self.choixCata.nom=nomCata
+      else :
+         self.parentAppli.ssCode=nomCata
+      self.close();
+
index 4bb85c4e1d414aa73f800ded6e4e22ad4452379d..f31efe18abba0bd2a0a653ccda72056cf185c4f8 100644 (file)
@@ -64,6 +64,7 @@ class MonCommentairePanel(DComment,QTPanelTBW2,QTPanel):
         QTPanelTBW2.__init__(self,node,parent)
         self.RemplitPanel()
         self.connecterSignaux()
+        self.textCommentaire.setFocus()
 
   def connecterSignaux(self) :
         self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked)
index 0909093ff16900967784bc02df0385d97cbbe1aa..c35b457af40634abbf04a17839e003e0c2023743 100644 (file)
@@ -32,9 +32,9 @@ from PyQt4.QtCore import *
 
 class MonFonctionPanel(MonPlusieursBasePanel):
   """
-  Classe définissant le panel associé aux mots-clés qui demandent
-  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
-  discrètes
+  Classe définissant le panel associé aux mots-clés qui demandent
+  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+  discrètes
   """
   def __init__(self,node, parent = None,name = None,fl = 0):
         #print "MonFonctionPanel"
@@ -62,9 +62,9 @@ class MonFonctionPanel(MonPlusieursBasePanel):
         #decoupe la liste des valeurs en n ( les x puis les y)
         l_valeurs=[]
         if (len(liste)% self.nbValeurs != 0):
-            message="La cardinalité n'est pas correcte, la dernière valeur est ignorée"
+            message="La cardinalité n'est pas correcte, la dernière valeur est ignorée"
             #self.Commentaire.setText(QString(commentaire)) 
-            self.editor.affiche_infos(message)
+            self.editor.affiche_infos(message,Qt.red)
         i=0
         while ( i < (len(liste) - self.nbValeurs + 1)) :
             t=tuple(liste[i:i+self.nbValeurs])
@@ -77,24 +77,32 @@ class MonFonctionPanel(MonPlusieursBasePanel):
         listeValeurs=self.node.item.GetListeValeurs()
         if self.node.item.wait_tuple()== 1 :
              listeATraiter=listeValeurs
+              for valeur in listeATraiter:
+                  str_valeur=str(valeur)
+                  self.LBValeurs.addItem(str_valeur)
         else : 
-              listeATraiter=self.DecoupeListeValeurs(listeValeurs)
-        for valeur in listeATraiter:
-            str_valeur=str(valeur)
-            self.LBValeurs.addItem(str_valeur)
+             for valeur in self.DecoupeListeValeurs(listeValeurs):
+                   if type(valeur) == types.TupleType:
+                       TupleEnTexte="("
+                       for val in valeur :
+                           TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
+                       TupleEnTexte = TupleEnTexte[0:-2] +")"
+                       print TupleEnTexte
+                       self.LBValeurs.addItem(TupleEnTexte)
+                   else :
+                       self.LBValeurs.addItem(QString(str(valeur)))
+
 
   def  Ajout1Valeur(self,liste=[]):
-        # Pour être appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur)
+        # Pour être appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur)
+        validite=1
         if liste == [] :
            if self.node.item.wait_tuple()== 1 :
               liste=SaisieValeur.TraiteLEValeurTuple(self)
               if liste == [''] : return
-              validite=1
            else :
               liste,validite=SaisieValeur.TraiteLEValeur(self)
-        else :
-           validite=1
-        if validite == 0 : return
+              if validite == 0 : return
         if liste ==[]    : return
 
         if len(liste) != self.nbValeurs :
@@ -103,20 +111,21 @@ class MonFonctionPanel(MonPlusieursBasePanel):
             commentaire += QString(str(self.nbValeurs)) 
             commentaire += QString(" valeurs")
            self.LEValeur.setText(QString(str(liste)))
-            self.editor.affiche_infos(commentaire)
+            self.editor.affiche_infos(commentaire,Qt.red)
             return
 
         if self.node.item.wait_tuple()== 1 :
               liste2=tuple(liste)
               liste=liste2
+
         index=self.LBValeurs.currentRow()
         if ((self.LBValeurs.isItemSelected(self.LBValeurs.item(index )) == 0) and (index > 0 )):
            index=0
         else :
            index=self.LBValeurs.currentRow() + 1
         indexListe=index*self.nbValeurs
-        if index == 0 : 
-           indexListe=len(self.listeValeursCourantes)
+        if index == 0 : indexListe=len(self.listeValeursCourantes)
+
         listeVal=[]
         for valeur in self.listeValeursCourantes :
                 listeVal.append(valeur)
@@ -125,9 +134,9 @@ class MonFonctionPanel(MonPlusieursBasePanel):
              validite,comm,comm2,listeRetour=self.politique.AjoutTuple(liste,index,listeVal)
         else :
              validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal)
-        self.Commentaire.setText(comm2)
+        self.Commentaire.setText(QString.fromUtf8(QString(comm2)))
         if not validite :
-                self.editor.affiche_infos(comm)
+                self.editor.affiche_infos(comm,Qt.red)
         else:
            self.LEValeur.setText(QString(""))
            l1=self.listeValeursCourantes[:indexListe]
@@ -137,7 +146,13 @@ class MonFonctionPanel(MonPlusieursBasePanel):
            else : 
               listeATraiter=self.DecoupeListeValeurs(listeRetour)
            for valeur in  listeATraiter :
-               str_valeur=str(valeur)
+               if type(valeur) == types.TupleType:
+                  TupleEnTexte="("
+                  for val in valeur :
+                      TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
+                  str_valeur = TupleEnTexte[0:-2] +")"
+               else :
+                  str_valeur=str(valeur)
                self.LBValeurs.insertItem(index,str_valeur)
                item=self.LBValeurs.item(index)
                item.setSelected(1)
@@ -150,7 +165,7 @@ class MonFonctionPanel(MonPlusieursBasePanel):
         if len(liste)%self.nbValeurs != 0 :
            texte="Nombre de valeur incorrecte"
            #self.Commentaire.setText(texte)
-           self.editor.affiche_infos(texte)
+           self.editor.affiche_infos(texte,Qt.red)
            return
         listeDecoupee=self.DecoupeListeValeurs(liste)
         for vals in listeDecoupee :
index 4a74051a43363ff4606ae3b40ae5742a00dd5bf7..4bc87d5f43ad92e903b0ef36d36813f3de7b074b 100644 (file)
@@ -51,9 +51,9 @@ class DFormule(Ui_DFormule,QDialog):
 
 class MonFormulePanel(DFormule,QTPanelTBW2):
   """
-  Classe définissant le panel associé aux mots-clés qui demandent
-  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
-  discrètes
+  Classe définissant le panel associé aux mots-clés qui demandent
+  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+  discrètes
   """
   def __init__(self,node, parent = None,name = None,fl = 0):
         #print "MonFormulePanel"
@@ -111,20 +111,21 @@ class MonFormulePanel(DFormule,QTPanelTBW2):
       test,erreur = self.node.item.verif_nom(nomFormule)
       if test :
          commentaire=nomFormule+" est un nom valide pour une FORMULE"
+         self.editor.affiche_infos(commentaire) 
       else :
          commentaire=nomFormule+" n'est pas un nom valide pour une FORMULE"
-      self.editor.affiche_infos(commentaire
+         self.editor.affiche_infos(commentaire,Qt.red
 
   def argsSaisis(self):
       arguments = str(self.LENomsArgs.text())
       if arguments == '' : return
-
       test,erreur = self.node.item.verif_arguments(arguments)
       if test:
          commentaire="Argument(s) valide(s) pour une FORMULE"
+         self.editor.affiche_infos(commentaire) 
       else:
          commentaire="Argument(s) invalide(s) pour une FORMULE"
-      self.editor.affiche_infos(commentaire
+         self.editor.affiche_infos(commentaire,Qt.red
 
   def FormuleSaisie(self):
       nomFormule = str(self.LENomFormule.text())
@@ -135,9 +136,10 @@ class MonFormulePanel(DFormule,QTPanelTBW2):
 
       if test:
          commentaire="Corps de FORMULE valide"
+         self.editor.affiche_infos(commentaire) 
       else:
          commentaire="Corps de FORMULE invalide"
-      self.editor.affiche_infos(commentaire
+         self.editor.affiche_infos(commentaire,Qt.red
 
 
   def BOkPressedFormule(self):
@@ -146,19 +148,19 @@ class MonFormulePanel(DFormule,QTPanelTBW2):
       nomFormule = str(self.LENomFormule.text())
       test,erreur = self.node.item.verif_nom(nomFormule)
       if not test :
-         self.editor.affiche_infos(erreur)
+         self.editor.affiche_infos(erreur,Qt.red)
          return
 
       arguments  = str(self.LENomsArgs.text())
       test,erreur = self.node.item.verif_arguments(arguments)
       if not test :
-         self.editor.affiche_infos(erreur)
+         self.editor.affiche_infos(erreur,Qt.red)
          return
 
       expression = str(self.LECorpsFormule.text())
       test,erreur = self.node.item.verif_formule_python((nomFormule,"REEL",arguments,expression))
       if not test :
-         self.editor.affiche_infos(erreur)
+         self.editor.affiche_infos(erreur,Qt.red)
          return
 
       test=self.node.item.object.update_formule_python(formule=(nomFormule,"REEL",arguments,expression))
@@ -169,8 +171,9 @@ class MonFormulePanel(DFormule,QTPanelTBW2):
          #self.node.update_node()
          self.node.onValid()
          self.node.update_valid()
-         commentaire = "Formule modifiée"
+         commentaire = "Formule modifiée"
+         self.editor.affiche_infos(commentaire)
       else:
          commentaire ="Formule incorrecte : " + erreur 
+         self.editor.affiche_infos(commentaire,Qt.red)
       self.editor.init_modif()
-      self.editor.affiche_infos(commentaire)
index 79aa092d39ab09bd93d4b7ed046eb4e5ee585f75..142f9d3daf39affbdae8f0a2d362d31915376793 100644 (file)
@@ -54,9 +54,9 @@ class DInc(Ui_DInc1,QDialog):
 
 class MonIncludePanel(DInc,QTPanelTBW1,QTPanelTBW2,QTPanelTBW3):
   """
-  Classe définissant le panel associé aux mots-clés qui demandent
-  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
-  discrètes
+  Classe définissant le panel associé aux mots-clés qui demandent
+  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+  discrètes
   """
   def __init__(self,node, parent = None,name = None,fl = 0):
         #print "MonIncludePanel"
@@ -92,8 +92,8 @@ class MonIncludePanel(DInc,QTPanelTBW1,QTPanelTBW2,QTPanelTBW3):
         nomFichier=str(self.LENomFichier.text())
         if not os.path.isfile(nomFichier) :
            commentaire = "Fichier introuvable"
-           self.Commentaire.setText(QString(commentaire))
-           self.editor.affiche_infos(commentaire)
+           self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
+           self.editor.affiche_infos(commentaire,Qt.red)
            return
 
         text=self.convert_file(nomFichier)
@@ -107,14 +107,14 @@ class MonIncludePanel(DInc,QTPanelTBW1,QTPanelTBW2,QTPanelTBW3):
         try :
            self.node.item.object.change_fichier_init(nomFichier,text)
            commentaire = "Fichier modifie  : " + self.node.item.get_nom()
-           self.Commentaire.setText(QString(commentaire))
+           self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
            self.editor.affiche_infos(commentaire)
         except: 
            l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
            QMessageBox.critical( self, "Erreur fatale au chargement du fichier Include", l[0])
            commentaire = "Fichier invalide" 
-           self.Commentaire.setText(QString(commentaire))
-           self.editor.affiche_infos(commentaire)
+           self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
+           self.editor.affiche_infos(commentaire,Qt.red)
            return
 
 
@@ -130,9 +130,9 @@ class MonIncludePanel(DInc,QTPanelTBW1,QTPanelTBW2,QTPanelTBW3):
           p.readfile(file)
           text=p.convert('execnoparseur')
        else :
-            commentaire = "Impossible de lire le fichier : Format inconnu"
-            self.Commentaire.setText(QString(commentaire))
-            self.editor.affiche_infos(commentaire)
+           commentaire = "Impossible de lire le fichier : Format inconnu"
+           self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
+           self.editor.affiche_infos(commentaire,Qt.red)
        return text
 
 
@@ -147,6 +147,8 @@ class MonIncludePanel(DInc,QTPanelTBW1,QTPanelTBW2,QTPanelTBW3):
          return
 
       fn = os.path.abspath((unicode(fn)))
+      ulfile = os.path.abspath(unicode(fn))
+      self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
       self.LENomFichier.setText(fn)
       self.LENomFichReturnPressed()
 
index 0a6728818e70040989e9cc282a655b2a0d6be2ee..857714b48d4582d1a40b54a368248b620265a747 100644 (file)
@@ -56,5 +56,11 @@ class MonListeParamPanel(DLisParam):
             self.dictListe[QString(repr(param))] = param
 
   def LBParamItemPressed(self):
+        #print self.LBParam.selectedItems()
+        if self.LBParam.selectedItems()== None : return
         i=self.LBParam.selectedItems()[0].text()
         self.panel.Ajout1Valeur(self.dictListe[i])
+
+  def on_BOk_clicked(self):
+        self.LBParamItemPressed()
+        self.close()
index 8be5fd7cc96cb327e95f1cbda272cb9425af56cd..3824d3d52332988f437c213e0464747b9cb45c92 100644 (file)
@@ -64,7 +64,6 @@ class MonMCListAjoutPanel(DMCListAjout,QTPanel):
   def connecterSignaux(self):
         self.connect(self.bAjout,SIGNAL("clicked()"),self.BAjoutClicked)
 
-
   def BAjoutClicked(self):
         self.node.treeParent.append_child(self.node.item.get_nom())
 
diff --git a/InterfaceQT4/monMatricePanel.py b/InterfaceQT4/monMatricePanel.py
new file mode 100644 (file)
index 0000000..fa7ec85
--- /dev/null
@@ -0,0 +1,182 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+import string,types,os
+
+# Modules Eficas
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+from desMatrice           import Ui_desMatrice
+
+
+class MonMatricePanel(Ui_desMatrice,QDialog):
+  """
+  Classe définissant le panel Matrice
+  Attention n herite pas de QtPanel
+  """
+  def __init__(self,node, parent = None,name = None,fl = 0):
+       QDialog.__init__(self,parent)
+       self.node=node
+       self.editor = parent
+       self.nbLigs=0
+       self.nbCols=0
+       self.monType= self.node.item.object.definition.type[0]
+       if hasattr(parent,"leLayout"):
+          parent.leLayout.removeWidget(parent.leLayout.widgetActive)
+          parent.leLayout.widgetActive.close()
+          parent.leLayout.addWidget(self)
+          parent.leLayout.widgetActive=self
+       else:
+          parent.partieDroite=QWidget()
+          parent.leLayout=QGridLayout(parent.partieDroite)
+          parent.leLayout.addWidget(self)
+          parent.addWidget(parent.partieDroite)
+          parent.leLayout.widgetActive=self
+       self.setupUi(self)
+       self.initVal()
+       self.creeColonnes()
+       self.connecterSignaux()
+       if self.node.item.get_valeur()== None:
+          self.initialSsValeur()
+       else :
+          try :
+             self.initialValeur()
+          except :
+             self.initialSsValeur()
+
+  def initVal(self):
+      self.nomVariables={}
+
+  def connecterSignaux(self) :
+      self.connect(self.TBMatrice,SIGNAL("itemChanged(QTableWidgetItem *)"),self.itemChanged)
+      self.connect(self.BOk,SIGNAL("clicked()"),self.acceptVal)
+
+  def itemChanged(self):
+      monItem=self.TBMatrice.currentItem()
+      if monItem==None : return
+      texte=monItem.text()
+      if texte=="" : return
+      val,ok=texte.toDouble() 
+      if ok == False :
+       self.editor.affiche_infos("Entrer un float SVP",Qt.red)
+        monItem.setText("")
+        return
+      if self.monType.valSup != None :
+         if val > self.monType.valSup :
+           self.editor.affiche_infos("Entrer un float inférieur à " + repr(self.monType.valSup),Qt.red)
+            monItem.setText("")
+            return
+      if self.monType.valMin != None :
+         if val < self.monType.valMin :
+           self.editor.affiche_infos("Entrer un float superieur à " + repr(self.monType.valMin),Qt.red)
+            monItem.setText("")
+            return
+      self.editor.affiche_infos("")
+      if self.monType.structure != None:
+           apply (MonMatricePanel.__dict__[self.monType.structure],(self,))
+
+
+  def symetrique(self):
+      monItem=self.TBMatrice.currentItem()
+      texte=monItem.text()
+      if monItem.row() != monItem.column():
+         monItemSym=self.TBMatrice.item(monItem.column(), monItem.row())
+         monItemSym.setText(texte)
+
+  def creeColonnes(self):
+      if self.monType.methodeCalculTaille != None :
+        #try:
+         if 1 :
+           apply (MonMatricePanel.__dict__[self.monType.methodeCalculTaille],(self,))
+         else :
+         #except :
+           QMessageBox.critical( self, "Mauvaise execution ", "impossible d executer la méthode " + monType.methodeCalculTaille )
+           return
+      else :
+         self.nbLigs=self.monType.nbLigs
+         self.nbCols=self.monType.nbCols
+
+
+  def  NbDeVariables(self):
+       jdc=self.node.item.object.jdc
+       etape=self.node.item.object.etape
+       self.listeVariables=jdc.get_variables(etape)
+       if self.listeVariables == [] :
+           QMessageBox.critical( self, "Mauvaise Commande ", "Aucune variable connue")
+           return
+       self.TBMatrice.setColumnCount(len(self.listeVariables))
+       self.TBMatrice.setRowCount(len(self.listeVariables))
+       self.nbLigs=len(self.listeVariables)
+       self.nbCols=len(self.listeVariables)
+
+  def  initialSsValeur(self):
+       for row in range(self.nbLigs):
+          for column in range(self.nbCols):
+              if row == column :
+                 initialFloat=1
+               else :
+                 initialFloat=0
+               self.TBMatrice.setItem(row,column,QTableWidgetItem(str(initialFloat)))
+       header=QStringList()
+       for var in self.listeVariables :
+          header << var
+       self.TBMatrice.setVerticalHeaderLabels(header)
+       self.TBMatrice.setHorizontalHeaderLabels(header)
+
+  def  initialValeur(self):
+      liste=self.node.item.get_valeur()
+      dejaAffiche=0
+      if (len(liste)) != self.nbLigs +1  :
+         QMessageBox.critical( self, "Mauvaise dimension de matrice", "le nombre de ligne n est pas egal a " + str(self.nbLigs))
+         dejaAffiche=1
+      for i in range(self.nbLigs):
+          inter=liste[i+1]
+          if (len(inter)) != self.nbCols and (dejaAffiche == 0 ) :
+             QMessageBox.critical( self, "Mauvaise dimension de matrice", "le nombre de colonne n est pas egal a " + str(self.nbCols))
+             dejaAffiche=1
+          for j in range(self.nbCols):
+              self.TBMatrice.setItem(i,j,QTableWidgetItem(str(liste[i+1][j])))
+      header=QStringList()
+      for var in liste[0]:
+          header << var
+      self.TBMatrice.setVerticalHeaderLabels(header)
+      self.TBMatrice.setHorizontalHeaderLabels(header)
+              
+  def acceptVal(self):
+      liste=[]
+      liste.append(self.listeVariables)
+      if self.TBMatrice.rowCount() != self.nbLigs :
+         QMessageBox.critical( self, "Mauvaise dimension de matrice", "le nombre de ligne n est pas egal a " + str(self.nbLigs))
+      if self.TBMatrice.columnCount() != self.nbCols :
+         QMessageBox.critical( self, "Mauvaise dimension de matrice", "le nombre de colonne n est pas egal a " + str(self.nbCols))
+      for i in range(self.nbLigs):
+          listeCol=[]
+          for j in range(self.nbCols):
+              monItem=self.TBMatrice.item(i,j)       
+              texte=monItem.text()
+              val,ok=texte.toDouble() 
+              if ok == False :
+                 QMessageBox.critical( self, "Mauvaise Valeur", "l element " + str(i) + "," +str(j) +"n est pas correct")
+              listeCol.append(val)
+          liste.append(listeCol)
+      # on ajoute l ordre des variables aux valeurs
+      self.node.item.set_valeur(liste)
diff --git a/InterfaceQT4/monOptions_ASTER.py b/InterfaceQT4/monOptions_ASTER.py
new file mode 100644 (file)
index 0000000..eff040a
--- /dev/null
@@ -0,0 +1,173 @@
+# -*- coding: utf-8 -*-
+
+import os, re
+
+from PyQt4.QtGui  import *
+from PyQt4.QtCore import *
+
+from OptionsEditeur import Ui_desOptions
+
+
+class desOptions(Ui_desOptions,QDialog):
+   def __init__(self,parent ,modal ) :
+       QDialog.__init__(self,parent)
+       self.setupUi(self)
+       self.setModal(modal)
+
+class Options(desOptions):
+   def __init__(self,parent = None,modal = 0,configuration=None):
+       desOptions.__init__(self,parent,modal)
+       self.configuration=configuration
+       self.viewMan=parent
+       self.dVersion={}
+       self.dRepMat={}
+       self.dRepCat={}
+       self.connecterSignaux()
+       self.initAll()
+  
+   def connecterSignaux(self) :
+       self.connect(self.CBVersions,SIGNAL("activated(int)"),self.VersionChoisie)
+       self.connect(self.Bdefaut,SIGNAL("clicked()"),self.BdefautChecked)
+       self.connect(self.LEVersionAjout,SIGNAL("returnPressed()"),self.AjoutVersion)
+       self.connect(self.LERepDoc,SIGNAL("returnPressed()"),self.ChangePathDoc)
+       self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked)
+       self.connect(self.LEVersionSup,SIGNAL("returnPressed()"),self.SupVersion)
+       self.connect(self.PBajout,SIGNAL("clicked()"),self.AjoutVersion)
+       self.connect(self.PBSup,SIGNAL("clicked()"),self.SupVersion)
+       self.connect(self.PBQuit,SIGNAL("clicked()"),self.close)
+
+
+   def initAll(self):
+       self.CBVersions.clear()
+       for item in self.configuration.catalogues :
+           try :
+              (code,version,cata,format,defaut)=item
+           except :
+              (code,version,cata,format)=item
+           self.dVersion[version]=(item)
+           self.dRepCat[version]=str(cata)
+           self.CBVersions.addItem(QString(version))
+
+           codeSansPoint=re.sub("\.","",version)
+           chaine="rep_mat_"+codeSansPoint
+           if hasattr(self.configuration,chaine):
+              rep_mat=getattr(self.configuration,chaine)
+              self.dRepMat[version]=str(rep_mat)
+           else :
+              self.dRepMat[version]=""
+       self.LERepMat.setText(self.dRepMat[version])
+       self.LERepCata.setText(self.dRepCat[version])
+       if hasattr(self.configuration,"path_doc"):
+          self.LERepDoc.setText(self.configuration.path_doc)
+
+        
+   def VersionChoisie(self):
+       version=str(self.CBVersions.currentText())
+       if self.dRepMat.has_key(version):
+          self.LERepMat.setText(self.dRepMat[version])
+       if self.dRepCat.has_key(version):
+          self.LERepCata.setText(self.dRepCat[version])
+
+   def BokClicked(self):
+       version=str(self.CBVersions.currentText())
+       if self.LERepCata.text() == "" :
+          QMessageBox.critical( self, "Champ non rempli","Le champs Catalogue  doit etre rempli" )
+          return
+
+       self.dRepMat[version]=self.LERepMat.text()
+       if str(self.dRepMat[version] != "") != "" :
+          codeSansPoint=re.sub("\.","",version)
+          chaine="rep_mat_"+codeSansPoint
+          setattr(self.configuration,chaine,self.dRepMat[version])
+
+       self.dRepCat[version]=str(self.LERepCata.text())
+       if version in self.dVersion.keys():
+          item=list(self.dVersion[version])
+          item[2]=self.dRepCat[version]
+          self.dVersion[version]=tuple(item)
+       else :
+          self.dVersion[version]=('ASTER',version,self.dRepCat[version],'python')
+          
+       lItem=[]
+       for version in self.dVersion.keys() :
+          lItem.append(self.dVersion[version])
+       self.configuration.catalogues=lItem
+       self.configuration.save_params()
+
+   def AjoutVersion(self):
+       version=self.LEVersionAjout.text()
+       if str(version) == "" : return
+       self.CBVersions.addItem(version)
+       self.LERepMat.setText("")
+       self.LERepCata.setText("")
+       self.LEVersionAjout.setText("")
+       self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+
+   def SupVersion(self):
+       version=str(self.LEVersionSup.text())
+       if version == "" : return
+       i =0
+       while i < self.CBVersions.count() :
+           if  self.CBVersions.itemText(i) == version :
+               self.CBVersions.removeItem(i)
+               break
+           i=i+1
+       try :
+          del self.dVersion[version]
+          del self.dRepMat[version]
+          del self.dRepCat[version]
+       except :
+          self.LEVersionSup.setText("")
+          return
+       codeSansPoint=re.sub("\.","",version)
+       chaine="rep_mat_"+codeSansPoint
+       if hasattr(self.configuration,chaine):
+          delattr(self.configuration,chaine)
+       self.LEVersionSup.setText("")
+
+       lItem=[]
+       for version in self.dVersion.keys() :
+           lItem.append(self.dVersion[version])
+       self.LERepMat.setText("")
+       self.LERepCata.setText("")
+       self.configuration.catalogues=lItem
+       self.configuration.save_params()
+       self.CBVersions.setCurrentIndex(0)
+       self.VersionChoisie()
+
+
+   def BdefautChecked(self):
+       res = QMessageBox.warning(
+                 None,
+                 self.trUtf8("Restauration des parametres par defaut "),
+                 self.trUtf8("Votre fichier editeur sera ecrase."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+       self.Bdefaut.setCheckState(Qt.Unchecked)
+       if res == 1 : return 
+
+       appli=self.configuration.appli
+       fic_ini_util=self.configuration.fic_ini_utilisateur
+       old_fic_ini_util=fic_ini_util+"_old"
+       commande="mv "+fic_ini_util+" "+old_fic_ini_util
+       os.system(commande)
+       import prefs
+       name='prefs_'+prefs.code
+       prefsCode=__import__(name)
+       repIni=prefsCode.REPINI
+       nameConf='configuration_'+prefs.code
+       configuration=__import__(nameConf)
+
+       configNew=configuration.CONFIG(appli,repIni)
+       self.configuration=configNew
+       appli.CONFIGURATION=configNew
+       self.configuration.save_params()
+       self.dVersion={}
+       self.dRepMat={}
+       self.dRepCat={}
+       self.initAll()
+
+   def ChangePathDoc(self):
+       self.configuration.path_doc=str(self.LERepDoc.text())
+       self.configuration.save_params()
+
diff --git a/InterfaceQT4/monOptions_CUVE2DG.py b/InterfaceQT4/monOptions_CUVE2DG.py
new file mode 100644 (file)
index 0000000..9cd8525
--- /dev/null
@@ -0,0 +1,199 @@
+# -*- coding: utf-8 -*-
+
+import os, re, sys
+
+from PyQt4.QtGui  import *
+from PyQt4.QtCore import *
+
+from OptionsCuve import Ui_desOptions
+
+
+class desOptions(Ui_desOptions,QDialog):
+   def __init__(self,parent ,modal ) :
+       QDialog.__init__(self,parent)
+       self.setupUi(self)
+       self.setModal(modal)
+
+class Options(desOptions):
+   def __init__(self,parent = None,modal = 0,configuration=None):
+       desOptions.__init__(self,parent,modal)
+       self.configuration=configuration
+       self.viewMan=parent
+       self.dVersion={}
+       self.dRepCat={}
+       self.connecterSignaux()
+       self.initAll()
+  
+   def connecterSignaux(self) :
+       self.connect(self.CBVersions,SIGNAL("activated(int)"),self.VersionChoisie)
+       self.connect(self.Bdefaut,SIGNAL("clicked()"),self.BdefautChecked)
+       self.connect(self.LEVersionAjout,SIGNAL("returnPressed()"),self.AjoutVersion)
+       self.connect(self.PBajout,SIGNAL("clicked()"),self.AjoutVersion)
+       self.connect(self.LEVersionSup,SIGNAL("returnPressed()"),self.SupVersion)
+       self.connect(self.PBSup,SIGNAL("clicked()"),self.SupVersion)
+       self.connect(self.LERepDoc,SIGNAL("returnPressed()"),self.ChangePathDoc)
+       self.connect(self.LERepCata,SIGNAL("returnPressed()"),self.BokClicked)
+       self.connect(self.LESaveDir,SIGNAL("returnPressed()"),self.ChangeSaveDir)
+       self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked)
+       self.connect(self.PBQuit,SIGNAL("clicked()"),self.close)
+
+
+   def initAll(self):
+       self.CBVersions.clear()
+       for item in self.configuration.catalogues :
+           try :
+              (code,version,cata,format,defaut)=item
+           except :
+              (code,version,cata,format)=item
+           self.dVersion[version]=(item)
+           self.dRepCat[version]=str(cata)
+           self.CBVersions.addItem(QString(version))
+       self.LERepCata.setText(self.dRepCat[version])
+
+       if hasattr(self.configuration,"path_doc"):
+          self.LERepDoc.setText(self.configuration.path_doc)
+       if hasattr(self.configuration,"savedir"):
+          self.LESaveDir.setText(self.configuration.savedir)
+
+
+        
+   def VersionChoisie(self):
+       version=str(self.CBVersions.currentText())
+       if self.dRepCat.has_key(version):
+          self.LERepCata.setText(self.dRepCat[version])
+
+   def BokClicked(self):
+       version=str(self.CBVersions.currentText())
+       if self.LERepCata.text() == "" :
+          QMessageBox.critical( self, "Champ non rempli","Le champ Catalogue  doit etre rempli" )
+          return
+       if not os.path.isfile(self.LERepCata.text()) :
+          res = QMessageBox.warning( None,
+                 self.trUtf8("Fichier Catalogue "),
+                 self.trUtf8("Le Fichier  n existe pas. Voulez-vous supprimer cette version ?"),
+                 self.trUtf8("&Oui"),
+                 self.trUtf8("&Non"))
+          if res == 0 :
+             self.LEVersionSup.setText(version)
+             self.SupVersion()
+             return
+
+       self.dRepCat[version]=str(self.LERepCata.text())
+       if version in self.dVersion.keys():
+          item=list(self.dVersion[version])
+          item[2]=self.dRepCat[version]
+          self.dVersion[version]=tuple(item)
+       else :
+          import prefs
+          code=prefs.code
+          self.dVersion[version]=(code,version,self.dRepCat[version],code.lower())
+          
+       lItem=[]
+       for version in self.dVersion.keys() :
+          lItem.append(self.dVersion[version])
+       self.configuration.catalogues=lItem
+       self.configuration.save_params()
+
+   def AjoutVersion(self):
+       version=self.LEVersionAjout.text()
+       if str(version) == "" : return
+       self.CBVersions.addItem(version)
+       self.LERepCata.setText("")
+       self.LEVersionAjout.setText("")
+       self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+
+   def SupVersion(self):
+       version=str(self.LEVersionSup.text())
+       if version == "" : return
+       i =0
+       while i < self.CBVersions.count() :
+           if  self.CBVersions.itemText(i) == version :
+               self.CBVersions.removeItem(i)
+               break
+           i=i+1
+       try :
+          del self.dVersion[version]
+          del self.dRepCat[version]
+       except :
+          self.LEVersionSup.setText("")
+          try :
+             self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+             self.VersionChoisie()
+          except :
+             pass
+          return
+       codeSansPoint=re.sub("\.","",version)
+       chaine="rep_mat_"+codeSansPoint
+       if hasattr(self.configuration,chaine):
+          delattr(self.configuration,chaine)
+       self.LEVersionSup.setText("")
+
+       lItem=[]
+       for version in self.dVersion.keys() :
+           lItem.append(self.dVersion[version])
+       self.LERepCata.setText("")
+       self.configuration.catalogues=lItem
+       self.configuration.save_params()
+       self.CBVersions.setCurrentIndex(0)
+       self.VersionChoisie()
+
+
+   def BdefautChecked(self):
+       res = QMessageBox.warning( None,
+                 self.trUtf8("Restauration des parametres par defaut "),
+                 self.trUtf8("Votre fichier editeur sera ecrase."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+       self.Bdefaut.setCheckState(Qt.Unchecked)
+       if res == 1 : return 
+
+       appli=self.configuration.appli
+       fic_ini_util=self.configuration.fic_ini_utilisateur
+       old_fic_ini_util=fic_ini_util+"_old"
+       commande="mv "+fic_ini_util+" "+old_fic_ini_util
+       os.system(commande)
+       import prefs
+       name='prefs_'+prefs.code
+       prefsCode=__import__(name)
+       repIni=prefsCode.REPINI
+       nameConf='configuration_'+prefs.code
+       configuration=__import__(nameConf)
+
+       configNew=configuration.CONFIG(appli,repIni)
+       self.configuration=configNew
+       appli.CONFIGURATION=configNew
+       self.configuration.save_params()
+       self.dVersion={}
+       self.dRepCat={}
+       self.initAll()
+
+   def ChangePathDoc(self):
+       if self.LERepDoc.text()=="" : return
+       if not os.path.isdir(self.LERepDoc.text()) :
+          res = QMessageBox.warning( None,
+                 self.trUtf8("Repertoire de Documentation "),
+                 self.trUtf8("Le Repertoire  n existe pas."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+          if res == 1 :
+             if hasattr(self.configuration,"path_doc"):
+                self.LERepDoc.setText(self.configuration.path_doc)
+             return
+
+       self.configuration.path_doc=str(self.LERepDoc.text())
+       self.configuration.save_params()
+
+
+   def ChangeSaveDir(self):
+       if not os.path.isdir(self.LESaveDir.text()) :
+          res = QMessageBox.warning( None,
+                 self.trUtf8("Repertoire De Sauvegarde "),
+                 self.trUtf8("Le Repertoire " + self.LESaveDir.text() +" n existe pas."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+          if res == 1 :
+             if hasattr(self.configuration,"savedir"):
+                self.LESaveDir.setText(self.configuration.savedir)
+       self.configuration.savedir=str(self.LESaveDir.text())
+       self.configuration.save_params()
+
diff --git a/InterfaceQT4/monOptions_MAP.py b/InterfaceQT4/monOptions_MAP.py
new file mode 100644 (file)
index 0000000..2dc9e49
--- /dev/null
@@ -0,0 +1,259 @@
+# -*- coding: utf-8 -*-
+
+import os, re, sys
+
+from PyQt4.QtGui  import *
+from PyQt4.QtCore import *
+
+from OptionsMAP import Ui_desOptions
+
+
+class desOptions(Ui_desOptions,QDialog):
+   def __init__(self,parent ,modal ) :
+       QDialog.__init__(self,parent)
+       self.setupUi(self)
+       self.setModal(modal)
+
+class Options(desOptions):
+   def __init__(self,parent = None,modal = 0,configuration=None):
+       desOptions.__init__(self,parent,modal)
+       self.configuration=configuration
+       self.viewMan=parent
+       self.dVersion={}
+       self.dRepCat={}
+       self.connecterSignaux()
+       self.initAll()
+  
+   def connecterSignaux(self) :
+       self.connect(self.CBVersions,SIGNAL("activated(int)"),self.VersionChoisie)
+       self.connect(self.Bdefaut,SIGNAL("clicked()"),self.BdefautChecked)
+       self.connect(self.LEVersionAjout,SIGNAL("returnPressed()"),self.AjoutVersion)
+       self.connect(self.PBajout,SIGNAL("clicked()"),self.AjoutVersion)
+       self.connect(self.LEVersionSup,SIGNAL("returnPressed()"),self.SupVersion)
+       self.connect(self.PBSup,SIGNAL("clicked()"),self.SupVersion)
+       self.connect(self.LERepDoc,SIGNAL("returnPressed()"),self.ChangePathDoc)
+       self.connect(self.LERepOT,SIGNAL("returnPressed()"),self.ChangePathOT)
+       self.connect(self.LERepMAP,SIGNAL("returnPressed()"),self.ChangePathMAP)
+       self.connect(self.LERepAster,SIGNAL("returnPressed()"),self.ChangePathAster)
+       self.connect(self.LERepCata,SIGNAL("returnPressed()"),self.BokClicked)
+       self.connect(self.LESaveDir,SIGNAL("returnPressed()"),self.ChangeSaveDir)
+       self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked)
+       self.connect(self.PBQuit,SIGNAL("clicked()"),self.close)
+
+
+   def initAll(self):
+       self.CBVersions.clear()
+       for item in self.configuration.catalogues :
+           (code,ssCode,cata,formatOut,formatIn)=item
+           self.dVersion[ssCode]=(item)
+           self.dRepCat[ssCode]=str(cata)
+           self.CBVersions.addItem(QString(ssCode))
+       self.LERepCata.setText(self.dRepCat[str(self.CBVersions.currentText())])
+
+       if hasattr(self.configuration,"path_doc"):
+          self.LERepDoc.setText(self.configuration.path_doc)
+       if hasattr(self.configuration,"OpenTURNS_path"):
+          self.LERepOT.setText(self.configuration.OpenTURNS_path)
+       if hasattr(self.configuration,"savedir"):
+          self.LESaveDir.setText(self.configuration.savedir)
+       if hasattr(self.configuration,"PATH_MAP"):
+          self.LERepMAP.setText(self.configuration.PATH_MAP)
+       if hasattr(self.configuration,"PATH_ASTER"):
+          self.LERepAster.setText(self.configuration.PATH_ASTER)
+
+   def ChangePathMAP(self):
+       if self.LERepMAP.text()=="" : return
+       if not os.path.isdir(self.LERepMAP.text()) :
+          res = QMessageBox.warning( None,
+                 self.trUtf8("Repertoire MAP "),
+                 self.trUtf8("Le Repertoire n existe pas."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+          if res == 1 :
+             if hasattr(self.configuration,"PATH_MAP"):
+                self.LERepAster.setText(self.configuration.PATH_MAP)
+             return
+       self.configuration.PATH_MAP=str(self.LERepMAP.text())
+       self.configuration.PATH_PYGMEE=self.configuration.PATH_MAP+"/components/pygmee_v1"
+       self.configuration.PATH_BENHUR=self.configuration.PATH_MAP+"/components/benhur"
+       self.configuration.PATH_FDVGRID=self.configuration.PATH_MAP+"components/fdvgrid/ther2d/bin"
+       self.configuration.PATH_MODULE=self.configuration.PATH_MODULE+"components/fdvgrid/ther2d/bin"
+       self.configuration.save_params()
+
+   def VersionChoisie(self):
+       version=str(self.CBVersions.currentText())
+       pass
+
+   def ChangePathAster(self):
+       if self.LERepAster.text()=="" : return
+       if not os.path.isdir(self.LERepAster.text()) :
+          res = QMessageBox.warning( None,
+                 self.trUtf8("Repertoire Aster "),
+                 self.trUtf8("Le Repertoire n existe pas."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+          if res == 1 :
+             if hasattr(self.configuration,"PATH_ASTER"):
+                self.LERepAster.setText(self.configuration.PATH_ASTER)
+             return
+       self.configuration.PATH_ASTER=str(self.LERepAster.text())
+       self.configuration.save_params()
+
+   def VersionChoisie(self):
+       version=str(self.CBVersions.currentText())
+       if self.dRepCat.has_key(version):
+          self.LERepCata.setText(self.dRepCat[version])
+
+   def BokClicked(self):
+       version=str(self.CBVersions.currentText())
+       if self.LERepCata.text() == "" :
+          QMessageBox.critical( self, "Champ non rempli","Le champ Catalogue  doit etre rempli" )
+          return
+       if not os.path.isfile(self.LERepCata.text()) :
+          res = QMessageBox.warning( None,
+                 self.trUtf8("Fichier Catalogue "),
+                 self.trUtf8("Le Fichier n existe pas. Voulez-vous supprimer cette version ?"),
+                 self.trUtf8("&Oui"),
+                 self.trUtf8("&Non"))
+          if res == 0 :
+             self.LEVersionSup.setText(version)
+             self.SupVersion()
+             return
+
+       self.dRepCat[version]=str(self.LERepCata.text())
+       if version in self.dVersion.keys():
+          item=list(self.dVersion[version])
+          item[2]=self.dRepCat[version]
+          self.dVersion[version]=tuple(item)
+       else :
+          import prefs
+          code=prefs.code
+          self.dVersion[version]=(code,version,self.dRepCat[version],code.lower())
+          
+       lItem=[]
+       for version in self.dVersion.keys() :
+          lItem.append(self.dVersion[version])
+       self.configuration.catalogues=lItem
+       self.configuration.save_params()
+
+   def AjoutVersion(self):
+       version=self.LEVersionAjout.text()
+       if str(version) == "" : return
+       self.CBVersions.addItem(version)
+       self.LERepCata.setText("")
+       self.LEVersionAjout.setText("")
+       self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+
+   def SupVersion(self):
+       version=str(self.LEVersionSup.text())
+       if version == "" : return
+       i =0
+       while i < self.CBVersions.count() :
+           if  self.CBVersions.itemText(i) == version :
+               self.CBVersions.removeItem(i)
+               break
+           i=i+1
+       try :
+          del self.dVersion[version]
+          del self.dRepCat[version]
+       except :
+          self.LEVersionSup.setText("")
+          try :
+             self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+             self.VersionChoisie()
+          except :
+             pass
+          return
+       codeSansPoint=re.sub("\.","",version)
+       chaine="rep_mat_"+codeSansPoint
+       if hasattr(self.configuration,chaine):
+          delattr(self.configuration,chaine)
+       self.LEVersionSup.setText("")
+
+       lItem=[]
+       for version in self.dVersion.keys() :
+           lItem.append(self.dVersion[version])
+       self.LERepCata.setText("")
+       self.configuration.catalogues=lItem
+       self.configuration.save_params()
+       self.CBVersions.setCurrentIndex(0)
+       self.VersionChoisie()
+
+
+   def BdefautChecked(self):
+       res = QMessageBox.warning( None,
+                 self.trUtf8("Restauration des parametres par defaut "),
+                 self.trUtf8("Votre fichier editeur sera ecrase."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+       self.Bdefaut.setCheckState(Qt.Unchecked)
+       if res == 1 : return 
+
+       appli=self.configuration.appli
+       fic_ini_util=self.configuration.fic_ini_utilisateur
+       old_fic_ini_util=fic_ini_util+"_old"
+       commande="mv "+fic_ini_util+" "+old_fic_ini_util
+       os.system(commande)
+       import prefs
+       name='prefs_'+prefs.code
+       prefsCode=__import__(name)
+       repIni=prefsCode.REPINI
+       nameConf='configuration_'+prefs.code
+       configuration=__import__(nameConf)
+
+       configNew=configuration.CONFIG(appli,repIni)
+       self.configuration=configNew
+       appli.CONFIGURATION=configNew
+       self.configuration.save_params()
+       self.dVersion={}
+       self.dRepCat={}
+       self.initAll()
+
+   def ChangePathDoc(self):
+       if self.LERepDoc.text()=="" : return
+       if not os.path.isdir(self.LERepDoc.text()) :
+          res = QMessageBox.warning( None,
+                 self.trUtf8("Repertoire de Documentation "),
+                 self.trUtf8("Le Repertoire  n existe pas."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+          if res == 1 :
+             if hasattr(self.configuration,"path_doc"):
+                self.LERepDoc.setText(self.configuration.path_doc)
+             return
+
+       self.configuration.path_doc=str(self.LERepDoc.text())
+       self.configuration.save_params()
+
+   def ChangePathOT(self):
+       if not os.path.isdir(self.LERepOT.text()) :
+          res = QMessageBox.warning( None,
+                 self.trUtf8("Repertoire Open TURNS "),
+                 self.trUtf8("Le Repertoire  n existe pas."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+          if res == 1 :
+             if hasattr(self.configuration,"OpenTURNS_path"):
+                self.LERepOT.setText(self.configuration.OpenTURNS_path)
+             return
+
+       if hasattr(self.configuration,"OpenTURNS_path"):
+          sys.path.remove(self.configuration.OpenTURNS_path)
+       self.configuration.OpenTURNS_path=str(self.LERepOT.text())
+       self.configuration.save_params()
+       if self.configuration.OpenTURNS_path == "" : return
+       sys.path[:0]=[self.configuration.OpenTURNS_path]
+
+   def ChangeSaveDir(self):
+       if not os.path.isdir(self.LESaveDir.text()) :
+          res = QMessageBox.warning( None,
+                 self.trUtf8("Repertoire Open TURNS "),
+                 self.trUtf8("Le Repertoire  n existe pas."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+          if res == 1 :
+             if hasattr(self.configuration,"savedir"):
+                self.LESaveDir.setText(self.configuration.savedir)
+       self.configuration.savedir=str(self.LESaveDir.text())
+       self.configuration.save_params()
+
diff --git a/InterfaceQT4/monOptions_OPENTURNS_STUDY.py b/InterfaceQT4/monOptions_OPENTURNS_STUDY.py
new file mode 100644 (file)
index 0000000..95db943
--- /dev/null
@@ -0,0 +1,220 @@
+# -*- coding: utf-8 -*-
+
+import os, re, sys
+
+from PyQt4.QtGui  import *
+from PyQt4.QtCore import *
+
+from OptionsOT import Ui_desOptions
+
+
+class desOptions(Ui_desOptions,QDialog):
+   def __init__(self,parent ,modal ) :
+       QDialog.__init__(self,parent)
+       self.setupUi(self)
+       self.setModal(modal)
+
+class Options(desOptions):
+   def __init__(self,parent = None,modal = 0,configuration=None):
+       desOptions.__init__(self,parent,modal)
+       self.configuration=configuration
+       self.viewMan=parent
+       self.dVersion={}
+       self.dRepCat={}
+       self.connecterSignaux()
+       self.initAll()
+  
+   def connecterSignaux(self) :
+       self.connect(self.CBVersions,SIGNAL("activated(int)"),self.VersionChoisie)
+       self.connect(self.Bdefaut,SIGNAL("clicked()"),self.BdefautChecked)
+       self.connect(self.LEVersionAjout,SIGNAL("returnPressed()"),self.AjoutVersion)
+       self.connect(self.PBajout,SIGNAL("clicked()"),self.AjoutVersion)
+       self.connect(self.LEVersionSup,SIGNAL("returnPressed()"),self.SupVersion)
+       self.connect(self.PBSup,SIGNAL("clicked()"),self.SupVersion)
+       self.connect(self.LERepDoc,SIGNAL("returnPressed()"),self.ChangePathDoc)
+       self.connect(self.LERepOT,SIGNAL("returnPressed()"),self.ChangePathOT)
+       self.connect(self.LERepCata,SIGNAL("returnPressed()"),self.BokClicked)
+       self.connect(self.LESaveDir,SIGNAL("returnPressed()"),self.ChangeSaveDir)
+       self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked)
+       self.connect(self.PBQuit,SIGNAL("clicked()"),self.close)
+
+
+   def initAll(self):
+       self.CBVersions.clear()
+       for item in self.configuration.catalogues :
+           try :
+              (code,version,cata,format,defaut)=item
+           except :
+              (code,version,cata,format)=item
+           self.dVersion[version]=(item)
+           self.dRepCat[version]=str(cata)
+           self.CBVersions.addItem(QString(version))
+       self.LERepCata.setText(self.dRepCat[version])
+
+       if hasattr(self.configuration,"path_doc"):
+          self.LERepDoc.setText(self.configuration.path_doc)
+       if hasattr(self.configuration,"OpenTURNS_path"):
+          self.LERepOT.setText(self.configuration.OpenTURNS_path)
+       if hasattr(self.configuration,"savedir"):
+          self.LESaveDir.setText(self.configuration.savedir)
+
+
+        
+   def VersionChoisie(self):
+       version=str(self.CBVersions.currentText())
+       if self.dRepCat.has_key(version):
+          self.LERepCata.setText(self.dRepCat[version])
+
+   def BokClicked(self):
+       version=str(self.CBVersions.currentText())
+       if self.LERepCata.text() == "" :
+          QMessageBox.critical( self, "Champ non rempli","Le champ Catalogue  doit etre rempli" )
+          return
+       if not os.path.isfile(self.LERepCata.text()) :
+          res = QMessageBox.warning( None,
+                 self.trUtf8("Fichier Catalogue "),
+                 self.trUtf8("Le Fichier  n existe pas. Voulez-vous supprimer cette version ?"),
+                 self.trUtf8("&Oui"),
+                 self.trUtf8("&Non"))
+          if res == 0 :
+             self.LEVersionSup.setText(version)
+             self.SupVersion()
+             return
+
+       self.dRepCat[version]=str(self.LERepCata.text())
+       if version in self.dVersion.keys():
+          item=list(self.dVersion[version])
+          item[2]=self.dRepCat[version]
+          self.dVersion[version]=tuple(item)
+       else :
+          import prefs
+          code=prefs.code
+          self.dVersion[version]=(code,version,self.dRepCat[version],code.lower())
+          
+       lItem=[]
+       for version in self.dVersion.keys() :
+          lItem.append(self.dVersion[version])
+       self.configuration.catalogues=lItem
+       self.configuration.save_params()
+
+   def AjoutVersion(self):
+       version=self.LEVersionAjout.text()
+       if str(version) == "" : return
+       self.CBVersions.addItem(version)
+       self.LERepCata.setText("")
+       self.LEVersionAjout.setText("")
+       self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+
+   def SupVersion(self):
+       version=str(self.LEVersionSup.text())
+       if version == "" : return
+       i =0
+       while i < self.CBVersions.count() :
+           if  self.CBVersions.itemText(i) == version :
+               self.CBVersions.removeItem(i)
+               break
+           i=i+1
+       try :
+          del self.dVersion[version]
+          del self.dRepCat[version]
+       except :
+          self.LEVersionSup.setText("")
+          try :
+             self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+             self.VersionChoisie()
+          except :
+             pass
+          return
+       codeSansPoint=re.sub("\.","",version)
+       chaine="rep_mat_"+codeSansPoint
+       if hasattr(self.configuration,chaine):
+          delattr(self.configuration,chaine)
+       self.LEVersionSup.setText("")
+
+       lItem=[]
+       for version in self.dVersion.keys() :
+           lItem.append(self.dVersion[version])
+       self.LERepCata.setText("")
+       self.configuration.catalogues=lItem
+       self.configuration.save_params()
+       self.CBVersions.setCurrentIndex(0)
+       self.VersionChoisie()
+
+
+   def BdefautChecked(self):
+       res = QMessageBox.warning( None,
+                 self.trUtf8("Restauration des parametres par defaut "),
+                 self.trUtf8("Votre fichier editeur sera ecrase."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+       self.Bdefaut.setCheckState(Qt.Unchecked)
+       if res == 1 : return 
+
+       appli=self.configuration.appli
+       fic_ini_util=self.configuration.fic_ini_utilisateur
+       old_fic_ini_util=fic_ini_util+"_old"
+       commande="mv "+fic_ini_util+" "+old_fic_ini_util
+       os.system(commande)
+       import prefs
+       name='prefs_'+prefs.code
+       prefsCode=__import__(name)
+       repIni=prefsCode.REPINI
+       nameConf='configuration_'+prefs.code
+       configuration=__import__(nameConf)
+
+       configNew=configuration.CONFIG(appli,repIni)
+       self.configuration=configNew
+       appli.CONFIGURATION=configNew
+       self.configuration.save_params()
+       self.dVersion={}
+       self.dRepCat={}
+       self.initAll()
+
+   def ChangePathDoc(self):
+       if self.LERepDoc.text()=="" : return
+       if not os.path.isdir(self.LERepDoc.text()) :
+          res = QMessageBox.warning( None,
+                 self.trUtf8("Repertoire de Documentation "),
+                 self.trUtf8("Le Repertoire  n existe pas."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+          if res == 1 :
+             if hasattr(self.configuration,"path_doc"):
+                self.LERepDoc.setText(self.configuration.path_doc)
+             return
+
+       self.configuration.path_doc=str(self.LERepDoc.text())
+       self.configuration.save_params()
+
+   def ChangePathOT(self):
+       if not os.path.isdir(self.LERepOT.text()) :
+          res = QMessageBox.warning( None,
+                 self.trUtf8("Repertoire Open TURNS "),
+                 self.trUtf8("Le Repertoire  n existe pas."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+          if res == 1 :
+             if hasattr(self.configuration,"OpenTURNS_path"):
+                self.LERepOT.setText(self.configuration.OpenTURNS_path)
+             return
+
+       if hasattr(self.configuration,"OpenTURNS_path"):
+          sys.path.remove(self.configuration.OpenTURNS_path)
+       self.configuration.OpenTURNS_path=str(self.LERepOT.text())
+       self.configuration.save_params()
+       if self.configuration.OpenTURNS_path == "" : return
+       sys.path[:0]=[self.configuration.OpenTURNS_path]
+
+   def ChangeSaveDir(self):
+       if not os.path.isdir(self.LESaveDir.text()) :
+          res = QMessageBox.warning( None,
+                 self.trUtf8("Repertoire Open TURNS "),
+                 self.trUtf8("Le Repertoire  n existe pas."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+          if res == 1 :
+             if hasattr(self.configuration,"savedir"):
+                self.LESaveDir.setText(self.configuration.savedir)
+       self.configuration.savedir=str(self.LESaveDir.text())
+       self.configuration.save_params()
+
diff --git a/InterfaceQT4/monOptions_OPENTURNS_WRAPPER.py b/InterfaceQT4/monOptions_OPENTURNS_WRAPPER.py
new file mode 100644 (file)
index 0000000..95db943
--- /dev/null
@@ -0,0 +1,220 @@
+# -*- coding: utf-8 -*-
+
+import os, re, sys
+
+from PyQt4.QtGui  import *
+from PyQt4.QtCore import *
+
+from OptionsOT import Ui_desOptions
+
+
+class desOptions(Ui_desOptions,QDialog):
+   def __init__(self,parent ,modal ) :
+       QDialog.__init__(self,parent)
+       self.setupUi(self)
+       self.setModal(modal)
+
+class Options(desOptions):
+   def __init__(self,parent = None,modal = 0,configuration=None):
+       desOptions.__init__(self,parent,modal)
+       self.configuration=configuration
+       self.viewMan=parent
+       self.dVersion={}
+       self.dRepCat={}
+       self.connecterSignaux()
+       self.initAll()
+  
+   def connecterSignaux(self) :
+       self.connect(self.CBVersions,SIGNAL("activated(int)"),self.VersionChoisie)
+       self.connect(self.Bdefaut,SIGNAL("clicked()"),self.BdefautChecked)
+       self.connect(self.LEVersionAjout,SIGNAL("returnPressed()"),self.AjoutVersion)
+       self.connect(self.PBajout,SIGNAL("clicked()"),self.AjoutVersion)
+       self.connect(self.LEVersionSup,SIGNAL("returnPressed()"),self.SupVersion)
+       self.connect(self.PBSup,SIGNAL("clicked()"),self.SupVersion)
+       self.connect(self.LERepDoc,SIGNAL("returnPressed()"),self.ChangePathDoc)
+       self.connect(self.LERepOT,SIGNAL("returnPressed()"),self.ChangePathOT)
+       self.connect(self.LERepCata,SIGNAL("returnPressed()"),self.BokClicked)
+       self.connect(self.LESaveDir,SIGNAL("returnPressed()"),self.ChangeSaveDir)
+       self.connect(self.Bok,SIGNAL("clicked()"),self.BokClicked)
+       self.connect(self.PBQuit,SIGNAL("clicked()"),self.close)
+
+
+   def initAll(self):
+       self.CBVersions.clear()
+       for item in self.configuration.catalogues :
+           try :
+              (code,version,cata,format,defaut)=item
+           except :
+              (code,version,cata,format)=item
+           self.dVersion[version]=(item)
+           self.dRepCat[version]=str(cata)
+           self.CBVersions.addItem(QString(version))
+       self.LERepCata.setText(self.dRepCat[version])
+
+       if hasattr(self.configuration,"path_doc"):
+          self.LERepDoc.setText(self.configuration.path_doc)
+       if hasattr(self.configuration,"OpenTURNS_path"):
+          self.LERepOT.setText(self.configuration.OpenTURNS_path)
+       if hasattr(self.configuration,"savedir"):
+          self.LESaveDir.setText(self.configuration.savedir)
+
+
+        
+   def VersionChoisie(self):
+       version=str(self.CBVersions.currentText())
+       if self.dRepCat.has_key(version):
+          self.LERepCata.setText(self.dRepCat[version])
+
+   def BokClicked(self):
+       version=str(self.CBVersions.currentText())
+       if self.LERepCata.text() == "" :
+          QMessageBox.critical( self, "Champ non rempli","Le champ Catalogue  doit etre rempli" )
+          return
+       if not os.path.isfile(self.LERepCata.text()) :
+          res = QMessageBox.warning( None,
+                 self.trUtf8("Fichier Catalogue "),
+                 self.trUtf8("Le Fichier  n existe pas. Voulez-vous supprimer cette version ?"),
+                 self.trUtf8("&Oui"),
+                 self.trUtf8("&Non"))
+          if res == 0 :
+             self.LEVersionSup.setText(version)
+             self.SupVersion()
+             return
+
+       self.dRepCat[version]=str(self.LERepCata.text())
+       if version in self.dVersion.keys():
+          item=list(self.dVersion[version])
+          item[2]=self.dRepCat[version]
+          self.dVersion[version]=tuple(item)
+       else :
+          import prefs
+          code=prefs.code
+          self.dVersion[version]=(code,version,self.dRepCat[version],code.lower())
+          
+       lItem=[]
+       for version in self.dVersion.keys() :
+          lItem.append(self.dVersion[version])
+       self.configuration.catalogues=lItem
+       self.configuration.save_params()
+
+   def AjoutVersion(self):
+       version=self.LEVersionAjout.text()
+       if str(version) == "" : return
+       self.CBVersions.addItem(version)
+       self.LERepCata.setText("")
+       self.LEVersionAjout.setText("")
+       self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+
+   def SupVersion(self):
+       version=str(self.LEVersionSup.text())
+       if version == "" : return
+       i =0
+       while i < self.CBVersions.count() :
+           if  self.CBVersions.itemText(i) == version :
+               self.CBVersions.removeItem(i)
+               break
+           i=i+1
+       try :
+          del self.dVersion[version]
+          del self.dRepCat[version]
+       except :
+          self.LEVersionSup.setText("")
+          try :
+             self.CBVersions.setCurrentIndex(self.CBVersions.count()-1)
+             self.VersionChoisie()
+          except :
+             pass
+          return
+       codeSansPoint=re.sub("\.","",version)
+       chaine="rep_mat_"+codeSansPoint
+       if hasattr(self.configuration,chaine):
+          delattr(self.configuration,chaine)
+       self.LEVersionSup.setText("")
+
+       lItem=[]
+       for version in self.dVersion.keys() :
+           lItem.append(self.dVersion[version])
+       self.LERepCata.setText("")
+       self.configuration.catalogues=lItem
+       self.configuration.save_params()
+       self.CBVersions.setCurrentIndex(0)
+       self.VersionChoisie()
+
+
+   def BdefautChecked(self):
+       res = QMessageBox.warning( None,
+                 self.trUtf8("Restauration des parametres par defaut "),
+                 self.trUtf8("Votre fichier editeur sera ecrase."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+       self.Bdefaut.setCheckState(Qt.Unchecked)
+       if res == 1 : return 
+
+       appli=self.configuration.appli
+       fic_ini_util=self.configuration.fic_ini_utilisateur
+       old_fic_ini_util=fic_ini_util+"_old"
+       commande="mv "+fic_ini_util+" "+old_fic_ini_util
+       os.system(commande)
+       import prefs
+       name='prefs_'+prefs.code
+       prefsCode=__import__(name)
+       repIni=prefsCode.REPINI
+       nameConf='configuration_'+prefs.code
+       configuration=__import__(nameConf)
+
+       configNew=configuration.CONFIG(appli,repIni)
+       self.configuration=configNew
+       appli.CONFIGURATION=configNew
+       self.configuration.save_params()
+       self.dVersion={}
+       self.dRepCat={}
+       self.initAll()
+
+   def ChangePathDoc(self):
+       if self.LERepDoc.text()=="" : return
+       if not os.path.isdir(self.LERepDoc.text()) :
+          res = QMessageBox.warning( None,
+                 self.trUtf8("Repertoire de Documentation "),
+                 self.trUtf8("Le Repertoire  n existe pas."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+          if res == 1 :
+             if hasattr(self.configuration,"path_doc"):
+                self.LERepDoc.setText(self.configuration.path_doc)
+             return
+
+       self.configuration.path_doc=str(self.LERepDoc.text())
+       self.configuration.save_params()
+
+   def ChangePathOT(self):
+       if not os.path.isdir(self.LERepOT.text()) :
+          res = QMessageBox.warning( None,
+                 self.trUtf8("Repertoire Open TURNS "),
+                 self.trUtf8("Le Repertoire  n existe pas."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+          if res == 1 :
+             if hasattr(self.configuration,"OpenTURNS_path"):
+                self.LERepOT.setText(self.configuration.OpenTURNS_path)
+             return
+
+       if hasattr(self.configuration,"OpenTURNS_path"):
+          sys.path.remove(self.configuration.OpenTURNS_path)
+       self.configuration.OpenTURNS_path=str(self.LERepOT.text())
+       self.configuration.save_params()
+       if self.configuration.OpenTURNS_path == "" : return
+       sys.path[:0]=[self.configuration.OpenTURNS_path]
+
+   def ChangeSaveDir(self):
+       if not os.path.isdir(self.LESaveDir.text()) :
+          res = QMessageBox.warning( None,
+                 self.trUtf8("Repertoire Open TURNS "),
+                 self.trUtf8("Le Repertoire  n existe pas."),
+                 self.trUtf8("&Ok"),
+                 self.trUtf8("&Abandonner"))
+          if res == 1 :
+             if hasattr(self.configuration,"savedir"):
+                self.LESaveDir.setText(self.configuration.savedir)
+       self.configuration.savedir=str(self.LESaveDir.text())
+       self.configuration.save_params()
+
index 1a0437129a0f4d4286812a006a59cbc67da9f626..dc8390472ca15021d83e323edc2ac0bab7bea16d 100644 (file)
@@ -59,16 +59,17 @@ class MonParamPanel(DParam,QTPanelTBW2,QTPanel):
         QTPanelTBW2.__init__(self,node,parent)
         self.InitLEs()
         self.connecterSignaux()
+        self.lineEditNom.setFocus()
 
   def connecterSignaux(self) :
         self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked)
         self.connect(self.LEFiltre,SIGNAL("textChanged(const QString&)"),self.LEFiltreTextChanged)
         self.connect(self.LEFiltre,SIGNAL("returnPressed()"),self.LEfiltreReturnPressed)
-        self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPressed)
+        self.connect(self.bOk,SIGNAL("clicked()"),self.BOkParamPressed)
         self.connect(self.RBGroupe,SIGNAL("clicked()"),self.BuildTabCommandChanged)
         self.connect(self.RBalpha,SIGNAL("clicked()"),self.BuildTabCommandChanged)
         self.connect(self.BNext,SIGNAL("pressed()"),self.BNextPressed)
-        self.connect(self.lineEditVal,SIGNAL("returnPressed()"),self.BOkPressed)
+        self.connect(self.lineEditVal,SIGNAL("returnPressed()"),self.BOkParamPressed)
 
   def InitLEs(self):
         nom=self.node.item.get_nom()
@@ -87,13 +88,14 @@ class MonParamPanel(DParam,QTPanelTBW2,QTPanel):
            if commentaire == None :
               commentaire="Entrer un nom de parametre"
            self.Commentaire.setText(QString(commentaire))
-           self.editor.affiche_infos(commentaire)
+           self.editor.affiche_infos(commentaire,Qt.red)
            return
-        if not val :
+        if str(val) == "" :
            return
         self.node.item.set_nom(nom)
         self.node.item.set_valeur(val)
         self.node.update_texte()
+        self.node.update_node_valid()
         self.editor.init_modif()
         self.InitLEs()
 
@@ -102,14 +104,22 @@ class MonParamPanel(DParam,QTPanelTBW2,QTPanel):
         self.Commentaire.setText(QString(""))
         commentaire="Valeur incorrecte"
         qtVal=self.lineEditVal.text()
+        valString=str(self.lineEditVal.text())
+        if (valString.find(' ') > -1) or (valString.find(',') > -1) :
+           commentaire="Valeur incorrecte"
+           self.Commentaire.setText(QString(commentaire))
+           self.editor.affiche_infos(commentaire,Qt.red)
+           return None
         boul=2
         try :
             val,boul=QString.toInt(qtVal)
+            if boul : valString=val
         except :
             pass
         if boul == 0 :
             try :
                 val,boul=QString.toDouble(qtVal)
+                if boul : valString=val
             except :
                 pass
         if boul == 0 :
@@ -119,13 +129,8 @@ class MonParamPanel(DParam,QTPanelTBW2,QTPanel):
             except :
                 pass
         if boul: commentaire="Valeur correcte"
-        valString=str(self.lineEditVal.text())
-        self.Commentaire.setText(QString(commentaire))
-        if (valString.find(' ') > -1) or (valString.find(',') > -1) :
-           commentaire="Valeur incorrecte"
-           self.Commentaire.setText(QString(commentaire))
-           return None
         self.Commentaire.setText(QString(commentaire))
+        self.editor.affiche_infos(commentaire)
         return valString
 
   def LENomPressed(self):
diff --git a/InterfaceQT4/monPixmap.py b/InterfaceQT4/monPixmap.py
new file mode 100644 (file)
index 0000000..d71e899
--- /dev/null
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desPixmap import Ui_LabelPixmap
+from PyQt4  import *
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+from PyQt4.QtCore import *
+
+
+# Import des panels
+
+class MonLabelPixmap(Ui_LabelPixmap,QtGui.QDialog):
+  """
+  classe servant a afficher le PDF d une loi pour Openturns
+  """
+  def __init__(self, QWparent , fichier, name):
+      QtGui.QDialog.__init__(self,QWparent)
+      self.fichier = fichier
+      self.setModal(False)
+      self.setupUi(self)
+      self.setWindowTitle("PDF de la loi '%s'" % name)
+      self.labelPix.setPixmap(QPixmap(fichier));
+      
+
+  def on_buttonCancel_clicked(self):
+      QDialog.reject(self)
+
+  def closeEvent(self,event):
+    import os
+    os.system("rm -f %s" % self.fichier)
index ce5888f70b722022b8b7d5b07ca887842ffea8b8..91aaf46df861936b6727601144f3a1c13c840b5a 100644 (file)
@@ -33,9 +33,9 @@ from politiquesValidation  import PolitiquePlusieurs
 
 class MonPlusieursASSDPanel(MonPlusieursIntoPanel):
   """
-  Classe définissant le panel associé aux mots-clés qui demandent
-  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
-  discrètes
+  Classe définissant le panel associé aux mots-clés qui demandent
+  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+  discrètes
   """
   def __init__(self,node, parent = None,name = None,fl = 0):
         #print "MonPlusieursASSDPanel"
@@ -70,10 +70,10 @@ class MonPlusieursASSDPanel(MonPlusieursIntoPanel):
 
   def BOkPourListePressed(self):
         if self.listeValeursCourantes == [] :
-          self.editor.affiche_infos("Pas de Validation d un groupe vide")
+          self.editor.affiche_infos("Pas de Validation d un groupe vide",Qt.red)
            return
         self.node.item.set_valeur(self.listeValeursCourantes)
-       self.editor.affiche_infos("Valeur Acceptée")
+       self.editor.affiche_infos("Valeur Acceptée")
        pass
 
 
@@ -113,7 +113,7 @@ class MonPlusieursASSDPanel(MonPlusieursIntoPanel):
         validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) 
        self.Commentaire.setText(comm2)
         if not validite :
-               self.editor.affiche_infos(comm)
+               self.editor.affiche_infos(comm,Qt.red)
         else:
            l1=self.listeValeursCourantes[:index]
            l3=self.listeValeursCourantes[index:]
index da889f1aee0b2faa97404742de0589b4f5d2107b..262e6e8ef9cf79825b53d3fcc426ea17ab84b426 100644 (file)
@@ -45,14 +45,20 @@ class DPlusBase (Ui_DPlusBase,QDialog):
           parent.addWidget(parent.partieDroite)
           parent.leLayout.widgetActive=self
        self.setupUi(self)
+       self.appliEficas=parent.appliEficas
+       self.RepIcon=parent.appliEficas.RepIcon
+       icon = QIcon(self.RepIcon+"/arrow_left.png")
+       self.BAjout1Val.setIcon(icon)
+       icon2 = QIcon(self.RepIcon+"/arrow_right.png")
+       self.BSup1Val.setIcon(icon2)
 
 # Import des panels
 
 class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur):
   """
-  Classe définissant le panel associé aux mots-clés qui demandent
-  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
-  discrètes
+  Classe définissant le panel associé aux mots-clés qui demandent
+  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+  discrètes
   """
   def __init__(self,node, parent = None,name = None,fl = 0):
         #print "MonPlusieursBasePanel"
@@ -73,8 +79,12 @@ class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur):
         self.connect(self.BSup1Val,SIGNAL("clicked()"),self.Sup1Valeur)
         self.connect(self.LEValeur,SIGNAL("returnPressed()"),self.LEValeurPressed)
         self.connect(self.BSalome,SIGNAL("clicked()"),self.BSalomePressed)
+        self.connect(self.BView2D,SIGNAL("clicked()"),self.BView2DPressed)
+
 
   def detruitBouton(self):
+        icon3 = QIcon(self.RepIcon+"/image240.png")
+        self.BSalome.setIcon(icon3)
         mc = self.node.item.get_definition()
         type = mc.type[0]
         if not(('grma' in repr(type)) or ('grno' in repr(type))) or not(self.editor.salome) :
@@ -89,10 +99,10 @@ class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur):
   def BOkPourListePressed(self):
         self.editor.init_modif()
         if self.listeValeursCourantes == [] :
-           self.editor.affiche_infos("Aucune Valeur")
+           self.editor.affiche_infos("Aucune Valeur",Qt.red)
            return
         self.node.item.set_valeur(self.listeValeursCourantes)
-       self.editor.affiche_infos("Valeur Acceptée")
+       self.editor.affiche_infos("Valeur Acceptée")
 
 
   def BParametresPressed(self):
@@ -112,10 +122,14 @@ class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur):
         for valeur in self.listeValeursCourantes :
                 if i != index : listeVal.append(valeur)
                 i = i+1
+        self.LBValeurs.setCurrentItem(self.LBValeurs.item(index -1))
         self.listeValeursCourantes=listeVal
           
 
   def Ajout1Valeur(self,valeur=None):
+        if valeur == None :
+           valeur=str(self.LEValeur.text())
+
         liste,validite=SaisieValeur.TraiteLEValeur(self,valeur)
         if validite == 0 : return
         if liste ==[]    : return
@@ -133,41 +147,45 @@ class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur):
         validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) 
        self.Commentaire.setText(comm2)
         if not validite :
-               self.editor.affiche_infos(comm)
+               self.editor.affiche_infos(comm,Qt.red)
         else:
            self.LEValeur.setText(QString(""))
            l1=self.listeValeursCourantes[:index]
            l3=self.listeValeursCourantes[index:]
            for valeur in listeRetour:
-               self.LBValeurs.insertItem(index,QString(str(valeur)))
+               val=self.politique.GetValeurTexte(valeur)
+               self.LBValeurs.insertItem(index,QString(str(val)))
                item=self.LBValeurs.item(index)
                item.setSelected(1)
                self.LBValeurs.setCurrentItem(item)
                index=index+1
            self.listeValeursCourantes=l1+listeRetour+l3
-          self.editor.affiche_infos("Valeurs Ajoutées")
+          self.editor.affiche_infos("Valeurs Ajoutées")
 
   def AjoutNValeur(self,liste) :
       for val in liste :
-        print val
        self.Ajout1Valeur(val)
 
   def BImportPressed(self):
         init=QString( self.editor.CONFIGURATION.savedir)
         fn = QFileDialog.getOpenFileName(self.node.appliEficas, 
-                                         self.node.appliEficas.trUtf8('Fichier de données'), 
+                                         #self.node.appliEficas.trUtf8('Fichier de données'), 
+                                        QApplication.translate('Eficas','Fichier de donnees',None, QApplication.UnicodeUTF8),
                                          init,
                                          self.trUtf8('All Files (*)',))
         if fn == None : return
         if fn == "" : return
+        ulfile = os.path.abspath(unicode(fn))
+        self.editor.CONFIGURATION.savedir=os.path.split(ulfile)[0]
+
         from monSelectVal import MonSelectVal
         MonSelectVal(file=fn,parent=self).show()
 
   def InitCommentaire(self):
         commentaire=""
         mc = self.node.item.get_definition()
-        d_aides = { 'TXM' : 'chaînes de caractères',
-                  'R'   : 'réels',
+        d_aides = { 'TXM' : 'chaînes de caractères',
+                  'R'   : 'réels',
                   'I'   : 'entiers',
                   'C'   : 'complexes'}
         type = mc.type[0]
@@ -182,11 +200,13 @@ class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur):
            else :
                commentaire="Entrez entre "+str(mc.min)+" et  "+str(mc.max) +" " + d_aides[type]
         aideval=self.node.item.aide()
-        commentaire=commentaire + "\n" + aideval
-        self.Commentaire.setText(QString(commentaire))
+        commentaire=commentaire + "\n" + QString.toUtf8(QString(aideval))
+        self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
 
   def BSalomePressed(self):
 
+        self.LEValeur.setText(QString(""))
+        self.Commentaire.setText(QString(""))
         genea=self.node.item.get_genealogie()
         kwType = None
         for e in genea:
@@ -194,10 +214,9 @@ class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur):
             if "GROUP_MA" in e: kwType = "GROUP_MA"
 
         #print "BkwType",kwType
-        #print "editor", self.editor
-        selection, commentaire = self.editor.parent.appliEficas.selectGroupFromSalome(kwType,editor=self.editor)
+        selection, commentaire = self.appliEficas.selectGroupFromSalome(kwType,editor=self.editor)
         if commentaire !="" :
-            self.Commentaire.setText(QString(commentaire))
+            self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
         monTexte=""
         if selection == [] : return
         for geomElt in selection: 
@@ -208,11 +227,12 @@ class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur):
   def BView2DPressed(self):
         valeur=self.LEValeur.text()
         if valeur == QString("") :
-           valeur=self.LBValeurs.currentText()
+           if self.LBValeurs.currentItem() != None :
+              valeur=self.LBValeurs.currentItem().text()
         if valeur == QString("") : return
         valeur = str(valeur)
         if valeur :
-           ok, msgError = self.editor.parent.appliEficas.displayShape(valeur)
+           ok, msgError = self.appliEficas.displayShape(valeur)
            if not ok:
-              self.editor.parent.appli.affiche_infos(msgError)
+              self.editor.affiche_infos(msgError,Qt.red)
 
index c5b53d191450b083c998a922531b02d6b9d92886..b1a7da7bc81877fa523c263823a5649fa5e4650b 100644 (file)
@@ -33,6 +33,7 @@ from politiquesValidation import PolitiquePlusieurs
 class DPlusInto(Ui_DPlusInto,QDialog):
    def __init__(self,parent ,modal ) :
        QDialog.__init__(self,parent)
+       self.RepIcon=parent.appliEficas.RepIcon
        if hasattr(parent,"leLayout"):
           parent.leLayout.removeWidget(parent.leLayout.widgetActive)
           parent.leLayout.widgetActive.close()
@@ -45,22 +46,27 @@ class DPlusInto(Ui_DPlusInto,QDialog):
           parent.addWidget(parent.partieDroite)
           parent.leLayout.widgetActive=self
        self.setupUi(self)
+       icon = QIcon(self.RepIcon+"/arrow_left.png")
+       self.BAjout1Val.setIcon(icon)
+       icon2 = QIcon(self.RepIcon+"/arrow_right.png")
+       self.BSup1Val.setIcon(icon2)
+
 
 class MonPlusieursIntoPanel(DPlusInto,QTPanel,SaisieValeur):
   """
-  Classe définissant le panel associé aux mots-clés qui demandent
-  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
-  discrètes
+  Classe définissant le panel associé aux mots-clés qui demandent
+  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+  discrètes
   """
   def __init__(self,node, parent = None,name = None,fl = 0):
         #print "MonPlusieursIntoPanel"
         QTPanel.__init__(self,node,parent)
         DPlusInto.__init__(self,parent,fl)
         self.politique=PolitiquePlusieurs(node,parent)
+        self.InitCommentaire()
         SaisieValeur.BuildLBValeurs(self)
         self.listeValeursCourantes=self.node.item.GetListeValeurs()
         SaisieValeur.RemplitPanel(self,self.listeValeursCourantes)
-        self.InitCommentaire()
         self.connecterSignaux()
 
   def connecterSignaux(self) :
@@ -73,10 +79,14 @@ class MonPlusieursIntoPanel(DPlusInto,QTPanel,SaisieValeur):
 
   def BOkPourListePressed(self):
         if self.listeValeursCourantes == [] :
-           self.editor.affiche_infos("Pas de validation d un groupe vide")
+           self.editor.affiche_infos("Pas de validation d un groupe vide",Qt.red)
            return
+        if hasattr(self.node.item.definition.validators,'verifie_liste'):
+            if self.node.item.definition.validators.verifie_liste(self.listeValeursCourantes) == 0 :
+               self.editor.affiche_infos("les valeurs ne sont pas correctes",Qt.red)
+               return
         self.node.item.set_valeur(self.listeValeursCourantes)
-       self.editor.affiche_infos("Valeur Acceptée")
+       self.editor.affiche_infos("Valeur Acceptée")
 
 
   def Sup1Valeur(self):
@@ -90,6 +100,7 @@ class MonPlusieursIntoPanel(DPlusInto,QTPanel,SaisieValeur):
         for valeur in self.listeValeursCourantes :
                 if i != indexCourant : listeVal.append(valeur)
                 i = i+1
+        self.LBValeurs.setCurrentItem(self.LBValeurs.item(indexCourant -1))
         self.listeValeursCourantes=listeVal
         SaisieValeur.RemplitPanel(self,self.listeValeursCourantes)
           
@@ -111,7 +122,7 @@ class MonPlusieursIntoPanel(DPlusInto,QTPanel,SaisieValeur):
         validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) 
        self.Commentaire.setText(comm2)
         if not validite :
-               self.editor.affiche_infos(comm)
+               self.editor.affiche_infos(comm,Qt.red)
         else:
            l1=self.listeValeursCourantes[:index]
            l3=self.listeValeursCourantes[index:]
@@ -127,8 +138,8 @@ class MonPlusieursIntoPanel(DPlusInto,QTPanel,SaisieValeur):
   def InitCommentaire(self):
         commentaire=""
         mc = self.node.item.get_definition()
-        d_aides = { 'TXM' : 'chaînes de caractères',
-                  'R'   : 'réels',
+        d_aides = { 'TXM' : 'chaînes de caractères',
+                  'R'   : 'réels',
                   'I'   : 'entiers',
                   'C'   : 'complexes'}
         type = mc.type[0]
@@ -143,6 +154,6 @@ class MonPlusieursIntoPanel(DPlusInto,QTPanel,SaisieValeur):
            else :
                commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max)+" "+d_aides[type]
         aideval=self.node.item.aide()
-        commentaire=commentaire + "\n" + aideval
-        self.Commentaire.setText(QString(commentaire))
+        commentaire=commentaire + "\n" + QString.toUtf8(QString(aideval))
+        self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
 
index 4623b46e7c7cf712c76d9ea16536f039cbcc2d1b..94a72e610c7d243e91e96c6010d8f94b583adfb2 100644 (file)
@@ -75,7 +75,6 @@ class MonPoursuitePanel(MonMacroPanel):
         self.BBrowse.setMinimumSize(QtCore.QSize(140, 50))
         self.BBrowse.setObjectName("BBrowse")
         self.TWChoix.addTab(self.TabPage, "")
-        self.gridlayout.addWidget(self.TWChoix, 0, 0, 1, 3)
 
         self.BFichier.setText(QtGui.QApplication.translate("DPour", "Autre Fichier", None, QtGui.QApplication.UnicodeUTF8))
         self.BBrowse.setText(QtGui.QApplication.translate("DPour", "Edit", None, QtGui.QApplication.UnicodeUTF8))
@@ -100,6 +99,8 @@ class MonPoursuitePanel(MonMacroPanel):
                         self.appliEficas.CONFIGURATION.savedir,
                         self.appliEficas.trUtf8('JDC Files (*.comm);;''All Files (*)'))
       if not(fichier.isNull()):
+        ulfile = os.path.abspath(unicode(fichier))
+        self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
         self.LENomFichier.setText(fichier)
       self.LENomFichReturnPressed()
 
@@ -107,8 +108,8 @@ class MonPoursuitePanel(MonMacroPanel):
         nomFichier=str(self.LENomFichier.text())
         if not os.path.isfile(nomFichier) :
            commentaire = "Fichier introuvable"
-           self.Commentaire.setText(QString(commentaire))
-           self.editor.affiche_infos(commentaire)
+           self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
+           self.editor.affiche_infos(commentaire,Qt.red)
            return
 
         text=self.convert_file(nomFichier)
@@ -120,13 +121,13 @@ class MonPoursuitePanel(MonMacroPanel):
         try :
            self.node.item.object.change_fichier_init(nomFichier,text)
            commentaire = "Fichier modifie  : " + self.node.item.get_nom()
-           self.Commentaire.setText(QString(commentaire))
+           self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
         except: 
            l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1])
            QMessageBox.critical( self, "Erreur fatale au chargement du fichier Include", l[0])
            commentaire = "Fichier invalide" 
-           self.Commentaire.setText(QString(commentaire))
-           self.editor.affiche_infos(commentaire)
+           self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
+           self.editor.affiche_infos(commentaire,Qt.red)
            return
 
 
@@ -146,7 +147,7 @@ class MonPoursuitePanel(MonMacroPanel):
           text=p.convert('execnoparseur')
        else :
             commentaire = "Impossible de lire le fichier : Format inconnu"
-            self.Commentaire.setText(QString(commentaire))
-            self.editor.affiche_infos(commentaire)
+            self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
+            self.editor.affiche_infos(commentaire,Qt.red)
        return text
 
index a614405ec79ce3b434fdd98c37d93870e002b00b..23480ab769a76ccbaaf53a7757c4db51a095f580 100644 (file)
@@ -61,7 +61,8 @@ class MonRacinePanel(DRac,QTPanelTBW2):
         self.connecterSignaux()
         QTPanel.__init__(self,node,parent)
         QTPanelTBW2.__init__(self,node,parent,racine=1)
-        self.a=0
+        self.LEFiltre.setFocus()
+
 
   def connecterSignaux(self):
         self.connect(self.LBNouvCommande,SIGNAL("doubleClicked(QListBoxItem*)"),self.LBNouvCommandeClicked)
@@ -101,5 +102,4 @@ class MonRacinePanel(DRac,QTPanelTBW2):
       if name==QString(" "): return
       if name.find("GROUPE :")==0 : return
       self.editor.init_modif()
-      print self.node.__class__
       new_node = self.node.append_child(name,'first')
index 421682a3f6d32a62d0bcaa6cc292d7bfd6271b96..e856b6558b63f762fdae916e36df611921ee2f36 100644 (file)
@@ -96,8 +96,8 @@ class MonSelectVal(DSelVal):
           if val != '' and val != ' ' and val != self.separateur :
             val=str(val)
             try :
-              val=eval(val,{})
+               val2=eval(val,{})
+               liste.append(val)
             except :
               pass
-            liste.append(val)
         self.FonctPanel.AjoutNValeur(liste) 
index fae8cab924581ef1c8bbaf49c0e472c2f0627fae..2b5c751e612f068f70fec7e18415a60e07395e79 100644 (file)
@@ -89,5 +89,5 @@ class MonUniqueASSDPanel(DUnASSD,QTPanel,SaisieValeur):
             type = type + ' ou '+l
       commentaire="Un objet de type "+type+" est attendu"
       aideval=self.node.item.aide()
-      commentaire=commentaire +"\n"+ aideval
-      self.Commentaire.setText(QString(commentaire))
+      commentaire=commentaire +"\n"+ QString.toUtf8(QString(aideval))
+      self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
index b57e5141816ca1ef891a2daf5051358d8188b4eb..f85909166d10a3cb894e1de3087f29168abf453b 100644 (file)
@@ -34,6 +34,7 @@ class DUnBase(Ui_DUnBase,QDialog):
    def __init__(self,parent ,modal ) :
        QDialog.__init__(self,parent)
        self.appliEficas=parent.appliEficas
+       self.RepIcon=parent.appliEficas.RepIcon
        if hasattr(parent,"leLayout"):
           parent.leLayout.removeWidget(parent.leLayout.widgetActive)
           parent.leLayout.widgetActive.close()
@@ -47,13 +48,14 @@ class DUnBase(Ui_DUnBase,QDialog):
           parent.leLayout.widgetActive=self
        self.setupUi(self)
 
+
 # Import des panels
 
 class MonUniqueBasePanel(DUnBase,QTPanel,SaisieValeur):
   """
-  Classe définissant le panel associé aux mots-clés qui demandent
-  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
-  discrètes
+  Classe définissant le panel associé aux mots-clés qui demandent
+  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+  discrètes
   """
   def __init__(self,node, parent = None,name = None,fl = 0):
         #print "MonUniqueBasePanel"
@@ -65,6 +67,7 @@ class MonUniqueBasePanel(DUnBase,QTPanel,SaisieValeur):
         self.InitCommentaire()
         self.detruitBouton()
         self.connecterSignaux()
+        self.lineEditVal.setFocus()
 
   def connecterSignaux(self) :
         self.connect(self.bOk,SIGNAL("clicked()"),self.BOk2Pressed)
@@ -76,13 +79,22 @@ class MonUniqueBasePanel(DUnBase,QTPanel,SaisieValeur):
 
 
   def detruitBouton(self):
+        icon = QIcon(self.RepIcon+"/image240.png")
+        self.BSalome.setIcon(icon)
         mc = self.node.item.get_definition()
-        if self.node.item.get_nom() != "FileName" :
+        #if ( (self.node.item.get_nom() != "FileName" ) and ( mc.type[0]!="Fichier")) :
+        if ( mc.type[0]!="Fichier") :
            self.BFichier.close()
+        else :
+          self.bParametres.close()
         type = mc.type[0]
-        #if not('grma' in repr(type)) or not(self.editor.salome) :
-        if not(('grma' in repr(type)) or ('grno' in repr(type))) or not(self.editor.salome) :
+        # TODO: Use type properties instead of hard-coded "grno" and "grma" type check
+        enable_salome_selection = self.editor.salome and \
+            (('grma' in repr(type)) or ('grno' in repr(type)) or
+             (hasattr(type, "enable_salome_selection") and type.enable_salome_selection))
+        if not enable_salome_selection:
            self.BSalome.close()
+        if not(('grma' in repr(type)) or ('grno' in repr(type))) or not(self.editor.salome) :
            self.BView2D.close()
 
   def InitLineEditVal(self):
@@ -101,35 +113,53 @@ class MonUniqueBasePanel(DUnBase,QTPanel,SaisieValeur):
 
   def InitCommentaire(self):
       mc = self.node.item.get_definition()
-      d_aides = { 'TXM' : "Une chaîne de caractères est attendue",
-                  'R'   : "Un réel est attendu",
-                  'I'   : "Un entier est attendu"}
-      type = mc.type[0]
-      commentaire=d_aides.get(type,"Type de base inconnu")
+      d_aides = { 'TXM' : "Une chaîne de caractères est attendue",
+                  'R'   : "Un réel est attendu",
+                  'I'   : "Un entier est attendu",
+                  'Matrice' : 'Une Matrice est attendue',
+                  'Fichier' : 'Un fichier est attendu'}
+      mctype = mc.type[0]
+
+      if type(mctype) == types.ClassType:
+         commentaire = getattr(mctype, 'help_message', "Type de base inconnu")
+      else:
+         commentaire = d_aides.get(mctype, "Type de base inconnu")
       aideval=self.node.item.aide()
-      commentaire=commentaire +"\n"+ aideval
-      self.Commentaire.setText(QString(commentaire))
+      commentaire=commentaire +"\n"+ QString.toUtf8(QString(aideval))
+      self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
 
   def BOk2Pressed(self):
         SaisieValeur.BOk2Pressed(self)
-        if self.node.item.parent.nom == "MODEL" : 
-               self.node.item.parent.change_fichier="1"
-                self.node.item.parent.build_include(None,"")
 
   def BFichierPressed(self):
-      fichier = QFileDialog.getOpenFileName(self.appliEficas,
-                        self.appliEficas.trUtf8('Ouvrir Fichier'),
-                        self.appliEficas.CONFIGURATION.savedir,
-                        self.appliEficas.trUtf8('Wrapper Files (*.xml);;''All Files (*)'))
+      type = self.node.item.get_definition().type
+      if len(type) > 1:
+          filters = type[1]
+      else:
+          filters = QString()
+      if len(type) > 2 and type[2] == "Sauvegarde":
+          fichier = QFileDialog.getSaveFileName(self.appliEficas,
+                              self.appliEficas.trUtf8('Sauvegarder Fichier'),
+                              self.appliEficas.CONFIGURATION.savedir,
+                              filters)
+      else:
+          fichier = QFileDialog.getOpenFileName(self.appliEficas,
+                              self.appliEficas.trUtf8('Ouvrir Fichier'),
+                              self.appliEficas.CONFIGURATION.savedir,
+                              filters)
+
       if not(fichier.isNull()):
+         ulfile = os.path.abspath(unicode(fichier))
+         self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
          self.lineEditVal.setText(fichier)
 
-         
+          
   def LEValeurPressed(self):
         SaisieValeur.LEValeurPressed(self)
         if self.node.item.parent.nom == "MODEL" : 
-               self.node.item.parent.change_fichier="1"
-                self.node.item.parent.build_include(None,"")
+           if self.node.item.isvalid():
+                  self.node.item.parent.change_fichier="1"
+                   self.node.item.parent.build_include(None,"")
 
   def BParametresPressed(self):
         QTPanel.BParametresPressed(self)
@@ -138,13 +168,14 @@ class MonUniqueBasePanel(DUnBase,QTPanel,SaisieValeur):
         SaisieValeur.LEValeurPressed(self,valeur)
 
   def BSalomePressed(self):
+        self.Commentaire.setText(QString(""))
         genea=self.node.item.get_genealogie()
         kwType = None
         for e in genea:
             if "GROUP_NO" in e: kwType = "GROUP_NO"
             if "GROUP_MA" in e: kwType = "GROUP_MA"
 
-        selection, commentaire = self.editor.parent.appliEficas.selectGroupFromSalome(kwType,editor=self.editor)
+        selection, commentaire = self.appliEficas.selectGroupFromSalome(kwType,editor=self.editor)
         if commentaire !="" :
             self.Commentaire.setText(QString(commentaire))
         monTexte=""
@@ -152,14 +183,14 @@ class MonUniqueBasePanel(DUnBase,QTPanel,SaisieValeur):
         for geomElt in selection:
             monTexte=geomElt+","
         monTexte= monTexte[0:-1]
-        self.LEValeur.setText(QString(monTexte))
+        self.lineEditVal.setText(QString(monTexte))
 
   def BView2DPressed(self):
-        valeur=self.LEValeur.text()
+        valeur=self.lineEditVal.text()
         if valeur == QString("") : return
         valeur = str(valeur)
         if valeur :
-           ok, msgError = self.editor.parent.appliEficas.displayShape(valeur)
+           ok, msgError = self.appliEficas.displayShape(valeur)
            if not ok:
-              self.editor.parent.appli.affiche_infos(msgError)
+              self.appliEficas.affiche_infos(msgError,Qt.red)
 
index 481ba3da026534f200a009aee6402b5d4458dd16..38cb509f2ce9dfbee379d2dc55d21720dcbefd15 100644 (file)
@@ -80,9 +80,9 @@ class MonUniqueCompPanel(DUnComp,QTPanel,PolitiqueUnique):
            self.LEReel.setText(str(x1))
            self.LEImag.setText(str(x2))
            if typ_cplx == "RI" :
-              self.RBRI.setDown(1)
+              self.RBRI.setChecked(1)
            else :
-              self.RBMP.setDown(1)
+              self.RBMP.setChecked(1)
       
 
   def LEcompRPressed(self) :
@@ -95,13 +95,14 @@ class MonUniqueCompPanel(DUnComp,QTPanel,PolitiqueUnique):
           v=eval(valeur,d)
         except :
           commentaire="expression invalide"
-          self.editor.affiche_infos(commentaire)
+          self.editor.affiche_infos(commentaire,Qt.red)
           return
         try :
           i=v.imag
+          self.editor.affiche_infos(commentaire)
         except :
           commentaire="expression n est pas de la forme a+bj"
-        self.editor.affiche_infos(commentaire)
+          self.editor.affiche_infos(commentaire,Qt.red)
           
   def LEReelRPressed(self):
         self.LEcomp.clear()
@@ -109,9 +110,10 @@ class MonUniqueCompPanel(DUnComp,QTPanel,PolitiqueUnique):
         valeur = str(self.LEReel.text())
         try :
           a=string.atof(valeur)
+          self.editor.affiche_infos(commentaire)
         except :
           commentaire="expression invalide"
-        self.editor.affiche_infos(commentaire)
+          self.editor.affiche_infos(commentaire,Qt.red)
 
   def LEImagRPressed(self):
         self.LEcomp.clear()
@@ -119,9 +121,10 @@ class MonUniqueCompPanel(DUnComp,QTPanel,PolitiqueUnique):
         valeur = str(self.LEImag.text())
         try :
           a=string.atof(valeur)
+          self.editor.affiche_infos(commentaire)
         except :
           commentaire="expression invalide"
-        self.editor.affiche_infos(commentaire)
+          self.editor.affiche_infos(commentaire,Qt.red)
 
   def BOkPressed(self):
         if self.LEcomp.text()== "" : 
@@ -129,7 +132,7 @@ class MonUniqueCompPanel(DUnComp,QTPanel,PolitiqueUnique):
         else :
            if self.LEReel.text() != "" or self.LEImag.text() != "" :
               commentaire="entrer une seule valeur SVP"
-              self.editor.affiche_infos(commentaire)
+              self.editor.affiche_infos(commentaire,Qt.red)
               return
            valeur=  self.getValeurComp()
         self.politique.RecordValeur(valeur)
@@ -145,7 +148,7 @@ class MonUniqueCompPanel(DUnComp,QTPanel,PolitiqueUnique):
          l.append("RI")
       else :
          commentaire="saisir le type de complexe"
-         self.editor.affiche_infos(commentaire)
+         self.editor.affiche_infos(commentaire,Qt.red)
          return None
       try :
          l.append(string.atof(str(self.LEReel.text())))
@@ -162,20 +165,20 @@ class MonUniqueCompPanel(DUnComp,QTPanel,PolitiqueUnique):
           v=eval(valeur,d)
         except :
           commentaire="expression invalide"
-          self.editor.affiche_infos(commentaire)
+          self.editor.affiche_infos(commentaire,Qt.red)
           return None
         try :
           i=v.imag
         except :
           commentaire="expression n est pas de la forme a+bj"
-          self.editor.affiche_infos(commentaire)
+          self.editor.affiche_infos(commentaire,Qt.red)
           return None
         return v
 
   def InitCommentaire(self):
         commentaire='Un complexe est attendu'
         aideval=self.node.item.aide()
-        commentaire=commentaire +"\n"+ aideval
-        self.Commentaire.setText(QString(commentaire))
+        commentaire=commentaire +"\n"+ QString.toUtf8(QString(aideval))
+        self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
 
 
index 8126f44211f1f71160258f6da6fa250b49b756e6..1c4df1338edc843d0369f0da79bf7e4928cf77f1 100644 (file)
@@ -34,9 +34,9 @@ from politiquesValidation import PolitiqueUnique
 
 class MonUniqueSDCOIntoPanel(DUnSDCOInto,QTPanel,SaisieSDCO):
   """
-  Classe définissant le panel associé aux mots-clés qui demandent
-  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
-  discrètes
+  Classe définissant le panel associé aux mots-clés qui demandent
+  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+  discrètes
   """
   def __init__(self,node, parent = None,name = None,fl = 0):
         #print "MonUniqueSDCOIntoPanel"
@@ -68,9 +68,9 @@ class MonUniqueSDCOIntoPanel(DUnSDCOInto,QTPanel,SaisieSDCO):
         valeur,validite=self.node.item.eval_valeur(nomConcept)
         test = self.node.item.set_valeur(valeur)
         if not test :
-          commentaire = "impossible d'évaluer : %s " %`valeur`
+          commentaire = "impossible d'évaluer : %s " %`valeur`
         elif validite:
-          commentaire = "Valeur du mot-clé enregistrée"
+          commentaire = "Valeur du mot-clé enregistrée"
           if test_CO:
              # il faut egalement propager la destruction de l'ancien concept
              self.node.item.delete_valeur_co(valeur=anc_val)
@@ -79,8 +79,8 @@ class MonUniqueSDCOIntoPanel(DUnSDCOInto,QTPanel,SaisieSDCO):
         else :
           commentaire = self.node.item.get_cr()
           self.reset_old_valeur(anc_val,mess=mess)
-          self.editor.affiche_infos(commentaire)
-        self.Commentaire.setText(commentaire)
+          self.editor.affiche_infos(commentaire,Qt.red)
+        self.Commentaire.setText(QString.FromUtf8(commentaire))
 
   def LESDCOReturnPressed(self) :
         self.LBSDCO.clearSelection()
index ee545c6190eedaee098d3bbe1d271f3115ea1235..b92ec25912d0bbbb129e9a96f6218921fe45e7d1 100644 (file)
@@ -49,9 +49,9 @@ class DUnSDCO(Ui_DUnSDCO,QDialog):
 
 class MonUniqueSDCOPanel(DUnSDCO,QTPanel,SaisieSDCO):
   """
-  Classe définissant le panel associé aux mots-clés qui demandent
-  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
-  discrètes
+  Classe définissant le panel associé aux mots-clés qui demandent
+  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+  discrètes
   """
   def __init__(self,node, parent = None,name = None,fl = 0):
         #print "MonUniquesSDCOPanel"
@@ -77,7 +77,7 @@ class MonUniqueSDCOPanel(DUnSDCO,QTPanel,SaisieSDCO):
 
   def LESDCOReturnPressed(self):
         """
-           Lit le nom donné par l'utilisateur au concept de type CO qui doit être
+           Lit le nom donné par l'utilisateur au concept de type CO qui doit être
            la valeur du MCS courant et stocke cette valeur
         """
         SaisieSDCO.LESDCOReturnPressed(self)
diff --git a/InterfaceQT4/monVisu.py b/InterfaceQT4/monVisu.py
new file mode 100644 (file)
index 0000000..c5fa4fd
--- /dev/null
@@ -0,0 +1,47 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+# Modules Python
+# Modules Eficas
+
+from desVisu import Ui_DVisu
+from PyQt4  import *
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
+# Import des panels
+
+class DVisu(Ui_DVisu ,QtGui.QDialog):
+  """
+  Classe définissant le panel associé aux mots-clés qui demandent
+  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+  discrètes
+  """
+  def __init__(self,parent = None , name = None,fl = 0):
+      QtGui.QDialog.__init__(self,parent)
+      self.setModal(True)
+      self.setupUi(self)
+
+  def on_buttonCancel_clicked(self):
+      QDialog.reject(self)
+
+  def on_buttonOk_clicked(self):
+      QDialog.accept(self)
+
index 062f9a870cce77db7a569f16586a714264561857..3c89ba3c6ac3a999a517d327df226d35b5839013 100644 (file)
@@ -32,7 +32,7 @@ class Validation  :
   def TesteUneValeur(self,valeurentree):
          valeur,validite=self.node.item.eval_valeur(valeurentree)
          if not validite :
-                  commentaire = "impossible d'évaluer : %s " %`valeurentree`
+                  commentaire = "impossible d'évaluer : %s " %`valeurentree`
                   return valeur,validite,commentaire
 
          testtype,commentaire = self.node.item.object.verif_type(valeur)
@@ -47,11 +47,11 @@ class Validation  :
                  commentaire=" "
 
          if not validite :
-                  commentaire = "impossible d'évaluer : %s " %`valeurentree`
+                  commentaire = "impossible d'évaluer : %s " %`valeurentree`
          return valeur, validite, commentaire
 
 # ----------------------------------------------------------------------------------------
-#   Méthodes utilisées pour la manipulation des items en notation scientifique
+#   Méthodes utilisées pour la manipulation des items en notation scientifique
 #   a mettre au point
 # ----------------------------------------------------------------------------------------
   def SetValeurTexte(self,texteValeur) :
@@ -62,10 +62,14 @@ class Validation  :
                         if str(clef) != str(texteValeur) :
                            self.node.item.object.init_modif()
                            clefobj=self.node.item.object.GetNomConcept()
-                           if not self.parent.dict_reels.has_key(clefobj):
-                              self.parent.dict_reels[clefobj] = {}
-                           self.parent.dict_reels[clefobj][clef]=texteValeur
-                           self.parent.dict_reels[clefobj]
+                           if not self.parent.appliEficas.dict_reels.has_key(clefobj):
+                              self.parent.appliEficas.dict_reels[clefobj] = {}
+                           self.parent.appliEficas.dict_reels[clefobj][clef]=texteValeur
+                           self.parent.appliEficas.dict_reels[clefobj]
+                           if clefobj=="" : 
+                              if not self.parent.appliEficas.dict_reels.has_key(self.node.item.object.etape) :
+                                 self.parent.appliEficas.dict_reels[self.node.item.object.etape] = {}
+                              self.parent.appliEficas.dict_reels[self.node.item.object.etape][clef]=texteValeur
                            self.node.item.object.fin_modif()
          except:
             pass
@@ -74,11 +78,39 @@ class Validation  :
          valeurTexte=valeur
          if "R" in self.node.item.object.definition.type:
                   clefobj=self.node.item.object.GetNomConcept()
-                  if self.parent.dict_reels.has_key(clefobj):
-                     if self.parent.dict_reels[clefobj].has_key(valeur):
-                        valeurTexte=self.parent.dict_reels[clefobj][valeur]
+                  if self.parent.appliEficas.dict_reels.has_key(clefobj):
+                     if self.parent.appliEficas.dict_reels[clefobj].has_key(valeur):
+                        valeurTexte=self.parent.appliEficas.dict_reels[clefobj][valeur]
          return valeurTexte
 
+  def AjoutDsDictReel(self,texteValeur):
+         # le try except est nécessaire pour saisir les paramétres
+         try :
+            if "R" in self.node.item.object.definition.type:
+                if str(texteValeur)[0] != "'":
+                   clef=eval(texteValeur)
+                   if str(clef) != str(texteValeur) :
+                      clefobj=self.node.item.object.GetNomConcept()
+                      if not self.parent.appliEficas.dict_reels.has_key(clefobj):
+                          self.parent.appliEficas.dict_reels[clefobj] = {}
+                      self.parent.appliEficas.dict_reels[clefobj][clef]=texteValeur
+                      if clefobj=="" : 
+                         if not self.parent.appliEficas.dict_reels.has_key(self.node.item.object.etape) :
+                            self.parent.appliEficas.dict_reels[self.node.item.object.etape] = {}
+                         self.parent.appliEficas.dict_reels[self.node.item.object.etape][clef]=texteValeur
+                          
+         except:
+          pass
+
+  def AjoutDsDictReelEtape(self):
+      try:
+         if self.parent.appliEficas.dict_reels.has_key(self.node.item.object) :
+            self.parent.appliEficas.dict_reels[self.node.item.sdnom]=self.parent.appliEficas.dict_reels[self.node.item.object]
+            del self.parent.appliEficas.dict_reels[self.node.item.object]
+      except :
+         pass
+
+
 #------------------------------------
 class PolitiqueUnique(Validation) :
 #------------------------------------
@@ -95,18 +127,18 @@ class PolitiqueUnique(Validation) :
          if validite :
             validite=self.node.item.set_valeur(valeur)
             if self.node.item.isvalid():
-                  commentaire = "Valeur du mot-clé enregistrée"
+                  commentaire = "Valeur du mot-clé enregistrée"
                   self.SetValeurTexte(str(valeurentree))
             else:
                   cr = self.node.item.get_cr()
-                  commentaire =  "Valeur du mot-clé non autorisée "+cr.get_mess_fatal()
+                  commentaire =  "Valeur du mot-clé non autorisée "+cr.get_mess_fatal()
                   self.node.item.set_valeur(ancienne_val)
          return validite, commentaire 
 
  
-#------------------------
-class PolitiquePlusieurs:
-#------------------------
+#--------------------------------------
+class PolitiquePlusieurs(Validation):
+#--------------------------------------
   """
   classe servant pour les entrees ne demandant qu un mot clef
   """
@@ -117,17 +149,19 @@ class PolitiquePlusieurs:
 
   def AjoutValeurs(self,listevaleur,index,listecourante):
          listeRetour=[]
-         commentaire="Nouvelle valeur acceptée"
+         commentaire="Nouvelle valeur acceptée"
          commentaire2=""
          valide=1
+         if listevaleur==None: return
+         if listevaleur=="": return
          if not( type(listevaleur)  in (types.ListType,types.TupleType)) :
             listevaleur=tuple(listevaleur)
          for valeur in listevaleur :
              # On teste le type de la valeur
+             valeurScientifique=valeur
              valide=self.node.item.valide_item(valeur)
+             print valeur
              if not valide :
-                #print self.__class__
-                #if not testtype :
                 try :
                    valeur,valide=self.node.item.eval_valeur(valeur)
                    valide,commentaire = self.node.item.object.verif_type(valeur)
@@ -135,7 +169,7 @@ class PolitiquePlusieurs:
                    #return testtype,commentaire,"",listeRetour
                    pass
              if not valide:
-                commentaire="Valeur "+str(valeur)+ " incorrecte : ajout à la liste refusé"
+                commentaire="Valeur "+str(valeur)+ " incorrecte : ajout à la liste refusé"
                 commentaire2=self.node.item.info_erreur_item()
                 return valide,commentaire,commentaire2,listeRetour
 
@@ -146,11 +180,13 @@ class PolitiquePlusieurs:
                 # On traite le cas ou la liste n est pas valide pour un pb de cardinalite
                 min,max = self.node.item.GetMinMax()
                 if len(listecourante) + 1 >= max :
-                   commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
+                   commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
                    return valide,commentaire,commentaire2,listeRetour
                 if len(listecourante) + 1 > min :
+                   commentaire=""
                    return valide,commentaire,commentaire2,listeRetour
              # On ajoute la valeur testee a la liste courante et a la liste acceptee
+             self.AjoutDsDictReel(valeurScientifique)
              listecourante.insert(index,valeur)
              index=index+1
              listeRetour.append(valeur)
@@ -159,7 +195,7 @@ class PolitiquePlusieurs:
 
   def AjoutTuple(self,valeurTuple,index,listecourante):
          listeRetour=[]
-         commentaire="Nouvelle valeur acceptée"
+         commentaire="Nouvelle valeur acceptée"
          commentaire2=""
          valide=1
          if valeurTuple==None: return
@@ -173,7 +209,7 @@ class PolitiquePlusieurs:
             except :
                 pass
          if not valide:
-            commentaire="Valeur "+str(valeurTuple)+ " incorrecte : ajout à la liste refusé"
+            commentaire="Valeur "+str(valeurTuple)+ " incorrecte : ajout à la liste refusé"
             commentaire2=self.node.item.info_erreur_item()
             return valide,commentaire,commentaire2,listeRetour
 
@@ -184,7 +220,7 @@ class PolitiquePlusieurs:
             # On traite le cas ou la liste n est pas valide pour un pb de cardinalite
             min,max = self.node.item.GetMinMax()
             if len(listecourante) + 1 >= max :
-               commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
+               commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
                return valide,commentaire,commentaire2,listeRetour
          listeRetour.append(valeurTuple)
          return valide,commentaire,commentaire2,listeRetour
index 5e50d0e40778f1aed5d941866db6d7463a6e1db5..f1c41839a56b4cc7b7e52a625e831639d80e8708 100644 (file)
@@ -46,7 +46,6 @@ class QTPanel:
   def BOkPressed(self):
         """ Impossible d utiliser les vrais labels avec designer ?? """
         label=self.TWChoix.tabText(self.TWChoix.currentIndex())
-        print label
         if label==QString("Nouvelle Commande"):
            self.DefCmd()
         if label==QString("Nommer Concept"):
@@ -115,6 +114,8 @@ class QTPanelTBW1(QTPanel):
         liste_mc=self.node.item.get_liste_mc_ordonnee(genea,jdc.cata_ordonne_dico)
         for aMc in liste_mc:
            self.LBMCPermis.addItem( aMc)
+        if len(liste_mc) !=0:
+           self.LBMCPermis.setCurrentItem(self.LBMCPermis.item(0))
 
 
   def DefMC(self,item):
@@ -136,18 +137,33 @@ class QTPanelTBW2(QTPanel):
         self.editor    = parent
         self.node      = node
         self.BuildLBNouvCommande()
+        self.LEFiltre.setFocus()
         self.NbRecherches = 0
         if racine == 1 :
            self.AppelleBuildLBRegles()
+           self.LEFiltre.setFocus()
         else :
            self.connect(self.TWChoix, SIGNAL("currentChanged(QWidget *)"), self.handleCurrentChanged)
+            
 
 
   def handleCurrentChanged(self):
         try :
-           self.LEFiltre.setFocus()
+          label=self.TWChoix.tabText(self.TWChoix.currentIndex())
+          if label==QString("Nouvelle Commande"):
+            self.LEFiltre.setFocus()
+          if label==QString("Nommer Concept"):
+           self.LENomConcept.setFocus()
+          if label==QString("Définition Formule"):
+           self.LENomFormule.setFocus()
+          if label==QString("Valeur Parametre"):
+           self.lineEditNom.setFocus()
+          if label==QString("Fichier Include"):
+           self.LENomFichier.setFocus()
+          if label==QString("Ajouter Mot-Clef"):
+           self.LBMCPermis.setCurrentItem(self.LBMCPermis.item(0))
         except :
-           pass
+          pass
 
       
   def BuildLBNouvCommande(self):
@@ -190,6 +206,7 @@ class QTPanelTBW2(QTPanel):
         else :
            self.editor.mode_nouv_commande="groupe"
         self.BuildLBNouvCommande()
+        self.LEFiltre.setFocus()
 
   def DefCmd(self):
         if self.LBNouvCommande.currentItem()== 0 : return
@@ -200,8 +217,6 @@ class QTPanelTBW2(QTPanel):
         if name.find("GROUPE :")==0 :
           return
         self.editor.init_modif()
-        print self.node
-        print name
         new_node = self.node.append_brother(name,'after')
 
 
@@ -252,7 +267,36 @@ class QTPanelTBW3(QTPanel):
         self.typeConcept.setText(type_sd)
         self.LENomConcept.setText("")
         self.LENomConcept.setText(nomConcept)
+        self.LENomConcept.setFocus()
+        if self.node.item.is_reentrant():
+           self.makeConceptPage_reentrant()
+        else :
+           self.listBoxASSD.close()
+
+  def makeConceptPage_reentrant(self):
+        self.bOk.close()
+        self.LENomConcept.close()
+        self.Label2.close()
+        self.Label3.close()
+        self.typeConcept.close()
+        self.LENomConcept.close()
+        self.Label1.setText(QtGui.QApplication.translate("DUnASSD", "<font size=\"+1\"><p align=\"center\">Structures de données à enrichir\n"
+" par l\'operateur courant :</p></font>", None, QtGui.QApplication.CodecForTr))
+        listeNomsSD = self.node.item.get_noms_sd_oper_reentrant()
+        for aSD in listeNomsSD:
+            self.listBoxASSD.addItem( aSD)
+        QObject.connect(self.listBoxASSD, SIGNAL("itemDoubleClicked(QListWidgetItem*)" ), self.ClicASSD )
+
         
+  def ClicASSD(self):
+        if self.listBoxASSD.currentItem()== None : return
+        val=self.listBoxASSD.currentItem().text()
+        nom=str(val)
+        nom = string.strip(nom)
+        test,mess = self.node.item.nomme_sd(nom)
+        if (test== 0):
+           self.editor.affiche_infos(mess,Qt.red)
+
   def LENomConceptReturnPressed(self):
         """
         Nomme le concept SD retourne par l'etape
@@ -262,6 +306,10 @@ class QTPanelTBW3(QTPanel):
         if nom == '' : return                  # si pas de nom, on ressort sans rien faire
         self.editor.init_modif()
         test,mess = self.node.item.nomme_sd(nom)
+        #Notation scientifique
+        from politiquesValidation import Validation
+        validation=Validation(self.node,self.editor)
+        validation.AjoutDsDictReelEtape()
         self.editor.affiche_infos(mess)
 
 # ------------------------------- #
@@ -285,11 +333,12 @@ class ViewText(Ui_dView,QDialog):
         
     def saveFile(self):
         #recuperation du nom du fichier
-        userDir=os.path.expanduser("~/.Eficas_install/")
         fn = QFileDialog.getSaveFileName(None,
                 self.trUtf8("Save File"),
-                self.trUtf8(userDir))
+                self.appliEficas.CONFIGURATION.savedir)
         if fn.isNull() : return
+        ulfile = os.path.abspath(unicode(fn))
+        self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
         try:
            f = open(fn, 'wb')
            f.write(str(self.view.toPlainText()))
index 5d27974e7ae0577dbe99cb72689c769f26007a19..e25b0626fda5044af8869325b03038e4cfad82bd 100644 (file)
@@ -15,45 +15,59 @@ class Appli(Ui_Eficas,QMainWindow):
     """
     Class implementing the main user interface.
     """
-    def __init__(self,code="ASTER",salome=0,parent=None):
+    def __init__(self,code="ASTER",salome=0,parent=None,ssCode=None):
         """
         Constructor
         """
+        self.VERSION_EFICAS="Eficas QT4 V2.0"
+
         self.ihm="QT"
         self.code=code
+        self.ssCode=ssCode
         self.salome=salome
-        self.format_fichier="python"   #par defaut
        self.top = self #(pour CONFIGURATION)
         self.QWParent=None #(Pour lancement sans IHM)
+        self.indice=0
+        self.dict_reels={}
 
         import prefs
-        if salome :
-           import sys
         prefs.code=code
         name='prefs_'+prefs.code
         prefsCode=__import__(name)
-        nameConf='configuration_'+prefs.code
-        configuration=__import__(nameConf)
-
         self.REPINI=prefsCode.REPINI
         self.RepIcon=prefsCode.INSTALLDIR+"/Editeur/icons"
+        self.INSTALLDIR=prefsCode.INSTALLDIR
+        if ssCode != None :
+           self.format_fichier= ssCode #par defaut
+           prefsCode.NAME_SCHEME=ssCode
+        else :
+           self.format_fichier="python"        #par defaut
+
+        if salome :
+           import sys
+        nameConf='configuration_'+prefs.code
+        configuration=__import__(nameConf)
         self.CONFIGURATION = configuration.make_config(self,prefsCode.REPINI)
-        self.CONFIGStyle = configuration.make_config_style(self,prefsCode.REPINI)
+        self.CONFIGStyle = None
+        if hasattr(configuration,'make_config_style'):
+           self.CONFIGStyle = configuration.make_config_style(self,prefsCode.REPINI)
         if hasattr(prefsCode,'encoding'):
            import sys
            reload(sys)
            sys.setdefaultencoding(prefsCode.encoding)
 
-        QMainWindow.__init__(self)
+        QMainWindow.__init__(self,parent)
         Ui_Eficas.__init__(self)
         self.setupUi(self)
         self.ajoutIcones()
+        if code in Appli.__dict__.keys():
+          listeTexte=apply(Appli.__dict__[code],(self,))
+
         self.viewmanager = MyTabview(self) 
         self.recentMenu=self.menuFichier.addMenu(self.trUtf8('&Recents'))
         self.connecterSignaux() 
 
 
-        #self.monAssistant=QAssistantClient(QString(""), self.viewmanager)
         #if self.salome :
         #   from Editeur import session
         #   self.ouvreFichiers()
@@ -65,11 +79,56 @@ class Appli(Ui_Eficas,QMainWindow):
         self.initRecents()
 
         self.ouvreFichiers()
+        self.setWindowTitle(self.VERSION_EFICAS)
         
-    def OPENTURNS(self) :
-        self.MenuBar.removeItem(5)
-        self.MenuBar.removeItem(6)
-        self.MenuBar.removeItem(7)
+    def ASTER(self) :
+        self.menuTraduction = self.menubar.addMenu("menuTraduction")
+        self.actionTraduitV7V8 = QAction(self)
+        self.actionTraduitV7V8.setObjectName("actionTraduitV7V8")
+        self.actionTraduitV8V9 = QAction(self)
+        self.actionTraduitV8V9.setObjectName("actionTraduitV8V9")
+        self.menuTraduction.addAction(self.actionTraduitV7V8)
+        self.menuTraduction.addAction(self.actionTraduitV8V9)
+        self.menuTraduction.setTitle(QApplication.translate("Eficas", "Traduction", None, QApplication.UnicodeUTF8))
+        self.actionTraduitV7V8.setText(QApplication.translate("Eficas","TraduitV7V8", None, QApplication.UnicodeUTF8))
+        self.actionTraduitV8V9.setText(QApplication.translate("Eficas","TraduitV8V9", None, QApplication.UnicodeUTF8))
+        self.connect(self.actionTraduitV7V8,SIGNAL("activated()"),self.traductionV7V8)
+        self.connect(self.actionTraduitV8V9,SIGNAL("activated()"),self.traductionV8V9)
+
+
+    def Map(self): 
+        self.MAP()
+
+    def MAP(self): 
+        self.actionExecution = QAction(self)
+        icon6 = QIcon(self.RepIcon+"/compute.png")
+        self.actionExecution.setIcon(icon6)
+        self.actionExecution.setObjectName("actionExecution")
+        self.menuJdC.addAction(self.actionExecution)
+        self.toolBar.addAction(self.actionExecution)
+        self.actionExecution.setText(QApplication.translate("Eficas", "Execution", None, QApplication.UnicodeUTF8))
+        self.connect(self.actionExecution,SIGNAL("activated()"),self.run)
+
+        self.actionEnregistrer_Python = QAction(self)
+        self.actionEnregistrer_Python.setObjectName("actionEnregistrer_Python")
+        self.menuFichier.addAction(self.actionEnregistrer_Python)
+        self.actionEnregistrer_Python.setText(QApplication.translate("Eficas", "Sauve Python", None,QApplication.UnicodeUTF8))
+        self.connect(self.actionEnregistrer_Python,SIGNAL("activated()"),self.saveRun)
+
+        self.actionEnregistrerYACS = QAction(self)
+        self.actionEnregistrerYACS.setObjectName("actionEnregistrerYACS")
+        self.menuFichier.addAction(self.actionEnregistrerYACS)
+        self.actionEnregistrerYACS.setText(QApplication.translate("Eficas", "Sauve Schema YACS", None,QApplication.UnicodeUTF8))
+        self.connect(self.actionEnregistrerYACS,SIGNAL("activated()"),self.saveYACS)
+
+        self.actionExecutionYACS = QAction(self)
+        icon7 = QIcon(self.RepIcon+"/application.gif")
+        self.actionExecutionYACS.setIcon(icon7)
+        self.actionExecutionYACS.setObjectName("actionExecutionYACS")
+        self.menuJdC.addAction(self.actionExecutionYACS)
+        self.toolBar.addAction(self.actionExecutionYACS)
+        self.actionExecutionYACS.setText(QApplication.translate("Eficas", "Execution YACS", None, QApplication.UnicodeUTF8))
+        self.connect(self.actionExecutionYACS,SIGNAL("activated()"),self.runYACS)
 
     def ajoutIcones(self) :
         # Pour pallier les soucis de repertoire d icone
@@ -99,9 +158,13 @@ class Appli(Ui_Eficas,QMainWindow):
         self.connect(self.actionFermer_tout,SIGNAL("activated()"),self.fileCloseAll)
         self.connect(self.actionQuitter,SIGNAL("activated()"),self.fileExit)
 
+        self.connect(self.actionEficas,SIGNAL("activated()"),self.aidePPal)
+        self.connect(self.actionVersion,SIGNAL("activated()"),self.version)
+
         self.connect(self.actionCouper,SIGNAL("activated()"),self.editCut)
         self.connect(self.actionCopier,SIGNAL("activated()"),self.editCopy)
         self.connect(self.actionColler,SIGNAL("activated()"),self.editPaste)
+        self.connect(self.actionSupprimer,SIGNAL("activated()"),self.supprimer)
 
         self.connect(self.actionRapport_de_Validation,SIGNAL("activated()"),self.jdcRapport)
         self.connect(self.actionFichier_Source,SIGNAL("activated()"),self.jdcFichierSource)
@@ -110,13 +173,8 @@ class Appli(Ui_Eficas,QMainWindow):
         self.connect(self.actionParametres_Eficas,SIGNAL("activated()"),self.optionEditeur)
         self.connect(self.actionLecteur_Pdf,SIGNAL("activated()"),self.optionPdf)
 
-        self.connect(self.actionTraduitV7V8,SIGNAL("activated()"),self.traductionV7V8)
-        self.connect(self.actionTraduitV8V9,SIGNAL("activated()"),self.traductionV8V9)
-
         #self.connect(self.helpIndexAction,SIGNAL("activated()"),self.helpIndex)
         #self.connect(self.helpContentsAction,SIGNAL("activated()"),self.helpContents)
-        #self.connect(self.helpAboutAction,SIGNAL("activated()"),self.helpAbout)
-        #self.connect(self.aidenew_itemAction,SIGNAL("activated()"),self.helpAbout)
                              
 
     def ouvreFichiers(self) :
@@ -139,7 +197,7 @@ class Appli(Ui_Eficas,QMainWindow):
 
         
     def initPatrons(self) :
-    # Mise à jour du menu des fichiers recemment ouverts
+    # Mise à jour du menu des fichiers recemment ouverts
         from Editeur import listePatrons
         self.listePatrons = listePatrons.listePatrons(self.code)
         idx = 0
@@ -203,29 +261,40 @@ class Appli(Ui_Eficas,QMainWindow):
 
     def traductionV7V8(self):
         from gereTraduction import traduction
-        traduction(self.CONFIGURATION.rep_user,self.viewmanager,"V7V8")
+        traduction(self.CONFIGURATION.rep_ini,self.viewmanager,"V7V8")
 
     def traductionV8V9(self):
         from gereTraduction import traduction
-        traduction(self.CONFIGURATION.rep_user,self.viewmanager,"V8V9")
+        traduction(self.CONFIGURATION.rep_ini,self.viewmanager,"V8V9")
 
     def version(self) :
-        from desVisu import DVisu
+        from monVisu import DVisu
         titre = "version "
-        monVisu=DVisu(parent=self.viewmanager)
-        monVisu.setCaption(titre)
-        monVisu.TB.setText("Eficas V1.13")
-        monVisu.adjustSize()
-        monVisu.show()
+        monVisuDialg=DVisu(parent=self,fl=0)
+        monVisuDialg.setWindowTitle(titre)
+        monVisuDialg.TB.setText(self.VERSION_EFICAS +QString(" pour ") + self.code)
+        monVisuDialg.adjustSize()
+        monVisuDialg.show()
 
     def aidePPal(self) :
-        maD=INSTALLDIR+"/AIDE/fichiers"
-        docsPath = QDir(maD).absPath()
-        self.monAssistant.showPage( QString("%1/index.html").arg(docsPath) )
+        maD=self.INSTALLDIR+"/Aide"
+        docsPath = QDir(maD).absolutePath()
+        monAssistant=QAssistantClient(QString(""), self)
+        arguments=QStringList()
+        arguments << "-profile" <<docsPath+QDir.separator()+QString("eficas_")+QString(self.code)+QString(".adp");
+        monAssistant.setArguments(arguments);
+        monAssistant.showPage(docsPath+QDir.separator()+QString("fichiers_"+QString(self.code)+QString("/index.html")))
 
     def optionEditeur(self) :
-        from monOptionsEditeur import Options
-        monOption=Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
+        name='monOptions_'+self.code
+        try :
+        #if 1 :
+           optionCode=__import__(name)
+        except :
+        #else :
+           QMessageBox.critical( self, "Parametrage", "Pas de possibilite de personnalisation de la configuration ")
+           return
+        monOption=optionCode.Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
         monOption.show()
         
     def optionPdf(self) :
@@ -258,6 +327,7 @@ class Appli(Ui_Eficas,QMainWindow):
         
     def handleClearRecent(self):
         self.recent = QStringList()
+        self.sauveRecents()
         
     def fileNew(self):        
         self.viewmanager.newEditor()        
@@ -279,11 +349,12 @@ class Appli(Ui_Eficas,QMainWindow):
         
     def fileExit(self):
         # On peut sortir sur Abort
-        self.viewmanager.handleCloseAll()
-        if self.salome :
-           self.close()
-        else :
-           qApp.closeAllWindows()
+        res=self.viewmanager.handleCloseAll()
+        if (res != 2) : 
+           if self.salome :
+              self.close()
+           else :
+              qApp.closeAllWindows()
         
     def editCopy(self):
         self.viewmanager.handleEditCopy()
@@ -294,6 +365,21 @@ class Appli(Ui_Eficas,QMainWindow):
     def editPaste(self):
         self.viewmanager.handleEditPaste()
         
+    def run(self):
+        self.viewmanager.run()
+        
+    def saveRun(self):
+        self.viewmanager.saveRun()
+        
+    def runYACS(self):
+        self.viewmanager.runYACS()
+        
+    def saveYACS(self):
+        self.viewmanager.saveYACS()
+        
+    def supprimer(self):
+        self.viewmanager.handleSupprimer()
+        
     def jdcFichierSource(self):
         self.viewmanager.handleViewJdcFichierSource()
         
@@ -303,13 +389,15 @@ class Appli(Ui_Eficas,QMainWindow):
     def visuJdcPy(self):
         self.viewmanager.handleViewJdcPy()
 
-    def helpAbout(self):
-        import AIDE
-        AIDE.go3(parent=self)
 
     def NewInclude(self):
         self.viewmanager.newIncludeEditor()
 
+    def getName(self):
+        self.indice=self.indice+1
+        texte="tempo"+str(self.indice)
+        return texte
+        
 
 if __name__=='__main__':
 
index be089958ae4db09c730202941cb72d3aa3f0888e..b82e1190c9702fc570a86fe9fd68eeaf4b7a1c82 100644 (file)
@@ -28,7 +28,7 @@ from PyQt4.QtCore import *
 
 class SaisieValeur:
   """
-  Classe contenant les méthodes communes aux  panels
+  Classe contenant les méthodes communes aux  panels
   permettant de choisir des valeurs 
   """
   def __init__(self):
@@ -50,24 +50,46 @@ class SaisieValeur:
   def BuildLBValeurs(self):
         self.LBValeurs.clear()
         listeValeurs=self.node.item.GetListeValeurs()
+        #print self.node.item.definition.validators
         for valeur in listeValeurs:
-            self.LBValeurs.addItem(str(valeur))
+            try :
+               val=self.politique.GetValeurTexte(valeur)
+            except :
+               val=valeur
+            self.LBValeurs.addItem(str(val))
         if listeValeurs != None and listeValeurs != [] :
             self.LBValeurs.setCurrentRow(len(listeValeurs) - 1)
        
 
   def RemplitPanel(self,listeDejaLa=[]):
         self.listBoxVal.clear()
+        # Traitement particulier pour le validator VerifExistence
+        # dont les valeurs possibles peuvent changer : into variable
+        if hasattr(self.node.item.definition.validators,'set_MCSimp'):
+            obj=self.node.item.getObject()
+            self.node.item.definition.validators.set_MCSimp(obj)
+            if self.node.item.isvalid() == 0 : 
+               liste=[]
+               for item in listeDejaLa:
+                   if self.node.item.definition.validators.verif_item(item)==1:
+                      liste.append(item)
+                   self.node.item.set_valeur(liste)
+                   self.BuildLBValeurs()
+                   self.listeValeursCourantes=liste
+                   self.editor.affiche_infos("Attention, valeurs modifiees", Qt.red)
+               listeDejaLa=liste
         lChoix=self.node.item.get_liste_possible(listeDejaLa)
         for valeur in lChoix :
             self.listBoxVal.addItem( str(valeur) ) 
         if len(lChoix) == 1 :
-            self.listBoxVal.setCurrentRow(1)
+            self.listBoxVal.setCurrentRow(0)
+            self.listBoxVal.item(0).setSelected(1)
+            self.bOk.setFocus()
 
   def ClicASSD(self):
          if self.listBoxASSD.currentItem()== None : return
          valeurQstring=self.listBoxASSD.currentItem().text()
-         commentaire = QString("Valeur selectionnée : ") 
+         commentaire = QString("Valeur selectionnée : ") 
          commentaire.append(valeurQstring)
          self.Commentaire.setText(commentaire)
          valeur=str(valeurQstring)
@@ -85,14 +107,14 @@ class SaisieValeur:
 
   def BOkPressed(self):
          if self.listBoxVal.currentItem()==None :
-            commentaire = "Pas de valeur selectionnée" 
+            commentaire = "Pas de valeur selectionnée" 
             self.Commentaire.setText(QString(commentaire))
          else :
             self.ClicValeur()       
 
   def BOk2Pressed(self):
          if str(self.lineEditVal.text())== "" :
-            commentaire = "Pas de valeur entrée " 
+            commentaire = "Pas de valeur entrée " 
             self.Commentaire.setText(QString(commentaire))
          else :
             self.LEValeurPressed()       
@@ -154,7 +176,7 @@ class SaisieValeur:
                        return listeValeurs,0
                        
 
-                 else :     # ce n'est pas un tuple à la mode aster
+                 else :     # ce n'est pas un tuple à la mode aster
                     listeValeurs.append(v)
                     indice = indice + 1
 
@@ -164,7 +186,7 @@ class SaisieValeur:
         elif type(valeur) == types.StringType:
              listeValeurs=valeur.split(',')
         else:
-          listeValeurs.append(valeur)
+          listeValeurs.append(valeurBrute)
 
         return listeValeurs,1
 
@@ -175,7 +197,7 @@ class SaisieSDCO :
 
   def LESDCOReturnPressed(self):
         """
-           Lit le nom donné par l'utilisateur au concept de type CO qui doit être
+           Lit le nom donné par l'utilisateur au concept de type CO qui doit être
            la valeur du MCS courant et stocke cette valeur
         """
         self.editor.init_modif()
@@ -192,10 +214,10 @@ class SaisieSDCO :
 
         test,commentaire=self.node.item.set_valeur_co(nomConcept)
         if test:
-           commentaire="Valeur du mot-clé enregistree"
+           commentaire="Valeur du mot-clé enregistree"
            self.node.update_node_valid()
         else :
            cr = self.node.item.get_cr()
-           commentaire = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
+           commentaire = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
            self.node.item.set_valeur_co(anc_val)
-        self.Commentaire.setText(QString(commentaire))
+        self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
index 7c11bbfefc1ef8849ab6ddb1d06b2118210f72ad..d6119edb8b1aad698c10d85250fb823bfb996751 100644 (file)
@@ -29,9 +29,11 @@ import os,sys,py_compile
 import traceback
 import cPickle
 import re
+import types
 
 # Modules Eficas
 from Noyau.N_CR import CR
+from Editeur.catadesc import CatalogDescription
 from Editeur.utils  import init_rep_cata_dev
 
 import analyse_catalogue
@@ -44,14 +46,15 @@ from PyQt4 import *
 from PyQt4.QtGui import *
 from PyQt4.QtCore import *
 
-VERSION_EFICAS="Eficas V1.16"
 
 class READERCATA:
 
    def __init__(self,QWParent, appliEficas):
       self.QWParent=QWParent
       self.appliEficas=self.QWParent.appliEficas
+      self.VERSION_EFICAS=self.appliEficas.VERSION_EFICAS
       self.code=self.QWParent.code
+      self.ssCode=self.appliEficas.ssCode
       self.appliEficas.format_fichier='python'
       if hasattr(self.appliEficas,'mode_nouv_commande'):
         self.mode_nouv_commande=self.appliEficas.mode_nouv_commande
@@ -65,54 +68,90 @@ class READERCATA:
 
    def OpenCata(self):
       """ 
-          Ouvre le catalogue standard du code courant, cad le catalogue présent
-          dans le répertoire Cata 
+          Ouvre le catalogue standard du code courant, cad le catalogue présent
+          dans le répertoire Cata 
       """
 
       liste_cata_possibles=[]
+      self.Commandes_Ordre_Catalogue=[]
+
+      all_cata_list = []
       for catalogue in self.appliEficas.CONFIGURATION.catalogues:
-          if catalogue[0] == self.code :
-             liste_cata_possibles.append(catalogue)
+          if isinstance(catalogue, CatalogDescription):
+              all_cata_list.append(catalogue)
+          elif isinstance(catalogue, types.TupleType):
+              all_cata_list.append(CatalogDescription.create_from_tuple(catalogue))
+          else:
+              print "Catalog description cannot be interpreted: ", catalogue
+
+      # TODO: Remove this filter. Normally, CONFIGURATION should only define the catalogs for this code anyway.
+      # Non pas pour Map qui a une notion de sscode
+      for catalogue in all_cata_list:
+          if catalogue.code == self.code :
+             if (self.ssCode == None) or (self.ssCode == catalogue.file_format):
+                 liste_cata_possibles.append(catalogue)
 
       if len(liste_cata_possibles)==0:          
           QMessageBox.critical( self.QWParent, "Import du catalogue","Pas de catalogue defini pour le code %s" % self.code)
           self.appliEficas.close()
-          sys.exit(1)
+          if self.appliEficas.salome == 0 :
+             sys.exit(1)
+          return
+
 
       if self.version_code is not None:
           # La version a ete fixee
           for cata in liste_cata_possibles:
-             if self.version_code == cata[1]:
-                self.fic_cata = cata[2]
-                self.appliEficas.format_fichier=cata[3]
-      elif len(liste_cata_possibles)==1:
-          self.fic_cata = liste_cata_possibles[0][2]
-          self.version_code = liste_cata_possibles[0][1]
-          self.appliEficas.format_fichier=liste_cata_possibles[0][3] 
-          lab=QString("Eficas V1.") 
-          lab+=QString(VERSION_EFICAS) 
-          lab+=QString(" pour ")
-          lab+=QString(self.code) 
-          lab+=QString(" avec le catalogue ")
-          lab+=self.version_code
-          try :
-          # souci pour les includes et sans Ihm
-              self.appliEficas.setWindowTitle(lab)
-          except :
-              pass
+             if self.version_code == cata.identifier:
+                self.fic_cata = cata.cata_file_path
+                self.appliEficas.format_fichier = cata.file_format
+                self.appliEficas.format_fichier_in = cata.file_format_in
       else:
-          # plusieurs catalogues sont disponibles : il faut demander a l'utilisateur
-          # lequel il veut utiliser ...
-          self.ask_choix_catalogue()
+          cata_choice_list = []
+          for cata in liste_cata_possibles:
+              if cata.selectable:
+                  if cata.default:
+                      cata_choice_list.insert(0, cata)
+                  else :
+                      cata_choice_list.append(cata)
+          if len(cata_choice_list) == 0:
+              QMessageBox.critical(self.QWParent, "Import du catalogue",
+                                   QString.fromUtf8("Aucun catalogue trouvé"))
+              self.appliEficas.close()
+              if self.appliEficas.salome == 0 :
+                 sys.exit(1)
+          elif len(cata_choice_list) == 1:
+              self.fic_cata = cata_choice_list[0].cata_file_path
+              self.version_code = cata_choice_list[0].identifier
+              self.appliEficas.format_fichier = cata_choice_list[0].file_format
+              self.appliEficas.format_fichier_in = cata_choice_list[0].file_format_in
+              lab=QString("Eficas ") 
+              lab+=QString(self.VERSION_EFICAS) 
+              lab+=QString(" pour ")
+              lab+=QString(self.code) 
+              lab+=QString(" avec le catalogue ")
+              lab+=self.version_code
+              try :
+              # souci pour les includes et sans Ihm
+                  self.appliEficas.setWindowTitle(lab)
+              except :
+                  pass
+          else:
+              # plusieurs catalogues sont disponibles : il faut demander a l'utilisateur
+              # lequel il veut utiliser ...
+              self.ask_choix_catalogue(cata_choice_list)
+              # On est dans Salome et il faut sortir proprement
 
       if self.fic_cata == None :
-          print "Pas de catalogue pour code %s, version %s" %(self.code,self.version_code)
-          sys.exit(0)
+          if self.appliEficas.salome == 0 :
+             print "Pas de catalogue pour code %s, version %s" %(self.code,self.version_code)
+             sys.exit(1)
+          else :
+             self.appliEficas.close()
+             return
 
       self.determineMater()
-
-
-      # détermination de fic_cata_c et fic_cata_p
+      # détermination de fic_cata_c et fic_cata_p
       self.fic_cata_c = self.fic_cata + 'c'
       self.fic_cata_p = os.path.splitext(self.fic_cata)[0]+'_pickled.py'
 
@@ -121,21 +160,20 @@ class READERCATA:
       if not self.cata :          
           QMessageBox.critical( self.QWParent, "Import du catalogue","Impossible d'importer le catalogue %s" %self.fic_cata)
          self.appliEficas.close()
-          sys.exit(1)
+          if self.appliEficas.salome == 0 :
+             sys.exit(1)
       #
-      # analyse du catalogue (ordre des mots-clés)
+      # analyse du catalogue (ordre des mots-clés)
       #
       # Retrouve_Ordre_Cata_Standard fait une analyse textuelle du catalogue
-      # remplacé par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation
-      # des mots clés a la création
+      # remplacé par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation
+      # des mots clés a la création
       self.Retrouve_Ordre_Cata_Standard_autre()
       if self.mode_nouv_commande== "initial" :
          self.Retrouve_Ordre_Cata_Standard()
-      else:
-         self.Commandes_Ordre_Catalogue=[]
 
       #
-      # analyse des données liées a  l'IHM : UIinfo
+      # analyse des données liées a  l'IHM : UIinfo
       #
       uiinfo.traite_UIinfo(self.cata)
 
@@ -144,7 +182,7 @@ class READERCATA:
       #
       self.traite_clefs_documentaires()
       self.cata=(self.cata,)
-      titre=VERSION_EFICAS + " avec le catalogue " + os.path.basename(self.fic_cata)
+      titre=self.VERSION_EFICAS + " avec le catalogue " + os.path.basename(self.fic_cata)
       if self.appliEficas.top:
         self.appliEficas.setWindowTitle(titre)
       self.appliEficas.titre=titre
@@ -152,6 +190,7 @@ class READERCATA:
    def determineMater(self) :
       # Determinination du repertoire materiau
       v_codeSansPoint=self.version_code
+      if v_codeSansPoint == None : return 
       v_codeSansPoint=re.sub("\.","",v_codeSansPoint)
       chaine="rep_mat_"+v_codeSansPoint
       if hasattr(self.appliEficas.CONFIGURATION,chaine):
@@ -167,11 +206,18 @@ class READERCATA:
 
    def import_cata(self,cata):
       """ 
-          Réalise l'import du catalogue dont le chemin d'acces est donné par cata
+          Réalise l'import du catalogue dont le chemin d'acces est donné par cata
       """
       nom_cata = os.path.splitext(os.path.basename(cata))[0]
       rep_cata = os.path.dirname(cata)
       sys.path[:0] = [rep_cata]
+      
+      if sys.modules.has_key(nom_cata):
+        del sys.modules[nom_cata]
+      for k in sys.modules.keys():
+        if k[0:len(nom_cata)+1] == nom_cata+'.':
+          del sys.modules[k]
+
       try :
           o=__import__(nom_cata)
           return o
@@ -181,76 +227,57 @@ class READERCATA:
 
    def Retrouve_Ordre_Cata_Standard_autre(self):
       """ 
-          Construit une structure de données dans le catalogue qui permet
-          a  EFICAS de retrouver l'ordre des mots-clés dans le texte du catalogue.
-          Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui
-          contient le nom des mots clés dans le bon ordre
+          Construit une structure de données dans le catalogue qui permet
+          a  EFICAS de retrouver l'ordre des mots-clés dans le texte du catalogue.
+          Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui
+          contient le nom des mots clés dans le bon ordre
       """ 
       self.cata_ordonne_dico,self.appliEficas.liste_simp_reel=autre_analyse_cata.analyse_catalogue(self.cata)
 
    def Retrouve_Ordre_Cata_Standard(self):
       """ 
-          Retrouve l'ordre des mots-clés dans le catalogue, cad :
+          Retrouve l'ordre des mots-clés dans le catalogue, cad :
           Attention s appuie sur les commentaires
       """
       nom_cata = os.path.splitext(os.path.basename(self.fic_cata))[0]
       rep_cata = os.path.dirname(self.fic_cata)
       self.Commandes_Ordre_Catalogue = analyse_catalogue_initial.analyse_catalogue(self.fic_cata)
 
-   def ask_choix_catalogue(self):
+   def ask_choix_catalogue(self, cata_choice_list):
       """
-      Ouvre une fenetre de sélection du catalogue dans le cas oa¹ plusieurs
-      ont été définis dans Accas/editeur.ini
+      Ouvre une fenetre de sélection du catalogue dans le cas où plusieurs
+      ont été définis dans Accas/editeur.ini
       """      
-      # construction du dictionnaire et de la liste des catalogues
-      self.dico_catalogues = {}
-      defaut = None
-      for catalogue in self.appliEficas.CONFIGURATION.catalogues:
-          if catalogue[0] == self.code :
-              self.dico_catalogues[catalogue[1]] = catalogue
-              if len(catalogue) == 5 :
-                  if catalogue[4]=='defaut' : defaut = catalogue[1]
-      liste_choix = self.dico_catalogues.keys()
-      liste_choix.sort()
-
-      lab=QString(VERSION_EFICAS)
-      lab+=QString(" pour ")
-      lab+=QString(self.code) 
-      lab+=QString(" avec le catalogue ")
-
-      # teste si plusieurs catalogues ou non
-      if len(liste_choix) == 0:          
-          QMessageBox.critical( self.QWParent, "", "Aucun catalogue déclaré pour %s" %self.code)
-         self.appliEficas.close()
-          sys.exit(1)
-          
-      # création d'une boite de dialogue modale
-      widgetChoix=MonChoixCata(liste_choix,self, self.appliEficas, "", True )
+      title = getattr(self.appliEficas.CONFIGURATION, "cata_choice_window_title", None)
+      widgetChoix = MonChoixCata(self.appliEficas, [cata.user_name for cata in cata_choice_list], title)
       ret=widgetChoix.exec_()
       
-      lab=QString(VERSION_EFICAS)
+      lab=QString(self.VERSION_EFICAS)
       lab+=QString(" pour ")
       lab+=QString(self.code) 
       lab+=QString(" avec le catalogue ")
       if ret == QDialog.Accepted:
-          self.version_cata=str(self.version_cata)
-          self.fic_cata = self.dico_catalogues[self.version_cata][2]
+          cata = cata_choice_list[widgetChoix.CBChoixCata.currentIndex()]
+          self.version_cata = cata.identifier
+          self.fic_cata = cata.cata_file_path
           self.version_code = self.version_cata
-          self.appliEficas.format_fichier = self.dico_catalogues[self.version_cata][3]
+          self.appliEficas.format_fichier = cata.file_format
+          self.appliEficas.format_fichier_in = cata.file_format_in
           lab+=self.version_cata
           self.appliEficas.setWindowTitle(lab)
           #qApp.mainWidget().setCaption(lab)
-      else :
-          sys.exit(0)
-
-
+      else:
+          self.appliEficas.close()
+          if self.appliEficas.salome == 0 :
+             sys.exit(0)
 
    def traite_clefs_documentaires(self):
       try:
         self.fic_cata_clef=os.path.splitext(self.fic_cata_c)[0]+'_clefs_docu'
+        #print self.fic_cata_clef
         f=open(self.fic_cata_clef)
       except:
-        #print "Pas de fichier associé contenant des clefs documentaires"
+        #print "Pas de fichier associe contenant des clefs documentaires"
         return
 
       dict_clef_docu={}
diff --git a/InterfaceQT4/ssIhm.py b/InterfaceQT4/ssIhm.py
new file mode 100644 (file)
index 0000000..3ef88eb
--- /dev/null
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+#    permet de lancer  EFICAS en n affichant rien
+
+class QWParentSSIhm:
+   def __init__(self,code,appliEficas,version_code):
+        self.ihm="QT"
+        self.code=code
+        self.version_code=version_code
+        print self.version_code
+        self.appliEficas=appliEficas
+
index a8443feb29e9fea27afd1b5bdf913d17a4899f65..5d1fbe6d75527a3b94fd9175218e9c91a032b796 100644 (file)
@@ -41,10 +41,11 @@ class PopUpMenuNodeMinimal :
     def viewDoc(self):
         self.node=self.tree.currentItem()
         cle_doc = self.node.item.get_docu()
+        print self.node.item.get_docu
         if cle_doc == None :
             QMessageBox.information( self.editor, "Documentation Vide", \
                                     "Aucune documentation Aster n'est associée à ce noeud")
-        return
+            return
         #cle_doc = string.replace(cle_doc,'.','')
         #cle_doc = string.replace(cle_doc,'-','')
         #print dir(self)
@@ -55,7 +56,8 @@ class PopUpMenuNodeMinimal :
              texte="impossible de trouver la commande  " + commande
              QMessageBox.information( self.editor, "Lecteur PDF", texte)
              return
-        nom_fichier = cle_doc+".pdf"
+        nom_fichier = cle_doc
+        import os
         fichier = os.path.abspath(os.path.join(self.editor.CONFIGURATION.path_doc,
                                        nom_fichier))
         try :
@@ -100,6 +102,8 @@ class PopUpMenuNodePartiel (PopUpMenuNodeMinimal):
         self.paramMenu.addAction(self.ParamApres)
         self.paramMenu.addAction(self.ParamAvant)
         self.menu.addAction(self.Documentation)
+        self.menu.removeAction(self.Supprime)
+        self.menu.addAction(self.Supprime)
 
 
 #-----------------------------------------#
@@ -111,6 +115,8 @@ class PopUpMenuNode(PopUpMenuNodePartiel) :
         self.tree.connect(self.Commente,SIGNAL("activated()"),self.Commenter)
         self.Commente.setStatusTip("commente le noeud ")
         self.commentMenu.addAction(self.Commente)
+        self.menu.removeAction(self.Supprime)
+        self.menu.addAction(self.Supprime)
 
     def Commenter(self):
         item= self.tree.currentItem()
index 67e4c75e48e582c905db7e993797bfea4d64a8e2..4ab1b299e0082662257c372068edc0f8e8e29d41 100644 (file)
@@ -48,36 +48,63 @@ class MyTabview:
                         self.appliEficas.trUtf8('JDC Files (*.comm);;''All Files (*)'))
             if fichier.isNull(): return
        fichier = os.path.abspath(unicode(fichier))
+       ulfile = os.path.abspath(unicode(fichier))
+       self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
        self.appliEficas.addToRecentList(fichier)
        maPage=self.getEditor( fichier,units=units)
 
    def handleClose(self,doitSauverRecent = 1):
-       #print "passage dans handleClose"
-       #print self.dict_editors
        if doitSauverRecent : self.appliEficas.sauveRecents()
        index=self.myQtab.currentIndex()
        if index < 0 : return
-       self.checkDirty(self.dict_editors[index])
+       res=self.checkDirty(self.dict_editors[index])
+       if res == 2 : return 2             # l utilisateur a annule
        index=self.myQtab.currentIndex()
-       while index < len(self.dict_editors) -1 :
-             self.dict_editors[index]=self.dict_editors[index+1]
-             index = index + 1
+       idx=index
+       while idx < len(self.dict_editors) -1 :
+             self.dict_editors[idx]=self.dict_editors[idx+1]
+             idx = idx + 1
        del self.dict_editors[len (self.dict_editors) -1]
        try :
            del self.doubles[self.dict_editors[index]]
        except :
            pass
-       print self.dict_editors
        self.myQtab.removeTab(index)
+       return res
        
 
+   def run(self):
+       index=self.myQtab.currentIndex()
+       if index < 0 : return
+       editor=self.dict_editors[index]
+       editor.run()
+
+   def saveRun(self):
+       index=self.myQtab.currentIndex()
+       if index < 0 : return
+       editor=self.dict_editors[index]
+       editor.saveRun()
+
+   def runYACS(self):
+       index=self.myQtab.currentIndex()
+       if index < 0 : return
+       editor=self.dict_editors[index]
+       editor.runYACS()
+
+   def saveYACS(self):
+       index=self.myQtab.currentIndex()
+       if index < 0 : return
+       editor=self.dict_editors[index]
+       editor.saveYACS()
+
    def handleCloseAll(self):
+       res=0
        self.appliEficas.sauveRecents()
-       #print "passage dans CloseAll"
-       print "self.dict_editors", self.dict_editors
        while len(self.dict_editors) > 0 :
              self.myQtab.setCurrentIndex(0)
-             self.handleClose(0)
+             res=self.handleClose(0)
+             if res==2 : return res   # l utilsateur a annule
+       return res
         
    def handleEditCopy(self):
        #print "passage dans handleEditCopy"
@@ -97,9 +124,13 @@ class MyTabview:
        editor=self.dict_editors[index]
        editor.handleEditPaste()
 
+   def handleSupprimer(self):
+       index=self.myQtab.currentIndex()
+       editor=self.dict_editors[index]
+       editor.handleSupprimer()
+
    def newEditor(self,include=0):
-       #print "passage dans newEditor"
-       maPage=self.getEditor()
+       maPage=self.getEditor(include=include)
 
    def newIncludeEditor(self):
        self.newEditor(include=1)
@@ -122,6 +153,9 @@ class MyTabview:
    def saveCurrentEditor(self):
        index=self.myQtab.currentIndex()
        if index < 0 : return
+       print self
+       print index
+       print self.dict_editors
        editor=self.dict_editors[index]
        if editor in self.doubles.keys() :
            QMessageBox.warning(
@@ -232,8 +266,7 @@ class MyTabview:
         @param editor editor window to check
         @return flag indicating successful reset of the dirty flag (boolean)
         """        
-     
-        print "checkDirty"
+        res=1 
         if (editor.modified) and (editor in self.doubles.keys()) :
             res = QMessageBox.warning(
                      None,
@@ -249,11 +282,10 @@ class MyTabview:
                 fn = self.appliEficas.trUtf8('Noname')
             res = QMessageBox.warning(self.appliEficas, 
                 self.appliEficas.trUtf8("Fichier Modifie"),
-                self.appliEficas.trUtf8("Le fichier <b>%1</b> n a pas ete sauvegarde.")
-                    .arg(fn),
+                self.appliEficas.trUtf8("Le fichier <b>%1</b> n a pas ete sauvegarde.") .arg(fn),
                 self.appliEficas.trUtf8("&Sauvegarder"),
                 self.appliEficas.trUtf8("&Quitter "),
-                self.appliEficas.trUtf8("&Annuler"), 0, 2)
+                self.appliEficas.trUtf8("&Annuler") )
             if res == 0:
                 (ok, newName) = editor.saveFile()
                 if ok:
@@ -261,7 +293,4 @@ class MyTabview:
                     index=self.myQtab.currentIndex()
                     self.myQtab.setTabText(index,fileName)
                 return ok
-            elif res == 2:
-                return  0
-        return 1
-        
+        return res
diff --git a/InterfaceTK/CMakeLists.txt b/InterfaceTK/CMakeLists.txt
new file mode 100644 (file)
index 0000000..ebc018e
--- /dev/null
@@ -0,0 +1,48 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python, texte et images du repertoire et des sous-repertoires (sauf CVS)
+install (
+          FILES
+                appli.py basestyle.py browser.py bureau.py catabrowser.py
+                cataediteur.py centerwindow.py change_comm.py compobase.py
+                compobloc.py compocommandecomm.py compocomm.py compoerror.py
+                compofact.py compoformule.py compojdc.py compomacro.py 
+                compomclist.py componiveau.py componuplet.py compooper.py 
+                compoparameval.py compoparam.py compoproc.py composimp.py 
+                definition_cata.py eficas_go.py eficas.py eficas_test.py 
+                faq.py fenetre_mc_inconnus.py fonctionpanel.py fontes.py 
+                images.py __init__.py Interp.py jdcdisplay.py 
+                listeFichiers.py listePatronsTK.py macrodisplay.py menubar.py
+                newsimppanel.py options.py panels.py panelsSalome.py 
+                patches.py plusieursassdpanel.py plusieursbasepanel.py 
+                plusieursintopanel.py plusieurspanel.py readercata.py 
+                shellpanel.py splash.py statusbar.py styles.py
+                toolbar.py tooltip.py treeitemincanvas.py treewidget.py 
+                TroisDPal.py uniqueassdpanel.py uniquebasepanel.py 
+                uniquecomppanel.py uniqueintopanel.py
+                uniquepanel.py uniquesdcopanel.py widgets.py
+          DESTINATION ${CMAKE_INSTALL_PREFIX}/InterfaceTK
+       )
+
+### Local Variables:
+### mode: cmake
+### End:
index 668f00483e006f1473bc0f02fb85a0e041f0d20e..9a220ba5e5d9e4c29aa9a27b9dc3bebd1c0f1137 100644 (file)
@@ -36,6 +36,8 @@ from widgets import showerror
 # Modules Eficas
 import splash
 import prefs
+name='prefs_'+prefs.code
+prefsCode=__import__(name)
 import styles
 from styles import style
 import fontes
@@ -55,7 +57,7 @@ import listePatronsTK
 REPTK=os.path.dirname(os.path.abspath(__file__))
 sys.path[:0]=[REPTK]
 
-VERSION="EFICAS v1.16"
+VERSION="EFICAS v1.17"
 
 class APPLI: 
   def __init__ (self,master,code=prefs.code,fichier=None,test=0,ihm="TK",salome=0) :
@@ -64,6 +66,7 @@ class APPLI:
       self.salome=salome
       self.top=master
       self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS)
+      self.appliEficas=self
 
       #dimensionnement de la fenetre principale
       #aspect ratio de l'ecran
@@ -137,9 +140,9 @@ class APPLI:
       """
       if (self.test == 0):
          splash._splash.configure(text = "Chargement des paramètres utilisateur")
-      import configuration
-      self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
-      self.CONFIGStyle = configuration.make_config_style(self,prefs.REPINI)
+      import configuration_ASTER
+      self.CONFIGURATION = configuration_ASTER.make_config(self,prefsCode.REPINI)
+      self.CONFIGStyle = configuration_ASTER.make_config_style(self,prefsCode.REPINI)
 
   def cree_composants_graphiques(self):
       """
index 2c2d6680727364d17e1f65fc78bd5deacf2b43a1..23e0b10924f90ae505589289ff00cbccc8cf83e9 100644 (file)
@@ -31,6 +31,8 @@ from widgets import showinfo,askyesno,showerror
 # Modules Eficas
 import splash
 import prefs
+name='prefs_'+prefs.code
+prefsCode=__import__(name)
 import convert
 import generator
 import AIDE
@@ -102,11 +104,11 @@ class BUREAU:
                         ('Help24',"view_doc","Documentation de l'objet courant",'jdc')
                        )
    try:
-      menu_defs=prefs.menu_defs['bureau']
+      menu_defs=prefsCode.menu_defs['bureau']
    except:
       pass
    try:
-      button_defs=prefs.button_defs['bureau']
+      button_defs=prefsCode.button_defs['bureau']
    except:
       pass
 
index ab125f95ae855d6ba782ec8929209a9dfe072f75..de2a6511ae19be272d1f8040214d5f85065104c3 100755 (executable)
@@ -30,6 +30,8 @@ import os
 from Editeur import import_code
 from Editeur import session
 import prefs
+name='prefs_'+prefs.code
+prefsCode=__import__(name)
 import convert
 import generator
 import string
@@ -46,8 +48,9 @@ class DUP :
 
        self.top=None
        self.test=2
-       import configuration
-       self.CONFIGURATION=configuration.make_config(self,prefs.REPINI)
+       import configuration_ASTER
+
+       self.CONFIGURATION=configuration_ASTER.make_config(self,prefsCode.REPINI)
 
        self.load_readercata()
        self.cata=self.readercata.cata
index 0d98438132e418df7f4388654f8687aefc61c815..85ce7bc02b7333bafe5600fb7fad7e9f69ae78d9 100644 (file)
@@ -138,7 +138,7 @@ class FACTTreeItem(Objecttreeitem.ObjectTreeItem):
          return 0
 
       if self.object.suppentite(itemobject):
-         message = "Mot-clé " + itemobject.nom + " supprimé"
+         message = "Mot-clef " + itemobject.nom + " supprime"
          self.appli.affiche_infos(message)
          return 1
       else:
index ba3704ca8f95cbdf08a5e4ee5ee69dce388272eb..a05f6de8923424f93af740fed22b7ee8dec7da94 100644 (file)
@@ -207,7 +207,7 @@ class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
 
         if self.object.suppentite(obj):
            if len(self._object) == 1: self.updateDelegate()
-           message = "Mot-clé " + obj.nom + " supprimé"
+           message = "Mot-clef " + obj.nom + " supprime"
            self.appli.affiche_infos(message)
            return 1
         else:
index 0575053da699bf5dc574da8bb2f11d0727e2d392..079cb9803983d24bd7997e0ac2314fe8fbf30bac 100644 (file)
@@ -205,7 +205,7 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
           self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
           return 0
       if self.object.suppentite(itemobject):
-          message = "Mot-clé " + itemobject.nom + " supprimé"
+          message = "Mot-clef " + itemobject.nom + " supprime"
           self.appli.affiche_infos(message)
           return 1
       else :
index 80094ad397dacbb8e1258647a1f668a5649fb876..984df83034b51e792d06ccc0fb397caf4facbb28 100644 (file)
@@ -71,19 +71,15 @@ class PARAMPanel(panels.OngletPanel):
     Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE
     """
     self.frame_valeur = Frame(page)
-    #self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
     self.frame_valeur.pack(expand=1)
     # affichage du titre du panneau
     self.titre = StringVar()
     self.titre.set("PARAMETRE "+self.node.item.get_nom())
-    #Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n')
     Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).grid(row=0,columnspan=2,padx=5,pady=5)
     # création des labels et entries associés aux nom et valeur du paramètre
-    #Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3)
-    Label(self.frame_valeur,text= 'Nom du paramètre : ').grid(row=1,sticky=W,padx=5,pady=5)
+    Label(self.frame_valeur,text= 'Nom du paramètre : ',justify=LEFT).grid(row=1,sticky=W,padx=5,pady=5)
     self.entry_nom = Entry(self.frame_valeur)
-    #Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5)
-    Label(self.frame_valeur,text= 'Valeur du paramètre : ').grid(row=2,sticky=W,padx=5,pady=5)
+    Label(self.frame_valeur,text= 'Valeur du paramètre : ',justify=LEFT).grid(row=2,sticky=W,padx=5,pady=5)
     self.entry_val = Entry(self.frame_valeur)
     # binding sur entry_nom
     self.entry_nom.bind("<Return>",lambda e,s=self : s.entry_val.focus())
@@ -91,20 +87,15 @@ class PARAMPanel(panels.OngletPanel):
     self.entry_nom.bind("<KP_Enter>",lambda e,s=self : s.entry_val.focus())
     self.entry_val.bind("<KP_Enter>",lambda e,s=self : s.change_valeur())
     # affichage des entries
-    #self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3)
     self.entry_nom.grid(row=1,column=1,sticky=W,padx=5,pady=5)
-    #self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5)
     self.entry_val.grid(row=2,column=1,sticky=W,padx=5,pady=5)
     # affichage d'une phrase d'aide
-    aide = """
-    Un retour de chariot dans une zone de saisie vous permet de vérifier si
-    la valeur que vous avez entrée est valide.
-    Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
-    valeurs seront effectivement prises en compte
-    """
-    #Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n')
-    Label(self.frame_valeur,text=aide).grid(row=3,columnspan=2,padx=5,pady=5)
-    self.frame_valeur.columnconfigure(1,weight=1)
+    aide = """Un retour de chariot dans une zone de saisie vous permet
+de vérifier si la valeur que vous avez entrée est valide.
+Ce n'est qu'après avoir appuyé sur le bouton Valider que les
+nouvelles valeurs seront effectivement prises en compte"""
+    Label(self.frame_valeur,text=aide).grid(row=3,columnspan=2,padx=5,pady=5,sticky=W)
+    #self.frame_valeur.columnconfigure(1,weight=1)
     # affichage des nom et valeur du paramètre
     self.display_valeur()
     self.entry_nom.focus()
index d278c166e30a7a6b146cc0d04d7ade2c56f56e33..e9df810b19d274fbff9ab58ab29fc102071862c3 100644 (file)
@@ -27,7 +27,6 @@ import traceback
 
 # Modules Eficas
 from Editeur import Objecttreeitem
-import prefs
 import panels
 import images
 from widgets import ListeChoix
index caf47fb885cf0b3f557af0c033f024a2bda903b4..7a2b841701b664eb902fa94eeade0dfc8ab3de17 100644 (file)
@@ -38,7 +38,10 @@ from widgets import Fenetre
 class EFICAS(appli.APPLI):
 
   try:
-     from prefs import appli_composants
+     import prefs
+     name='prefs_'+prefs.code
+     prefsCode=__import__(name)
+     from prefsCode import appli_composants
   except:
      appli_composants=['readercata','bureau','browser','options']
 
index e6b00c5ce2ad26262e84c35148785bb5986a5694..0a3ef794f6489de1da6b4ed6c7cabd10da1f4707 100644 (file)
@@ -28,11 +28,13 @@ import Tkinter
 
 # Modules Eficas
 import prefs
-if hasattr(prefs,'encoding'):
+name='prefs_'+prefs.code
+prefsCode=__import__(name)
+if hasattr(prefsCode,'encoding'):
    # Hack pour changer le codage par defaut des strings
    import sys
    reload(sys)
-   sys.setdefaultencoding(prefs.encoding)
+   sys.setdefaultencoding(prefsCode.encoding)
    del sys.setdefaultencoding
    # Fin hack
 
index 30764b53e6efd9e8c2052ee5314b4508f53056ca..5893f2f1032d2fa1612cf02a5d9d15a8745e48db 100644 (file)
@@ -29,6 +29,8 @@ from Tkinter import END
 
 # Modules Eficas
 import prefs
+name='prefs_'+prefs.code
+prefsCode=__import__(name)
 import fontes
 
 class FAQ:
@@ -38,7 +40,7 @@ class FAQ:
                                buttons=('Lu',),
                                title="FAQs et limitations d'EFICAS",
                                command = self.lu_FAQ)
-      txt = open(os.path.join(prefs.INSTALLDIR,'Editeur','faqs.txt'),'r').read()
+      txt = open(os.path.join(prefsCode.INSTALLDIR,'Editeur','faqs.txt'),'r').read()
       Texte = Pmw.ScrolledText(self.Dialog.interior(),
                                text_font=fontes.standard)
       Texte.insert(END,txt)
index b17704d503765d63f816916ff50ee6baee1d1282..07fc9ea74ef919ea00817c15c03a73909272f521 100644 (file)
@@ -27,7 +27,6 @@ import traceback
 
 # Modules Eficas
 from Editeur import Objecttreeitem
-import prefs
 import panels
 import images
 from widgets import ListeChoix
index a6f0a74e01a47182266f66d4b2e73c8ed0cba676..a63e422bc80779f8a567d825bd41226189f7a073 100644 (file)
@@ -42,7 +42,9 @@ if __name__ == '__main__':
 
 try:
    import prefs
-   ICONDIR=prefs.ICONDIR
+   name='prefs_'+prefs.code
+   prefsCode=__import__(name)
+   ICONDIR=prefsCode.ICONDIR
 except:
    # Par defaut on utilise le repertoire local icons
    ICONDIR=os.path.join(os.path.abspath(os.path.dirname(__file__)),'/Editeur/icons')
index 119bbdfa86acac10c1115fcfc01c4a3ee2cc01b8..2a64cad9939a9dc636b211720e77ca3f1c27e08f 100644 (file)
@@ -33,7 +33,9 @@ class MENUBAR:
       self.init()
 
    try:
-      from prefs import labels
+      import prefs
+      name='prefs_'+prefs.code
+      from prefsCode import labels
    except:
       labels= ('Fichier','Edition','Jeu de commandes','Catalogue','Options','Aide','Traduction')
 
index d1f724913e0ba4f337cea5d0a4a986a77c751d5f..b6290ad7585a990c272b146e858e094db603a4cc 100644 (file)
@@ -29,6 +29,8 @@ import widgets
 from widgets import ListeChoix, showerror
 from widgets import ListeChoixParGroupes
 import prefs
+name='prefs_'+prefs.code
+prefsCode=__import__(name)
 import options
 
 SEPARATEUR = '-'*30
@@ -217,7 +219,7 @@ class Panel(Frame) :
       texte_infos = ''
       for e in cmd.entites.keys() :
           if e == name :
-              texte_infos=getattr(cmd.entites[e],prefs.lang)
+              texte_infos=getattr(cmd.entites[e],prefsCode.lang)
               break
       if texte_infos == '' : texte_infos="Pas d'infos disponibles"
       self.parent.appli.affiche_infos(texte_infos)
@@ -234,7 +236,7 @@ class Panel(Frame) :
   def selectCmd(self,name):
       """ On retrouve la commande sous le curseur pour affichage du fr """
       if name != 'COMMENTAIRE' and name != SEPARATEUR:
-          texte_infos=getattr(self.parent.jdc.get_cmd(name),prefs.lang)
+          texte_infos=getattr(self.parent.jdc.get_cmd(name),prefsCode.lang)
           self.parent.appli.affiche_infos(texte_infos)
           
   def defCmd(self,name):
@@ -334,27 +336,28 @@ class OngletPanel(Panel) :
       """
       Crée la page de saisie du nom du concept
       """
-      self.label = Label(page,text='Nom du concept :')
-      self.label.place(relx=0.1,rely=0.4)
+      self.label = Label(page,text='Nom du concept :',justify=LEFT)
+      self.label.grid(row=0,sticky=W,padx=5,pady=10)
       self._any = Entry(page,relief='sunken')
-      self._any.place(relx=0.35,rely=0.4,relwidth=0.5)
+      self._any.grid(row=0,column=1,padx=5,pady=10)
       self._any.bind("<Return>",lambda e,s=self:s.execConcept())
       self._any.bind("<KP_Enter>",lambda e,s=self:s.execConcept())
       self._any.insert(0,self.node.item.GetText())
       self.but_ok=Button(page,text = "Valider",command=self.execConcept)
-      self.but_ok.place(relx=0.35,rely=0.8, relwidth=0.35)
       type_sd = self.node.item.get_type_sd_prod()
+      row=1
       if type_sd :
-          txt = "L'opérateur courant retourne un objet de type %s" %type_sd
+          txt = "L'opérateur courant retourne un objet de type:\n%s" %type_sd
           self.label = Label(page, text = txt)
-          self.label.place(relx=0.5,rely=0.55,anchor='n')
+          self.label.grid(row=1,columnspan=2,padx=5,pady=10,sticky=W)
+          row=2
+      self.but_ok.grid(row=row,columnspan=2,padx=5,pady=10)
       self._any.focus()
       # aide associée au panneau
       bulle_aide="""Tapez dans la zone de saisie le nom que vous voulez donner
       au concept retounré par l'opérateur courant et pressez <Return> pour valider"""
       page.bind("<Button-3>", lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
       page.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
-        
 
   def makeMoclesPage(self,page):
       """
@@ -480,33 +483,33 @@ class OngletPanel(Panel) :
       self.frame_comment = Frame(page,bd=1,relief='raised')
       self.frame_param   = Frame(page,bd=1,relief='raised')
       self.frame_boutons = Frame(page,bd=1,relief='raised')
-      self.frame_comment.place(relx=0,rely=0,relwidth=1,relheight=0.40)
-      self.frame_param.place(relx=0,rely=0.40,relwidth=1,relheight=0.40)
-      self.frame_boutons.place(relx=0,rely=0.84,relwidth=1,relheight=0.16)
       # remplissage de la frame commentaire
-      Label(self.frame_comment,text = "Insérer un commentaire :").place(relx=0.1,rely=0.5,anchor='w')
+      Label(self.frame_comment,text = "Insérer un commentaire :",justify=LEFT).grid(row=0,rowspan=2,sticky=W,padx=5, pady=5)
       but_comment_avant = Button(self.frame_comment,
                                  text = "AVANT "+self.node.item.get_nom(),
                                  command = lambda s=self :s.ajout_commentaire(ind = 'before'))
       but_comment_apres = Button(self.frame_comment,
                                  text = "APRES "+self.node.item.get_nom(),
                                  command = self.ajout_commentaire)
-      but_comment_avant.place(relx=0.45,rely=0.3,anchor='w',relwidth=0.45)
-      but_comment_apres.place(relx=0.45,rely=0.7,anchor='w',relwidth=0.45)
+      but_comment_avant.grid(row=0,column=1,padx=5, pady=5)
+      but_comment_apres.grid(row=1,column=1,padx=5, pady=5)
+      self.frame_comment.pack(side='top',fill='both',padx=5, pady=5)
       # remplissage de la frame paramètre
-      Label(self.frame_param,text = "Insérer un paramètre :").place(relx=0.1,rely=0.5,anchor='w')
+      Label(self.frame_param,text = "Insérer un paramètre :",justify=LEFT).grid(row=0,rowspan=2,sticky=W,padx=5, pady=5)
       but_param_avant = Button(self.frame_param,
                                  text = "AVANT "+self.node.item.get_nom(),
                                  command = lambda s=self :s.ajout_parametre(ind = 'before'))
       but_param_apres = Button(self.frame_param,
                                  text = "APRES "+self.node.item.get_nom(),
                                  command = self.ajout_parametre)
-      but_param_avant.place(relx=0.45,rely=0.3,anchor='w',relwidth=0.45)
-      but_param_apres.place(relx=0.45,rely=0.7,anchor='w',relwidth=0.45)
+      but_param_avant.grid(row=0,column=1,padx=5, pady=5)
+      but_param_apres.grid(row=1,column=1,padx=5, pady=5)
+      self.frame_param.pack(side='top',fill='both',padx=5, pady=5)
       # remplissage de la frame boutons
       Button(self.frame_boutons,
              text="Commentariser toute la commande",
-             command = self.comment_commande).place(relx=0.5,rely=0.5,anchor='center')
+             command = self.comment_commande).pack(side='top',padx=5, pady=5)
+      self.frame_boutons.pack(side='top',fill='both',padx=5, pady=5)
     
   def deselectMC(self,name):
       self.parent.appli.affiche_infos('')
index 3e5eb99bb81e1d033bb2de9e5d6cad956b97c16e..6375af36e1121624d0a82ff691e28f37b0eb22b9 100644 (file)
@@ -27,7 +27,6 @@ import traceback
 
 # Modules Eficas
 from Editeur import Objecttreeitem
-import prefs
 import panels
 import images
 from widgets import ListeChoix
index 34af53e9849c01be25b2fe7ea3d7fbf700d4bcf6..79840ce53e1e84cf6a3843dafcfe714411f829ec 100644 (file)
@@ -27,7 +27,6 @@ import traceback
 
 # Modules Eficas
 from Editeur import Objecttreeitem
-import prefs
 import panels
 import images
 from widgets import showinfo
@@ -106,7 +105,7 @@ class PLUSIEURS_BASE_Panel(PLUSIEURS_Panel):
       self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base)
       self.label.place(relx=0.05,rely=0.2)
 
-      # Création d'un bouton "Importer ..." et d'un bouton "Paramatres" sur le panel.
+      # Création d'un bouton "Importer ..." et d'un bouton "Parametres" sur le panel.
       bouton_valeurs_fichier = Button(self.frame_choix,
                                       text="Importer",
                                       command=self.select_in_file)
index d5ef1e15327c2ca9fa5d922a727af2a29822d3cf..5486b45828adf9acae6e28111b4bb9bb2babb5ac 100644 (file)
@@ -27,7 +27,6 @@ import traceback
 
 # Modules Eficas
 from Editeur import Objecttreeitem
-import prefs
 import panels
 import images
 from widgets import ListeChoix
index 0a21907e646b718669b91b24d1205539f7c70591..2db451ae4597cecb66d58c3d37bd9eea7b7998a8 100644 (file)
@@ -27,7 +27,6 @@ import traceback
 
 # Modules Eficas
 from Editeur import Objecttreeitem
-import prefs
 import panels
 import images
 from widgets import ListeChoix
index b76821986400de7b1ae8cd5076c7df1c991896e0..6bd5a104930205d4bd5b0fdb1e26e4bdc4e03466 100644 (file)
@@ -27,7 +27,6 @@ import traceback
 
 # Modules Eficas
 from Editeur import Objecttreeitem
-#import prefs
 #import panels
 #import images
 #from widgets import ListeChoix
index 8febcbb947f1fb561c0005ff3477270ad6ab0d78..5b4a27fcf3681a9dc208e525e677d16c2de9b1b5 100644 (file)
@@ -1,10 +1,12 @@
 # -*- coding: utf-8 -*-
 import os
 import prefs
+name='prefs_'+prefs.code
+prefsCode=__import__(name)
 import basestyle
 from basestyle import STYLE,style
 
-inistylefile=os.path.join(prefs.REPINI,"style.py")
+inistylefile=os.path.join(prefsCode.REPINI,"style.py")
 if os.path.isfile(inistylefile):
    execfile(inistylefile)
 
index 27edcd9708410dc3f60701e53b285a3de46b746a..581a7b98eee4831e0b23ffffbc90f02215850b05 100644 (file)
@@ -26,7 +26,6 @@ import traceback
 
 # Modules Eficas
 from Editeur import Objecttreeitem
-import prefs
 import panels
 import images
 from widgets import ListeChoix
index b7a71beb54f8fed8f560d3f428aee0d4808574f6..3b083d14e3b6fb4f04fd89d0b2f884a85ce36b7c 100644 (file)
@@ -28,7 +28,6 @@ import traceback
 
 # Modules Eficas
 from Editeur import Objecttreeitem
-import prefs
 import panels
 import images
 from widgets import FenetreDeParametre
@@ -63,10 +62,8 @@ class UNIQUE_BASE_Panel(UNIQUE_Panel):
       self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
       self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
       self.label = Label(self.frame_valeur,text='Valeur :')
-      #self.label.place(relx=0.1,rely=0.2)
       self.label.grid(row=0,padx=5,pady=5)
       self.entry = Entry(self.frame_valeur,relief='sunken')
-      #self.entry.place(relx=0.28,rely=0.2,relwidth=0.6)
       self.entry.grid(row=0,column=1,padx=5,pady=5)
       self.entry.bind("<Return>",lambda e,c=self.valid_valeur:c())
       self.entry.bind("<KP_Enter>",lambda e,c=self.valid_valeur:c())
@@ -76,14 +73,11 @@ class UNIQUE_BASE_Panel(UNIQUE_Panel):
                         text = aide,
                         wraplength=int(self.frame_valeur.winfo_width()*0.8),
                         justify='center')
-      #self.aide.place(relx=0.5,rely=0.9,anchor='n')
       self.aide.grid(row=4,columnspan=2,padx=5,pady=5)
       # bouton parametre
       bouton_parametres = Button(self.frame_valeur, text="Parametres", command=self.affiche_parametre)
-      #bouton_parametres.place(relx=0.28,rely=0.5,relwidth=0.4)
       bouton_parametres.grid(row=2,columnspan=2,padx=5,pady=5)
       bouton_val = Button(self.frame_valeur, text="Valider", command=self.valide)
-      #bouton_val.place(relx=0.28,rely=0.6,relwidth=0.4)
       bouton_val.grid(row=3,columnspan=2,padx=5,pady=5)
       # affichage de la valeur du MCS
       self.display_valeur()
index 80d9aa77f8a3ad6b18c46af6f4c93690af698535..f8a70f823e9fa8eb695a4a02f660ac2310fc3e2f 100644 (file)
@@ -27,7 +27,6 @@ import traceback
 
 # Modules Eficas
 from Editeur import Objecttreeitem
-import prefs
 import panels
 import images
 from widgets import ListeChoix
index 76133cd53278988f942f56834c164f18b005b86d..ae8e3a7679a3c85ac7e5b824a1a8d309813a4771 100644 (file)
@@ -27,7 +27,6 @@ import traceback
 
 # Modules Eficas
 from Editeur import Objecttreeitem
-import prefs
 import panels
 import images
 from widgets import ListeChoix
index 90b3b9d9f189c103ad1151eef9a0c479e5d1f38d..a04c37fdf070d1cebe71400b6e6bd31b9d254d19 100644 (file)
@@ -27,7 +27,6 @@ import traceback
 
 # Modules Eficas
 from Editeur import Objecttreeitem
-import prefs
 import panels
 import images
 from widgets import ListeChoix
index a9e326c585dbc17eca3a4fb695626c17c00f7481..5dd2006976e4c73253239704982701b8c62503a8 100644 (file)
@@ -27,7 +27,6 @@ import traceback
 
 # Modules Eficas
 from Editeur import Objecttreeitem
-import prefs
 import panels
 import images
 from widgets import ListeChoix
index 13a6f92ed695487c96616269df0cf31f037b3d72..a3317959e7d0f733890e4195913ee8affa5620fa 100644 (file)
@@ -69,8 +69,6 @@ class Fenetre :
         # définition des frames
         self.frame_texte = Frame(self.fenetre)
         self.frame_boutons = Frame(self.fenetre)
-        #self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.9)
-        #self.frame_boutons.place(relheight=0.1,relx=0,rely=0.9,relwidth=1.)
         # définition de la zone texte et du scrollbar
         self.zone_texte = Text(self.frame_texte,font=fonte,wrap=wrap,
                                height=height,width=width)
@@ -88,12 +86,10 @@ class Fenetre :
         self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit,
                                 default='active')
         self.but_save = Button(self.frame_boutons,text = "Sauver",command = self.save)
-        #self.but_quit.place(relx=0.4,rely=0.5,anchor='center')
-        #self.but_save.place(relx=0.6,rely=0.5,anchor='center')
         self.but_quit.pack(side='left',padx=25, pady=5)
         self.but_save.pack(side='right',padx=25, pady=5)
-        self.frame_texte.pack(side='top',fill='both',expand=1)
-        self.frame_boutons.pack(side='bottom')
+        self.frame_boutons.pack(side='bottom',padx=5,pady=5)
+        self.frame_texte.pack(side='top',fill='both',expand=1,padx=5,pady=5)
         self.zone_texte.focus_set()
         self.fenetre.bind('<Return>',self.quit) #dismiss window
 
@@ -134,12 +130,10 @@ class Fenetre :
         """ Affiche le texte dans la fenêtre """
         if texte != "" :
             self.zone_texte.insert(END,texte)
-            try:
-                self.fenetre.update_idletasks()
-                x0,y0,x1,y1 = self.zone_texte.bbox(END)
-                if (y1-y0) < 300 : self.efface_scroll()
-            except:
-                pass
+            self.fenetre.update_idletasks()
+            curline = int(self.zone_texte.index("insert").split('.')[0])
+            if curline < int(self.zone_texte["height"]):
+              self.efface_scroll()
 
     def save(self):
         """ Permet de sauvegarder le texte dans un fichier dont on a demandé le nom
@@ -187,7 +181,6 @@ class FenetreYesNo(Fenetre):
     def __init__(self,appli,titre="",texte="",yes="Yes",no="No"):
         self.appli=appli
         self.fenetre = Toplevel()
-        self.fenetre.configure(width = 800,height=500)
         self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
         self.fenetre.title(titre)
         self.texte = string.replace(texte,'\r\n','\n')
@@ -196,8 +189,6 @@ class FenetreYesNo(Fenetre):
         # définition des frames
         self.frame_texte = Frame(self.fenetre)
         self.frame_boutons = Frame(self.fenetre)
-        self.frame_boutons.place(relx=0,rely=0,    relwidth=1.,relheight=0.1)
-        self.frame_texte.place(  relx=0,rely=0.1,  relwidth=1, relheight=0.9)
         # définition de la zone texte et du scrollbar
         self.zone_texte = Text(self.frame_texte,font=fonte)
         self.zone_texte.bind("<Key-Prior>", self.page_up)
@@ -213,10 +204,12 @@ class FenetreYesNo(Fenetre):
         # définition des boutons
         self.but_yes = Button(self.frame_boutons,text = yes,command=self.yes)
         self.but_no = Button(self.frame_boutons,text = no,command = self.no)
-        self.but_yes.place(relx=0.4,rely=0.5,anchor='center')
-        self.but_no.place(relx=0.6,rely=0.5,anchor='center')
+        self.but_yes.pack(side="left",padx=5,pady=5)
+        self.but_no.pack(side="left",padx=5,pady=5)
+        self.frame_boutons.pack(side="top",padx=5,pady=5)
         # affichage du texte
         self.affiche_texte(self.texte)
+        self.frame_texte.pack(side="top",fill='both',padx=5,pady=5,expand=1)
         centerwindow(self.fenetre)
 
     def yes(self):
@@ -232,15 +225,10 @@ class FenetreDeSelection(Fenetre):
         Cette classe est utilisée pour affecter une liste de valeurs à un mot-clé.
     """
     def __init__(self,panel,item,appli,titre="",texte="",cardinal=1):
-        Fenetre.__init__(self,appli,titre=titre,texte=texte)
-        self.frame_boutons.place_forget()
-        self.frame_texte.place_forget()
-        self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.8)
-        self.frame_boutons.place(relheight=0.2,relx=0,rely=0.8,relwidth=1.)
+        Fenetre.__init__(self,appli,titre=titre,texte=texte,width=20,height=15)
 
         self.cardinal=cardinal
-        self.fenetre.configure(width = 320,height=400)
-        centerwindow(self.fenetre)
+        #self.fenetre.configure(width = 320,height=400)
         self.panel = panel
         self.item = item
         self.fenetre.title(titre)
@@ -256,16 +244,17 @@ class FenetreDeSelection(Fenetre):
                                       selectioncommand = self.choose_separateur,
                                       scrolledlist_items = l_separateurs_autorises)
         self.choix_sep.component('entry').configure(width=6)
-        self.choix_sep.place(relx=0.01,rely=0.5,anchor='w')
-        self.choix_sep.selectitem(self.separateur)
+        self.choix_sep.grid(row=0,rowspan=2,padx=5,pady=5)
+        #self.choix_sep.selectitem(self.separateur)
         # Replacement
-        self.but_quit.place_forget()
-        self.but_save.place_forget()
+        self.but_quit.pack_forget()
+        self.but_save.pack_forget()
         self.but_all  = Button(self.frame_boutons,text = "Tout Sélectionner", command=self.tout)
-        self.but_save.place(relx=0.6,rely=0.6,anchor='center')
-        self.but_quit.place(relx=0.8,rely=0.6,anchor='center')
-        self.but_all.place(relx=0.7,rely=0.2,anchor='center')
+        self.but_save.grid(row=1,column=1,padx=5,pady=5)
+        self.but_quit.grid(row=1,column=2,padx=5,pady=5)
+        self.but_all.grid(row=0,column=1,columnspan=2,padx=5,pady=5)
         self.choose_separateur('espace')
+        centerwindow(self.fenetre)
      
 
     def get_separateurs_autorises(self):
@@ -451,7 +440,7 @@ class FenetreDeParametre(Fenetre) :
         self.parent=parent
         self.appli=appli
         self.fenetre = Toplevel()
-        self.fenetre.configure(width = 250,height=100)
+        #self.fenetre.configure(width = 250,height=100)
         self.fenetre.protocol("WM_DELETE_WINDOW", self.quit)
         self.fenetre.title("Parametres")
         self.titre = "Parametres"
@@ -460,9 +449,8 @@ class FenetreDeParametre(Fenetre) :
 
         # définition des frames
         self.frame_texte = Frame(self.fenetre)
-        self.frame_texte.place(relx=0,rely=0,relwidth=1,relheight=0.7)
         # définition de la zone texte et du scrollbar
-        self.zone_texte = Text(self.frame_texte,font=fonte)
+        self.zone_texte = Text(self.frame_texte,font=fonte,width=40)
         self.zone_texte.bind("<Key-Prior>", self.page_up)
         self.zone_texte.bind("<Key-Next>", self.page_down)
         self.zone_texte.bind("<Key-Up>", self.unit_up)
@@ -477,15 +465,14 @@ class FenetreDeParametre(Fenetre) :
 
         # définition des boutons
         self.frame_boutons = Frame(self.fenetre)
-        self.frame_boutons.place(relheight=0.3,relx=0,rely=0.65,relwidth=1.)
-        self.label1 = Label(self.frame_boutons,text="surligner la")
-        self.label2 = Label(self.frame_boutons,text="ligne entière")
-        self.label1.place(relx=0.1,rely=0)
-        self.label2.place(relx=0.1,rely=0.5)
+        self.label1 = Label(self.frame_boutons,text="surligner la\nligne entière",justify=LEFT)
         self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit)
         self.but_save = Button(self.frame_boutons,text = "Choisir",command = self.Choisir)
-        self.but_save.place(relx=0.6,rely=0,relheight=1)
-        self.but_quit.place(relx=0.8,rely=0,relheight=1)
+        self.but_quit.pack(side='right',padx=5, pady=5)
+        self.but_save.pack(side='right',padx=5, pady=5)
+        self.label1.pack(side='right',padx=5, pady=5)
+        self.frame_boutons.pack(side='bottom')
+        self.frame_texte.pack(side='top',expand=1,fill='both')
 
 
     def Choisir(self):
@@ -497,13 +484,23 @@ class FenetreDeParametre(Fenetre) :
         l_param = ""
         for param in selection.splitlines():
             nomparam=param[0:param.find("=")-1]
-            if nomparam != '' : 
+            if nomparam != '' :
                 l_param=l_param+nomparam+','
         self.parent.entry.delete(0,Tkinter.END)
         self.parent.entry.insert(0,l_param[0:-1])
         self.parent.valid_valeur()
         self.quit()
 
+    def affiche_texte(self,texte):
+        """ Affiche le texte dans la fenêtre """
+        if texte != "" :
+            self.zone_texte.insert(END,texte)
+            self.fenetre.update_idletasks()
+            curline = int(self.zone_texte.index("insert").split('.')[0])
+            if curline < int(self.zone_texte["height"]):
+              self.zone_texte["height"]=curline
+              self.efface_scroll()
+
 class Formulaire:
     """
     Cette classe permet de créer une boîte Dialog dans laquelle
@@ -1228,7 +1225,7 @@ class ListeChoixParGroupes(ListeChoix) :
     def affiche_liste(self):
         """ Affiche la liste dans la fenêtre"""
         liste_labels=[]
-       self.dico_mots={}
+        self.dico_mots={}
         self.MCbox.config(state=NORMAL)
         self.MCbox.delete(1.0,END)
         for grp in self.liste_groupes:
@@ -1385,3 +1382,11 @@ class ListeChoixParGroupes(ListeChoix) :
                  # On a trouve une commande  on arrete la recherche
                  return
 
+if __name__ == "__main__":
+  root=Tkinter.Tk()
+  f=FenetreDeParametre(root,None,None,"\n".join(["coucouxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=2"]*15))
+  #f=FenetreYesNo(None,titre="Le titre",texte="\n".join(["Le textexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]*35),yes="Yes",no="No")
+
+
+  root.mainloop()
+
diff --git a/MAP/CMakeLists.txt b/MAP/CMakeLists.txt
new file mode 100644 (file)
index 0000000..e7e4546
--- /dev/null
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+#configure_file ( ${CMAKE_CURRENT_SOURCE_DIR}/prefs_OPENTURNS_WRAPPER.py.in
+#                 ${CMAKE_CURRENT_SOURCE_DIR}/prefs_OPENTURNS_WRAPPER.py
+#               @ONLY )
+
+install ( FILES qtEficas_map.py
+               prefs.py
+               style.py
+               prefs_MAP.py
+               configuration_MAP.py
+               catalogues_MAP.ini
+                s_poly_st_1_V1.py
+                s_poly_st_1_V1_clefs_docu
+                s_scc_st_2_V1.py
+         DESTINATION ${CMAKE_INSTALL_PREFIX}/MAP
+        )
+install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Doc
+                    ${CMAKE_CURRENT_SOURCE_DIR}/Templates
+         DESTINATION ${CMAKE_INSTALL_PREFIX}/MAP
+        )
+
+
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/MAP/Doc/MAP_2010_MOD1_20100531.pdf b/MAP/Doc/MAP_2010_MOD1_20100531.pdf
new file mode 100755 (executable)
index 0000000..f216b22
Binary files /dev/null and b/MAP/Doc/MAP_2010_MOD1_20100531.pdf differ
diff --git a/MAP/Templates/README.txt b/MAP/Templates/README.txt
new file mode 100644 (file)
index 0000000..1f6a266
--- /dev/null
@@ -0,0 +1 @@
+pour CVS
diff --git a/MAP/Templates/s_poly_st_1_V1/benhur_pygmee_template.txt b/MAP/Templates/s_poly_st_1_V1/benhur_pygmee_template.txt
new file mode 100644 (file)
index 0000000..3734959
--- /dev/null
@@ -0,0 +1,28 @@
+OPTIONS
+3D BENHUR SCALE
+I - Morphologie (MESSALA)
+1) dimension du VER cubique [m] (entree)
+%_PYGMEE_TAILLE%
+2) fraction volumique seuil écrétant le fuseau (entree)
+.11
+3) fichier decrivant le fuseau granulaire descendant (entree)
+-
+4) fichier decrivant la position et la taille des boules (sortie)
+%_PATH_STUDY%/%_NAME_SCHEME%/pygmee_output.txt
+5) fichier CAO de la morphologie (sortie)
+-
+6) facteur de correction de fraction volumique (entree)
+1.0
+II - Maillage (BENHUR)
+1) fichier entree décrivant le maillage support (entree)
+%_PATH_BENHUR%/regular_mesh_3D_%_BENHUR_FINESSE%.msh
+2) fichier sortie du maillage  (sortie)
+%_PATH_STUDY%/%_NAME_SCHEME%/%_NAME_SCHEME%_benhur_%_BENHUR_FINESSE%.msh
+3) fichier commentaire sur les statistiques décrivant le maillage (sortie)
+%_PATH_STUDY%/%_NAME_SCHEME%/%_NAME_SCHEME%_benhur_%_BENHUR_FINESSE%.log
+4) fichier BMP décrivant une coupe binarisée du VER (sortie)
+%_PATH_STUDY%/%_NAME_SCHEME%/%_NAME_SCHEME%_benhur_%_BENHUR_FINESSE%.bmp
+5) fichier TXT donnant la level set du contour aux noeuds (sortie)
+%_PATH_STUDY%/%_NAME_SCHEME%/%_NAME_SCHEME%_benhur_%_BENHUR_FINESSE%_levelset.txt
+
diff --git a/MAP/Templates/s_poly_st_1_V1/pygmee_input_template.txt b/MAP/Templates/s_poly_st_1_V1/pygmee_input_template.txt
new file mode 100644 (file)
index 0000000..16cf5eb
--- /dev/null
@@ -0,0 +1,11 @@
+# fichier de mise en donnee de la generation du VER MOX
+# nombre de phases
+1
+#fuseau 1 (entree de lecfus) format : diametre DCE croissant / fraction cumulee decroisant 
+%_PATH_MODULE%/s_poly_st_1/inclusion_size_distribution.txt
+#fuseau 2 (entree de lecfus) format : diametre DCE croissant / fraction cumulee decroisant
+toto.txt
+# taille du VER en microns 
+%_PYGMEE_TAILLE%
+# distance de repulsion :
+%_PYGMEE_DISTANCE%
diff --git a/MAP/Templates/s_poly_st_1_V1/s_poly_st_1_aster_template.comm b/MAP/Templates/s_poly_st_1_V1/s_poly_st_1_aster_template.comm
new file mode 100644 (file)
index 0000000..96ceb4e
--- /dev/null
@@ -0,0 +1,203 @@
+#===========================================
+# 20090416 jsn
+# cas test thermique : cube homogene isotrope
+# soumis a un -gradT homogene au contour qcq (donne par ses 3 composantes mg1,mg2,mg3)
+# les champs sont sortis au format gmsh
+# les moyennes des champs de gradient de temperature et de flux de chaleur sont calcules
+#
+# teste en STA9.4
+#============================================
+
+# nbre de classes (de 0% a 100% d'inclusions)
+nb_classes=11
+# specifier le repertoire dans lequel on trouve "entree_schema.dat", "entree_cl.dat" et dans lequel on ecrit "sortie_resultats.dat"
+racine="%_PATH_MODULE%/s_poly_st_1/"
+# nb_classes lignes de float : les lambda donnes par le schema pour la fraction d'incl de chaque classe (de 0% incl a 100% incl tous les N% selon nb_classes)
+fic_entree_schema   =racine+"s_poly_st_1_aster.mat"
+
+# cote cube
+L=%_PYGMEE_TAILLE%
+
+# conductivite isotrope
+lambd=1.
+# -gradT homogene au contour
+mg1=1.0
+mg2=0.0
+mg3=0.0
+# nbre de classes (de 0% a 100% d'inclusions)
+nb_classes=11
+# lecture schema = lambda pour chaque classe
+lambda_t = [0.0]*nb_classes
+print("'\n")
+for i in range(0,nb_classes):
+       alpha=float((i-1)/(nb_classes-1))
+       lambda_t[i]=(1-alpha)*%_ASTER_CONDUCTIVITE_M%+(alpha)*%_ASTER_CONDUCTIVITE_I%
+
+DEBUT(PAR_LOT='OUI',); # 'OUI' evite l'alarme
+
+# lecture maillage format gmsh
+PRE_GMSH();
+mail=LIRE_MAILLAGE();
+
+# definition des gpes de mailles (surfaces de type 'xp' (x=L) ,'xm' (x=0),... et volume 'vol' regroupant toutes les mailles)
+GMsur_gmsh_noms  = ['GM1001', 'GM1002', 'GM1003', 'GM1004', 'GM1005', 'GM1006',]
+GMsur_aster_noms = ['xm', 'xp', 'ym', 'yp', 'zm', 'zp',]
+GMsur_aster_list = [ _F(NOM=GMsur_aster_noms[i],GROUP_MA=GMsur_gmsh_noms[i],) for i in range(0,len(GMsur_gmsh_noms)) ]
+
+GMvol_gmsh_noms  = ['GM10000', 'GM10100', 'GM10200', 'GM10300', 'GM10400', 'GM10500', 'GM10600', 'GM10700', 'GM10800', 'GM10900', 'GM11000',]
+GMvol_aster_nom  = 'vol'
+GMvol_aster_list = [ _F(NOM=GMvol_aster_nom,UNION=GMvol_gmsh_noms) ]
+
+mail=DEFI_GROUP(reuse =mail,
+                MAILLAGE=mail,
+                CREA_GROUP_MA=GMsur_aster_list+GMvol_aster_list,);
+
+# definition d'1 groupe de noeuds contenant le nd en (0,0,0)->nd0 afin de fixer la temperature en un point (supprimer les "mvts de corps rigide") ds le cas de CL en flux homogene au contour
+# definition par intersection des faces du cube
+mail=DEFI_GROUP(reuse =mail,
+                MAILLAGE=mail,
+                CREA_GROUP_NO=(_F(GROUP_MA=('xm','xp','ym','yp','zm','zp',),
+                               CRIT_NOEUD='TOUS',),
+                               ),);
+mail=DEFI_GROUP(reuse =mail,
+                MAILLAGE=mail,
+                CREA_GROUP_NO=(_F(NOM='nd0',
+                               INTERSEC=('xm','ym','zm',),),
+                               ),);
+
+# on s'assure que sur la frontiere du cube la normale soit bien sortante
+mail = MODI_MAILLAGE(reuse =mail,
+                     MAILLAGE=mail,
+                     ORIE_PEAU_3D=_F(GROUP_MA=('xm','xp','ym','yp','zm','zp',),),
+                       );
+
+# modele : thermique 3D (affecte a toutes les mailles)
+modl=AFFE_MODELE(MAILLAGE=mail,
+               AFFE=_F(TOUT='OUI',
+                       PHENOMENE='THERMIQUE',
+                       MODELISATION='3D',),);
+
+# materiau unique (cube homogene)
+mat=DEFI_MATERIAU(THER=_F(LAMBDA=lambd,
+                              RHO_CP=1,),);
+
+# definition materiaux mat[0] (0% incl) a mat[nb_classes-1] (100% incl) 
+mat_t=[0.]*nb_classes
+for i in range(0,nb_classes):
+    mat_t[i]=DEFI_MATERIAU(THER=_F(LAMBDA=lambda_t[i],
+                              RHO_CP=1,),);
+
+# affectation de chaque materiau au groupe de mailles correspondant, si celui ci existe
+affe_mater_list = [ _F(GROUP_MA=GMvol_gmsh_noms[i], MATER=mat_t[i],) for i in range(0,nb_classes) ]
+
+chmat=AFFE_MATERIAU(MAILLAGE=mail,
+                    AFFE=affe_mater_list,);
+
+#chmat=AFFE_MATERIAU(MAILLAGE=mail,
+#                    AFFE=_F(GROUP_MA='vol', MATER=mat,),);
+
+# preparation CL en -gradT homogene au contour (composantes mg1,mg2,mg3)
+# T = - (mg1*x + mg2*y + mg3*z)
+# ne depend que de 2 variables d'espace sur chaque face du cube, et de plus lineairement => utilisation de nappes
+l_temp=[]
+nap=[None]*6
+mg=[mg1,mg2,mg3]
+var = ['X','Y','Z']
+l_gma=[['zm','zp'],['xm','xp'],['ym','yp']] # groupes de mailles identifiant les 6 faces du cube
+for i in range(0,3):
+    par1 = var[(1+i)%3] # 1er parametre nappe
+    par2 = var[(0+i)%3] # 2e  parametre nappe
+    val00 = 0                              # valeur prise lorsque par1=0, par2=0
+    val01 = -(mg[(0+i)%3]*L)               # valeur prise lorsque par1=0, par2=L
+    val10 = -(mg[(1+i)%3]*L)               # valeur prise lorsque par1=L, par2=0
+    val11 = -(mg[(0+i)%3]*L+mg[(1+i)%3]*L) # valeur prise lorsque par1=L, par2=L
+    for j in range(0,2):
+        nap[i*2+j] = DEFI_NAPPE ( NOM_PARA = par1, PROL_DROITE = 'LINEAIRE', PROL_GAUCHE = 'LINEAIRE',
+                  PARA = (0, L),
+                  NOM_PARA_FONC = par2,
+                  DEFI_FONCTION =     (
+                        _F( PROL_DROITE = 'LINEAIRE', PROL_GAUCHE = 'LINEAIRE',
+                            VALE =(0,val00  ,  L,val01),
+                            ),
+                        _F( PROL_DROITE = 'LINEAIRE', PROL_GAUCHE = 'LINEAIRE',
+                            VALE =(0,val10  ,  L,val11),
+                            ),
+                        )
+                  )
+        l_temp.append( _F(GROUP_MA=(l_gma[i][j],), TEMP=nap[i*2+j],) )
+        # passage de la face - a la face + :
+        val00 += -(mg[(2+i)%3]*L)
+        val01 += -(mg[(2+i)%3]*L)
+        val10 += -(mg[(2+i)%3]*L)
+        val11 += -(mg[(2+i)%3]*L)
+
+# affectation CL en -gradT homogene au contour
+climites=AFFE_CHAR_THER_F(MODELE=modl,
+                    TEMP_IMPO= l_temp )
+
+# resolution F=K.u
+resther = THER_LINEAIRE(MODELE=modl,
+                       CHAM_MATER=chmat, # caracteristiques materiau
+                       EXCIT=(_F(CHARGE=climites),), # chargement (ici seulement des cl)
+                       );
+
+# calcul flux chaleur aux points de gauss
+resther=CALC_ELEM(reuse =resther, 
+                    RESULTAT=resther,
+                    OPTION='FLUX_ELGA_TEMP',); 
+
+###############################
+# DEBUT calcul champ (- gradient de temperature) en passant par un materiau homogene fictif de conductivite 1 (suggestion de JM Proix, voir fiche rex aster 13175)
+matfict=DEFI_MATERIAU(THER=_F(LAMBDA=1,
+                              RHO_CP=1,),);
+cmatfict=AFFE_MATERIAU(MAILLAGE=mail,
+                    AFFE=_F(TOUT='OUI', MATER=matfict,),);
+resmgrad=CALC_ELEM(RESULTAT=resther,
+                   OPTION='FLUX_ELGA_TEMP',
+                   CHAM_MATER=cmatfict); 
+# FIN calcul champ (- gradient de temperature) en passant par un materiau homogene fictif de conductivite 1 (suggestion de JM Proix, voir fiche rex aster 13175)
+# dans m_gradm le champ de flux de chaleur est en fait egal au champ de (- grad T)
+###############################
+
+# impression resultats format gmsh : champs de temperature, flux, gradient de temperature
+IMPR_RESU( MODELE=modl,
+          FORMAT='GMSH',
+#         FORMAT='MED',
+          UNITE=37,
+          RESU=(_F(RESULTAT = resther,),
+                _F(RESULTAT = resmgrad,
+                   NOM_CHAM='FLUX_ELGA_TEMP',
+                   NOM_CMP=('FLUX','FLUY','FLUZ',),)
+                ));
+
+IMPR_RESU(
+          FORMAT='MED',
+          UNITE=38,
+          RESU=(_F(RESULTAT = resther,),
+                _F(RESULTAT = resmgrad,
+                   NOM_CHAM='FLUX_ELGA_TEMP',
+                   NOM_CMP=('FLUX','FLUY','FLUZ',),)
+                ));
+
+# calcul integrale et moyenne du flux de chaleur sur l'ensemble du cube
+fluxmtot = POST_ELEM(INTEGRALE=_F(GROUP_MA='vol',
+                            NOM_CHAM='FLUX_ELGA_TEMP',
+                            NOM_CMP=('FLUX','FLUY','FLUZ',),),
+               MODELE=modl,
+               RESULTAT=resther,);
+# idem moyenne du gradient de temperature
+m_gradm = POST_ELEM(INTEGRALE=_F(GROUP_MA='vol',
+                            NOM_CHAM='FLUX_ELGA_TEMP',
+                            NOM_CMP=('FLUX','FLUY','FLUZ',),),
+               MODELE=modl,
+               RESULTAT=resmgrad,);
+
+# impression des flux moy
+IMPR_TABLE(TABLE=fluxmtot,
+           NOM_PARA=('VOL','MOYE_FLUX','MOYE_FLUY','MOYE_FLUZ',),);
+# et moy du grad de temperature
+IMPR_TABLE(TABLE=m_gradm,
+           NOM_PARA=('VOL','MOYE_FLUX','MOYE_FLUY','MOYE_FLUZ',),);
+
+# fin de l'execution
+FIN();
diff --git a/MAP/Templates/s_poly_st_1_V1/s_poly_st_1_aster_template.export b/MAP/Templates/s_poly_st_1_V1/s_poly_st_1_aster_template.export
new file mode 100644 (file)
index 0000000..42a4f7f
--- /dev/null
@@ -0,0 +1,36 @@
+P serveur localhost
+P version %_ASTER_VERSION%
+P lang fr
+P debug debug
+P mode interactif
+P ncpus 1
+P mpi_nbcpu 1
+P mpi_nbnoeud 1
+P classe 
+P depart 
+P distrib 
+P flashdir 
+P exectool 
+P nomjob cube_therm_grad
+P origine ASTK 1.8.0
+A args 
+A memjeveux 218.75
+P mem_aster 100.0
+A tpmax 3600
+P memjob 1792000
+P tpsjob 60
+P follow_output yes
+P nbmaxnook 5
+P cpresok RESNOOK
+P facmtps 1
+P corefilesize unlimited
+F comm %_PATH_STUDY%/%_NAME_SCHEME%/s_poly_st_1_aster.comm D 1
+F msh %_PATH_STUDY%/%_NAME_SCHEME%/s_poly_st_1_benhur_%_BENHUR_FINESSE%.msh D 19
+F resu %_PATH_STUDY%/%_NAME_SCHEME%/s_poly_st_1_aster.resu R 8
+F mess %_PATH_STUDY%/%_NAME_SCHEME%/s_poly_st_1_aster.mess R 6
+F erre %_PATH_STUDY%/%_NAME_SCHEME%/s_poly_st_1_aster.erre R 9
+F msh %_PATH_STUDY%/%_NAME_SCHEME%/s_poly_st_1_aster.resu.msh R 37
+F med %_PATH_STUDY%/%_NAME_SCHEME%/s_poly_st_1_aster.resu.med R 38
+P consbtc oui
+P soumbtc oui
+P actions make_etude
diff --git a/MAP/catalogues_MAP.ini b/MAP/catalogues_MAP.ini
new file mode 100644 (file)
index 0000000..8f2b7b6
--- /dev/null
@@ -0,0 +1,12 @@
+# Choix des catalogues
+import os
+#rep_cata=os.path.dirname(os.path.abspath(__file__))
+rep_cata=os.getcwd()
+
+catalogues = (
+# (code, ssCode, catalogue, formatOut, formatIN)
+  ('MAP','s_poly_st_1_V1',os.path.join(rep_cata,'s_poly_st_1_V1.py'),'s_poly_st_1','MAP'),
+  ('MAP','s_polymers_st_1_V1',os.path.join(rep_cata,'s_polymers_st_1_V1.py'),'s_polymers_st_1','MAP'),
+  ('MAP','s_scc_st_2_V1',os.path.join(rep_cata,'s_scc_st_2_V1.py'),'s_scc_st_2','MAP'),
+)
+
diff --git a/MAP/configuration_MAP.py b/MAP/configuration_MAP.py
new file mode 100644 (file)
index 0000000..e7bba40
--- /dev/null
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-\r
+#            CONFIGURATION MANAGEMENT OF EDF VERSION\r
+# ======================================================================\r
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG\r
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY\r
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY\r
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR\r
+# (AT YOUR OPTION) ANY LATER VERSION.\r
+#\r
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT\r
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF\r
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU\r
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.\r
+#\r
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE\r
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,\r
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.\r
+#\r
+#\r
+# ======================================================================\r
+"""\r
+    Ce module sert pour charger les paramètres de configuration d'EFICAS\r
+"""\r
+# Modules Python\r
+import os\r
+import configuration\r
+\r
+# Modules Eficas\r
+from Editeur import utils\r
+\r
+class CONFIG(configuration.CONFIG_BASE):\r
+\r
+  #-----------------------------------\r
+  def __init__(self,appli,repIni):\r
+  #-----------------------------------\r
+\r
+      configuration.CONFIG_BASE.__init__(self,appli,repIni,'.Eficas_MAP')\r
+      self.INSTALLDIR =os.path.dirname(__file__)\r
+\r
+      self.labels_user=['exec_acrobat', 'catalogues','savedir','path_doc','map_path']\r
+      self.labels_user=self.labels_user+['PATH_PYGMEE','PATH_BENHUR','PATH_ASTER','PATH_MODULE']\r
+      self.labels_user=self.labels_user+['PATH_STUDY','NAME_SCHEME','PATH_FDVGRID','PATH_MAP','OpenTURNS_path','PATH_GMSH']\r
+\r
+      self.labels_eficas=["map_path","rep_user","INSTALLDIR","path_doc","exec_acrobat"]\r
+      self.labels_eficas=self.labels_eficas+["rep_cata","initialdir","savedir","catalogues",'PATH_PYGMEE']\r
+      self.labels_eficas=self.labels_eficas+['PATH_BENHUR','PATH_ASTER','PATH_MODULE','PATH_STUDY']\r
+      self.labels_eficas=self.labels_eficas+['NAME_SCHEME','PATH_FDVGRID','PATH_MAP','OpenTURNS_path','PATH_GMSH']\r
+\r
+      self.cataFile="catalogues_MAP.ini"\r
+      self.setValeurs()\r
+\r
+\r
+def make_config(appli,rep):\r
+    return CONFIG(appli,rep)\r
+\r
+\r
+\r
diff --git a/MAP/prefs.py b/MAP/prefs.py
new file mode 100644 (file)
index 0000000..2fc2a6b
--- /dev/null
@@ -0,0 +1 @@
+code='MAP'
diff --git a/MAP/prefs_MAP.py b/MAP/prefs_MAP.py
new file mode 100644 (file)
index 0000000..f864b1f
--- /dev/null
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-\r
+#            CONFIGURATION MANAGEMENT OF EDF VERSION\r
+# ======================================================================\r
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG\r
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY\r
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY\r
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR\r
+# (AT YOUR OPTION) ANY LATER VERSION.\r
+#\r
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT\r
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF\r
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU\r
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.\r
+#\r
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE\r
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,\r
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.\r
+#\r
+#\r
+# ======================================================================\r
+\r
+import os, sys\r
+# Les variables pouvant positionnees sont :\r
+print "import des prefs de MAP"\r
+\r
+# REPINI sert à localiser le fichier \r
+# initialdir sert comme directory initial des QFileDialog\r
+# positionnee a repin au debut mise a jour dans configuration\r
+REPINI=os.path.dirname(os.path.abspath(__file__))\r
+initialdir=REPINI \r
+\r
+# INSTALLDIR sert à localiser l'installation d'Eficas\r
+INSTALLDIR=os.path.join(REPINI,'..')\r
+PATH_MAP="/local/noyret/MAP/"\r
+PATH_PYGMEE=PATH_MAP+"/components/pygmee_v1"\r
+PATH_BENHUR=PATH_MAP+"/components/benhur"\r
+PATH_FDVGRID=PATH_MAP+"components/fdvgrid/ther2d/bin"\r
+PATH_MODULE=PATH_MAP+"/modules/polymers"\r
+PATH_STUDY=PATH_MAP+"/studies/demonstrateur_poly_st1"\r
+PATH_ASTER="/local/noyret/bin/Aster10/bin"\r
+PATH_GMSH="/usr/bin"\r
+\r
+\r
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')\r
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang\r
+lang='fr'\r
+encoding='iso-8859-1'\r
+\r
+# Acces a la documentation\r
+rep_cata        = INSTALLDIR\r
+path_doc        = os.path.join(REPINI,'Doc')\r
+exec_acrobat    = "/usr/bin/xpdf"\r
+savedir         = os.environ['HOME']\r
+\r
+OpenTURNS_path='/opt/Openturns/Install_0_13_2/lib/python2.5/site-packages'\r
+sys.path[:0]=[INSTALLDIR, OpenTURNS_path]\r
+\r
diff --git a/MAP/properties.py b/MAP/properties.py
new file mode 100644 (file)
index 0000000..ce5f1a2
--- /dev/null
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# RESPONSABLE D6BHHHH J-P.LEFEBVRE
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+#     IDENTIFICATION DU GESTIONNAIRE DE COMMANDE ACCAS A PARTIR
+#     DE LA VERSION DU CODE_ASTER ASSOCIE
+#----------------------------------------------------------------------
+version = "7.1.0"
+date = "23/04/2003"
diff --git a/MAP/qtEficas_map.py b/MAP/qtEficas_map.py
new file mode 100755 (executable)
index 0000000..debec22
--- /dev/null
@@ -0,0 +1,68 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+"""
+   Ce module sert à lancer EFICAS configuré pour Perfect
+"""
+# Modules Python
+
+# Modules Eficas
+import prefs
+name='prefs_'+prefs.code
+__import__(name)
+
+import sys
+from PyQt4.QtGui import *
+
+from Editeur  import import_code
+from Editeur  import session
+from qtEficas import Appli
+
+from InterfaceQT4 import eficas_go
+from InterfaceQT4 import monChoixMap
+
+class ChoixCata:
+ def __init__(self):
+   self.schema=""
+   self.module=""
+   self.nom=""
+  
+options=session.parse(sys.argv)
+cata=options.cata
+MonChoixCata=ChoixCata()
+if cata == None :
+   app = QApplication(sys.argv)
+   ChoixMap = monChoixMap.MonChoixMap(MonChoixCata) 
+   ChoixMap.show()
+   res=app.exec_()
+else :
+   import re
+   p=re.compile('_V\d+')
+   if p.search(cata) == None :
+      print "Ce Catalogue ne convient pas"
+      exit(1)
+   MonChoixCata.nom=cata[0: p.search(cata).start()]
+   #MonChoixCata.nom=cata
+
+#permet de choisir le module
+eficas_go.lance_eficas(code=prefs.code,ssCode=MonChoixCata.nom)
+#eficas_go.lance_eficas(code=prefs.code,choix="non")
diff --git a/MAP/s_poly_st_1_V1.py b/MAP/s_poly_st_1_V1.py
new file mode 100644 (file)
index 0000000..660d1c5
--- /dev/null
@@ -0,0 +1,95 @@
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+from prefs_MAP import PATH_MODULE
+class Tuple:
+  def __init__(self,ntuple):
+    self.ntuple=ntuple
+
+  def __convert__(self,valeur):
+    if type(valeur) == types.StringType:
+      return None
+    if len(valeur) != self.ntuple:
+      return None
+    return valeur
+
+  def info(self):
+    return "Tuple de %s elements" % self.ntuple
+
+  __repr__=info
+  __str__=info
+
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'MAP',
+                execmodul = None,
+                regles=(AU_MOINS_UN('PYGMEE',),
+                        AU_MOINS_UN('BENHUR',), 
+                        AVANT ('PYGMEE' , 'BENHUR'),
+                        AVANT('ASTER','GMSH'),
+                        EXCLUS('ASTER','FDVGRID'),
+                  ),
+                 )# Fin JDC_CATA
+#
+
+PYGMEE= PROC(nom="PYGMEE",op=None,
+              fr='definition de la morphologie',
+
+#              NBPHASES=SIMP(statut='o',typ='I',defaut=1,into=(1,2)),
+              FUSEAU1=FACT(fr="entree de lecfus", statut='o',
+                  FORME=SIMP(statut = "o", typ='TXM', defaut="fichier", into=("manuel","fichier")),
+
+                  b_forme=BLOC( condition = "FORME == 'fichier'",
+                     FORMAT  = SIMP(statut = "o", typ='TXM', defaut="croissant", into=("croissant","decroissant")),
+                     FICHIER = SIMP ( statut = "o", typ = "Fichier", defaut=PATH_MODULE+"/s_poly_st_1/inclusion_size_distribution.txt"),
+                              ),
+
+                  b_manuel=BLOC( condition = "FORME == 'manuel'",
+                     LFUSEAU = SIMP ( statut = "o", typ=Tuple(2),validators=VerifTypeTuple(('R','R')), max="**",) ,),),
+#                     LFUSEAU = SIMP ( statut = "o", typ=Tuple(2), max="**",) ,),),
+
+
+              TAILLE=SIMP(statut = "o",fr="taille du VER", typ='R', defaut=50.),
+              DISTANCE=SIMP(statut = "o",fr="distance de replusions", typ='R', defaut=0.1),
+              LANCEMENT=SIMP(statut = "o",fr="lancement de PYGMEE", typ='TXM', defaut="oui", into=("oui","non")),
+)
+
+BENHUR= PROC(nom="BENHUR",op=None,
+              fr='definition du maillage',
+
+              FINESSE=SIMP(statut = "o",fr="nombre d\'elements par cote", typ='I', into=(10,12), defaut=10),
+              LANCEMENT=SIMP(statut = "o",fr="lancement de BENHUR", typ='TXM', defaut="oui", into=("oui","non")),
+)
+
+FDVGRID = PROC(nom="FDVGRID", op=None,
+               fr='solver',
+               DIMENSION=SIMP(statut = "o",fr="dimension",typ='TXM', defaut="3D", into=("3D","2D")),
+               DIFFUSION=FACT(fr="flux de diffusion", statut='o',
+                   COMPOX=SIMP(statut="o",fr="composante en X",typ='R',defaut=1.0),
+                   COMPOY=SIMP(statut="o",fr="composante en Y",typ='R',defaut=0.0),
+                   COMPOZ=SIMP(statut="o",fr="composante en Z",typ='R',defaut=0.0),),
+               FORMULATION=SIMP(statut = "o",fr="formulation",typ='TXM',defaut="v", into=("v","d"),),
+               CL=SIMP(statut = "o",fr="conditions aux limites",typ='TXM',defaut="t",into=("t","f")),
+               DISCRET=SIMP(statut = "o",fr="discretisation",typ='I', defaut=100, val_max=256),
+               SOLVER=SIMP(statut = "o",fr="dimension",typ='TXM', defaut="cross",into=("cross","pcg diag","pcg qi"),),
+               RESIDU=SIMP(statut = "o",fr="dimension",typ='R',defaut=1.e-4,),
+);
+#/./fdvgrid + parametres dans l ordre
+ASTER= PROC(nom="ASTER",op=None,
+              fr='definition du calcul',
+
+              VERSION=SIMP(statut = "o", typ='TXM', defaut="STA10.1"),
+              CONDUCTIVITE_M=SIMP(statut = "o",fr="conductivite de la matrice", typ='R', defaut=1.0 , val_min =0.),
+              CONDUCTIVITE_I=SIMP(statut = "o",fr="conductivite des inclusions", typ='R', defaut=1.0, val_min =0.),
+              LANCEMENT=SIMP(statut = "o",fr="lancement de Code_Aster", typ='TXM', defaut="oui", into=("oui","non")),
+)
+
+GMSH= PROC(nom="GMSH",op=None,
+              fr='post-traitement',
+
+              LANCEMENT=SIMP(statut = "o",fr="lancement de GMSH", typ='TXM', defaut="oui", into=("oui","non")),
+)
diff --git a/MAP/s_poly_st_1_V1_clefs_docu b/MAP/s_poly_st_1_V1_clefs_docu
new file mode 100644 (file)
index 0000000..32e41fb
--- /dev/null
@@ -0,0 +1 @@
+BENHUR:MAP_2010_MOD1_20100531.pdf
diff --git a/MAP/s_poly_st_1_V2.py b/MAP/s_poly_st_1_V2.py
new file mode 100644 (file)
index 0000000..1d6070a
--- /dev/null
@@ -0,0 +1,74 @@
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+class Tuple:
+  def __init__(self,ntuple):
+    self.ntuple=ntuple
+
+  def __convert__(self,valeur):
+    if type(valeur) == types.StringType:
+      return None
+    if len(valeur) != self.ntuple:
+      return None
+    return valeur
+
+  def info(self):
+    return "Tuple de %s elements" % self.ntuple
+
+  __repr__=info
+  __str__=info
+
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'MAP',
+                execmodul = None,
+                regles=(AU_MOINS_UN('PYGMEE',),AU_MOINS_UN('BENHUR',), AVANT ('PYGMEE' , 'BENHUR'),),
+                       )# Fin JDC_CATA
+#
+
+PYGMEE= PROC(nom="PYGMEE",op=None,
+              fr='definition de la morphologie',
+
+#              NBPHASES=SIMP(statut='o',typ='I',defaut=1,into=(1,2)),
+              FUSEAU1=FACT(fr="entree de lecfus", statut='o',
+                  FORME=SIMP(statut = "o", typ='TXM', defaut="fichier", into=("manuel","fichier")),
+
+                  b_forme=BLOC( condition = "FORME == 'fichier'",
+                     FORMAT  = SIMP(statut = "o", typ='TXM', defaut="croissant", into=("croissant","decroissant")),
+                     FICHIER = SIMP ( statut = "o", typ = "Fichier", defaut="/local/noyret/MAP/modules/polymers/s_poly_st_1/inclusion_size_distribution.txt"),
+                              ),
+
+                  b_manuel=BLOC( condition = "FORME == 'manuel'",
+                     LFUSEAU = SIMP ( statut = "o", typ=Tuple(2),validators=VerifTypeTuple(('R','R')), max="**",) ,),),
+#                     LFUSEAU = SIMP ( statut = "o", typ=Tuple(2), max="**",) ,),),
+
+
+              TAILLE=SIMP(statut = "o",fr="taille du VER", typ='R', defaut=50.),
+              DISTANCE=SIMP(statut = "o",fr="distance de replusions", typ='R', defaut=0.1),
+              LANCEMENT=SIMP(statut = "o",fr="lancement de PYGMEE", typ='TXM', defaut="oui", into=("oui","non")),
+)
+
+BENHUR= PROC(nom="BENHUR",op=None,
+              fr='definition du maillage',
+
+              FINESSE=SIMP(statut = "o",fr="nombre d\'elements par cote", typ='I', into=(10,12), defaut=10),
+              LANCEMENT=SIMP(statut = "o",fr="lancement de BENHUR", typ='TXM', defaut="oui", into=("oui","non")),
+)
+
+ASTER= PROC(nom="ASTER",op=None,
+              fr='definition du calcul',
+
+              CONDUCTIVITE_M=SIMP(statut = "o",fr="conductivite de la matrice", typ='R', defaut=1.0 , val_min =0.),
+              CONDUCTIVITE_I=SIMP(statut = "o",fr="conductivite des inclusions", typ='R', defaut=1.0, val_min =0.),
+              LANCEMENT=SIMP(statut = "o",fr="lancement de Code_Aster", typ='TXM', defaut="oui", into=("oui","non")),
+)
+
+GMSH= PROC(nom="GMSH",op=None,
+              fr='post-traitement',
+
+              LANCEMENT=SIMP(statut = "o",fr="lancement de GMSH", typ='TXM', defaut="oui", into=("oui","non")),
+)
diff --git a/MAP/s_polymers_st_1_V1.py b/MAP/s_polymers_st_1_V1.py
new file mode 100644 (file)
index 0000000..c345db1
--- /dev/null
@@ -0,0 +1,52 @@
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+from prefs_Map import PATH_MODULE
+class Tuple:
+  def __init__(self,ntuple):
+    self.ntuple=ntuple
+
+  def __convert__(self,valeur):
+    if type(valeur) == types.StringType:
+      return None
+    if len(valeur) != self.ntuple:
+      return None
+    return valeur
+
+  def info(self):
+    return "Tuple de %s elements" % self.ntuple
+
+  __repr__=info
+  __str__=info
+
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'MAP',
+                execmodul = None,
+                regles=(AU_MOINS_UN('METHODE',),AU_MOINS_UN('MATERIAUX',),AU_MOINS_UN('DISCRETISATION',),),
+                       )# Fin JDC_CATA
+#
+
+METHODE= PROC(nom="METHODE",op=None,
+              fr='choix de la methode de calcul (maillage ou grille cartesienne)',
+              CHOIX=SIMP(statut = "o",fr="elements finis sur maillage ou differences finies sur grilles", typ='TXM', defaut="FD+grid", into=("FEM+mesh","FD+grid")),
+              LANCEMENT=SIMP(statut = "o",fr="lancement de Code_Aster ou de fdvgrid selon le choix", typ='TXM', defaut="oui", into=("oui","non")),
+)
+
+MATERIAUX= PROC(nom="MATERIAUX",op=None,
+              fr='definition des proprietes du materiau : fuseau, taille du VER, proprietes des phases',
+              TAILLE=SIMP(statut = "o",fr="taille du VER", typ='R', defaut=50.),
+              FUSEAU = SIMP ( statut = "o", fr="Fichier représentant le fuseau granulaire",typ = "Fichier", defaut=PATH_MODULE+"/s_poly_st_1/inclusion_size_distribution.txt"),
+              DISTANCE=SIMP(statut = "o",fr="distance de replusions", typ='R', defaut=0.1),
+              CONDUCTIVITE_M=SIMP(statut = "o",fr="conductivite de la matrice", typ='R', defaut=1.0 , val_min =0.),
+              CONDUCTIVITE_I=SIMP(statut = "o",fr="conductivite des inclusions", typ='R', defaut=10.0, val_min =0.),
+)
+
+DISCRETISATION= PROC(nom="DISCRETISATION",op=None,
+              fr='definition du nombre d''elements sur le cote du VER',
+              FINESSE=SIMP(statut = "o",fr="nombre d'elements sur le cote", typ='I', defaut=10 , into=(10,12,20,32,64,128),),
+)
diff --git a/MAP/s_scc_st_2_V1.py b/MAP/s_scc_st_2_V1.py
new file mode 100644 (file)
index 0000000..97ad6ae
--- /dev/null
@@ -0,0 +1,31 @@
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+from prefs_Map import PATH_MODULE
+
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'MAP',
+                execmodul = None,
+                #regles=(AU_MOINS_UN('TABLEAU',),AU_MOINS_UN('BENHUR',), AVANT ('PYGMEE' , 'BENHUR'),),
+                regles=(AU_MOINS_UN('TABLEAU',),AU_MOINS_UN('TRAITEMENT',),A_CLASSER('TABLEAU','TRAITEMENT',)),
+                       )# Fin JDC_CATA
+#
+
+TABLEAU= PROC(nom="TABLEAU",op=None,
+              fr='lecture des proprietes a traiter ',
+              FICHIER=SIMP(statut = "o", typ='Fichier',),
+)
+
+TRAITEMENT= PROC(nom="TRAITEMENT",op=None,
+              fr='analyse statistique classique d une des variables du  tableau ',
+              TYPE        =SIMP(statut='o',typ='TXM',defaut="analyse statistique classique",
+                                 into=( "analyse statistique classique", "analyse statistique de la qualite","analyse de la dispersion suivant la distance au joint", "analyse de la dispersion suivant la distance a la pointe de fissure","visualisation dans le triangle standard"),),
+              VARIABLE    =SIMP(statut='o',typ='TXM',defaut="stress_eq",
+                                 into=( "stress_eq", "strain_eq","strain_xx","strain_yy","strain_zz"),)
+)
+
diff --git a/MAP/style.py b/MAP/style.py
new file mode 100644 (file)
index 0000000..7da9d53
--- /dev/null
@@ -0,0 +1 @@
+# Necessaire pour compatibilite avec Aster
diff --git a/Misc/CMakeLists.txt b/Misc/CMakeLists.txt
new file mode 100644 (file)
index 0000000..2814fb4
--- /dev/null
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+
+install ( FILES 
+          Cyclops.py  __init__.py  MakeNomComplet.py  timing.py  traced.py  Trace.py
+         DESTINATION ${CMAKE_INSTALL_PREFIX}/Misc
+        )
+
+
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/Noyau/CMakeLists.txt b/Noyau/CMakeLists.txt
new file mode 100644 (file)
index 0000000..e3ce058
--- /dev/null
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python du repertoire et des sous-repertoires (sauf CVS)
+install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+          DESTINATION ${CMAKE_INSTALL_PREFIX}
+         FILES_MATCHING PATTERN *.py
+          PATTERN CVS EXCLUDE
+       )
+
+
+### Local Variables:
+### mode: cmake
+### End:
index 79e7dcdc9320d6c90282f1061d7c64783b69c3e6..6a6ccf94c2afbd67318569526c702cb5690daeba 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_ASSD Noyau  DATE 02/06/2008   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_ASSD Noyau  DATE 14/12/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -58,29 +59,27 @@ class ASSD(object):
         self.id = self.parent.o_register(self)
       # permet de savoir si le concept a été calculé (1) ou non (0)
       self.executed = 0
-      # initialise la partie "sd"
-      super(ASSD, self).__init__(nomj='?&?&?&?&')
       
    def __getitem__(self,key):
       return self.etape[key]
-
+   
    def set_name(self, nom):
       """Positionne le nom de self (et appelle sd_init)
       """
       self.nom = nom
-      # test car FORMULE n'a pas de SD associée
-      meth = getattr(super(ASSD, self), 'set_name', None)
-      if meth:
-         meth(nom)
+      # initialise la partie "sd" (pas pour entier, reel, formule)
+      sup = super(ASSD, self)
+      if hasattr(sup, 'nomj'):   # == AsBase
+         sup.__init__(nomj=nom)
+      self.reparent_sd()
    
    def reparent_sd(self):
       """Repositionne le parent des attributs de la SD associée.
       """
-      # test car FORMULE n'a pas de SD associée
-      meth = getattr(super(ASSD, self), 'reparent', None)
-      if meth:
-         meth(None, None)
-   
+      sup = super(ASSD, self)
+      if hasattr(sup, 'nomj'):   # == AsBase
+         sup.reparent(None, None)
+
    def get_name(self):
       """
           Retourne le nom de self, éventuellement en le demandant au JDC
@@ -124,16 +123,27 @@ class ASSD(object):
           if key[0]=='_':del d[key]
       return d
 
-   def par_lot(self):
+
+   def accessible(self):
+      """Dit si on peut acceder aux "valeurs" (jeveux) de l'ASSD.
       """
-           Retourne True si l'ASSD est créée en mode PAR_LOT='OUI'.
+      if CONTEXT.debug: print '| accessible ?', self.nom
+      is_accessible = CONTEXT.get_current_step().sd_accessible()
+      if CONTEXT.debug: print '  `- is_accessible =', repr(is_accessible)
+      return is_accessible
+
+
+   def par_lot(self):
+      """Conserver uniquement pour la compatibilite avec le catalogue v9 dans eficas.
       """
+      #XXX eficas
       if not hasattr(self, 'jdc') or self.jdc == None:
          val = None
       else:
          val = self.jdc.par_lot
       return val == 'OUI'
 
+
 class assd(ASSD):
    def __convert__(cls,valeur):
       return valeur
diff --git a/Noyau/N_ASSD_NonAster.py b/Noyau/N_ASSD_NonAster.py
new file mode 100644 (file)
index 0000000..79e7dcd
--- /dev/null
@@ -0,0 +1,140 @@
+#@ MODIF N_ASSD Noyau  DATE 02/06/2008   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+#                                                                       
+#                                                                       
+# ======================================================================
+
+
+"""
+
+"""
+
+class ASSD(object):
+   """
+      Classe de base pour definir des types de structures de donnees ASTER
+      equivalent d un concept ASTER
+   """
+   idracine="SD"
+
+   def __init__(self,etape=None,sd=None,reg='oui'):
+      """
+        reg est un paramètre qui vaut oui ou non :
+          - si oui (défaut) : on enregistre la SD auprès du JDC
+          - si non : on ne l'enregistre pas
+      """
+      self.etape=etape
+      self.sd=sd
+      self.nom=None
+      if etape:
+        self.parent=etape.parent
+      else:
+        self.parent=CONTEXT.get_current_step()
+      if self.parent :
+         self.jdc = self.parent.get_jdc_root()
+      else:
+         self.jdc = None
+
+      if not self.parent:
+        self.id=None
+      elif reg == 'oui' :
+        self.id = self.parent.reg_sd(self)
+      else :
+        self.id = self.parent.o_register(self)
+      # permet de savoir si le concept a été calculé (1) ou non (0)
+      self.executed = 0
+      # initialise la partie "sd"
+      super(ASSD, self).__init__(nomj='?&?&?&?&')
+      
+   def __getitem__(self,key):
+      return self.etape[key]
+
+   def set_name(self, nom):
+      """Positionne le nom de self (et appelle sd_init)
+      """
+      self.nom = nom
+      # test car FORMULE n'a pas de SD associée
+      meth = getattr(super(ASSD, self), 'set_name', None)
+      if meth:
+         meth(nom)
+   
+   def reparent_sd(self):
+      """Repositionne le parent des attributs de la SD associée.
+      """
+      # test car FORMULE n'a pas de SD associée
+      meth = getattr(super(ASSD, self), 'reparent', None)
+      if meth:
+         meth(None, None)
+   
+   def get_name(self):
+      """
+          Retourne le nom de self, éventuellement en le demandant au JDC
+      """
+      if not self.nom :
+         try:
+            self.nom=self.parent.get_name(self) or self.id
+         except:
+            self.nom=""
+      if self.nom.find('sansnom') != -1 or self.nom == '':
+         self.nom = self.id
+      return self.nom
+
+   def supprime(self):
+      """ 
+          Cassage des boucles de références pour destruction du JDC 
+      """
+      self.etape = None
+      self.sd = None
+      self.jdc = None
+      self.parent = None
+
+   def accept(self,visitor):
+      """
+         Cette methode permet de parcourir l'arborescence des objets
+         en utilisant le pattern VISITEUR
+      """
+      visitor.visitASSD(self)
+
+   def __getstate__(self):
+      """
+          Cette methode permet de pickler les objets ASSD
+          Ceci est possible car on coupe les liens avec les objets
+          parent, etape et jdc qui conduiraient à pickler de nombreux 
+          objets inutiles ou non picklables.
+      """
+      d=self.__dict__.copy()
+      for key in ('parent','etape','jdc'):
+          if d.has_key(key):del d[key]
+      for key in d.keys():
+          if key[0]=='_':del d[key]
+      return d
+
+   def par_lot(self):
+      """
+           Retourne True si l'ASSD est créée en mode PAR_LOT='OUI'.
+      """
+      if not hasattr(self, 'jdc') or self.jdc == None:
+         val = None
+      else:
+         val = self.jdc.par_lot
+      return val == 'OUI'
+
+class assd(ASSD):
+   def __convert__(cls,valeur):
+      return valeur
+   __convert__=classmethod(__convert__)
index ec8a972dea95d3f7a2ede62fc21b4a7c99582cf3..65617612e301aab0412b96b8806023df92e57139 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_BLOC Noyau  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_BLOC Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 3a11de726eca41f02a85aec88efb5d4a419cd095..984e7aa8f3b58bced8ee5b2ed3ad628e0b246683 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_CO Noyau  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_CO Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 9d3443ddc8620ab73191e9092632b5458a1a543b..6c9b17bb48a22b5f59b8dc2300bc3cc151c53619 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_CONVERT Noyau  DATE 30/11/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_CONVERT Noyau  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
    Module de conversion des valeurs saisies par l'utilisateur après vérification.
 """
 
-# -----------------------------------------------------------------------------
-def is_int(real):
+from N_types import is_int, is_float, is_enum
+
+
+def has_int_value(real):
    """Est-ce que 'real' a une valeur entière ?
    """
    return abs(int(real) - real) < 1.e-12
 
-# -----------------------------------------------------------------------------
+
 class Conversion:
    """Conversion de type.
    """
@@ -39,15 +42,15 @@ class Conversion:
    def convert(self, obj):
       """Filtre liste
       """
-      in_type = type(obj)
-      if in_type not in (list, tuple):
+      in_as_enum = is_enum(obj)
+      if not in_as_enum:
          obj = (obj,)
       
       result = []
       for o in obj:
          result.append(self.function(o))
       
-      if in_type not in (list, tuple):
+      if not in_as_enum:
          return result[0]
       else:
          # ne marche pas avec MACR_RECAL qui attend une liste et non un tuple
@@ -56,14 +59,14 @@ class Conversion:
    def function(self, o):
       raise NotImplementedError, 'cette classe doit être dérivée'
 
-# -----------------------------------------------------------------------------
+
 class TypeConversion(Conversion):
    """Conversion de type
    """
    def __init__(self, typ):
       Conversion.__init__(self, 'type', typ)
 
-# -----------------------------------------------------------------------------
+
 class IntConversion(TypeConversion):
    """Conversion en entier
    """
@@ -71,11 +74,11 @@ class IntConversion(TypeConversion):
       TypeConversion.__init__(self, 'I')
 
    def function(self, o):
-      if type(o) is float and is_int(o):
+      if is_float(o) and has_int_value(o):
          o = int(o)
       return o
 
-# -----------------------------------------------------------------------------
+
 class FloatConversion(TypeConversion):
    """Conversion de type
    """
@@ -83,11 +86,11 @@ class FloatConversion(TypeConversion):
       TypeConversion.__init__(self, 'R')
 
    def function(self, o):
-      if type(o) in (int, float, long):
+      if is_float(o):
          o = float(o)
       return o
 
-# -----------------------------------------------------------------------------
+
 _convertI = IntConversion()
 _convertR = FloatConversion()
 
index c75740519110e00393073924ee802818f9c17b0b..37f3eb3f766c593ce2f9b6b7b00049a2aede6019 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_CR Noyau  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_CR Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 98108418007ecdeba7fba85abab9598fdd886209..5db7f21661d4bd4e39d10153ee66ffcff1994b6e 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_ENTITE Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF N_ENTITE Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index d0f9f632f5c50485abf6a0de364002be6ad8c68a..baf39a40a7281e9a1bd9d0e761b7b0fa99c2428f 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_ETAPE Noyau  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_ETAPE Noyau  DATE 16/11/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -255,8 +256,6 @@ Causes possibles :
           Methode utilisee pour que l etape self se declare etape
           courante. Utilise par les macros
       """
-      #print "set_current_step ",self.nom
-      #traceback.print_stack(limit=3,file=sys.stdout)
       cs= CONTEXT.get_current_step()
       if self.parent != cs :
          raise "L'étape courante %s devrait etre le parent de self : %s" % (cs,self)
@@ -269,8 +268,6 @@ Causes possibles :
             Methode utilisee par l'etape self qui remet son etape parent comme 
             etape courante 
       """
-      #print "reset_current_step ",self.nom
-      #traceback.print_stack(limit=3,file=sys.stdout)
       cs= CONTEXT.get_current_step()
       if self != cs :
          raise "L'étape courante %s devrait etre self : %s" % (cs,self)
@@ -411,3 +408,25 @@ Causes possibles :
        if self.sd and self.reuse == None :
            self.parent.NommerSdprod(self.sd,self.sd.nom)
 
+
+   def is_include(self):
+      """Permet savoir si on a affaire à une commande de type INCLUDE/INCLUDE_MATERIAU
+      car le comportement de ces macros est particulier.
+      """
+      return self.nom.startswith('INCLUDE')
+
+   def sd_accessible(self):
+      """Dit si on peut acceder aux "valeurs" (jeveux) de l'ASSD produite par l'étape.
+      """
+      if CONTEXT.debug: print '`- ETAPE sd_accessible :', self.nom
+      return self.parent.sd_accessible()
+
+   def get_concept(self, nomsd):
+      """
+          Méthode pour recuperer un concept à partir de son nom
+      """
+      # pourrait être appelée par une commande fortran faisant appel à des fonctions python
+      # on passe la main au parent
+      return self.parent.get_concept()
+
+
index 760efd755a53fc734967785b8feadc4a66083820..2eeb95c3de6b8db362e203e8da106469171bb3b0 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_Exception Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF N_Exception Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 1d8347dccf3d9ff427014a492a1a4575ff89f6d8..a7cb87088e9b113a0887e92b6782281c195f3d23 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_FACT Noyau  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_FACT Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 5ac04bf748f40a48d1748f4d831eb65493a6b9ad..83d00e3b4da1a2313e5b3672cf093a1b9f79038a 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_FONCTION Noyau  DATE 18/12/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_FONCTION Noyau  DATE 10/11/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -37,9 +38,11 @@ class formule(ASSD,AsBase):
       self.expression=None
 
    def __call__(self,*val):
-      if hasattr(self.parent,'contexte_fichier_init'):
-                        context=self.parent.contexte_fichier_init
-      else            : context={}
+      context = {}
+      # cas de INCLUDE (ou POURSUITE dans Eficas)
+      context.update(getattr(self.parent, 'contexte_fichier_init', {}))
+      # récupération des constantes locales en cas de MACRO
+      context.update(getattr(self.parent, 'macro_const_context', {}))
       i=0
       for param in self.nompar : 
          context[param]=val[i]
@@ -92,7 +95,7 @@ class formule(ASSD,AsBase):
       """
       from SD.sd_fonction  import sd_formule
       from Utilitai.Utmess import UTMESS
-      if not self.par_lot():
+      if self.accessible():
         TypeProl={'E':'EXCLU', 'L':'LINEAIRE', 'C':'CONSTANT', 'I':'INTERPRE' }
         sd = sd_formule(self.get_name())
         prol = sd.PROL.get()
index f2f9694425031ac937ad7ed2d0ca6da1bb391abc..4e1e2ec180dd8aef15855034cb74691c3fb12c75 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_FORM Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF N_FORM Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index b8d85b07cc00de46a05a44e2922e49f9341113c7..1bcc7706750975b25565a8e2ea1c3157b49f6252 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_FORM_ETAPE Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF N_FORM_ETAPE Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 8a1fddaad7b6ab3695ca3734403c16bc66d4e7e1..7125faeda118f6ff908a90bf182402e20995a807 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_GEOM Noyau  DATE 19/11/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_GEOM Noyau  DATE 29/03/2010   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -56,9 +57,9 @@ class GEOM(ASSD):
       return self.nom
 
    def __convert__(cls,valeur):
-      if isinstance(valeur, (str,unicode)):
-         return valeur
-      raise ValueError, 'On attend un chaine de caractères'
+      if isinstance(valeur, (str,unicode)) and len(valeur.strip()) <= 8:
+         return valeur.strip()
+      raise ValueError, 'On attend un chaine de caractères (de longueur < 8).'
    __convert__=classmethod(__convert__)
 
 class geom(GEOM):pass
index d4d3222aff6766766f0f09ab7352133621231f35..94c462398a73f70f21f4c8d962467e91921ea3f5 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_JDC Noyau  DATE 01/04/2008   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_JDC Noyau  DATE 16/11/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -194,7 +195,7 @@ Causes possibles :
                if isinstance(sd,ASSD):self.sds_dict[sdnom]=sd
 
          if self.appli != None : 
-            self.appli.affiche_infos('Interprétation du fichier de commandes en cours ...')
+            self.appli.affiche_infos('Interpretation du fichier de commandes en cours ...')
          # On sauve le contexte pour garder la memoire des constantes
          # En mode edition (EFICAS) ou lors des verifications le contexte 
          # est recalculé
@@ -489,6 +490,34 @@ Causes possibles :
    def get_global_contexte(self):
       return self.g_context.copy()
 
+
+   def get_contexte_courant(self, etape_courante=None):
+      """
+         Retourne le contexte tel qu'il est (ou 'sera' si on est en phase
+         de construction) au moment de l'exécution de l'étape courante.
+      """
+      if etape_courante is None:
+         etape_courante = CONTEXT.get_current_step()
+      return self.get_contexte_avant(etape_courante)
+
+
+   def get_concept(self, nomsd):
+      """
+          Méthode pour recuperer un concept à partir de son nom
+      """
+      return self.get_contexte_courant().get(nomsd.strip(), None)
+
+   def del_concept(self, nomsd):
+      """
+         Méthode pour supprimer la référence d'un concept dans le sds_dict.
+         Ne détruire pas le concept (différent de supprime).
+      """
+      try:
+         del self.sds_dict[nomsd.strip()]
+      except:
+         pass
+
+
    def get_cmd(self,nomcmd):
       """
           Méthode pour recuperer la definition d'une commande
@@ -508,3 +537,10 @@ Causes possibles :
        self.index_etapes[etape] = len(self.etapes) - 1
        etape.reparent(self)
        etape.reset_jdc(self)
+
+   def sd_accessible(self):
+      """On peut acceder aux "valeurs" (jeveux) des ASSD si le JDC est en PAR_LOT="NON".
+      """
+      if CONTEXT.debug: print ' `- JDC sd_accessible : PAR_LOT =', self.par_lot
+      return self.par_lot == 'NON'
+
index 6c6ee7b4d24d391c6c2a7f72086cf34cec4c6b55..94082773f68fbb3b7d6db506c5d1ae7ba81d2e23 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_JDC_CATA Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF N_JDC_CATA Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 87d157e1fa7e91763ab5920db5834c65cb9d11a8..6d5b70fc2eeffb8b8c20fbfa27c8dcaed8e14897 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_MACRO Noyau  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_MACRO Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index c2a53700ed11ff79c22b1c223c37e0857e0c83fa..7b59d5c08d935d580acef3488d827a86d462dbb0 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_MACRO_ETAPE Noyau  DATE 28/11/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_MACRO_ETAPE Noyau  DATE 23/03/2010   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -61,32 +62,33 @@ class MACRO_ETAPE(N_ETAPE.ETAPE):
               avec l'argument args.
 
       """
-      self.definition=oper
-      self.reuse=reuse
-      self.valeur=args
+      self.definition = oper
+      self.reuse = reuse
+      self.valeur = args
       self.nettoiargs()
-      self.parent=CONTEXT.get_current_step()
+      self.parent = CONTEXT.get_current_step()
       self.etape = self
-      self.nom=oper.nom
-      self.idracine=oper.label
-      self.appel=N_utils.callee_where()
-      self.mc_globaux={}
-      self.g_context={}
+      self.nom = oper.nom
+      self.idracine = oper.label
+      self.appel = N_utils.callee_where()
+      self.mc_globaux = {}
+      self.g_context = {}
       # Contexte courant
-      self.current_context={}
-      self.index_etape_courante=0
-      self.etapes=[]
-      self.index_etapes={}
-      self.sds=[]
+      self.current_context = {}
+      self.macro_const_context = {}
+      self.index_etape_courante = 0
+      self.etapes = []
+      self.index_etapes = {}
+      self.sds = []
       #  Dans le cas d'une macro écrite en Python, l'attribut Outputs est un 
       #  dictionnaire qui contient les concepts produits de sortie 
       #  (nom : ASSD) déclarés dans la fonction sd_prod
-      self.Outputs={}
-      self.sd=None
-      self.actif=1
-      self.sdprods=[]
+      self.Outputs = {}
+      self.sd = None
+      self.actif = 1
+      self.sdprods = []
       self.make_register()
-      self.UserError="UserError"
+      self.UserError = "UserError"
 
    def make_register(self):
       """
@@ -467,6 +469,11 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
          # La propriete du concept est transferee a l'etape avec le type attendu par l'étape
          etape.sd=sd
          sd.etape=etape
+         if self.reuse == sd and etape.reuse != sd \
+                and getattr(sd, "executed", 0) == 1: # n'a pas été pas détruit
+            raise AsException("Le concept '%s' est réentrant dans la macro-commande %s. " \
+                              "Il devrait donc l'être dans %s (produit sous le nom '%s')." \
+                                % (sd.nom, self.nom, etape.nom, nomsd))
          # On donne au concept le type produit par la sous commande.
          # Le principe est le suivant : apres avoir verifie que le type deduit par la sous commande
          # est bien coherent avec celui initialement affecte par la macro (voir ci dessus)
@@ -637,6 +644,25 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
       d.update(self.g_context)
       return d
 
+   def get_contexte_courant(self, etape_fille_du_jdc=None):
+      """
+         Retourne le contexte tel qu'il est au moment de l'exécution de
+         l'étape courante.
+      """
+      ctx = self.parent.get_contexte_courant(self)
+      # on peut mettre None car toujours en PAR_LOT='NON', donc la dernière
+      ctx.update( self.get_contexte_avant(None) )
+      return ctx
+
+   def get_concept(self, nomsd):
+      """
+          Méthode pour recuperer un concept à partir de son nom
+          dans le contexte du jdc connu avant l'exécution de la macro courante.
+      """
+      # chercher dans self.get_contexte_avant, puis si non trouve
+      # self.parent.get_concept est peut-etre plus performant
+      return self.get_contexte_courant().get(nomsd.strip(), None)
+
    def copy(self):
       """ Méthode qui retourne une copie de self non enregistrée auprès du JDC
           et sans sd
@@ -690,3 +716,23 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" %(t,co
            concept.jdc=self.jdc
        for e in self.etapes:
            e.reparent(self)
+
+   def update_const_context(self, d):
+      """
+         Met à jour le contexte des constantes pour l'évaluation de
+         formules dans la macro.
+      """
+      # Dans le jdc, const_context est mis à jour par exec_compile
+      # Dans la macro, on n'a pas le code à compiler pour récupèrer les
+      # constantes locales à la macro. On demande donc explicitement de
+      # définir les constantes "locales".
+      self.macro_const_context.update(d)
+
+   def sd_accessible(self):
+      """On peut acceder aux "valeurs" (jeveux) des ASSD dans
+      les macro-commandes qui sont localement en PAR_LOT="NON"
+      sauf pour INCLUDE et INCLUDE_MATERIAU.
+      """
+      if CONTEXT.debug: print ' `- MACRO sd_accessible :', self.nom
+      return self.parent.sd_accessible() or not self.nom.startswith('INCLUDE')
+
index e750c01205050babc756cc4d934a9b9518fda296..03d684401b00d4791857ff064e3d4df9a7fa5b75 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_MCBLOC Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF N_MCBLOC Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 6509c70843f8dc4619ee6ec905eb47765e3b8bac..cca7f6fe67504fb09059bcf5ca17eddac7354741 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_MCCOMPO Noyau  DATE 18/12/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_MCCOMPO Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index ec25c94fc1ef0db6e151be3cf325d170838f3108..6ea5200b579aa3eaa3b8931d11776cc7b74dfa0c 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_MCFACT Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF N_MCFACT Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 07462dd7fd09e0e5adc4cb7b81fa01a2cdb747a5..14d9698feb2f7f30f23ae5fb7496bc8406305ca3 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_MCLIST Noyau  DATE 18/12/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_MCLIST Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 5a4093f7102030f6ac7ddefed96081060acce4f5..ba769bbd7d34c7af02e106a037a9596914b5e727 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_MCSIMP Noyau  DATE 13/10/2008   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_MCSIMP Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 45c96cf2492bdfea6eec756171c2d48bcb7ecc23..aa12a53f968ff85d3b6f72b0659ff0f13c1021ae 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_OBJECT Noyau  DATE 16/05/2006   AUTEUR DURAND C.DURAND 
+#@ MODIF N_OBJECT Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index cab95704759979ec75cdb29cd413139b1fda7e22..7f2d1ffc74f82ec285852f12d51975e5318a5804 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_OPER Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF N_OPER Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index b4d1f5ef742ca7db819612d23523296f91645a1a..c19db8b4af562d60c10000d129b0d9512c500da9 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_PROC Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF N_PROC Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index ded57551c462cf1a5d88e48156b94294737f3455..8fc05f9be921a97af555783cc99f6bbf767d1df6 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_PROC_ETAPE Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF N_PROC_ETAPE Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index e60faa512e40acd808ac7a4eaec2a23bdb730190..3166f629a81e5f2b625ea8022f4ae3c052d3b03b 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_REGLE Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF N_REGLE Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 7ca1a8d94d41cf29a734d1364117ad02d6040084..f53de9817816cb349d8006a95a981bf64330056b 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_SENSIBILITE Noyau  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_SENSIBILITE Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2006  EDF R&D                  WWW.CODE-ASTER.ORG
index 70720181c007912df605d65dccce2396a382d9bf..bba73d6061ad257e34c50e5a1a26aebb8460d821 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_SIMP Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF N_SIMP Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 21fa1f26744035957105650083321082449c61f9..7a1c67e72a343ece81392d410464691644a661a3 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_VALIDATOR Noyau  DATE 09/10/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF N_VALIDATOR Noyau  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2003  EDF R&D                  WWW.CODE-ASTER.ORG
    implanter le concept de validateur dans Accas
 """
 import types
-import string
 import traceback
 from N_ASSD import ASSD
+from N_types import is_int, is_float_or_int, is_complex, is_number, is_str, is_enum
+
 
 class ValError(Exception):pass
 
@@ -79,18 +81,18 @@ class PProtocol(Protocol):
 class ListProtocol(Protocol):
     """Verificateur de protocole liste : convertit un objet quelconque en liste pour validation ultérieure"""
     def default(self,obj):
-        if type(obj) == types.TupleType :
+        if type(obj) is tuple:
             if len(obj) > 0 and obj[0] in ('RI','MP'):
                 #il s'agit d'un complexe ancienne mode. La cardinalite vaut 1
                 return (obj,)
             else:
                 return obj
-        elif type(obj) == types.ListType :
+        elif type(obj) is list:
             return obj
-        elif obj == None :
+        elif obj == None:
             # pas de valeur affecte. La cardinalite vaut 0
             return obj
-        elif type(obj) == types.StringType :
+        elif is_str(obj):
             #il s'agit d'une chaine. La cardinalite vaut 1
             return (obj,)
         else:
@@ -104,6 +106,7 @@ class ListProtocol(Protocol):
 
 listProto=ListProtocol("list")
 
+
 class TypeProtocol(PProtocol):
     """Verificateur de type parmi une liste de types possibles"""
     #pas de registre par instance. Registre unique pour toutes les instances de TypeProtocol
@@ -113,35 +116,43 @@ class TypeProtocol(PProtocol):
         self.typ=typ
 
     def default(self,obj,typ):
+        help = ""
         for type_permis in typ:
             if type_permis == 'R':
-                if type(obj) in (types.IntType,types.FloatType,types.LongType):return obj
+                if is_float_or_int(obj): return obj
             elif type_permis == 'I':
-                if type(obj) in (types.IntType,types.LongType):return obj
+                if is_int(obj): return obj
             elif type_permis == 'C':
-                if self.is_complexe(obj):return obj
+                if self.is_complexe(obj): return obj
             elif type_permis == 'TXM':
-                if type(obj)==types.StringType:return obj
+                if is_str(obj): return obj
             elif type_permis == 'shell':
-                if type(obj)==types.StringType:return obj
+                if is_str(obj): return obj
+            elif type_permis == 'Fichier' :
+                 import os
+                 if (len(typ) > 2 and typ[2] == "Sauvegarde") or os.path.isfile(obj):
+                     return obj
+                 else : raise ValError("%s n'est pas un fichier valide" % repr(obj))
             elif type(type_permis) == types.ClassType or isinstance(type_permis,type):
-                if self.is_object_from(obj,type_permis):return obj
+                try:
+                    if self.is_object_from(obj,type_permis): return obj
+                except Exception, err:
+                    help = str(err)
             elif type(type_permis) == types.InstanceType or isinstance(type_permis,object):
                 try:
-                    if type_permis.__convert__(obj) : return obj
-                except:
-                    pass
+                    if type_permis.__convert__(obj): return obj
+                except Exception, err:
+                    help = str(err)
             else:
                 print "Type non encore géré %s" %`type_permis`
-
-        raise ValError("%s (de type %s) n'est pas d'un type autorisé: %s" % (repr(obj),type(obj),typ))
+        raise ValError("%s (de type %s) n'est pas d'un type autorisé: %s %s" % (repr(obj),type(obj),typ, help))
 
     def is_complexe(self,valeur):
         """ Retourne 1 si valeur est un complexe, 0 sinon """
-        if type(valeur) in (types.ComplexType,types.IntType,types.FloatType,types.LongType):
-            # Pour permettre l'utilisation de complexes Python
+        if is_number(valeur):
+            # Pour permettre l'utilisation de complexes Python (accepte les entiers et réels)
             return 1
-        elif type(valeur) != types.TupleType :
+        elif type(valeur) != tuple :
             # On n'autorise pas les listes pour les complexes
             return 0
         elif len(valeur) != 3:
@@ -149,7 +160,7 @@ class TypeProtocol(PProtocol):
         else:
             # Un complexe doit etre un tuple de longueur 3 avec 'RI' ou 'MP' comme premiere
             # valeur suivie de 2 reels.
-            if string.strip(valeur[0]) in ('RI','MP'):
+            if valeur[0].strip() in ('RI','MP'):
                 try:
                     v1=reelProto.adapt(valeur[1]),reelProto.adapt(valeur[2])
                     return 1
@@ -168,6 +179,8 @@ class TypeProtocol(PProtocol):
             try:
                 v=  convert(objet)
                 return v is not None
+            except ValueError, err:
+                raise
             except:
                 return 0
         # On accepte les instances de la classe et des classes derivees
@@ -203,7 +216,7 @@ class IntoProtocol(PProtocol):
                 raise ValError("La valeur : %s  ne fait pas partie des choix possibles %s" % (repr(obj),into) )
         else:
             #on est dans le cas d'un ensemble continu de valeurs possibles (intervalle)
-            if type(obj) in (types.IntType,types.FloatType,types.LongType) :
+            if is_float_or_int(obj):
                 if val_min == '**': val_min = obj -1
                 if val_max == '**': val_max = obj +1
                 if obj < val_min or obj > val_max :
@@ -218,7 +231,7 @@ class MinStr:
         self.max=max
 
     def __convert__(self,valeur):
-        if type(valeur) == types.StringType and self.min <= len(valeur) <= self.max:return valeur
+        if is_str(valeur) and self.min <= len(valeur) <= self.max:return valeur
         raise ValError("%s n'est pas une chaine de longueur comprise entre %s et %s" % (valeur,self.min,self.max))
 
     def __repr__(self):
@@ -396,7 +409,7 @@ class ListVal(Valid):
           fait appel à la méthode convert_item sur chaque élément de la
           liste.
        """
-       if type(valeur) in (types.ListType,types.TupleType):
+       if is_enum(valeur):
           for val in valeur:
               self.convert_item(val)
           return valeur
@@ -410,7 +423,7 @@ class ListVal(Valid):
           liste. Si valeur est un paramètre, on utilise sa valeur effective
           valeur.valeur.
        """
-       if type(valeur) in (types.ListType,types.TupleType):
+       if is_enum(valeur):
           for val in valeur:
               if not self.verif_item(val):
                  return 0
@@ -425,7 +438,7 @@ class Compulsory(ListVal):
       """
       registry={}
       def __init__(self,elem=()):
-          if type(elem) not in (types.ListType,types.TupleType): elem=(elem,)
+          if not is_enum(elem): elem=(elem,)
           Valid.__init__(self,elem=elem)
           self.elem=elem
           self.cata_info=""
@@ -452,7 +465,7 @@ class Compulsory(ListVal):
           return 1
 
       def verif(self,valeur):
-          if type(valeur) not in (types.ListType,types.TupleType):
+          if not is_enum(valeur):
              liste=list(valeur)
           else:
              liste=valeur
@@ -493,7 +506,7 @@ class NoRepeat(ListVal):
           return 1
 
       def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
+          if is_enum(valeur):
              liste=list(valeur)
              for val in liste:
                 if liste.count(val)!=1 : return 0
@@ -547,7 +560,7 @@ class LongStr(ListVal):
              return 0
 
       def default(self,valeur,low,high):
-          if type(valeur) != types.StringType :
+          if not is_str(valeur):
              raise ValError("%s n'est pas une string" % repr(valeur))
           if valeur[0]=="'" and valeur[-1]=="'" :
              low=low+2
@@ -619,7 +632,7 @@ class OrVal(Valid):
           Elle verifie qu'au moins un des validateurs de la liste valide la valeur
       """
       def __init__(self,validators=()):
-          if type(validators) not in (types.ListType,types.TupleType):
+          if not is_enum(validators):
              validators=(validators,)
           self.validators=[]
           for validator in validators:
@@ -744,7 +757,7 @@ class AndVal(Valid):
           Elle verifie que tous les validateurs de la liste valident la valeur
       """
       def __init__(self,validators=()):
-          if type(validators) not in (types.ListType,types.TupleType):
+          if not is_enum(validators):
              validators=(validators,)
           self.validators=[]
           for validator in validators:
@@ -752,6 +765,10 @@ class AndVal(Valid):
                  self.validators.append(FunctionVal(validator))
               else:
                  self.validators.append(validator)
+              if hasattr(validator,'fonctions'):
+                 for fonction in validator.fonctions :
+                    f=getattr(validator,fonction)
+                    setattr(self,fonction,f)
           self.cata_info=""
 
       def info(self):
@@ -786,6 +803,7 @@ class AndVal(Valid):
           return chaine
 
       def verif(self,valeur):
+          print "je suis dans le verif du AndVal"
           for validator in self.validators:
               v=validator.verif(valeur)
               if not v :
@@ -878,9 +896,9 @@ def do_liste(validators):
     for validator in validators:
         if type(validator) == types.FunctionType:
            valids.append(FunctionVal(validator))
-        elif type(validator) == types.TupleType:
+        elif type(validator) is tuple:
            valids.append(OrVal(do_liste(validator)))
-        elif type(validator) == types.ListType:
+        elif type(validator) is list:
            valids.append(AndVal(do_liste(validator)))
         else:
            valids.append(validator)
@@ -889,9 +907,9 @@ def do_liste(validators):
 def validatorFactory(validator):
     if type(validator) == types.FunctionType:
        return FunctionVal(validator)
-    elif type(validator) == types.TupleType:
+    elif type(validator) is tuple:
        return OrVal(do_liste(validator))
-    elif type(validator) == types.ListType:
+    elif type(validator) is list:
        return AndVal(do_liste(validator))
     else:
        return validator
@@ -965,7 +983,7 @@ class CardVal(Valid):
              return []
 
       def convert(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
+          if is_enum(valeur):
              l=len(valeur)
           elif valeur is None:
              l=0
@@ -979,7 +997,7 @@ class CardVal(Valid):
           return 1
 
       def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
+          if is_enum(valeur):
              if self.max != '**' and len(valeur) > self.max:return 0
              if self.min != '**' and len(valeur) < self.min:return 0
              return 1
@@ -1031,7 +1049,7 @@ class PairVal(ListVal):
           return valeur % 2 == 0
 
       def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
+          if is_enum(valeur):
              for val in valeur:
                 if val % 2 != 0:return 0
              return 1
@@ -1046,7 +1064,8 @@ class EnumVal(ListVal):
           Susceptible de remplacer l attribut "into" dans les catalogues
       """
       def __init__(self,into=()):
-          if type(into) not in (types.ListType,types.TupleType): into=(into,)
+          if not is_enum(into): 
+              into=(into,)
           self.into=into
           self.cata_info=""
 
@@ -1083,7 +1102,7 @@ def ImpairVal(valeur):
         Cette fonction est un validateur. Elle verifie que la valeur passee
         est bien un nombre impair.
     """
-    if type(valeur) in (types.ListType,types.TupleType):
+    if is_enum(valeur):
        for val in valeur:
            if val % 2 != 1:return 0
        return 1
@@ -1108,7 +1127,7 @@ class F1Val(Valid):
           return "valeur %s pour la somme des cles A et B " % self.somme
 
       def verif(self,valeur):
-          if type(valeur) in (types.ListType,types.TupleType):
+          if is_enum(valeur):
              for val in valeur:
                 if not val.has_key("A"):return 0
                 if not val.has_key("B"):return 0
@@ -1268,4 +1287,54 @@ class VerifTypeTuple(Valid,ListVal) :
              for val in liste:
                 if self.verif_item(val)!=1 : return 0
              return 1
+class VerifExiste(ListVal) :
+      """
+         fonctionne avec into
+         Met une liste à jour selon les mot clefs existant
+         exemple si into = ("A","B","C")
+         si au niveau N du JDC les objets "A" et "C" existe
+         alors la liste des into deviendra ( "A","C")
+
+         niveauVerif est le niveau du JDC dans lequel va s effectuer la verification
+         niveauVerif est defini par rapport au Noeud :
+         exemple niveauVerif = 1 : on verifie les freres
+                 niveauVerif = 2 : on verifie les oncles..
+      """
+      def __init__(self,niveauVerif):
+          ListVal.__init__(self)
+          self.niveauVerif=niveauVerif
+          self.MCSimp=None
+          self.listeDesFreres=()
+          self.fonctions=('verifie_liste','set_MCSimp')
+
+      def is_list(self):
+          return 1
+
+      def verifie_liste(self,liste):
+          self.set_MCSimp(self.MCSimp)
+          for item in liste :
+            if not( item in self.listeDesFreres) : return 0
+          return 1
+
+      def verif_item(self,valeur):
+          self.set_MCSimp(self.MCSimp)
+          if valeur in self.listeDesFreres : return 1
+          return 0
+
+      def set_MCSimp(self, MCSimp) :
+          self.MCSimp=MCSimp
+          k=self.niveauVerif
+          mc=MCSimp
+          while (k != 0) :
+             parent=mc.parent
+             mc=parent
+             k=k-1
+         #on met la liste à jour
+          parent.forceRecalcul=self.niveauVerif
+          self.listeDesFreres=parent.liste_mc_presents()
+
+      def convert_item(self,valeur):
+          if valeur in self.listeDesFreres : return valeur
+          raise ValError(str(valeur)+" n est pas dans " + str(self.listeDesFreres))
 
index 42c90a4a2b850862ae7b7d891ad0dad1bd85b2ce..87fa725bce661807226f1e3c7203d222865d8f09 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N__F Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF N__F Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
diff --git a/Noyau/N_types.py b/Noyau/N_types.py
new file mode 100644 (file)
index 0000000..be4e972
--- /dev/null
@@ -0,0 +1,61 @@
+#@ MODIF N_types Noyau  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
+# -*- coding: iso-8859-1 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2010  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY  
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY  
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR     
+# (AT YOUR OPTION) ANY LATER VERSION.                                                  
+#                                                                       
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT   
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF            
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              
+#                                                                       
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,         
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        
+# ======================================================================
+# RESPONSABLE COURTOIS M.COURTOIS
+
+"""
+   Ce module contient des fonctions utilitaires pour tester les types
+"""
+
+from N_ASSD import ASSD
+
+
+# use isinstance() instead of type() because objects returned from numpy arrays
+# inherit from python scalars but are numpy.float64 or numpy.int32...
+def is_int(obj):
+    return isinstance(obj, int) or type(obj) is long
+
+def is_float(obj):
+    return isinstance(obj, float)
+
+def is_complex(obj):
+    return isinstance(obj, complex)
+
+def is_float_or_int(obj):
+    return is_float(obj) or is_int(obj)
+
+def is_number(obj):
+    return is_float_or_int(obj) or is_complex(obj)
+
+def is_str(obj):
+    return type(obj) in (str, unicode)
+
+def is_list(obj):
+    return type(obj) is list
+
+def is_tuple(obj):
+    return type(obj) is tuple
+
+def is_enum(obj):
+    return is_list(obj) or is_tuple(obj)
+
+def is_assd(obj):
+    return isinstance(obj, ASSD)
+
+
index 8535af5b3784bc36fc218e39137aad06ef0ad627..50198669da1aac46dd0dc259b98d0017a16377e8 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF N_utils Noyau  DATE 13/02/2007   AUTEUR PELLET J.PELLET 
+#@ MODIF N_utils Noyau  DATE 11/05/2010   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -30,7 +31,7 @@ import sys
 
 # Modules EFICAS
 from N_Exception import AsException
-from N_ASSD      import ASSD
+from N_types     import is_int, is_float, is_complex, is_str, is_enum, is_assd
 
 SEP='_'
 
@@ -66,25 +67,28 @@ def callee_where(niveau=4):
    except:
      return 0,"inconnu",0,{}
 
+
 def AsType(a):
    """
       Retourne le type d'un concept (a) à partir
       des caractéristiques de l'objet Python
    """
-   if type(a) in (tuple, list):return AsType(a[0])
-   if isinstance(a, ASSD):return type(a)
-   if type(a) == float:return "R"
-   if type(a) == int:return "I"
-   if type(a) == str:return "TXM"
-   if a == None : return None
-   print 'a=',a,type(a)
+   if is_enum(a):  return AsType(a[0])
+   if is_assd(a):  return type(a)
+   if is_float(a): return "R"
+   if is_int(a):   return "I"
+   if is_str(a):   return "TXM"
+   if a == None:   return None
+   print 'a=', a, type(a)
    raise AsException("type inconnu")
 
+
 def prbanner(s):
    print "*"*(len(s)+10)
    print "*"*5 + s + "*"*5
    print "*"*(len(s)+10)
 
+
 def repr_float(valeur):
   """ 
       Cette fonction représente le réel valeur comme une chaine de caractères
index 9f7799faf65d2870960bebfdd71e21434ef50578..f86663b83a28003069c895dfef975ed5c176ef5b 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF ascheckers Noyau  DATE 07/10/2008   AUTEUR PELLET J.PELLET 
+#@ MODIF ascheckers Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
index 9006e70f47df11e7240cc62f7b756a8ad566bcac..35b9395d169c5fad68624e78a4005f3d12c6fd61 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF asnom Noyau  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF asnom Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
index 8d2820cae69767f64ab18e9e9d218da2df49c16f..a5f2fc99c430f6e1d8ca68406892b7f78f7c5e41 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF asojb Noyau  DATE 07/10/2008   AUTEUR PELLET J.PELLET 
+#@ MODIF asojb Noyau  DATE 21/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -76,7 +77,7 @@ class AsBase(Type):
                         v( checker )
                     except :
                         mess=60*'-'+'\n'
-                        mess=mess+'Erreur SDVERI_45 (Attention : vérification incomplète)'+'\n'
+                        mess=mess+'Erreur SDVERI (Attention : vérification incomplète)'+'\n'
                         mess=mess.join(traceback.format_tb(sys.exc_traceback))
                         checker.err(self,mess)
 
@@ -118,7 +119,7 @@ class AsBase(Type):
         return "<%s(%x,%r)>" % (self.__class__.__name__, id(self), self.nomj() )
 
     def long_repr(self):
-        if not hasattr(self, "par_lot") or self.par_lot():
+        if not hasattr(self, "accessible") or not self.accessible():
            # hors Aster ou en par_lot='oui'
            return self.short_repr()
         else:
@@ -298,6 +299,10 @@ class OJBCollec(OJB):
 class AsVI(OJBVect):
     _type = "I"
 
+# -----------------------------------------------------------------------------
+class AsVS(OJBVect):
+    _type = "S"
+
 # -----------------------------------------------------------------------------
 class AsVR(OJBVect):
     _type = "R"
index a5479fd7f87da6eefe089dbd9be675a436f09645..5eb7449f4b5e887e7c4b5593c6fbd256e7599ca5 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF basetype Noyau  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF basetype Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2007  EDF R&D                  WWW.CODE-ASTER.ORG
index 7ce9db7da4b14ad04c342b64c21d1d94d6be75bc..27c2528ef4714b8fe9ca7555aecfa4da9217abd0 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF context Noyau  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF context Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -32,7 +33,6 @@ def set_current_step(step):
    global _root
    if _root : raise "Impossible d'affecter _root. Il devrait valoir None"
    _root=step
-   #print "dans set_current_step", step
 
 def get_current_step():
    """
index e4e572318f8b48779ba4efb017b14535b870e016..56988b6dae8713a7b5da3c93c6d33d6d4f26e3d2 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF nommage Noyau  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF nommage Noyau  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
diff --git a/Openturns_Study/CMakeLists.txt b/Openturns_Study/CMakeLists.txt
new file mode 100644 (file)
index 0000000..4f1f8af
--- /dev/null
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Question : Que faire des fichiers sdistOTqt.py et style.py
+
+configure_file ( ${CMAKE_CURRENT_SOURCE_DIR}/prefs_OPENTURNS_STUDY.py.in
+                 ${CMAKE_CURRENT_SOURCE_DIR}/prefs_OPENTURNS_STUDY.py
+                @ONLY )
+
+install ( FILES qtEficas_openturns_study.py
+                ${CMAKE_CURRENT_SOURCE_DIR}/prefs_OPENTURNS_STUDY.py
+               prefs.py
+               configuration_OPENTURNS_STUDY.py
+               opsOT.py
+               catalogues_openturns.ini
+               OpenTURNS_Cata_Study_V8.py
+         DESTINATION ${CMAKE_INSTALL_PREFIX}/Openturns_Study
+        )
+
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/Openturns_Study/OpenTURNS_Cata_Study_V10.py b/Openturns_Study/OpenTURNS_Cata_Study_V10.py
new file mode 100644 (file)
index 0000000..f53ee90
--- /dev/null
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class loi ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_STUDY',
+                 execmodul = None,
+                 regles = ( AU_MOINS_UN ( 'CRITERIA' ), ),
+                 ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+#===============================
+# 5. Definition des parametres
+#===============================
+VARI = OPER ( nom = "VARI",
+                      sd_prod = variable,
+                      op = None,
+                      fr = "Definitions des lois marginales utilisees par les variables d'entree", 
+                      type=SIMP(statut='f',defaut="IN",into=("IN","OUT"), typ = "TXM",)
+              )
+
+VARI1 = OPER ( nom = "VARI1",
+                      sd_prod = variable,
+                      op = None,
+                      fr = "Definitions des lois marginales utilisees par les variables d'entree", 
+
+                       POUTRE               = FACT(statut= 'f',max= '**',
+                          MAILLE   = SIMP(statut= 'f',typ= 'TXM' ,validators= NoRepeat(),max= '**'),
+                          GROUP_MA = SIMP(statut= 'f',typ= 'TXM' ,validators= NoRepeat(),max= '**'),
+                       ),
+                       POUTRE2               = FACT(statut= 'f',max= '**',
+                          MAILLE2   = SIMP(statut= 'f',typ= 'TXM' ,validators= NoRepeat(),max= '**'),
+                          GROUP_MA2 = SIMP(statut= 'f',typ= 'TXM' ,validators= NoRepeat(),max= '**'),
+                       ),
+                       FINAL =FACT(statut= 'f',max= '**',
+                         type=SIMP(statut='f',min=1,max= '**', into=("POUTRE","POUTRE2"), 
+                                   validators=[VerifExiste(2),NoRepeat()], typ="TXM",),
+                       ),
+              )
+
+
+FICXML=MACRO(nom="FICXML",
+            op=None,
+            UIinfo={"groupes":("Gestion du travail",)},
+            fr="Débranchement vers un fichier de commandes secondaires",
+            sd_prod=loi,
+            FICHIER  = SIMP(statut='o',typ='TXM',),
+);
+
diff --git a/Openturns_Study/OpenTURNS_Cata_Study_V5.py b/Openturns_Study/OpenTURNS_Cata_Study_V5.py
new file mode 100644 (file)
index 0000000..89ce015
--- /dev/null
@@ -0,0 +1,1528 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+#from Accas import ASSD, JDC_CATA, AU_MOINS_UN, PROC, SIMP, FACT, OPER, MACRO, BLOC, A_VALIDATOR
+from Accas import *
+
+class loi      ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+import types
+class Tuple:
+  def __init__(self,ntuple):
+    self.ntuple=ntuple
+
+  def __convert__(self,valeur):
+    if type(valeur) == types.StringType:
+      return None
+    if len(valeur) != self.ntuple:
+      return None
+    return valeur
+
+  def info(self):
+    return "Tuple de %s elements" % self.ntuple
+
+  __repr__=info
+  __str__=info
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_STUDY',
+                 execmodul = None,
+                 regles = ( AU_MOINS_UN ( 'CRITERIA' ),
+                            AU_MOINS_UN ( 'MODEL' ),
+                            AVANT ( ('DISTRIBUTION', 'MODEL'), 'VARIABLE' ),
+#                            A_CLASSER ( 'VARIABLE', )               'CORRELATION' ),
+#                            A_CLASSER ( 'VARIABLE',                'CRITERIA' ),
+#                            A_CLASSER ( 'CORRELATION',             'CRITERIA' ),
+                            ),
+                 ) # Fin JDC_CATA
+
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+LOG = PROC ( nom = "LOG",
+             op = None,
+             docu = "",
+               
+  DebugMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de debug de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library debug level print",
+                 ),
+               
+  WrapperMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de wrapper de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library debug level print",
+                 ),
+               
+  UserMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de user de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library user level print",
+                 ),
+               
+  InfoMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de info de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library info level print",
+                 ),
+               
+  WarningMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de warning de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library warning level print",
+                 ),
+               
+  ErrorMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de error de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library error level print",
+                 ),
+               
+) # Fin PROC LOG
+# Ordre Catalogue LOG
+
+
+
+TOTO = PROC( nom='toto', op = None, docu = "",
+                  fr = "toto", ang = "toto",
+
+         TITI=SIMP(statut = 'o',
+             typ = "TXM",
+             fr = "Nom",
+             ang = "Name",
+             ),
+)
+# Ordre Catalogue TOTO
+
+
+
+#================================
+# 0. Definition du modele physique
+#================================
+
+
+DETERMINISTICVARIABLE = OPER ( nom = "DETERMINISTICVARIABLE",
+            sd_prod = variable,
+            op = None,
+            fr = "Variable deterministe",
+            ang = "Deterministic variable",
+            
+  N = SIMP ( statut = 'o',
+             typ = "TXM",
+             fr = "Nom",
+             ang = "Name",
+             ),
+            
+  T = SIMP ( statut = 'o',
+             defaut = "in",
+             into = ( "in" , "out", ),
+             typ = "TXM",
+             fr = "Type",
+             ang = "Type",
+             ),
+            
+  R = SIMP ( statut = 'o',
+             defaut = 0,
+             typ = "I",
+             fr = "Rang",
+             ang = "Rank",
+             ),
+            
+) # Fin OPER DETERMINISTICVARIABLE
+# Ordre Catalogue DETERMINISTICVARIABLE
+
+
+
+
+import opsOT
+MODEL = MACRO ( nom = "MODEL",
+                op = None,
+                UIinfo = { "groupes" : ( "Gestion du travail", ) },
+                fr = "Chargement du wrapper du modele physique",
+                ang = "Physical model wrapper load",
+                sd_prod = opsOT.INCLUDE,
+                op_init = opsOT.INCLUDE_context,
+                fichier_ini = 1,
+               
+  FileName = SIMP ( statut = "o",
+                    typ = "Fichier",
+                    fr = "Nom du modele physique",
+                    ang = "Physical model identifier",
+                    ),
+               
+) # Fin PROC MODEL
+# Ordre Catalogue MODEL
+
+
+
+
+VARIABLE = PROC ( nom = "VARIABLE",
+                  op = None,
+                  docu = "",
+                  fr = "Variable probabiliste",
+                  ang = "Probabilistic variable",
+
+  ModelVariable = SIMP ( statut = "o",
+                         typ = ( variable, ),
+                         ),
+
+  Distribution = SIMP ( statut = "o",
+                        typ = ( loi, ),
+                        ),
+                  
+) # Fin PROC VARIABLE
+# Ordre Catalogue VARIABLE
+
+
+CORRELATION = PROC ( nom = 'CORRELATION',
+                     op = None,
+                     docu = "",
+                     fr = "Correlation entre variables",
+                     ang = "Variable correlation",
+
+  Copula = SIMP ( statut = "o",
+                  typ = "TXM",
+                  into = ( "Independent", ),
+                  defaut = "Independent",
+                  fr = "Type de la copule",
+                  ang = "Copula kind",
+                  ),
+
+
+) # Fin PROC CORRELATION
+# Ordre Catalogue CORRELATION
+
+
+#================================
+# 1. Definition des LOIS
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+DISTRIBUTION = OPER ( nom = "DISTRIBUTION",
+                      sd_prod = loi,
+                      op = 68,
+                      fr = "Definitions des lois marginales utilisees par les variables d'entree", 
+                      
+                      
+#====
+# Type de distribution
+#====
+
+  Kind = SIMP ( statut = "o", typ = "TXM",
+                into = ( "Beta",
+                         "Exponential",
+                         "Gamma",
+                         "Geometric",
+                         "Gumbel",
+                         "Histogram",
+                         "Logistic",
+                         "LogNormal",
+                         "MultiNomial",
+                         "Normal",
+                         "Poisson",
+                         "Student",
+                         "Triangular",
+                         "TruncatedNormal",
+                         "Uniform",
+                         #"UserDefined",
+                         "Weibull",
+                         ),
+                fr = "Choix du type de la loi marginale",
+                ang = "1D marginal distribution",
+                ),
+
+#====
+# Definition des parametres selon le type de la loi
+#====
+
+  BETA = BLOC ( condition = " Kind in ( 'Beta', ) ",
+
+                  Settings = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       max = 1,
+                                       into = ( "RT", "MuSigma" ),
+                                       defaut = "RT",
+                                       fr = "Parametrage de la loi beta",
+                                       ang = "Beta distribution parameter set",
+                                       ),
+
+                  RT_Parameters = BLOC ( condition = " Settings in ( 'RT', ) ",
+
+                                      R = SIMP ( statut = "o",
+                                                 typ = "R",
+                                                 max = 1,
+                                                 val_min = 0.,
+                                                 fr = "Parametre R de la loi",
+                                                 ang = "R parameter",
+                                                 ),
+
+                                      # T > R
+                                      T = SIMP ( statut = "o",
+                                                 typ = "R",
+                                                 max = 1,
+                                                 val_min = 0.,
+                                                 fr = "Parametre T de la loi | T > R",
+                                                 ang = "T parameter | T > R",
+                                                 ),
+
+                                      ), # Fin BLOC RT_Parameters
+
+
+                  MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                      Mu = SIMP ( statut = "o",
+                                                  typ = "R",
+                                                  max = 1,
+                                                  fr = "Parametre Mu de la loi",
+                                                  ang = "Mu parameter",
+                                                  ),
+
+                                      Sigma = SIMP ( statut = "o",
+                                                     typ = "R",
+                                                     max = 1,
+                                                     val_min = 0.,
+                                                     fr = "Parametre Sigma de la loi | Sigma > 0",
+                                                     ang = "Sigma parameter | Sigma > 0",
+                                                     ),
+
+                                      ), # Fin BLOC MuSigma_Parameters
+
+
+                  A = SIMP ( statut = "o",
+                             typ = "R",
+                             max = 1,
+                             fr = "Parametre A de la loi",
+                             ang = "A parameter",
+                             ),
+
+                  # B > A
+                  B = SIMP ( statut = "o",
+                             typ = "R",
+                             max = 1,
+                             fr = "Parametre B de la loi | B > A",
+                             ang = "B parameter | B > A",
+                             ),
+
+  ), # Fin BLOC BETA
+
+
+
+  EXPONENTIAL = BLOC ( condition = " Kind in ( 'Exponential', ) ",
+
+                         Lambda = SIMP ( statut = "o",
+                                         typ = "R",
+                                         max = 1,
+                                         val_min = 0.,
+                                         fr = "Parametre Lambda | Lambda > 0",
+                                         ang = "Lambda parameter | Lambda > 0",
+                                         ),
+
+                         Gamma = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Parametre Gamma",
+                                        ang = "Gamma parameter",
+                                        ),
+
+  ), # Fin BLOC EXPONENTIAL
+
+
+
+  GAMMA = BLOC ( condition = " Kind in ( 'Gamma', ) ",
+
+                   Settings = SIMP ( statut = "o",
+                                        typ = "TXM",
+                                        max = 1,
+                                        into = ( "KLambda", "MuSigma" ),
+                                        defaut = "KLambda",
+                                        fr = "Parametrage de la loi gamma",
+                                        ang = "Gamma distribution parameter set",
+                                        ),
+
+                   KLambda_Parameters = BLOC ( condition = " Settings in ( 'KLambda', ) ",
+
+                                       K = SIMP ( statut = "o",
+                                                  typ = "R",
+                                                  max = 1,
+                                                  val_min = 0.,
+                                                  fr = "Parametre K de la loi | K > 0",
+                                                  ang = "K parameter | K > 0",
+                                                  ),
+
+                                       Lambda = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Lambda de la loi | Lambda > 0",
+                                                       ang = "Lambda parameter | Lambda > 0",
+                                                       ),
+
+                                       ), # Fin BLOC KLambda_Parameters
+
+
+                   MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                       Mu = SIMP ( statut = "o",
+                                                   typ = "R",
+                                                   max = 1,
+                                                   defaut = 0.0,
+                                                   fr = "Parametre Mu de la loi",
+                                                   ang = "Mu parameter",
+                                                   ),
+
+                                       Sigma = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      defaut = 1.0,
+                                                      val_min = 0.,
+                                                      fr = "Parametre Sigma de la loi | Sigma > 0",
+                                                      ang = "Sigma parameter | Sigma > 0",
+                                                      ),
+
+                                       ), # Fin BLOC MuSigma_Parameters
+
+                   Gamma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Gamma",
+                                  ang = "Gamma parameter",
+                                  ),
+
+
+  ), # Fin BLOC GAMMA
+
+
+
+  GEOMETRIC = BLOC ( condition = " Kind in ( 'Geometric', ) ",
+
+                       P = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  val_min = 0.,
+                                  val_max = 1.,
+                                  fr = "Parametre P | 0 < P < 1",
+                                  ang = "P parameter | 0 < P < 1",
+                                  ),
+
+  ), # Fin BLOC GEOMETRIC
+
+
+
+  GUMBEL = BLOC ( condition = " Kind in ( 'Gumbel', ) ",
+
+                    Settings = SIMP ( statut = "o",
+                                         typ = "TXM",
+                                         max = 1,
+                                         into = ( "AlphaBeta", "MuSigma" ),
+                                         defaut = "AlphaBeta",
+                                         fr = "Parametrage de la loi gumbel",
+                                         ang = "Gumbel distribution parameter set",
+                                         ),
+
+                    AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+                                        Alpha = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Alpha de la loi | Alpha > 0",
+                                                       ang = "Alpha parameter | Alpha > 0",
+                                                       ),
+
+                                        Beta = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      fr = "Parametre Beta de la loi",
+                                                      ang = "Beta parameter",
+                                                      ),
+
+                                        ), # Fin BLOC AlphaBeta_Parameters
+
+
+                    MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                        Mu = SIMP ( statut = "o",
+                                                    typ = "R",
+                                                    max = 1,
+                                                    fr = "Parametre Mu de la loi",
+                                                    ang = "Mu parameter",
+                                                    ),
+
+                                        Sigma = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Sigma de la loi | Sigma > 0",
+                                                       ang = "Sigma parameter | Sigma > 0",
+                                                       ),
+
+                                        ), # Fin BLOC MuSigma_Parameters
+
+  ), # Fin BLOC GUMBEL
+
+
+
+  HISTOGRAM = BLOC ( condition = " Kind in ( 'Histogram', ) ",
+
+                       First = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Premier point de la distribution",
+                                    ang = "First point",
+                                    ),
+
+                       # Il faut definir une collection de couples ( x,p ) 
+                       Values = SIMP ( statut = 'o',
+                                       typ = Tuple(2),
+                                       max = '**',
+                                       fr = "Liste de couples (point,probabilite)",
+                                       ang = "(point,probabiblity) couple list",
+                                       validators=VerifTypeTuple(('R','R')),
+                                       ),
+
+  ), # Fin BLOC HISTOGRAM
+
+
+
+  LOGNORMAL = BLOC ( condition = " Kind in ( 'LogNormal', ) ",
+
+                     Settings = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       max = 1,
+                                       into = ( "MuSigmaLog", "MuSigma", "MuSigmaOverMu" ),
+                                       defaut = "MuSigmaLog",
+                                       fr = "Parametrage de la loi lognormale",
+                                       ang = "Lognormal distribution parameter set",
+                                       ),
+
+                     MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                                 Mu = SIMP ( statut = "o",
+                                                             typ = "R",
+                                                             max = 1,
+                                                             fr = "Parametre Mu de la loi | Mu > Gamma",
+                                                             ang = "Mu parameter | Mu > Gamma",
+                                                             ),
+
+                                                 Sigma = SIMP ( statut = "o",
+                                                                typ = "R",
+                                                                max = 1,
+                                                                val_min = 0.,
+                                                                fr = "Parametre Sigma de la loi | Sigma > 0",
+                                                                ang = "Sigma parameter | Sigma > 0",
+                                                                ),
+
+                                                 ), # Fin BLOC MuSigma_Parameters
+
+                     MuSigmaOverMu_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaOverMu', ) ",
+
+                                                 Mu = SIMP ( statut = "o",
+                                                             typ = "R",
+                                                             max = 1,
+                                                             fr = "Parametre Mu de la loi | Mu > Gamma",
+                                                             ang = "Mu parameter | Mu > Gamma",
+                                                             ),
+
+                                                 SigmaOverMu = SIMP ( statut = "o",
+                                                                typ = "R",
+                                                                max = 1,
+                                                                val_min = 0.,
+                                                                fr = "Parametre SigmaOverMu de la loi | SigmaOverMu > 0",
+                                                                ang = "SigmaOverMu parameter | SigmaOverMu > 0",
+                                                                ),
+
+                                                 ), # Fin BLOC MuSigmaOverMu_Parameters
+
+                     MuSigmaLog_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaLog', ) ",
+
+                                                    MuLog = SIMP ( statut = "o",
+                                                                   typ = "R",
+                                                                   max = 1,
+                                                                   fr = "Parametre Mu log de la loi",
+                                                                   ang = "Mu log parameter",
+                                                                   ),
+
+                                                    SigmaLog = SIMP ( statut = "o",
+                                                                      typ = "R",
+                                                                      max = 1,
+                                                                      val_min = 0.,
+                                                                      fr = "Parametre Sigma log de la loi | SigmaLog > 0",
+                                                                      ang = "Sigma log parameter | SigmaLog > 0",
+                                                                      ),
+                                            
+                                                    ), # Fin BLOC MuSigmaLog_Parameters
+
+                     Gamma = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Parametre Gamma",
+                                    ang = "Gamma parameter",
+                                    ),
+
+   ), # Fin BLOC LOGNORMAL
+
+
+
+   LOGISTIC = BLOC ( condition = " Kind in ( 'Logistic', ) ",
+
+                       Alpha = SIMP ( statut = "o",
+                                      typ = "R",
+                                      max = 1,
+                                      fr = "Parametre Alpha de la loi",
+                                      ang = "Alpha parameter",
+                                      ),
+
+                       Beta = SIMP ( statut = "o",
+                                     typ = "R",
+                                     max = 1,
+                                     val_min = 0.,
+                                     fr = "Parametre Beta de la loi | Beta > = 0",
+                                     ang = "Beta parameter | Beta > = 0",
+                                     ),
+
+   ), # Fin BLOC LOGISTIC
+
+
+
+   MULTINOMIAL = BLOC ( condition = " Kind in ( 'MultiNomial', ) ",
+                         
+                         N = SIMP ( statut = "o",
+                                    typ = "I",
+                                    max = 1,
+                                    fr = "Dimension de la loi",
+                                    ang = "Distribution dimension",
+                                    ),
+
+                         # Il faut un vecteur P de taille N
+                         Mu = SIMP ( statut = 'o',
+                                     typ = 'R',
+                                     max = '**',
+                                     ),
+
+   ), # Fin BLOC MULTINOMIAL
+
+
+
+   NORMAL = BLOC ( condition = " Kind in ( 'Normal', ) ",
+
+                    Mu = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Parametre Mu de la loi",
+                                ang = "Mu parameter",
+                                ),
+
+                   Sigma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  val_min = 0.,
+                                  fr = "Parametre Sigma de la loi | Sigma > 0",
+                                  ang = "Sigma parameter | Sigma > 0",
+                                  ),
+
+   ), # Fin BLOC NORMAL
+
+
+
+   POISSON = BLOC ( condition = " Kind in ( 'Poisson', ) ",
+
+                     Lambda = SIMP ( statut = "o",
+                                     typ = "R",
+                                     max = 1,
+                                     val_min = 0.,
+                                     fr = "Parametre Lambda de la loi | Lambda > 0",
+                                     ang = "Lambda parameter | Lambda > 0",
+                                     ),
+
+   ), # Fin BLOC POISSON
+
+
+
+   STUDENT = BLOC ( condition = " Kind in ( 'Student', ) ",
+
+                     Mu = SIMP ( statut = "o",
+                                 typ = "R",
+                                 max = 1,
+                                 fr = "Parametre Mu de la loi",
+                                 ang = "Mu parameter",
+                                 ),
+
+                     Nu = SIMP ( statut = "o",
+                                 typ = "R",
+                                 max = 1,
+                                 val_min = 2.,
+                                 fr = "Parametre Nu de la loi | V > = 2",
+                                 ang = "Nu parameter | V > = 2",
+                                 ),
+
+   ), # Fin BLOC STUDENT
+
+
+
+   TRIANGULAR = BLOC ( condition = " Kind in ( 'Triangular', ) ",
+
+                         A = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure de la loi | A < = M < = B",
+                                    ang = "Lower bound | A < = M < = B",
+                                    ),
+
+                         M = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Mode de la loi | A < = M < = B",
+                                    ang = "Mode | A < = M < = B",
+                                    ),
+
+                         B = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne superieure de la loi | A < = M < = B",
+                                    ang = "Upper bound | A < = M < = B",
+                                    ),
+
+   ), # Fin BLOC TRIANGULAR
+
+
+
+   TRUNCATEDNORMAL = BLOC ( condition = " Kind in ( 'TruncatedNormal', ) ",
+
+                             MuN = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = 1,
+                                          fr = "Parametre Mu de la loi",
+                                          ang = "Mu parameter",
+                                          ),
+
+                             SigmaN = SIMP ( statut = "o",
+                                             typ = "R",
+                                             max = 1,
+                                             val_min = 0.,
+                                             fr = "Parametre SigmaN de la loi | SigmaN > 0",
+                                             ang = "SigmaN parameter | SigmaN> 0",
+                                             ),
+
+                             A = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Borne inferieure de la loi | A < = B",
+                                        ang = "Lower bound | A < = B",
+                                        ),
+
+                             B = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Borne superieure de la loi | A < = B",
+                                        ang = "Upper bound | A < = B",
+                                        ),
+
+   ), # Fin BLOC TRUNCATEDNORMAL
+
+
+
+   UNIFORM = BLOC ( condition = " Kind in ( 'Uniform', ) ",
+
+                     A = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Borne inferieure de la loi | A < = B",
+                                ang = "Lower bound | A < = B",
+                                ),
+
+                     B = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Borne superieure de la loi | A < = B",
+                                ang = "Upper bound | A < = B",
+                                ),
+
+   ), # Fin BLOC UNIFORM
+
+
+
+   USERDEFINED = BLOC ( condition = " Kind in ( 'UserDefined', ) ",
+
+                           # Il faut definir une collection de couples ( x,p ) 
+                         Values = SIMP ( statut = 'o',
+                                         typ = 'R',
+                                         max = '**',
+                                         ),
+
+   ), # Fin BLOC USERDEFINED
+
+
+
+   WEIBULL = BLOC ( condition = " Kind in ( 'Weibull', ) ",
+
+                     Settings = SIMP ( statut = "o",
+                                          typ = "TXM",
+                                          max = 1,
+                                          into = ( "AlphaBeta", "MuSigma" ),
+                                          defaut = "AlphaBeta",
+                                          fr = "Parametrage de la loi weibull",
+                                          ang = "Weibull distribution parameter set",
+                                          ),
+
+                     AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+                                         Alpha = SIMP ( statut = "o",
+                                                        typ = "R",
+                                                        max = 1,
+                                                        val_min = 0.,
+                                                        fr = "Parametre Alpha de la loi | Alpha > 0",
+                                                        ang = "Alpha parameter | Alpha > 0",
+                                                        ),
+
+                                         Beta = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Beta de la loi | Beta > 0",
+                                                       ang = "Beta parameter | Beta > 0",
+                                                       ),
+
+                                         ), # Fin BLOC AlphaBeta_Parameters
+
+
+                     MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                         Mu = SIMP ( statut = "o",
+                                                     typ = "R",
+                                                     max = 1,
+                                                     fr = "Parametre Mu de la loi",
+                                                     ang = "Mu parameter",
+                                                     ),
+
+                                         Sigma = SIMP ( statut = "o",
+                                                        typ = "R",
+                                                        max = 1,
+                                                        val_min = 0.,
+                                                        fr = "Parametre Sigma de la loi | Sigma > 0",
+                                                        ang = "Sigma parameter | Sigma > 0",
+                                                        ),
+
+                                         ), # Fin BLOC MuSigma_Parameters
+
+                     Gamma = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Parametre Gamma",
+                                    ang = "Gamma parameter",
+                                    ),
+
+    ), # Fin BLOC WEIBULL
+
+) # Fin OPER DISTRIBUTION
+# Ordre Catalogue DISTRIBUTION
+
+
+
+
+
+
+#================================
+# 3. Definition de l'etude
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+CRITERIA = PROC ( nom = "CRITERIA",
+                  op = None,
+                  docu = "",
+                  fr = "Mise en donnee pour le fichier de configuration de OPENTURNS.",
+                  ang = "Writes the configuration file for OPENTURNS.",
+
+
+
+  Type = SIMP ( statut = "o",
+                typ = "TXM",
+                into = ( "Min/Max", "Central Uncertainty", "Threshold Exceedence" ),
+                fr = "Type d'Analyse",
+                ang = "Analysis",
+                ),
+
+
+
+
+
+
+
+  MinMax = BLOC ( condition = " Type in ( 'Min/Max', ) ",
+
+                  Method = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "Experiment Plane", "Random Sampling" ),
+                                  fr = "Methode",
+                                  ang = "Method",
+                                  ),
+                  # UC 3.1.1
+                  ExperimentPlaneSettings = BLOC ( condition = " Method in ( 'Experiment Plane', ) ",
+
+                          ExperimentPlane = SIMP ( statut = "o",
+                                                   typ = "TXM",
+                                                   into = ( "Axial", "Factorial", "Composite", ),
+                                                   fr = "Methode",
+                                                   ang = "Method",
+                                                   ),
+
+                          Levels = SIMP ( statut = "o",
+                                          typ = "R",
+                                          val_min = 0.0,
+                                          max = '**',    
+                                          fr = "Nombre de niveaux dans chaque direction",
+                                          ang = "Levels in each direction",
+                                          ),
+
+                          # Scaled Vector
+                          UnitsPerDimension = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = '**',    
+                                          fr = "Unite par dimension (autant que de variables declarees)",
+                                          ang = "Units per dimension (as much as declared variables)",
+                                          ),
+
+                          # Translation Vector
+                          Center = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = '**',    
+                                          fr = "Unite par dimension",
+                                          ang = "Units per dimension",
+                                          ),
+
+                    ), # Fin BLOC ExperimentPlaneSettings
+
+
+
+                  RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+                          SimulationsNumber = SIMP ( statut = "o",
+                                                typ = "I",
+                                                val_min = 1,
+                                                fr = "Nombre de points",
+                                                ang = "Points number",
+                                                ),
+
+                    ), # Fin BLOC RandomSamplingSettings
+
+                  Result = SIMP (  statut = "o",
+                                   typ = "TXM",
+                                   into = ( "Min/Max", ),
+                                   defaut = "Min/Max",
+                                   fr = "Le minimum et le maximum",
+                                   ang = "The min and max values",
+                                   ),
+
+
+  ), # Fin BLOC MinMax
+
+
+
+
+  CentralUncertainty = BLOC ( condition = " Type in ( 'Central Uncertainty', ) ",
+
+                  Method = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "Taylor Variance Decomposition", "Random Sampling" ),
+                                  fr = "Methode",
+                                  ang = "Method",
+                                  ),
+                              
+                  # UC 3.2.
+                  TaylorVarianceDecompositionSettings = BLOC ( condition = " Method in ( 'Taylor Variance Decomposition', ) ",
+
+                      Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                              MeanFirstOrder = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Moyenne au premier ordre",
+                                                ang = "MeanFirstOrder",
+                                                ),
+
+                              StandardDeviationFirstOrder = SIMP ( statut = "o",
+                                                                   typ = 'TXM',
+                                                                   into = ( 'yes', 'no' ),
+                                                                   defaut = 'yes',
+                                                                   max = 1,
+                                                                   fr = "Ecart-type au premier ordre",
+                                                                   ang = "StandardDeviationFirstOrder",
+                                                                   ),
+
+                              MeanSecondOrder = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'no',
+                                                       max = 1,
+                                                       fr = "Moyenne au second ordre",
+                                                       ang = "MeanSecondOrder",
+                                                       ),
+
+                              ImportanceFactor = SIMP ( statut = "o",
+                                                        typ = 'TXM',
+                                                        into = ( 'yes', 'no' ),
+                                                        defaut = 'yes',
+                                                        max = 1,
+                                                        fr = "Facteur d'importance pour variable de sortie scalaire",
+                                                        ang = "ImportanceFactor",
+                                                        ),
+                      ), # Fin FACT Result
+                                                               
+                  ), # Fin BLOC TaylorVarianceDecompositionSettings
+
+
+
+                  RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+                          SimulationsNumber = SIMP ( statut = "o",
+                                                typ = "I",
+                                                val_min = 1,
+                                                fr = "Nombre de points",
+                                                ang = "Points number",
+                                                ),
+
+                       Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                              EmpiricalMean = SIMP ( statut = "o",
+                                                     typ = 'TXM',
+                                                     into = ( 'yes', 'no' ),
+                                                     defaut = 'yes',
+                                                     max = 1,
+                                                     fr = "Moyenne empirique",
+                                                     ang = "Empirical mean",
+                                                     ),
+
+                              EmpiricalStandardDeviation = SIMP ( statut = "o",
+                                                                  typ = 'TXM',
+                                                                  into = ( 'yes', 'no' ),
+                                                                  defaut = 'yes',
+                                                                  max = 1,
+                                                                  fr = "Ecart-type empirique",
+                                                                  ang = "Empirical standard deviation",
+                                                                  ),
+
+                              EmpiricalQuantile = SIMP ( statut = "o",
+                                                         typ = 'TXM',
+                                                         into = ( 'yes', 'no' ),
+                                                         defaut = 'yes',
+                                                         max = 1,
+                                                         fr = "Quantile empirique",
+                                                         ang = "Empirical quantile",
+                                                         ),
+
+                              EmpiricalQuantileSettings = BLOC ( condition = " EmpiricalQuantile in ( 'yes', ) ",
+
+                                  EmpiricalQuantile_Order = SIMP ( statut = "o",
+                                                                   typ = 'R',
+                                                                   defaut = 0.95,
+                                                                   max = 1,
+                                                                   val_min = 0.0,
+                                                                   val_max = 1.0,
+                                                                   fr = "Ordre du quantile empirique",
+                                                                   ang = "Empirical quantile order",
+                                                                   ),
+
+                              ), # Fin BLOC EmpiricalQuantileSettings
+
+                              CorrelationAnalysis = SIMP ( statut = "o",
+                                                            typ = 'TXM',
+                                                            into = ( 'yes', 'no' ),
+                                                            defaut = 'yes',
+                                                            max = 1,
+                                                            fr = "Correlations analysees",
+                                                            ang = "Analysed correlations",
+                                                            ),
+
+                              KernelSmoothing = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'yes',
+                                                       max = 1,
+                                                       fr = "Kernel smoothing de l'echantillon",
+                                                       ang = "Kernel smoothing of the sample",
+                                                       ),
+
+                      ), # Fin FACT Result
+                                                               
+                  ), # Fin BLOC RandomSamplingSettings
+
+  ), # Fin BLOC CentralUncertainty
+
+
+
+
+  ThresholdExceedence = BLOC ( condition = " Type in ( 'Threshold Exceedence', ) ",
+
+         Event =  FACT ( statut = "o",
+                         min = 1,
+                         max = 1,
+
+                         Threshold = SIMP ( statut = "o",
+                                            typ = "R",
+                                            max = 1,
+                                            fr = "Le seuil de defaillance",
+                                            ang = "Failure threshold",
+                                            ),
+
+                         ComparisonOperator = SIMP ( statut = "o",
+                                                     typ = "TXM",
+                                                     max = 1,
+                                                     into = ( "Less", "LessOrEqual", "Equal", "GreaterOrEqual", "Greater" ),
+                                                     fr = "Que faut-il ne pas depasser : un maximum ou un minimum",
+                                                     ang = "What is the failure threshold : maximum or minimum",
+                                                     ),
+         ), # Fin FACT Event
+                         
+
+         Method = SIMP ( statut = "o",
+                         typ = "TXM",
+                         into = ( "Simulation", "FORM_SORM" ),
+                         fr = "Methode",
+                         ang = "Method",
+                         ),
+
+         SimulationSettings = BLOC ( condition = " Method in ( 'Simulation', ) ",
+
+               Algorithm = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "MonteCarlo", "LHS", "ImportanceSampling" ),
+                                  fr = "Algorithme de simulation",
+                                  ang = "Simulation algorithm",
+                                  ),
+
+                                 
+               RandomGenerator = FACT ( statut = "o",
+                                        min = 1,
+                                        max = 1,
+
+                           SeedToBeSet = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'no',
+                                                max = 1,
+                                                fr = "La racine du generateur aleatoire doit-elle etre positionnee ?",
+                                                ang = "Does the random generator seed need to be set ?",
+                                                ),
+
+                           SeedSettings = BLOC ( condition = " SeedToBeSet in ( 'yes', ) ",
+
+                                                 RandomGeneratorSeed = SIMP ( statut = "o",
+                                                                              typ = "I",
+                                                                              max = 1,
+                                                                              fr = "Racine du generateur aleatoire",
+                                                                              ang = "Random generator seed",
+                                                                              ),
+
+                                               ), # Fin BLOC SeedSettings
+
+               ), # Fin FACT RandomGenerator
+
+
+               BlockSize = SIMP ( statut = "f",
+                                  typ = "I",
+                                  max = 1,
+                                  val_min = 1,
+                                  defaut = 1,
+                                  fr = "Nombre de calculs realises en bloc",
+                                  ang = "Number of computations as a block",
+                                  ),
+
+               MaximumOuterSampling = SIMP ( statut = "o",
+                                             typ = "I",
+                                             max = 1,
+                                             val_min = 1,
+                                             fr = "Maximum d'iterations externes",
+                                             ang = "Maximum outer Sampling value",
+                                             ),
+
+               MaximumCoefficientOfVariation = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1.,
+                                                      defaut = 0.1,
+                                                      val_min = 0.0,
+                                                      fr = " maximum ...",
+                                                      ang = "Absolute maximum ...."
+                                                      ),
+
+               ImportanceSamplingSettings = BLOC ( condition = " Algorithm in ( 'ImportanceSampling', ) ",
+
+                            MeanVector = SIMP ( statut = "o",
+                                                typ = "R",
+                                                max = "**",
+                                                fr = "Moyenne",
+                                                ang = "Mean vector",
+                                                ),
+
+                            Correlation = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'Independent', 'Linear' ),
+                                                 defaut = 'Linear',
+                                                 max = 1,
+                                                 fr = "Le type de correlation entre les variables",
+                                                 ang = "Correlation between variables",
+                                                 ),
+
+               ), # Fin BLOC ImportanceSamplingSettings
+
+               Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                    Probability = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Probabiblite",
+                                         ang = "Probability",
+                                         ),
+
+                    StandardDeviation = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Ecart type",
+                                         ang = "Standard deviation",
+                                         ),
+
+                    ConfidenceInterval = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Ecart-type empirique",
+                                                ang = "Empirical standard deviation",
+                                                ),
+
+                    ConfidenceIntervalSettings = BLOC ( condition = " ConfidenceInterval in ( 'yes', ) ",
+
+                          Level = SIMP ( statut = "o",
+                                         typ = 'R',
+                                         defaut = 0.9,
+                                         max = 1,
+                                         val_min = 0.0,
+                                         val_max = 1.0,
+                                         fr = "Niveau de confiance",
+                                         ang = "Confidence level",
+                                         ),
+                                                     
+                    ), # Fin BLOC ConfidenceIntervalSettings
+                               
+                    VariationCoefficient = SIMP ( statut = "o",
+                                                  typ = 'TXM',
+                                                  into = ( 'yes', 'no' ),
+                                                  defaut = 'yes',
+                                                  max = 1,
+                                                  fr = "Coefficient de variation",
+                                                  ang = "VariationCoefficient",
+                                                  ),
+
+                    SimulationsNumber = SIMP ( statut = "o",
+                                             typ = 'TXM',
+                                             into = ( 'yes', 'no' ),
+                                             defaut = 'yes',
+                                             max = 1,
+                                             fr = "Nombre d'iterations",
+                                             ang = "Iteration number",
+                                             ),
+
+                    ConvergenceGraph = SIMP ( statut = "o",
+                                             typ = 'TXM',
+                                             into = ( 'yes', 'no' ),
+                                             defaut = 'yes',
+                                             max = 1,
+                                             fr = "Graphe de convergence",
+                                             ang = "Convergence graph",
+                                             ),
+
+               ), # Fin FACT Result
+                                                               
+
+
+         ), # Fin BLOC SimulationSettings
+
+
+                               
+         FORM_SORMSettings = BLOC ( condition = " Method in ( 'FORM_SORM', ) ",
+
+                Approximation = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       defaut = "FirstOrder",
+                                       into = ( "FirstOrder", "SecondOrder" ),
+                                       max = 1,
+                                       fr = "Approximation",
+                                       ang = "Approximation",
+                                       ),
+
+                OptimizationAlgorithm = SIMP ( statut = "o",
+                                               typ = "TXM",
+                                               defaut = "Cobyla",
+                                               into = ( "Cobyla", "AbdoRackwitz" ),
+                                               max = 1,
+                                               fr = "Methode d'optimisation",
+                                               ang = "Optimisation method",
+                                               ),
+
+                                     
+                PhysicalStartingPoint = SIMP ( statut = "o",
+                                               typ = "R",
+                                               max = "**",
+                                               fr = "Point de demarrage de l'algorithme iteratif",
+                                               ang = "Initial point for iterative process",
+                                               ),
+
+                MaximumIterationsNumber = SIMP ( statut = "o",
+                                                 typ = "I",
+                                                 max = 1,
+                                                 val_min = 1,
+                                                 fr = "Nombre maximum d iterations",
+                                                 ang = "Maximum number of iterations",
+                                                 ),
+
+                                     
+                MaximumAbsoluteError = SIMP ( statut = "o",
+                                              typ = "R",
+                                              max = 1,
+                                              defaut = 1E-4,
+                                              val_min = 0.0,
+                                              fr = "Distance maximum absolue entre 2 iterations successifs",
+                                              ang = "Absolute maximum distance between 2 successive iterates",
+                                              ),
+
+                MaximumRelativeError = SIMP ( statut = "o",
+                                               typ = "R",
+                                               max = 1,
+                                               defaut = 1E-4,
+                                               val_min = 0.0,
+                                               fr = "Distance maximum relative entre 2 iterations successives",
+                                               ang = "Relative maximum distance between 2 successive iterates",
+                                               ),
+                                     
+                MaximumConstraintError = SIMP ( statut = "o",
+                                                typ = "R",
+                                                max = 1,
+                                                defaut = 1E-4,
+                                                val_min = 0.0,
+                                                fr = "Valeur maximum absolue de la fonction moins la valeur du niveau",
+                                                ang = "Maximum absolute value of the constraint function minus the level value",
+                                                ),
+
+                ImportanceSampling = SIMP ( statut = "o",
+                                            typ = 'TXM',
+                                            into = ( 'yes', 'no' ),
+                                            defaut = 'no',
+                                            max = 1,
+                                            fr = "Tirage d'importance au point de conception",
+                                            ang = "Importance sampling at design point",
+                                            ),
+
+                FORMResult = BLOC ( condition = " Approximation in ( 'FirstOrder', ) ",
+
+                    Probability = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Probabiblite",
+                                         ang = "Probability",
+                                         ),
+
+                    DesignPoint = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', 'no' ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Point de conception",
+                                         ang = "Design point",
+                                         ),
+
+                    HasoferReliabilityIndex = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Indice de fiabilite",
+                                                 ang = "Reliability index",
+                                                 ),
+
+                    ImportanceFactor = SIMP ( statut = "o",
+                                              typ = 'TXM',
+                                              into = ( 'yes', 'no' ),
+                                              defaut = 'yes',
+                                              max = 1,
+                                              fr = "Facteur d'importance pour variable de sortie scalaire",
+                                              ang = "ImportanceFactor",
+                                              ),
+
+                    SensitivityAnalysis = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Analyse de sensibilite",
+                                                 ang = "Sensitivity analysis",
+                                                 ),
+
+                    SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+                            FORMEventProbabilitySensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+        
+                            HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+        
+                    ), # Fin BLOC SensitivityAnalysisSettings
+
+                    FunctionCallsNumber = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Nombre d'appels a la fonction",
+                                                 ang = "Function calls number",
+                                                 ),
+
+
+                ), # Fin BLOC FORMResult
+
+
+                SORMResult = BLOC ( condition = " Approximation in ( 'SecondOrder', ) ",
+
+
+                    TvedtApproximation = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'no',
+                                                max = 1,
+                                                fr = "Approximation de Tvedt",
+                                                ang = "Tvedt approximation",
+                                                ),
+
+                    HohenBichlerApproximation = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'no',
+                                                       max = 1,
+                                                       fr = "Approximation de HohenBichler",
+                                                       ang = "HohenBichler approximation",
+                                                       ),
+
+                    BreitungApproximation = SIMP ( statut = "o",
+                                                   typ = 'TXM',
+                                                   into = ( 'yes', 'no' ),
+                                                   defaut = 'no',
+                                                   max = 1,
+                                                   fr = "Approximation de Breitung",
+                                                   ang = "Breitung approximation",
+                                                   ),
+
+                    DesignPoint = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', 'no' ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Point de conception",
+                                         ang = "Design point",
+                                         ),
+
+                    ImportanceFactor = SIMP ( statut = "o",
+                                              typ = 'TXM',
+                                              into = ( 'yes', 'no' ),
+                                              defaut = 'yes',
+                                              max = 1,
+                                              fr = "Facteur d'importance pour variable de sortie scalaire",
+                                              ang = "ImportanceFactor",
+                                              ),
+
+                    SensitivityAnalysis = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Analyse de sensibilite",
+                                                 ang = "Sensitivity analysis",
+                                                 ),
+
+                    SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+                            HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+                                                                 
+                    ), # Fin BLOC SensitivityAnalysisSettings
+
+                    FunctionCallsNumber = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Nombre d'appels a la fonction",
+                                                 ang = "Function calls number",
+                                                 ),
+
+
+                ), # Fin BLOC SecondOrder
+
+
+                                     
+        ), # Fin BLOC FORM_SORMSettings
+
+
+                               
+  ), # Fin BLOC ThresholdExceedence
+
+
+
+) # Fin PROC CRITERIA
+# Ordre Catalogue CRITERIA
+
+
+
+
+
+
+
diff --git a/Openturns_Study/OpenTURNS_Cata_Study_V6.py b/Openturns_Study/OpenTURNS_Cata_Study_V6.py
new file mode 100644 (file)
index 0000000..8073055
--- /dev/null
@@ -0,0 +1,1726 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+#from Accas import ASSD, JDC_CATA, AU_MOINS_UN, PROC, SIMP, FACT, OPER, MACRO, BLOC, A_VALIDATOR
+from Accas import *
+
+class loi      ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+import types
+class Tuple:
+  def __init__(self,ntuple):
+    self.ntuple=ntuple
+
+  def __convert__(self,valeur):
+    if type(valeur) == types.StringType:
+      return None
+    if len(valeur) != self.ntuple:
+      return None
+    return valeur
+
+  def info(self):
+    return "Tuple de %s elements" % self.ntuple
+
+  __repr__=info
+  __str__=info
+
+class Matrice:
+  def __init__(self,nbLigs=None,nbCols=None,methodeCalculTaille=None,formatSortie="ligne",valSup=None,valMin=None,structure=None):
+      self.nbLigs=nbLigs
+      self.nbCols=nbCols
+      self.methodeCalculTaille=methodeCalculTaille
+      self.formatSortie=formatSortie
+      self.valSup=valSup
+      self.valMin=valMin
+      self.structure=structure
+
+  def __convert__(self,valeur):
+    # Attention ne verifie pas grand chose
+    if type(valeur) != types.ListType :
+      return None
+    return valeur
+
+  def info(self):
+      return "Matrice %s x %s" % (self.nbLigs, self.nbCols)
+
+      __repr__=info
+      __str__=info
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_STUDY',
+                 execmodul = None,
+                 regles = ( AU_MOINS_UN ( 'CRITERIA' ),
+                            AU_MOINS_UN ( 'MODEL' ),
+                            AVANT ( ('DISTRIBUTION', 'MODEL'), 'VARIABLE' ),
+#                            A_CLASSER ( 'VARIABLE',                'CORRELATION' ),
+#                            A_CLASSER ( 'VARIABLE',                'CRITERIA' ),
+#                            A_CLASSER ( 'CORRELATION',             'CRITERIA' ),
+                            ),
+                 ) # Fin JDC_CATA
+
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+LOG = PROC ( nom = "LOG",
+             op = None,
+             docu = "",
+               
+  DebugMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de debug de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library debug level print",
+                 ),
+               
+  WrapperMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de wrapper de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library debug level print",
+                 ),
+               
+  UserMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de user de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library user level print",
+                 ),
+               
+  InfoMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de info de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library info level print",
+                 ),
+               
+  WarningMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de warning de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library warning level print",
+                 ),
+               
+  ErrorMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de error de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library error level print",
+                 ),
+               
+) # Fin PROC LOG
+# Ordre Catalogue LOG
+
+
+
+
+
+#================================
+# Definition des LOIS
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+DISTRIBUTION = OPER ( nom = "DISTRIBUTION",
+                      sd_prod = loi,
+                      op = 68,
+                      fr = "Definitions des lois marginales utilisees par les variables d'entree", 
+                      
+                      
+#====
+# Type de distribution
+#====
+
+  Kind = SIMP ( statut = "o", typ = "TXM",
+                into = ( "Beta",
+                         "Exponential",
+                         "Gamma",
+                         "Geometric",
+                         "Gumbel",
+                         "Histogram",
+                         "Laplace",
+                         "Logistic",
+                         "LogNormal",
+                         "MultiNomial",
+                         "NonCentralStudent",
+                         "Normal",
+                         "Poisson",
+                         "Rayleigh",
+                         "Student",
+                         "Triangular",
+                         "TruncatedNormal",
+                         "Uniform",
+                         #"UserDefined",
+                         "Weibull",
+                         ),
+                fr = "Choix du type de la loi marginale",
+                ang = "1D marginal distribution",
+                ),
+
+#====
+# Definition des parametres selon le type de la loi
+#====
+
+  BETA = BLOC ( condition = " Kind in ( 'Beta', ) ",
+
+                  Settings = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       max = 1,
+                                       into = ( "RT", "MuSigma" ),
+                                       defaut = "RT",
+                                       fr = "Parametrage de la loi beta",
+                                       ang = "Beta distribution parameter set",
+                                       ),
+
+                  RT_Parameters = BLOC ( condition = " Settings in ( 'RT', ) ",
+
+                                      R = SIMP ( statut = "o",
+                                                 typ = "R",
+                                                 max = 1,
+                                                 val_min = 0.,
+                                                 fr = "Parametre R de la loi | R > 0",
+                                                 ang = "R parameter | R > 0",
+                                                 ),
+
+                                      # T > R
+                                      T = SIMP ( statut = "o",
+                                                 typ = "R",
+                                                 max = 1,
+                                                 val_min = 0.,
+                                                 fr = "Parametre T de la loi | T > R",
+                                                 ang = "T parameter | T > R",
+                                                 ),
+
+                                      ), # Fin BLOC RT_Parameters
+
+
+                  MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                      Mu = SIMP ( statut = "o",
+                                                  typ = "R",
+                                                  max = 1,
+                                                  fr = "Moyenne de la loi",
+                                                  ang = "Mean value",
+                                                  ),
+
+                                      Sigma = SIMP ( statut = "o",
+                                                     typ = "R",
+                                                     max = 1,
+                                                     val_min = 0.,
+                                                     fr = "Ecart type de la loi",
+                                                     ang = "Standard deviation",
+                                                     ),
+
+                                      ), # Fin BLOC MuSigma_Parameters
+
+
+                  A = SIMP ( statut = "o",
+                             typ = "R",
+                             max = 1,
+                             fr = "Borne inferieure du support de la loi",
+                             ang = "Support lower bound",
+                             ),
+
+                  # B > A
+                  B = SIMP ( statut = "o",
+                             typ = "R",
+                             max = 1,
+                             fr = "Borne superieure du support de la loi",
+                             ang = "Support upper bound",
+                             ),
+
+  ), # Fin BLOC BETA
+
+
+
+  EXPONENTIAL = BLOC ( condition = " Kind in ( 'Exponential', ) ",
+
+                         Lambda = SIMP ( statut = "o",
+                                         typ = "R",
+                                         max = 1,
+                                         val_min = 0.,
+                                         fr = "Parametre Lambda | Lambda > 0",
+                                         ang = "Lambda parameter | Lambda > 0",
+                                         ),
+
+                         Gamma = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Borne inferieure du support de la loi",
+                                        ang = "Support lower bound",
+                                        ),
+
+  ), # Fin BLOC EXPONENTIAL
+
+
+
+  GAMMA = BLOC ( condition = " Kind in ( 'Gamma', ) ",
+
+                   Settings = SIMP ( statut = "o",
+                                        typ = "TXM",
+                                        max = 1,
+                                        into = ( "KLambda", "MuSigma" ),
+                                        defaut = "KLambda",
+                                        fr = "Parametrage de la loi gamma",
+                                        ang = "Gamma distribution parameter set",
+                                        ),
+
+                   KLambda_Parameters = BLOC ( condition = " Settings in ( 'KLambda', ) ",
+
+                                       K = SIMP ( statut = "o",
+                                                  typ = "R",
+                                                  max = 1,
+                                                  val_min = 0.,
+                                                  fr = "Parametre K de la loi | K > 0",
+                                                  ang = "K parameter | K > 0",
+                                                  ),
+
+                                       Lambda = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Lambda de la loi | Lambda > 0",
+                                                       ang = "Lambda parameter | Lambda > 0",
+                                                       ),
+
+                                       ), # Fin BLOC KLambda_Parameters
+
+
+                   MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                       Mu = SIMP ( statut = "o",
+                                                   typ = "R",
+                                                   max = 1,
+                                                   fr = "Moyenne de la loi",
+                                                   ang = "Mean value",
+                                                   ),
+
+                                       Sigma = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      val_min = 0.,
+                                                      fr = "Ecart type de la loi",
+                                                      ang = "Standard deviation",
+                                                      ),
+
+                                       ), # Fin BLOC MuSigma_Parameters
+
+                   Gamma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Borne inferieure du supoport de la loi",
+                                  ang = "Support lower bound",
+                                  ),
+
+
+  ), # Fin BLOC GAMMA
+
+
+
+  GEOMETRIC = BLOC ( condition = " Kind in ( 'Geometric', ) ",
+
+                       P = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  val_min = 0.,
+                                  val_max = 1.,
+                                  fr = "Parametre P | 0 < P < 1",
+                                  ang = "P parameter | 0 < P < 1",
+                                  ),
+
+  ), # Fin BLOC GEOMETRIC
+
+
+
+  GUMBEL = BLOC ( condition = " Kind in ( 'Gumbel', ) ",
+
+                    Settings = SIMP ( statut = "o",
+                                         typ = "TXM",
+                                         max = 1,
+                                         into = ( "AlphaBeta", "MuSigma" ),
+                                         defaut = "AlphaBeta",
+                                         fr = "Parametrage de la loi gumbel",
+                                         ang = "Gumbel distribution parameter set",
+                                         ),
+
+                    AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+                                        Alpha = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Alpha de la loi | Alpha > 0",
+                                                       ang = "Alpha parameter | Alpha > 0",
+                                                       ),
+
+                                        Beta = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      fr = "Parametre Beta de la loi",
+                                                      ang = "Beta parameter",
+                                                      ),
+
+                                        ), # Fin BLOC AlphaBeta_Parameters
+
+
+                    MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                        Mu = SIMP ( statut = "o",
+                                                    typ = "R",
+                                                    max = 1,
+                                                    fr = "Moyenne de la loi",
+                                                    ang = "Mean value",
+                                                    ),
+
+                                        Sigma = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Ecart type de la loi",
+                                                       ang = "Standard deviation",
+                                                       ),
+
+                                        ), # Fin BLOC MuSigma_Parameters
+
+  ), # Fin BLOC GUMBEL
+
+
+
+  HISTOGRAM = BLOC ( condition = " Kind in ( 'Histogram', ) ",
+
+                       First = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du supoport de la loi",
+                                    ang = "Support lower bound",
+                                    ),
+
+                       # Il faut definir une collection de couples ( x,p ) 
+                       Values = SIMP ( statut = 'o',
+                                       typ = Tuple(2),
+                                       max = '**',
+                                       fr = "Liste de couples : largeur de classe, probabilité associée",
+                                       ang = "Class bandwidth, associated probability couple list",
+                                       validators=VerifTypeTuple(('R','R')),
+                                       ),
+
+  ), # Fin BLOC HISTOGRAM
+
+
+
+  LAPLACE = BLOC ( condition = " Kind in ( 'Laplace', ) ",
+
+                   Lambda = SIMP ( statut = "o",
+                                   typ = "R",
+                                   max = 1,
+                                   val_min = 0.,
+                                   fr = "Parametre Lambda | Lambda > 0",
+                                   ang = "Lambda parameter | Lambda > 0",
+                                   ),
+                   
+                   Mu = SIMP ( statut = "o",
+                               typ = "R",
+                               max = 1,
+                               fr = "Moyenne de la loi",
+                               ang = "Mean value",
+                              ),
+
+  ), # Fin BLOC LAPLACE
+
+  LOGNORMAL = BLOC ( condition = " Kind in ( 'LogNormal', ) ",
+
+                     Settings = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       max = 1,
+                                       into = ( "MuSigmaLog", "MuSigma", "MuSigmaOverMu" ),
+                                       defaut = "MuSigmaLog",
+                                       fr = "Parametrage de la loi lognormale",
+                                       ang = "Lognormal distribution parameter set",
+                                       ),
+
+                     MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                                 Mu = SIMP ( statut = "o",
+                                                             typ = "R",
+                                                             max = 1,
+                                                             fr = "Moyenne de la loi",
+                                                             ang = "Mean value",
+                                                             ),
+
+                                                 Sigma = SIMP ( statut = "o",
+                                                                typ = "R",
+                                                                max = 1,
+                                                                val_min = 0.,
+                                                                fr = "Ecart type de la loi",
+                                                                ang = "Standard deviation",
+                                                                ),
+
+                                                 ), # Fin BLOC MuSigma_Parameters
+
+                     MuSigmaOverMu_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaOverMu', ) ",
+
+                                                 Mu = SIMP ( statut = "o",
+                                                             typ = "R",
+                                                             max = 1,
+                                                             fr = "Moyenne de la loi",
+                                                             ang = "Mean value",
+                                                             ),
+
+                                                 SigmaOverMu = SIMP ( statut = "o",
+                                                                typ = "R",
+                                                                max = 1,
+                                                                val_min = 0.,
+                                                                fr = "Rapport ecart type / moyenne de la loi",
+                                                                ang = "Standard deviation / mean value ratio",
+                                                                ),
+
+                                                 ), # Fin BLOC MuSigmaOverMu_Parameters
+
+                     MuSigmaLog_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaLog', ) ",
+
+                                                    MuLog = SIMP ( statut = "o",
+                                                                   typ = "R",
+                                                                   max = 1,
+                                                                   fr = "Moyenne du log",
+                                                                   ang = "Log mean value",
+                                                                   ),
+
+                                                    SigmaLog = SIMP ( statut = "o",
+                                                                      typ = "R",
+                                                                      max = 1,
+                                                                      val_min = 0.,
+                                                                      fr = "Ecart type du log",
+                                                                      ang = "Log standard deviation",
+                                                                      ),
+                                            
+                                                    ), # Fin BLOC MuSigmaLog_Parameters
+
+                     Gamma = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du support de la loi",
+                                    ang = "Support lower bound",
+                                    ),
+
+   ), # Fin BLOC LOGNORMAL
+
+
+
+   LOGISTIC = BLOC ( condition = " Kind in ( 'Logistic', ) ",
+
+                       Alpha = SIMP ( statut = "o",
+                                      typ = "R",
+                                      max = 1,
+                                      fr = "Borne inferieure du supoport de la loi",
+                                      ang = "Support lower bound",
+                                      ),
+
+                       Beta = SIMP ( statut = "o",
+                                     typ = "R",
+                                     max = 1,
+                                     val_min = 0.,
+                                     fr = "Parametre Beta de la loi | Beta > 0",
+                                     ang = "Beta parameter | Beta > 0",
+                                     ),
+
+   ), # Fin BLOC LOGISTIC
+
+
+
+   MULTINOMIAL = BLOC ( condition = " Kind in ( 'MultiNomial', ) ",
+                         
+                         N = SIMP ( statut = "o",
+                                    typ = "I",
+                                    max = 1,
+                                    fr = "Parametre N de la loi | N > 0",
+                                    ang = "N parameter | N > 0",
+                                    ),
+
+                       # Il faut definir une collection de couples ( x,p ) 
+                       Values = SIMP ( statut = 'o',
+                                       typ = "R",
+                                       max = '**',
+                                       fr = "Liste de probabilités",
+                                       ang = "Probability list",
+                                       validators=VerifTypeTuple(('R','R')),
+                                       ),
+
+   ), # Fin BLOC MULTINOMIAL
+
+
+  NONCENTRALSTUDENT = BLOC ( condition = " Kind in ( 'NonCentralStudent', ) ",
+
+                   Nu = SIMP ( statut = "o",
+                               typ = "R",
+                               max = 1,
+                               fr = "Parametre Nu de la loi | Nu > 0",
+                               ang = "Nu parameter | Nu > 0",
+                              ),
+
+                   Delta = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Delta de la loi | Delta > 0",
+                                  ang = "Delta parameter | Delta > 0",
+                                  ),
+                   
+                   Gamma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Gamma de centrage de la loi",
+                                  ang = "Gamma parameter",
+                                  ),
+
+  ), # Fin BLOC NONCENTRALSTUDENT
+
+
+   NORMAL = BLOC ( condition = " Kind in ( 'Normal', ) ",
+
+                    Mu = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Moyenne de la loi",
+                                ang = "Mean value",
+                                ),
+
+                   Sigma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  val_min = 0.,
+                                  fr = "Ecart type de la loi",
+                                  ang = "Standard deviation",
+                                  ),
+
+   ), # Fin BLOC NORMAL
+
+
+
+   POISSON = BLOC ( condition = " Kind in ( 'Poisson', ) ",
+
+                     Lambda = SIMP ( statut = "o",
+                                     typ = "R",
+                                     max = 1,
+                                     val_min = 0.,
+                                     fr = "Parametre Lambda de la loi | Lambda > 0",
+                                     ang = "Lambda parameter | Lambda > 0",
+                                     ),
+
+   ), # Fin BLOC POISSON
+
+
+
+  RAYLEIGH = BLOC ( condition = " Kind in ( 'Rayleigh', ) ",
+
+                   Sigma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Sigma de la loi | Sigma > 0",
+                                  ang = "Sigma parameter | Sigma > 0",
+                                  ),
+
+                   Gamma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Borne inferieure du support de la loi",
+                                  ang = "Support lower bound",
+                                  ),
+ ), # Fin BLOC RAYLEIGH
+
+
+   STUDENT = BLOC ( condition = " Kind in ( 'Student', ) ",
+
+                     Mu = SIMP ( statut = "o",
+                                 typ = "R",
+                                 max = 1,
+                                 fr = "Parametre Mu de la loi",
+                                 ang = "Mu parameter",
+                                 ),
+
+                     Nu = SIMP ( statut = "o",
+                                 typ = "R",
+                                 max = 1,
+                                 val_min = 2.,
+                                 fr = "Parametre Nu de la loi | Nu > 2",
+                                 ang = "Nu parameter | Nu > 2",
+                                 ),
+
+                   Sigma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Sigma de la loi",
+                                  ang = "Sigma parameter",
+                                  ),
+
+   ), # Fin BLOC STUDENT
+
+
+
+   TRIANGULAR = BLOC ( condition = " Kind in ( 'Triangular', ) ",
+
+                         A = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du support de la loi | A < M < B",
+                                    ang = "Support lower bound | A < M < B",
+                                    ),
+
+                         M = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Mode de la loi | A < M < B",
+                                    ang = "Mode | A < M < B",
+                                    ),
+
+                         B = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne superieure du support de la loi | A < M < B",
+                                    ang = "Support upper bound | A < M < B",
+                                    ),
+
+   ), # Fin BLOC TRIANGULAR
+
+
+
+   TRUNCATEDNORMAL = BLOC ( condition = " Kind in ( 'TruncatedNormal', ) ",
+
+                             MuN = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = 1,
+                                          fr = "Moyenne de la loi Normale non tronquée",
+                                          ang = "Mean value of the associated non truncated normal distribution",
+                                          ),
+
+                             SigmaN = SIMP ( statut = "o",
+                                             typ = "R",
+                                             max = 1,
+                                             val_min = 0.,
+                                             fr = "Ecart-type de la loi Normale non tronquée",
+                                             ang = "Standard deviation of the associated non truncated normal distribution",
+                                             ),
+
+                             A = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Borne inferieure de la loi | A < B",
+                                        ang = "Lower bound | A < B",
+                                        ),
+
+                             B = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Borne superieure de la loi | A < B",
+                                        ang = "Upper bound | A < B",
+                                        ),
+
+   ), # Fin BLOC TRUNCATEDNORMAL
+
+
+
+   UNIFORM = BLOC ( condition = " Kind in ( 'Uniform', ) ",
+
+                     A = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Borne inferieure du support de la loi | A < B",
+                                ang = "Support lower bound | A < B",
+                                ),
+
+                     B = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Borne superieure du support de la loi | A < B",
+                                ang = "Support upper bound | A < B",
+                                ),
+
+   ), # Fin BLOC UNIFORM
+
+
+
+   USERDEFINED = BLOC ( condition = " Kind in ( 'UserDefined', ) ",
+
+                           # Il faut definir une collection de couples ( x,p ) 
+                         Values = SIMP ( statut = 'o',
+                                         typ = 'R',
+                                         max = '**',
+                                         ),
+
+   ), # Fin BLOC USERDEFINED
+
+
+
+   WEIBULL = BLOC ( condition = " Kind in ( 'Weibull', ) ",
+
+                     Settings = SIMP ( statut = "o",
+                                          typ = "TXM",
+                                          max = 1,
+                                          into = ( "AlphaBeta", "MuSigma" ),
+                                          defaut = "AlphaBeta",
+                                          fr = "Parametrage de la loi weibull",
+                                          ang = "Weibull distribution parameter set",
+                                          ),
+
+                     AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+                                         Alpha = SIMP ( statut = "o",
+                                                        typ = "R",
+                                                        max = 1,
+                                                        val_min = 0.,
+                                                        fr = "Parametre Alpha de la loi | Alpha > 0",
+                                                        ang = "Alpha parameter | Alpha > 0",
+                                                        ),
+
+                                         Beta = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Beta de la loi | Beta > 0",
+                                                       ang = "Beta parameter | Beta > 0",
+                                                       ),
+
+                                         ), # Fin BLOC AlphaBeta_Parameters
+
+
+                     MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                         Mu = SIMP ( statut = "o",
+                                                     typ = "R",
+                                                     max = 1,
+                                                     fr = "Moyenne de la loi",
+                                                     ang = "Mean value",
+                                                     ),
+
+                                         Sigma = SIMP ( statut = "o",
+                                                        typ = "R",
+                                                        max = 1,
+                                                        val_min = 0.,
+                                                        fr = "Ecart type de la loi",
+                                                        ang = "Standard deviation",
+                                                        ),
+
+                                         ), # Fin BLOC MuSigma_Parameters
+
+                     Gamma = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du support de la loi",
+                                    ang = "Support lower bound",
+                                    ),
+
+    ), # Fin BLOC WEIBULL
+
+) # Fin OPER DISTRIBUTION
+# Ordre Catalogue DISTRIBUTION
+
+
+
+#================================
+# Definition du modele physique
+#================================
+
+
+DETERMINISTICVARIABLE = OPER ( nom = "DETERMINISTICVARIABLE",
+            sd_prod = variable,
+            op = None,
+            fr = "Variable deterministe",
+            ang = "Deterministic variable",
+            
+  N = SIMP ( statut = 'o',
+             typ = "TXM",
+             fr = "Nom",
+             ang = "Name",
+             ),
+            
+  T = SIMP ( statut = 'o',
+             defaut = "in",
+             into = ( "in" , "out", ),
+             typ = "TXM",
+             fr = "Type",
+             ang = "Type",
+             ),
+            
+  R = SIMP ( statut = 'o',
+             defaut = 0,
+             typ = "I",
+             fr = "Rang",
+             ang = "Rank",
+             ),
+            
+) # Fin OPER DETERMINISTICVARIABLE
+# Ordre Catalogue DETERMINISTICVARIABLE
+
+
+
+import opsOT
+MODEL = MACRO ( nom = "MODEL",
+                op = None,
+                UIinfo = { "groupes" : ( "Gestion du travail", ) },
+                fr = "Chargement du wrapper du modele physique",
+                ang = "Physical model wrapper load",
+                sd_prod = opsOT.INCLUDE,
+                op_init = opsOT.INCLUDE_context,
+                fichier_ini = 1,
+               
+  FileName = SIMP ( statut = "o",
+                    typ = "Fichier",
+                    fr = "Nom du modele physique",
+                    ang = "Physical model identifier",
+                    ),
+               
+) # Fin PROC MODEL
+# Ordre Catalogue MODEL
+
+
+
+
+VARIABLE = PROC ( nom = "VARIABLE",
+                  op = None,
+                  docu = "",
+                  fr = "Variable probabiliste",
+                  ang = "Probabilistic variable",
+
+  ModelVariable = SIMP ( statut = "o",
+                         typ = ( variable, ),
+                         fr = "Variable d'entrée du modèle",
+                         ang = "Input variable of the model",
+                         ),
+
+  Distribution = SIMP ( statut = "o",
+                        typ = ( loi, ),
+                        fr = "Modélisation probabiliste",
+                        ang = "Probabilistic modelisation",
+                        ),
+                  
+) # Fin PROC VARIABLE
+# Ordre Catalogue VARIABLE
+
+
+CORRELATION = PROC ( nom = 'CORRELATION',
+                     op = None,
+                     docu = "",
+                     fr = "Correlation entre variables",
+                     ang = "Variable correlation",
+
+  Copula = SIMP ( statut = "o",
+                  typ = 'TXM',
+                  into = ( "Independent", "Normal" ),
+                  defaut = "Independent",
+                  fr = "Type de la copule",
+                  ang = "Copula kind",
+                  ),
+
+  Matrix = BLOC ( condition = "Copula in ( 'Normal', )",
+                  
+    CorrelationMatrix = SIMP ( statut = "o",
+                               typ = Matrice(nbLigs=None,
+                                             nbCols=None,
+                                             methodeCalculTaille='NbDeVariables',
+                                             valSup=1,
+                                             valMin=-1,
+                                             structure="symetrique"),
+                               fr = "Matrice de correlation entre les variables d'entree",
+                               ang = "Correlation matrix for input variables",
+                               ),
+  ), # Fin BLOC Matrix
+
+
+) # Fin PROC CORRELATION
+# Ordre Catalogue CORRELATION
+
+
+
+
+
+#================================
+# Definition de l'etude
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+CRITERIA = PROC ( nom = "CRITERIA",
+                  op = None,
+                  docu = "",
+                  fr = "Critère de l'étude d'incertitudes",
+                  ang = "Uncertainty study criteria",
+
+
+
+  Type = SIMP ( statut = "o",
+                typ = "TXM",
+                into = ( "Min/Max", "Central Uncertainty", "Threshold Exceedence" ),
+                fr = "Type du critère",
+                ang = "Criteria type",
+                ),
+
+
+
+
+
+
+
+  MinMax = BLOC ( condition = " Type in ( 'Min/Max', ) ",
+
+                  Method = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "Experiment Plane", "Random Sampling" ),
+                                  fr = "Methode",
+                                  ang = "Method",
+                                  ),
+                  # UC 3.1.1
+                  ExperimentPlaneSettings = BLOC ( condition = " Method in ( 'Experiment Plane', ) ",
+
+                          ExperimentPlane = SIMP ( statut = "o",
+                                                   typ = "TXM",
+                                                   into = ( "Axial", "Factorial", "Composite", ),
+                                                   fr = "Type du plan d'expérience",
+                                                   ang = "Experiment plane type",
+                                                   ),
+
+                          Levels = SIMP ( statut = "o",
+                                          typ = "R",
+                                          val_min = 0.0,
+                                          max = '**',    
+                                          fr = "Liste de niveaux dans chaque direction",
+                                          ang = "Levels in each direction",
+                                          ),
+
+                          # Scaled Vector
+                          UnitPerDimension = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = '**',    
+                                          fr = "Unité par dimension (autant que de variables declarées)",
+                                          ang = "Units per dimension (as much as declared variables)",
+                                          ),
+
+                          # Translation Vector
+                          Center = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = '**',    
+                                          fr = "Centre du plan d'expérience",
+                                          ang = "Experiment plan center",
+                                          ),
+
+                    ), # Fin BLOC ExperimentPlaneSettings
+
+
+
+                  RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+                          SimulationsNumber = SIMP ( statut = "o",
+                                                typ = "I",
+                                                val_min = 1,
+                                                fr = "Nombre de points",
+                                                ang = "Points number",
+                                                ),
+
+                    ), # Fin BLOC RandomSamplingSettings
+
+                  Result = SIMP (  statut = "o",
+                                   typ = "TXM",
+                                   into = ( "Min/Max", ),
+                                   defaut = "Min/Max",
+                                   fr = "Le minimum et le maximum de la variable d'intérêt",
+                                   ang = "The min and max values",
+                                   ),
+
+
+  ), # Fin BLOC MinMax
+
+
+
+
+  CentralUncertainty = BLOC ( condition = " Type in ( 'Central Uncertainty', ) ",
+
+                  Method = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "Taylor Variance Decomposition", "Random Sampling" ),
+                                  fr = "Methode",
+                                  ang = "Method",
+                                  ),
+                              
+                  # UC 3.2.
+                  TaylorVarianceDecompositionSettings = BLOC ( condition = " Method in ( 'Taylor Variance Decomposition', ) ",
+
+                      Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                              MeanFirstOrder = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Moyenne au premier ordre",
+                                                ang = "MeanFirstOrder",
+                                                ),
+
+                              StandardDeviationFirstOrder = SIMP ( statut = "o",
+                                                                   typ = 'TXM',
+                                                                   into = ( 'yes', 'no' ),
+                                                                   defaut = 'yes',
+                                                                   max = 1,
+                                                                   fr = "Ecart-type au premier ordre",
+                                                                   ang = "StandardDeviationFirstOrder",
+                                                                   ),
+
+                              MeanSecondOrder = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'no',
+                                                       max = 1,
+                                                       fr = "Moyenne au second ordre",
+                                                       ang = "MeanSecondOrder",
+                                                       ),
+
+                              ImportanceFactor = SIMP ( statut = "o",
+                                                        typ = 'TXM',
+                                                        into = ( 'yes', 'no' ),
+                                                        defaut = 'yes',
+                                                        max = 1,
+                                                        fr = "Facteur d'importance pour variable de sortie scalaire",
+                                                        ang = "ImportanceFactor",
+                                                        ),
+                              ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                                     ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique des facteurs d'importance",
+                                                                              ang = "Importance Factor Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC ImportanceFactorSettings
+                                      
+                      ), # Fin FACT Result
+                                                               
+                  ), # Fin BLOC TaylorVarianceDecompositionSettings
+
+
+
+                  RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+                          SimulationsNumber = SIMP ( statut = "o",
+                                                typ = "I",
+                                                val_min = 1,
+                                                fr = "Nombre de points",
+                                                ang = "Points number",
+                                                ),
+
+                       Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                              EmpiricalMean = SIMP ( statut = "o",
+                                                     typ = 'TXM',
+                                                     into = ( 'yes', 'no' ),
+                                                     defaut = 'yes',
+                                                     max = 1,
+                                                     fr = "Moyenne empirique",
+                                                     ang = "Empirical mean",
+                                                     ),
+
+                              EmpiricalStandardDeviation = SIMP ( statut = "o",
+                                                                  typ = 'TXM',
+                                                                  into = ( 'yes', 'no' ),
+                                                                  defaut = 'yes',
+                                                                  max = 1,
+                                                                  fr = "Ecart-type empirique",
+                                                                  ang = "Empirical standard deviation",
+                                                                  ),
+
+                              EmpiricalQuantile = SIMP ( statut = "o",
+                                                         typ = 'TXM',
+                                                         into = ( 'yes', 'no' ),
+                                                         defaut = 'yes',
+                                                         max = 1,
+                                                         fr = "Quantile empirique",
+                                                         ang = "Empirical quantile",
+                                                         ),
+
+                              EmpiricalQuantileSettings = BLOC ( condition = " EmpiricalQuantile in ( 'yes', ) ",
+
+                                  EmpiricalQuantile_Order = SIMP ( statut = "o",
+                                                                   typ = 'R',
+                                                                   defaut = 0.95,
+                                                                   max = 1,
+                                                                   val_min = 0.0,
+                                                                   val_max = 1.0,
+                                                                   fr = "Ordre du quantile empirique",
+                                                                   ang = "Empirical quantile order",
+                                                                   ),
+
+                              ), # Fin BLOC EmpiricalQuantileSettings
+
+                              CorrelationAnalysis = SIMP ( statut = "o",
+                                                            typ = 'TXM',
+                                                            into = ( 'yes', 'no' ),
+                                                            defaut = 'yes',
+                                                            max = 1,
+                                                            fr = "Correlations analysees",
+                                                            ang = "Analysed correlations",
+                                                            ),
+
+                              KernelSmoothing = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'yes',
+                                                       max = 1,
+                                                       fr = "Kernel smoothing de l'echantillon",
+                                                       ang = "Kernel smoothing of the sample",
+                                                       ),
+
+                              KernelSmoothingSettings = BLOC ( condition = " KernelSmoothing in ( 'yes', ) ",
+
+                                     KernelSmoothingDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique de la reconstruction a noyau",
+                                                                              ang = "Kernel Smoothing Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC KernelSmoothingSettings
+                                      
+                      ), # Fin FACT Result
+                                                               
+                  ), # Fin BLOC RandomSamplingSettings
+
+  ), # Fin BLOC CentralUncertainty
+
+
+
+
+  ThresholdExceedence = BLOC ( condition = " Type in ( 'Threshold Exceedence', ) ",
+
+         Event =  FACT ( statut = "o",
+                         min = 1,
+                         max = 1,
+
+                         Threshold = SIMP ( statut = "o",
+                                            typ = "R",
+                                            max = 1,
+                                            fr = "Le seuil de defaillance",
+                                            ang = "Failure threshold",
+                                            ),
+
+                         ComparisonOperator = SIMP ( statut = "o",
+                                                     typ = "TXM",
+                                                     max = 1,
+                                                     into = ( "Less", "LessOrEqual", "Equal", "GreaterOrEqual", "Greater" ),
+                                                     fr = "Que faut-il ne pas depasser : un maximum ou un minimum",
+                                                     ang = "What is the failure threshold : maximum or minimum",
+                                                     ),
+         ), # Fin FACT Event
+                         
+
+         Method = SIMP ( statut = "o",
+                         typ = "TXM",
+                         into = ( "Simulation", "FORM_SORM" ),
+                         fr = "Methode",
+                         ang = "Method",
+                         ),
+
+         SimulationSettings = BLOC ( condition = " Method in ( 'Simulation', ) ",
+
+               Algorithm = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "MonteCarlo", "LHS", "ImportanceSampling" ),
+                                  fr = "Algorithme de simulation",
+                                  ang = "Simulation algorithm",
+                                  ),
+
+                                 
+               RandomGenerator = FACT ( statut = "o",
+                                        min = 1,
+                                        max = 1,
+
+                           SeedToBeSet = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'no',
+                                                max = 1,
+                                                fr = "La racine du generateur aleatoire doit-elle etre positionnee ?",
+                                                ang = "Does the random generator seed need to be set ?",
+                                                ),
+
+                           SeedSettings = BLOC ( condition = " SeedToBeSet in ( 'yes', ) ",
+
+                                                 RandomGeneratorSeed = SIMP ( statut = "o",
+                                                                              typ = "I",
+                                                                              max = 1,
+                                                                              fr = "Racine du generateur aleatoire",
+                                                                              ang = "Random generator seed",
+                                                                              ),
+
+                                               ), # Fin BLOC SeedSettings
+
+               ), # Fin FACT RandomGenerator
+
+
+               BlockSize = SIMP ( statut = "o",
+                                  typ = "I",
+                                  max = 1,
+                                  val_min = 1,
+                                  defaut = 1,
+                                  fr = "Nombre de calculs realises en bloc",
+                                  ang = "Number of computations as a block",
+                                  ),
+
+               MaximumOuterSampling = SIMP ( statut = "o",
+                                             typ = "I",
+                                             max = 1,
+                                             val_min = 1,
+                                             fr = "Maximum d'iterations externes",
+                                             ang = "Maximum outer Sampling value",
+                                             ),
+
+               MaximumCoefficientOfVariation = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      defaut = 0.1,
+                                                      val_min = 0.0,
+                                                      val_max = 1.0,
+                                                      fr = "Coefficient de variation maximum",
+                                                      ang = "Maximum coefficient of variation"
+                                                      ),
+
+               ImportanceSamplingSettings = BLOC ( condition = " Algorithm in ( 'ImportanceSampling', ) ",
+
+                            MeanVector = SIMP ( statut = "o",
+                                                typ = "R",
+                                                max = "**",
+                                                fr = "Moyenne",
+                                                ang = "Mean vector",
+                                                ),
+
+                            Correlation = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'Independent', 'Linear' ),
+                                                 defaut = 'Independent',
+                                                 max = 1,
+                                                 fr = "Le type de correlation entre les variables",
+                                                 ang = "Correlation between variables",
+                                                 ),
+
+               ), # Fin BLOC ImportanceSamplingSettings
+
+               Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                    Probability = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Probabiblite",
+                                         ang = "Probability",
+                                         ),
+
+                    StandardDeviation = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Ecart type",
+                                         ang = "Standard deviation",
+                                         ),
+
+                    ConfidenceInterval = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Intervale de confiance",
+                                                ang = "Confidence interval",
+                                                ),
+
+                    ConfidenceIntervalSettings = BLOC ( condition = " ConfidenceInterval in ( 'yes', ) ",
+
+                          Level = SIMP ( statut = "o",
+                                         typ = 'R',
+                                         defaut = 0.9,
+                                         max = 1,
+                                         val_min = 0.0,
+                                         val_max = 1.0,
+                                         fr = "Niveau de confiance",
+                                         ang = "Confidence level",
+                                         ),
+                                                     
+                    ), # Fin BLOC ConfidenceIntervalSettings
+                               
+                    VariationCoefficient = SIMP ( statut = "o",
+                                                  typ = 'TXM',
+                                                  into = ( 'yes', 'no' ),
+                                                  defaut = 'yes',
+                                                  max = 1,
+                                                  fr = "Coefficient de variation",
+                                                  ang = "Coefficient of variation",
+                                                  ),
+
+                    SimulationsNumber = SIMP ( statut = "o",
+                                             typ = 'TXM',
+                                             into = ( 'yes', 'no' ),
+                                             defaut = 'yes',
+                                             max = 1,
+                                             fr = "Nombre d'iterations",
+                                             ang = "Iteration number",
+                                             ),
+
+                    ConvergenceGraph = SIMP ( statut = "o",
+                                             typ = 'TXM',
+                                             into = ( 'yes', 'no' ),
+                                             defaut = 'yes',
+                                             max = 1,
+                                             fr = "Graphe de convergence",
+                                             ang = "Convergence graph",
+                                             ),
+                               
+                    ConvergenceGraphSettings = BLOC ( condition = " ConvergenceGraph in ( 'yes', ) ",
+
+                                     ConvergenceDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique de la convergence",
+                                                                         ang = "Convergence Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC ConvergenceGraphSettings
+                                      
+             ), # Fin FACT Result
+                                                               
+
+
+         ), # Fin BLOC SimulationSettings
+
+
+                               
+         FORM_SORMSettings = BLOC ( condition = " Method in ( 'FORM_SORM', ) ",
+
+                Approximation = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       defaut = "FirstOrder",
+                                       into = ( "FirstOrder", "SecondOrder" ),
+                                       max = 1,
+                                       fr = "Approximation",
+                                       ang = "Approximation",
+                                       ),
+
+                OptimizationAlgorithm = SIMP ( statut = "o",
+                                               typ = "TXM",
+                                               defaut = "Cobyla",
+                                               into = ( "Cobyla", "AbdoRackwitz" ),
+                                               max = 1,
+                                               fr = "Methode d'optimisation",
+                                               ang = "Optimization method",
+                                               ),
+
+                                     
+                PhysicalStartingPoint = SIMP ( statut = "f",
+                                               typ = "R",
+                                               max = "**",
+                                               fr = "Point de demarrage de l'algorithme iteratif",
+                                               ang = "Initial point for iterative process",
+                                               ),
+
+                MaximumIterationsNumber = SIMP ( statut = "f",
+                                                 typ = "I",
+                                                 max = 1,
+                                                 val_min = 1,
+                                                 fr = "Nombre maximum d'iterations",
+                                                 ang = "Maximum number of iterations",
+                                                 ),
+
+                                     
+                MaximumAbsoluteError = SIMP ( statut = "o",
+                                              typ = "R",
+                                              max = 1,
+                                              defaut = 1E-4,
+                                              val_min = 0.0,
+                                              fr = "Distance maximum absolue entre 2 iterations successives",
+                                              ang = "Absolute maximum distance between 2 successive iterates",
+                                              ),
+
+                MaximumRelativeError = SIMP ( statut = "o",
+                                               typ = "R",
+                                               max = 1,
+                                               defaut = 1E-4,
+                                               val_min = 0.0,
+                                               fr = "Distance maximum relative entre 2 iterations successives",
+                                               ang = "Relative maximum distance between 2 successive iterates",
+                                               ),
+                                     
+                MaximumConstraintError = SIMP ( statut = "o",
+                                                typ = "R",
+                                                max = 1,
+                                                defaut = 1E-4,
+                                                val_min = 0.0,
+                                                fr = "Valeur maximum absolue de la fonction moins la valeur du niveau",
+                                                ang = "Maximum absolute value of the constraint function minus the level value",
+                                                ),
+
+                ImportanceSampling = SIMP ( statut = "o",
+                                            typ = 'TXM',
+                                            into = ( 'yes', 'no' ),
+                                            defaut = 'no',
+                                            max = 1,
+                                            fr = "Tirage d'importance au point de conception",
+                                            ang = "Importance sampling at design point",
+                                            ),
+
+                FORMResult = BLOC ( condition = " Approximation in ( 'FirstOrder', ) ",
+
+                    Probability = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Probabiblite",
+                                         ang = "Probability",
+                                         ),
+
+                    DesignPoint = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', 'no' ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Point de conception",
+                                         ang = "Design point",
+                                         ),
+
+                    HasoferReliabilityIndex = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Indice de fiabilite",
+                                                 ang = "Reliability index",
+                                                 ),
+
+                    ImportanceFactor = SIMP ( statut = "o",
+                                              typ = 'TXM',
+                                              into = ( 'yes', 'no' ),
+                                              defaut = 'yes',
+                                              max = 1,
+                                              fr = "Facteur d'importance pour variable de sortie scalaire",
+                                              ang = "Importance factor",
+                                              ),
+
+                    ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                                     ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique des facteurs d'importance",
+                                                                              ang = "Importance Factor Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC ImportanceFactorSettings
+                                      
+                    SensitivityAnalysis = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Analyse de sensibilite",
+                                                 ang = "Sensitivity analysis",
+                                                 ),
+
+                    SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+                            FORMEventProbabilitySensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+        
+                            FORMEventProbabilitySensitivitySettings = BLOC ( condition = " FORMEventProbabilitySensitivity in ( 'yes', ) ",
+
+                                     FORMEventProbabilitySensitivityDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique des sensibilites",
+                                                                         ang = "Sensitivity Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC FORMEventProbabilitySensitivitySettings
+                                      
+                            HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+        
+                            HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+                                     HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique des sensibilites",
+                                                                         ang = "Sensitivity Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+                                      
+                    ), # Fin BLOC SensitivityAnalysisSettings
+
+                    FunctionCallsNumber = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Nombre d'appels a la fonction",
+                                                 ang = "Function calls number",
+                                                 ),
+
+
+                ), # Fin BLOC FORMResult
+
+
+                SORMResult = BLOC ( condition = " Approximation in ( 'SecondOrder', ) ",
+
+
+                    TvedtApproximation = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Approximation de Tvedt",
+                                                ang = "Tvedt approximation",
+                                                ),
+
+                    HohenBichlerApproximation = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'yes',
+                                                       max = 1,
+                                                       fr = "Approximation de HohenBichler",
+                                                       ang = "HohenBichler approximation",
+                                                       ),
+
+                    BreitungApproximation = SIMP ( statut = "o",
+                                                   typ = 'TXM',
+                                                   into = ( 'yes', 'no' ),
+                                                   defaut = 'yes',
+                                                   max = 1,
+                                                   fr = "Approximation de Breitung",
+                                                   ang = "Breitung approximation",
+                                                   ),
+
+                    DesignPoint = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', 'no' ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Point de conception",
+                                         ang = "Design point",
+                                         ),
+
+                    ImportanceFactor = SIMP ( statut = "o",
+                                              typ = 'TXM',
+                                              into = ( 'yes', 'no' ),
+                                              defaut = 'yes',
+                                              max = 1,
+                                              fr = "Facteur d'importance pour variable de sortie scalaire",
+                                              ang = "Importance factor",
+                                              ),
+
+                    ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                                     ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique des facteurs d'importance",
+                                                                              ang = "Importance Factor Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC ImportanceFactorSettings
+                                      
+                    SensitivityAnalysis = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Analyse de sensibilite",
+                                                 ang = "Sensitivity analysis",
+                                                 ),
+
+                    SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+                            HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+                                                                 
+                            HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+                                     HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique des sensibilites",
+                                                                         ang = "Sensitivity Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+                                      
+                    ), # Fin BLOC SensitivityAnalysisSettings
+
+                    FunctionCallsNumber = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Nombre d'appels a la fonction",
+                                                 ang = "Function calls number",
+                                                 ),
+
+
+                ), # Fin BLOC SecondOrder
+
+
+                                     
+        ), # Fin BLOC FORM_SORMSettings
+
+
+                               
+  ), # Fin BLOC ThresholdExceedence
+
+
+
+) # Fin PROC CRITERIA
+# Ordre Catalogue CRITERIA
+
+
+
+
+
+
+
diff --git a/Openturns_Study/OpenTURNS_Cata_Study_V7.py b/Openturns_Study/OpenTURNS_Cata_Study_V7.py
new file mode 100644 (file)
index 0000000..b8ac5d3
--- /dev/null
@@ -0,0 +1,1726 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+#from Accas import ASSD, JDC_CATA, AU_MOINS_UN, PROC, SIMP, FACT, OPER, MACRO, BLOC, A_VALIDATOR
+from Accas import *
+
+class loi      ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+import types
+class Tuple:
+  def __init__(self,ntuple):
+    self.ntuple=ntuple
+
+  def __convert__(self,valeur):
+    if type(valeur) == types.StringType:
+      return None
+    if len(valeur) != self.ntuple:
+      return None
+    return valeur
+
+  def info(self):
+    return "Tuple de %s elements" % self.ntuple
+
+  __repr__=info
+  __str__=info
+
+class Matrice:
+  def __init__(self,nbLigs=None,nbCols=None,methodeCalculTaille=None,formatSortie="ligne",valSup=None,valMin=None,structure=None):
+      self.nbLigs=nbLigs
+      self.nbCols=nbCols
+      self.methodeCalculTaille=methodeCalculTaille
+      self.formatSortie=formatSortie
+      self.valSup=valSup
+      self.valMin=valMin
+      self.structure=structure
+
+  def __convert__(self,valeur):
+    # Attention ne verifie pas grand chose
+    if type(valeur) != types.ListType :
+      return None
+    return valeur
+
+  def info(self):
+      return "Matrice %s x %s" % (self.nbLigs, self.nbCols)
+
+      __repr__=info
+      __str__=info
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_STUDY',
+                 execmodul = None,
+                 regles = ( AU_MOINS_UN ( 'CRITERIA' ),
+                            AU_MOINS_UN ( 'MODEL' ),
+                            AVANT ( ('DISTRIBUTION', 'MODEL'), 'VARIABLE' ),
+#                            A_CLASSER ( 'VARIABLE',                'CORRELATION' ),
+#                            A_CLASSER ( 'VARIABLE',                'CRITERIA' ),
+#                            A_CLASSER ( 'CORRELATION',             'CRITERIA' ),
+                            ),
+                 ) # Fin JDC_CATA
+
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+LOG = PROC ( nom = "LOG",
+             op = None,
+             docu = "",
+               
+  DebugMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de debug de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library debug level print",
+                 ),
+               
+  WrapperMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de wrapper de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library debug level print",
+                 ),
+               
+  UserMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de user de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library user level print",
+                 ),
+               
+  InfoMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de info de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library info level print",
+                 ),
+               
+  WarningMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de warning de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library warning level print",
+                 ),
+               
+  ErrorMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de error de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library error level print",
+                 ),
+               
+) # Fin PROC LOG
+# Ordre Catalogue LOG
+
+
+
+
+
+#================================
+# Definition des LOIS
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+DISTRIBUTION = OPER ( nom = "DISTRIBUTION",
+                      sd_prod = loi,
+                      op = 68,
+                      fr = "Definitions des lois marginales utilisees par les variables d'entree", 
+                      
+                      
+#====
+# Type de distribution
+#====
+
+  Kind = SIMP ( statut = "o", typ = "TXM",
+                into = ( "Beta",
+                         "Exponential",
+                         "Gamma",
+                         "Geometric",
+                         "Gumbel",
+                         "Histogram",
+                         "Laplace",
+                         "Logistic",
+                         "LogNormal",
+                         "MultiNomial",
+                         "NonCentralStudent",
+                         "Normal",
+                         "Poisson",
+                         "Rayleigh",
+                         "Student",
+                         "Triangular",
+                         "TruncatedNormal",
+                         "Uniform",
+                         #"UserDefined",
+                         "Weibull",
+                         ),
+                fr = "Choix du type de la loi marginale",
+                ang = "1D marginal distribution",
+                ),
+
+#====
+# Definition des parametres selon le type de la loi
+#====
+
+  BETA = BLOC ( condition = " Kind in ( 'Beta', ) ",
+
+                  Settings = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       max = 1,
+                                       into = ( "RT", "MuSigma" ),
+                                       defaut = "RT",
+                                       fr = "Parametrage de la loi beta",
+                                       ang = "Beta distribution parameter set",
+                                       ),
+
+                  RT_Parameters = BLOC ( condition = " Settings in ( 'RT', ) ",
+
+                                      R = SIMP ( statut = "o",
+                                                 typ = "R",
+                                                 max = 1,
+                                                 val_min = 0.,
+                                                 fr = "Parametre R de la loi | R > 0",
+                                                 ang = "R parameter | R > 0",
+                                                 ),
+
+                                      # T > R
+                                      T = SIMP ( statut = "o",
+                                                 typ = "R",
+                                                 max = 1,
+                                                 val_min = 0.,
+                                                 fr = "Parametre T de la loi | T > R",
+                                                 ang = "T parameter | T > R",
+                                                 ),
+
+                                      ), # Fin BLOC RT_Parameters
+
+
+                  MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                      Mu = SIMP ( statut = "o",
+                                                  typ = "R",
+                                                  max = 1,
+                                                  fr = "Moyenne de la loi",
+                                                  ang = "Mean value",
+                                                  ),
+
+                                      Sigma = SIMP ( statut = "o",
+                                                     typ = "R",
+                                                     max = 1,
+                                                     val_min = 0.,
+                                                     fr = "Ecart type de la loi",
+                                                     ang = "Standard deviation",
+                                                     ),
+
+                                      ), # Fin BLOC MuSigma_Parameters
+
+
+                  A = SIMP ( statut = "o",
+                             typ = "R",
+                             max = 1,
+                             fr = "Borne inferieure du support de la loi",
+                             ang = "Support lower bound",
+                             ),
+
+                  # B > A
+                  B = SIMP ( statut = "o",
+                             typ = "R",
+                             max = 1,
+                             fr = "Borne superieure du support de la loi",
+                             ang = "Support upper bound",
+                             ),
+
+  ), # Fin BLOC BETA
+
+
+
+  EXPONENTIAL = BLOC ( condition = " Kind in ( 'Exponential', ) ",
+
+                         Lambda = SIMP ( statut = "o",
+                                         typ = "R",
+                                         max = 1,
+                                         val_min = 0.,
+                                         fr = "Parametre Lambda | Lambda > 0",
+                                         ang = "Lambda parameter | Lambda > 0",
+                                         ),
+
+                         Gamma = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Borne inferieure du support de la loi",
+                                        ang = "Support lower bound",
+                                        ),
+
+  ), # Fin BLOC EXPONENTIAL
+
+
+
+  GAMMA = BLOC ( condition = " Kind in ( 'Gamma', ) ",
+
+                   Settings = SIMP ( statut = "o",
+                                        typ = "TXM",
+                                        max = 1,
+                                        into = ( "KLambda", "MuSigma" ),
+                                        defaut = "KLambda",
+                                        fr = "Parametrage de la loi gamma",
+                                        ang = "Gamma distribution parameter set",
+                                        ),
+
+                   KLambda_Parameters = BLOC ( condition = " Settings in ( 'KLambda', ) ",
+
+                                       K = SIMP ( statut = "o",
+                                                  typ = "R",
+                                                  max = 1,
+                                                  val_min = 0.,
+                                                  fr = "Parametre K de la loi | K > 0",
+                                                  ang = "K parameter | K > 0",
+                                                  ),
+
+                                       Lambda = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Lambda de la loi | Lambda > 0",
+                                                       ang = "Lambda parameter | Lambda > 0",
+                                                       ),
+
+                                       ), # Fin BLOC KLambda_Parameters
+
+
+                   MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                       Mu = SIMP ( statut = "o",
+                                                   typ = "R",
+                                                   max = 1,
+                                                   fr = "Moyenne de la loi",
+                                                   ang = "Mean value",
+                                                   ),
+
+                                       Sigma = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      val_min = 0.,
+                                                      fr = "Ecart type de la loi",
+                                                      ang = "Standard deviation",
+                                                      ),
+
+                                       ), # Fin BLOC MuSigma_Parameters
+
+                   Gamma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Borne inferieure du supoport de la loi",
+                                  ang = "Support lower bound",
+                                  ),
+
+
+  ), # Fin BLOC GAMMA
+
+
+
+  GEOMETRIC = BLOC ( condition = " Kind in ( 'Geometric', ) ",
+
+                       P = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  val_min = 0.,
+                                  val_max = 1.,
+                                  fr = "Parametre P | 0 < P < 1",
+                                  ang = "P parameter | 0 < P < 1",
+                                  ),
+
+  ), # Fin BLOC GEOMETRIC
+
+
+
+  GUMBEL = BLOC ( condition = " Kind in ( 'Gumbel', ) ",
+
+                    Settings = SIMP ( statut = "o",
+                                         typ = "TXM",
+                                         max = 1,
+                                         into = ( "AlphaBeta", "MuSigma" ),
+                                         defaut = "AlphaBeta",
+                                         fr = "Parametrage de la loi gumbel",
+                                         ang = "Gumbel distribution parameter set",
+                                         ),
+
+                    AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+                                        Alpha = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Alpha de la loi | Alpha > 0",
+                                                       ang = "Alpha parameter | Alpha > 0",
+                                                       ),
+
+                                        Beta = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      fr = "Parametre Beta de la loi",
+                                                      ang = "Beta parameter",
+                                                      ),
+
+                                        ), # Fin BLOC AlphaBeta_Parameters
+
+
+                    MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                        Mu = SIMP ( statut = "o",
+                                                    typ = "R",
+                                                    max = 1,
+                                                    fr = "Moyenne de la loi",
+                                                    ang = "Mean value",
+                                                    ),
+
+                                        Sigma = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Ecart type de la loi",
+                                                       ang = "Standard deviation",
+                                                       ),
+
+                                        ), # Fin BLOC MuSigma_Parameters
+
+  ), # Fin BLOC GUMBEL
+
+
+
+  HISTOGRAM = BLOC ( condition = " Kind in ( 'Histogram', ) ",
+
+                       First = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du supoport de la loi",
+                                    ang = "Support lower bound",
+                                    ),
+
+                       # Il faut definir une collection de couples ( x,p ) 
+                       Values = SIMP ( statut = 'o',
+                                       typ = Tuple(2),
+                                       max = '**',
+                                       fr = "Liste de couples : largeur de classe, hauteur de classe",
+                                       ang = "Class bandwidth, class height couple list",
+                                       validators=VerifTypeTuple(('R','R')),
+                                       ),
+
+  ), # Fin BLOC HISTOGRAM
+
+
+
+  LAPLACE = BLOC ( condition = " Kind in ( 'Laplace', ) ",
+
+                   Lambda = SIMP ( statut = "o",
+                                   typ = "R",
+                                   max = 1,
+                                   val_min = 0.,
+                                   fr = "Parametre Lambda | Lambda > 0",
+                                   ang = "Lambda parameter | Lambda > 0",
+                                   ),
+                   
+                   Mu = SIMP ( statut = "o",
+                               typ = "R",
+                               max = 1,
+                               fr = "Moyenne de la loi",
+                               ang = "Mean value",
+                              ),
+
+  ), # Fin BLOC LAPLACE
+
+  LOGNORMAL = BLOC ( condition = " Kind in ( 'LogNormal', ) ",
+
+                     Settings = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       max = 1,
+                                       into = ( "MuSigmaLog", "MuSigma", "MuSigmaOverMu" ),
+                                       defaut = "MuSigmaLog",
+                                       fr = "Parametrage de la loi lognormale",
+                                       ang = "Lognormal distribution parameter set",
+                                       ),
+
+                     MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                                 Mu = SIMP ( statut = "o",
+                                                             typ = "R",
+                                                             max = 1,
+                                                             fr = "Moyenne de la loi",
+                                                             ang = "Mean value",
+                                                             ),
+
+                                                 Sigma = SIMP ( statut = "o",
+                                                                typ = "R",
+                                                                max = 1,
+                                                                val_min = 0.,
+                                                                fr = "Ecart type de la loi",
+                                                                ang = "Standard deviation",
+                                                                ),
+
+                                                 ), # Fin BLOC MuSigma_Parameters
+
+                     MuSigmaOverMu_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaOverMu', ) ",
+
+                                                 Mu = SIMP ( statut = "o",
+                                                             typ = "R",
+                                                             max = 1,
+                                                             fr = "Moyenne de la loi",
+                                                             ang = "Mean value",
+                                                             ),
+
+                                                 SigmaOverMu = SIMP ( statut = "o",
+                                                                typ = "R",
+                                                                max = 1,
+                                                                val_min = 0.,
+                                                                fr = "Rapport ecart type / moyenne de la loi",
+                                                                ang = "Standard deviation / mean value ratio",
+                                                                ),
+
+                                                 ), # Fin BLOC MuSigmaOverMu_Parameters
+
+                     MuSigmaLog_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaLog', ) ",
+
+                                                    MuLog = SIMP ( statut = "o",
+                                                                   typ = "R",
+                                                                   max = 1,
+                                                                   fr = "Moyenne du log",
+                                                                   ang = "Log mean value",
+                                                                   ),
+
+                                                    SigmaLog = SIMP ( statut = "o",
+                                                                      typ = "R",
+                                                                      max = 1,
+                                                                      val_min = 0.,
+                                                                      fr = "Ecart type du log",
+                                                                      ang = "Log standard deviation",
+                                                                      ),
+                                            
+                                                    ), # Fin BLOC MuSigmaLog_Parameters
+
+                     Gamma = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du support de la loi",
+                                    ang = "Support lower bound",
+                                    ),
+
+   ), # Fin BLOC LOGNORMAL
+
+
+
+   LOGISTIC = BLOC ( condition = " Kind in ( 'Logistic', ) ",
+
+                       Alpha = SIMP ( statut = "o",
+                                      typ = "R",
+                                      max = 1,
+                                      fr = "Borne inferieure du supoport de la loi",
+                                      ang = "Support lower bound",
+                                      ),
+
+                       Beta = SIMP ( statut = "o",
+                                     typ = "R",
+                                     max = 1,
+                                     val_min = 0.,
+                                     fr = "Parametre Beta de la loi | Beta > 0",
+                                     ang = "Beta parameter | Beta > 0",
+                                     ),
+
+   ), # Fin BLOC LOGISTIC
+
+
+
+   MULTINOMIAL = BLOC ( condition = " Kind in ( 'MultiNomial', ) ",
+                         
+                         N = SIMP ( statut = "o",
+                                    typ = "I",
+                                    max = 1,
+                                    fr = "Parametre N de la loi | N > 0",
+                                    ang = "N parameter | N > 0",
+                                    ),
+
+                       # Il faut definir une collection de couples ( x,p ) 
+                       Values = SIMP ( statut = 'o',
+                                       typ = "R",
+                                       max = '**',
+                                       fr = "Liste de probabilités",
+                                       ang = "Probability list",
+                                       validators=VerifTypeTuple(('R','R')),
+                                       ),
+
+   ), # Fin BLOC MULTINOMIAL
+
+
+  NONCENTRALSTUDENT = BLOC ( condition = " Kind in ( 'NonCentralStudent', ) ",
+
+                   Nu = SIMP ( statut = "o",
+                               typ = "R",
+                               max = 1,
+                               fr = "Parametre Nu de la loi | Nu > 0",
+                               ang = "Nu parameter | Nu > 0",
+                              ),
+
+                   Delta = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Delta de la loi | Delta > 0",
+                                  ang = "Delta parameter | Delta > 0",
+                                  ),
+                   
+                   Gamma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Gamma de centrage de la loi",
+                                  ang = "Gamma parameter",
+                                  ),
+
+  ), # Fin BLOC NONCENTRALSTUDENT
+
+
+   NORMAL = BLOC ( condition = " Kind in ( 'Normal', ) ",
+
+                    Mu = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Moyenne de la loi",
+                                ang = "Mean value",
+                                ),
+
+                   Sigma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  val_min = 0.,
+                                  fr = "Ecart type de la loi",
+                                  ang = "Standard deviation",
+                                  ),
+
+   ), # Fin BLOC NORMAL
+
+
+
+   POISSON = BLOC ( condition = " Kind in ( 'Poisson', ) ",
+
+                     Lambda = SIMP ( statut = "o",
+                                     typ = "R",
+                                     max = 1,
+                                     val_min = 0.,
+                                     fr = "Parametre Lambda de la loi | Lambda > 0",
+                                     ang = "Lambda parameter | Lambda > 0",
+                                     ),
+
+   ), # Fin BLOC POISSON
+
+
+
+  RAYLEIGH = BLOC ( condition = " Kind in ( 'Rayleigh', ) ",
+
+                   Sigma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Sigma de la loi | Sigma > 0",
+                                  ang = "Sigma parameter | Sigma > 0",
+                                  ),
+
+                   Gamma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Borne inferieure du support de la loi",
+                                  ang = "Support lower bound",
+                                  ),
+ ), # Fin BLOC RAYLEIGH
+
+
+   STUDENT = BLOC ( condition = " Kind in ( 'Student', ) ",
+
+                     Mu = SIMP ( statut = "o",
+                                 typ = "R",
+                                 max = 1,
+                                 fr = "Parametre Mu de la loi",
+                                 ang = "Mu parameter",
+                                 ),
+
+                     Nu = SIMP ( statut = "o",
+                                 typ = "R",
+                                 max = 1,
+                                 val_min = 2.,
+                                 fr = "Parametre Nu de la loi | Nu > 2",
+                                 ang = "Nu parameter | Nu > 2",
+                                 ),
+
+                   Sigma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Sigma de la loi",
+                                  ang = "Sigma parameter",
+                                  ),
+
+   ), # Fin BLOC STUDENT
+
+
+
+   TRIANGULAR = BLOC ( condition = " Kind in ( 'Triangular', ) ",
+
+                         A = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du support de la loi | A < M < B",
+                                    ang = "Support lower bound | A < M < B",
+                                    ),
+
+                         M = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Mode de la loi | A < M < B",
+                                    ang = "Mode | A < M < B",
+                                    ),
+
+                         B = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne superieure du support de la loi | A < M < B",
+                                    ang = "Support upper bound | A < M < B",
+                                    ),
+
+   ), # Fin BLOC TRIANGULAR
+
+
+
+   TRUNCATEDNORMAL = BLOC ( condition = " Kind in ( 'TruncatedNormal', ) ",
+
+                             MuN = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = 1,
+                                          fr = "Moyenne de la loi Normale non tronquée",
+                                          ang = "Mean value of the associated non truncated normal distribution",
+                                          ),
+
+                             SigmaN = SIMP ( statut = "o",
+                                             typ = "R",
+                                             max = 1,
+                                             val_min = 0.,
+                                             fr = "Ecart-type de la loi Normale non tronquée",
+                                             ang = "Standard deviation of the associated non truncated normal distribution",
+                                             ),
+
+                             A = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Borne inferieure de la loi | A < B",
+                                        ang = "Lower bound | A < B",
+                                        ),
+
+                             B = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Borne superieure de la loi | A < B",
+                                        ang = "Upper bound | A < B",
+                                        ),
+
+   ), # Fin BLOC TRUNCATEDNORMAL
+
+
+
+   UNIFORM = BLOC ( condition = " Kind in ( 'Uniform', ) ",
+
+                     A = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Borne inferieure du support de la loi | A < B",
+                                ang = "Support lower bound | A < B",
+                                ),
+
+                     B = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Borne superieure du support de la loi | A < B",
+                                ang = "Support upper bound | A < B",
+                                ),
+
+   ), # Fin BLOC UNIFORM
+
+
+
+   USERDEFINED = BLOC ( condition = " Kind in ( 'UserDefined', ) ",
+
+                           # Il faut definir une collection de couples ( x,p ) 
+                         Values = SIMP ( statut = 'o',
+                                         typ = 'R',
+                                         max = '**',
+                                         ),
+
+   ), # Fin BLOC USERDEFINED
+
+
+
+   WEIBULL = BLOC ( condition = " Kind in ( 'Weibull', ) ",
+
+                     Settings = SIMP ( statut = "o",
+                                          typ = "TXM",
+                                          max = 1,
+                                          into = ( "AlphaBeta", "MuSigma" ),
+                                          defaut = "AlphaBeta",
+                                          fr = "Parametrage de la loi weibull",
+                                          ang = "Weibull distribution parameter set",
+                                          ),
+
+                     AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+                                         Alpha = SIMP ( statut = "o",
+                                                        typ = "R",
+                                                        max = 1,
+                                                        val_min = 0.,
+                                                        fr = "Parametre Alpha de la loi | Alpha > 0",
+                                                        ang = "Alpha parameter | Alpha > 0",
+                                                        ),
+
+                                         Beta = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Beta de la loi | Beta > 0",
+                                                       ang = "Beta parameter | Beta > 0",
+                                                       ),
+
+                                         ), # Fin BLOC AlphaBeta_Parameters
+
+
+                     MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                         Mu = SIMP ( statut = "o",
+                                                     typ = "R",
+                                                     max = 1,
+                                                     fr = "Moyenne de la loi",
+                                                     ang = "Mean value",
+                                                     ),
+
+                                         Sigma = SIMP ( statut = "o",
+                                                        typ = "R",
+                                                        max = 1,
+                                                        val_min = 0.,
+                                                        fr = "Ecart type de la loi",
+                                                        ang = "Standard deviation",
+                                                        ),
+
+                                         ), # Fin BLOC MuSigma_Parameters
+
+                     Gamma = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du support de la loi",
+                                    ang = "Support lower bound",
+                                    ),
+
+    ), # Fin BLOC WEIBULL
+
+) # Fin OPER DISTRIBUTION
+# Ordre Catalogue DISTRIBUTION
+
+
+
+#================================
+# Definition du modele physique
+#================================
+
+
+DETERMINISTICVARIABLE = OPER ( nom = "DETERMINISTICVARIABLE",
+            sd_prod = variable,
+            op = None,
+            fr = "Variable deterministe",
+            ang = "Deterministic variable",
+            
+  N = SIMP ( statut = 'o',
+             typ = "TXM",
+             fr = "Nom",
+             ang = "Name",
+             ),
+            
+  T = SIMP ( statut = 'o',
+             defaut = "in",
+             into = ( "in" , "out", ),
+             typ = "TXM",
+             fr = "Type",
+             ang = "Type",
+             ),
+            
+  R = SIMP ( statut = 'o',
+             defaut = 0,
+             typ = "I",
+             fr = "Rang",
+             ang = "Rank",
+             ),
+            
+) # Fin OPER DETERMINISTICVARIABLE
+# Ordre Catalogue DETERMINISTICVARIABLE
+
+
+
+import opsOT
+MODEL = MACRO ( nom = "MODEL",
+                op = None,
+                UIinfo = { "groupes" : ( "Gestion du travail", ) },
+                fr = "Chargement du wrapper du modele physique",
+                ang = "Physical model wrapper load",
+                sd_prod = opsOT.INCLUDE,
+                op_init = opsOT.INCLUDE_context,
+                fichier_ini = 1,
+               
+  FileName = SIMP ( statut = "o",
+                    typ = "Fichier",
+                    fr = "Nom du modele physique",
+                    ang = "Physical model identifier",
+                    ),
+               
+) # Fin PROC MODEL
+# Ordre Catalogue MODEL
+
+
+
+
+VARIABLE = PROC ( nom = "VARIABLE",
+                  op = None,
+                  docu = "",
+                  fr = "Variable probabiliste",
+                  ang = "Probabilistic variable",
+
+  ModelVariable = SIMP ( statut = "o",
+                         typ = ( variable, ),
+                         fr = "Variable d'entrée du modèle",
+                         ang = "Input variable of the model",
+                         ),
+
+  Distribution = SIMP ( statut = "o",
+                        typ = ( loi, ),
+                        fr = "Modélisation probabiliste",
+                        ang = "Probabilistic modelisation",
+                        ),
+                  
+) # Fin PROC VARIABLE
+# Ordre Catalogue VARIABLE
+
+
+CORRELATION = PROC ( nom = 'CORRELATION',
+                     op = None,
+                     docu = "",
+                     fr = "Correlation entre variables",
+                     ang = "Variable correlation",
+
+  Copula = SIMP ( statut = "o",
+                  typ = 'TXM',
+                  into = ( "Independent", "Normal" ),
+                  defaut = "Independent",
+                  fr = "Type de la copule",
+                  ang = "Copula kind",
+                  ),
+
+  Matrix = BLOC ( condition = "Copula in ( 'Normal', )",
+                  
+    CorrelationMatrix = SIMP ( statut = "o",
+                               typ = Matrice(nbLigs=None,
+                                             nbCols=None,
+                                             methodeCalculTaille='NbDeVariables',
+                                             valSup=1,
+                                             valMin=-1,
+                                             structure="symetrique"),
+                               fr = "Matrice de correlation entre les variables d'entree",
+                               ang = "Correlation matrix for input variables",
+                               ),
+  ), # Fin BLOC Matrix
+
+
+) # Fin PROC CORRELATION
+# Ordre Catalogue CORRELATION
+
+
+
+
+
+#================================
+# Definition de l'etude
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+CRITERIA = PROC ( nom = "CRITERIA",
+                  op = None,
+                  docu = "",
+                  fr = "Critère de l'étude d'incertitudes",
+                  ang = "Uncertainty study criteria",
+
+
+
+  Type = SIMP ( statut = "o",
+                typ = "TXM",
+                into = ( "Min/Max", "Central Uncertainty", "Threshold Exceedence" ),
+                fr = "Type du critère",
+                ang = "Criteria type",
+                ),
+
+
+
+
+
+
+
+  MinMax = BLOC ( condition = " Type in ( 'Min/Max', ) ",
+
+                  Method = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "Experiment Plane", "Random Sampling" ),
+                                  fr = "Methode",
+                                  ang = "Method",
+                                  ),
+                  # UC 3.1.1
+                  ExperimentPlaneSettings = BLOC ( condition = " Method in ( 'Experiment Plane', ) ",
+
+                          ExperimentPlane = SIMP ( statut = "o",
+                                                   typ = "TXM",
+                                                   into = ( "Axial", "Factorial", "Composite", ),
+                                                   fr = "Type du plan d'expérience",
+                                                   ang = "Experiment plane type",
+                                                   ),
+
+                          Levels = SIMP ( statut = "o",
+                                          typ = "R",
+                                          val_min = 0.0,
+                                          max = '**',    
+                                          fr = "Liste de niveaux dans chaque direction",
+                                          ang = "Levels in each direction",
+                                          ),
+
+                          # Scaled Vector
+                          UnitPerDimension = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = '**',    
+                                          fr = "Unité par dimension (autant que de variables declarées)",
+                                          ang = "Units per dimension (as much as declared variables)",
+                                          ),
+
+                          # Translation Vector
+                          Center = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = '**',    
+                                          fr = "Centre du plan d'expérience",
+                                          ang = "Experiment plan center",
+                                          ),
+
+                    ), # Fin BLOC ExperimentPlaneSettings
+
+
+
+                  RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+                          SimulationsNumber = SIMP ( statut = "o",
+                                                typ = "I",
+                                                val_min = 1,
+                                                fr = "Nombre de points",
+                                                ang = "Points number",
+                                                ),
+
+                    ), # Fin BLOC RandomSamplingSettings
+
+                  Result = SIMP (  statut = "o",
+                                   typ = "TXM",
+                                   into = ( "Min/Max", ),
+                                   defaut = "Min/Max",
+                                   fr = "Le minimum et le maximum de la variable d'intérêt",
+                                   ang = "The min and max values",
+                                   ),
+
+
+  ), # Fin BLOC MinMax
+
+
+
+
+  CentralUncertainty = BLOC ( condition = " Type in ( 'Central Uncertainty', ) ",
+
+                  Method = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "Taylor Variance Decomposition", "Random Sampling" ),
+                                  fr = "Methode",
+                                  ang = "Method",
+                                  ),
+                              
+                  # UC 3.2.
+                  TaylorVarianceDecompositionSettings = BLOC ( condition = " Method in ( 'Taylor Variance Decomposition', ) ",
+
+                      Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                              MeanFirstOrder = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Moyenne au premier ordre",
+                                                ang = "MeanFirstOrder",
+                                                ),
+
+                              StandardDeviationFirstOrder = SIMP ( statut = "o",
+                                                                   typ = 'TXM',
+                                                                   into = ( 'yes', 'no' ),
+                                                                   defaut = 'yes',
+                                                                   max = 1,
+                                                                   fr = "Ecart-type au premier ordre",
+                                                                   ang = "StandardDeviationFirstOrder",
+                                                                   ),
+
+                              MeanSecondOrder = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'no',
+                                                       max = 1,
+                                                       fr = "Moyenne au second ordre",
+                                                       ang = "MeanSecondOrder",
+                                                       ),
+
+                              ImportanceFactor = SIMP ( statut = "o",
+                                                        typ = 'TXM',
+                                                        into = ( 'yes', 'no' ),
+                                                        defaut = 'yes',
+                                                        max = 1,
+                                                        fr = "Facteur d'importance pour variable de sortie scalaire",
+                                                        ang = "ImportanceFactor",
+                                                        ),
+                              ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                                     ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique des facteurs d'importance",
+                                                                              ang = "Importance Factor Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC ImportanceFactorSettings
+                                      
+                      ), # Fin FACT Result
+                                                               
+                  ), # Fin BLOC TaylorVarianceDecompositionSettings
+
+
+
+                  RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+                          SimulationsNumber = SIMP ( statut = "o",
+                                                typ = "I",
+                                                val_min = 1,
+                                                fr = "Nombre de points",
+                                                ang = "Points number",
+                                                ),
+
+                       Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                              EmpiricalMean = SIMP ( statut = "o",
+                                                     typ = 'TXM',
+                                                     into = ( 'yes', 'no' ),
+                                                     defaut = 'yes',
+                                                     max = 1,
+                                                     fr = "Moyenne empirique",
+                                                     ang = "Empirical mean",
+                                                     ),
+
+                              EmpiricalStandardDeviation = SIMP ( statut = "o",
+                                                                  typ = 'TXM',
+                                                                  into = ( 'yes', 'no' ),
+                                                                  defaut = 'yes',
+                                                                  max = 1,
+                                                                  fr = "Ecart-type empirique",
+                                                                  ang = "Empirical standard deviation",
+                                                                  ),
+
+                              EmpiricalQuantile = SIMP ( statut = "o",
+                                                         typ = 'TXM',
+                                                         into = ( 'yes', 'no' ),
+                                                         defaut = 'yes',
+                                                         max = 1,
+                                                         fr = "Quantile empirique",
+                                                         ang = "Empirical quantile",
+                                                         ),
+
+                              EmpiricalQuantileSettings = BLOC ( condition = " EmpiricalQuantile in ( 'yes', ) ",
+
+                                  EmpiricalQuantile_Order = SIMP ( statut = "o",
+                                                                   typ = 'R',
+                                                                   defaut = 0.95,
+                                                                   max = 1,
+                                                                   val_min = 0.0,
+                                                                   val_max = 1.0,
+                                                                   fr = "Ordre du quantile empirique",
+                                                                   ang = "Empirical quantile order",
+                                                                   ),
+
+                              ), # Fin BLOC EmpiricalQuantileSettings
+
+                              CorrelationAnalysis = SIMP ( statut = "o",
+                                                            typ = 'TXM',
+                                                            into = ( 'yes', 'no' ),
+                                                            defaut = 'yes',
+                                                            max = 1,
+                                                            fr = "Correlations analysees",
+                                                            ang = "Analysed correlations",
+                                                            ),
+
+                              KernelSmoothing = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'yes',
+                                                       max = 1,
+                                                       fr = "Kernel smoothing de l'echantillon",
+                                                       ang = "Kernel smoothing of the sample",
+                                                       ),
+
+                              KernelSmoothingSettings = BLOC ( condition = " KernelSmoothing in ( 'yes', ) ",
+
+                                     KernelSmoothingDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique de la reconstruction a noyau",
+                                                                              ang = "Kernel Smoothing Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC KernelSmoothingSettings
+                                      
+                      ), # Fin FACT Result
+                                                               
+                  ), # Fin BLOC RandomSamplingSettings
+
+  ), # Fin BLOC CentralUncertainty
+
+
+
+
+  ThresholdExceedence = BLOC ( condition = " Type in ( 'Threshold Exceedence', ) ",
+
+         Event =  FACT ( statut = "o",
+                         min = 1,
+                         max = 1,
+
+                         Threshold = SIMP ( statut = "o",
+                                            typ = "R",
+                                            max = 1,
+                                            fr = "Le seuil de defaillance",
+                                            ang = "Failure threshold",
+                                            ),
+
+                         ComparisonOperator = SIMP ( statut = "o",
+                                                     typ = "TXM",
+                                                     max = 1,
+                                                     into = ( "Less", "LessOrEqual", "Equal", "GreaterOrEqual", "Greater" ),
+                                                     fr = "Que faut-il ne pas depasser : un maximum ou un minimum",
+                                                     ang = "What is the failure threshold : maximum or minimum",
+                                                     ),
+         ), # Fin FACT Event
+                         
+
+         Method = SIMP ( statut = "o",
+                         typ = "TXM",
+                         into = ( "Simulation", "FORM_SORM" ),
+                         fr = "Methode",
+                         ang = "Method",
+                         ),
+
+         SimulationSettings = BLOC ( condition = " Method in ( 'Simulation', ) ",
+
+               Algorithm = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "MonteCarlo", "LHS", "ImportanceSampling" ),
+                                  fr = "Algorithme de simulation",
+                                  ang = "Simulation algorithm",
+                                  ),
+
+                                 
+               RandomGenerator = FACT ( statut = "o",
+                                        min = 1,
+                                        max = 1,
+
+                           SeedToBeSet = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'no',
+                                                max = 1,
+                                                fr = "La racine du generateur aleatoire doit-elle etre positionnee ?",
+                                                ang = "Does the random generator seed need to be set ?",
+                                                ),
+
+                           SeedSettings = BLOC ( condition = " SeedToBeSet in ( 'yes', ) ",
+
+                                                 RandomGeneratorSeed = SIMP ( statut = "o",
+                                                                              typ = "I",
+                                                                              max = 1,
+                                                                              fr = "Racine du generateur aleatoire",
+                                                                              ang = "Random generator seed",
+                                                                              ),
+
+                                               ), # Fin BLOC SeedSettings
+
+               ), # Fin FACT RandomGenerator
+
+
+               BlockSize = SIMP ( statut = "o",
+                                  typ = "I",
+                                  max = 1,
+                                  val_min = 1,
+                                  defaut = 1,
+                                  fr = "Nombre de calculs realises en bloc",
+                                  ang = "Number of computations as a block",
+                                  ),
+
+               MaximumOuterSampling = SIMP ( statut = "o",
+                                             typ = "I",
+                                             max = 1,
+                                             val_min = 1,
+                                             fr = "Maximum d'iterations externes",
+                                             ang = "Maximum outer Sampling value",
+                                             ),
+
+               MaximumCoefficientOfVariation = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      defaut = 0.1,
+                                                      val_min = 0.0,
+                                                      val_max = 1.0,
+                                                      fr = "Coefficient de variation maximum",
+                                                      ang = "Maximum coefficient of variation"
+                                                      ),
+
+               ImportanceSamplingSettings = BLOC ( condition = " Algorithm in ( 'ImportanceSampling', ) ",
+
+                            MeanVector = SIMP ( statut = "o",
+                                                typ = "R",
+                                                max = "**",
+                                                fr = "Moyenne",
+                                                ang = "Mean vector",
+                                                ),
+
+                            Correlation = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'Independent', 'Linear' ),
+                                                 defaut = 'Independent',
+                                                 max = 1,
+                                                 fr = "Le type de correlation entre les variables",
+                                                 ang = "Correlation between variables",
+                                                 ),
+
+               ), # Fin BLOC ImportanceSamplingSettings
+
+               Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                    Probability = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Probabiblite",
+                                         ang = "Probability",
+                                         ),
+
+                    StandardDeviation = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Ecart type",
+                                         ang = "Standard deviation",
+                                         ),
+
+                    ConfidenceInterval = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Intervale de confiance",
+                                                ang = "Confidence interval",
+                                                ),
+
+                    ConfidenceIntervalSettings = BLOC ( condition = " ConfidenceInterval in ( 'yes', ) ",
+
+                          Level = SIMP ( statut = "o",
+                                         typ = 'R',
+                                         defaut = 0.9,
+                                         max = 1,
+                                         val_min = 0.0,
+                                         val_max = 1.0,
+                                         fr = "Niveau de confiance",
+                                         ang = "Confidence level",
+                                         ),
+                                                     
+                    ), # Fin BLOC ConfidenceIntervalSettings
+                               
+                    VariationCoefficient = SIMP ( statut = "o",
+                                                  typ = 'TXM',
+                                                  into = ( 'yes', 'no' ),
+                                                  defaut = 'yes',
+                                                  max = 1,
+                                                  fr = "Coefficient de variation",
+                                                  ang = "Coefficient of variation",
+                                                  ),
+
+                    SimulationsNumber = SIMP ( statut = "o",
+                                             typ = 'TXM',
+                                             into = ( 'yes', 'no' ),
+                                             defaut = 'yes',
+                                             max = 1,
+                                             fr = "Nombre d'iterations",
+                                             ang = "Iteration number",
+                                             ),
+
+                    ConvergenceGraph = SIMP ( statut = "o",
+                                             typ = 'TXM',
+                                             into = ( 'yes', 'no' ),
+                                             defaut = 'yes',
+                                             max = 1,
+                                             fr = "Graphe de convergence",
+                                             ang = "Convergence graph",
+                                             ),
+                               
+                    ConvergenceGraphSettings = BLOC ( condition = " ConvergenceGraph in ( 'yes', ) ",
+
+                                     ConvergenceDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique de la convergence",
+                                                                         ang = "Convergence Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC ConvergenceGraphSettings
+                                      
+             ), # Fin FACT Result
+                                                               
+
+
+         ), # Fin BLOC SimulationSettings
+
+
+                               
+         FORM_SORMSettings = BLOC ( condition = " Method in ( 'FORM_SORM', ) ",
+
+                Approximation = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       defaut = "FirstOrder",
+                                       into = ( "FirstOrder", "SecondOrder" ),
+                                       max = 1,
+                                       fr = "Approximation",
+                                       ang = "Approximation",
+                                       ),
+
+                OptimizationAlgorithm = SIMP ( statut = "o",
+                                               typ = "TXM",
+                                               defaut = "Cobyla",
+                                               into = ( "Cobyla", "AbdoRackwitz" ),
+                                               max = 1,
+                                               fr = "Methode d'optimisation",
+                                               ang = "Optimization method",
+                                               ),
+
+                                     
+                PhysicalStartingPoint = SIMP ( statut = "f",
+                                               typ = "R",
+                                               max = "**",
+                                               fr = "Point de demarrage de l'algorithme iteratif",
+                                               ang = "Initial point for iterative process",
+                                               ),
+
+                MaximumIterationsNumber = SIMP ( statut = "f",
+                                                 typ = "I",
+                                                 max = 1,
+                                                 val_min = 1,
+                                                 fr = "Nombre maximum d'iterations",
+                                                 ang = "Maximum number of iterations",
+                                                 ),
+
+                                     
+                MaximumAbsoluteError = SIMP ( statut = "o",
+                                              typ = "R",
+                                              max = 1,
+                                              defaut = 1E-4,
+                                              val_min = 0.0,
+                                              fr = "Distance maximum absolue entre 2 iterations successives",
+                                              ang = "Absolute maximum distance between 2 successive iterates",
+                                              ),
+
+                MaximumRelativeError = SIMP ( statut = "o",
+                                               typ = "R",
+                                               max = 1,
+                                               defaut = 1E-4,
+                                               val_min = 0.0,
+                                               fr = "Distance maximum relative entre 2 iterations successives",
+                                               ang = "Relative maximum distance between 2 successive iterates",
+                                               ),
+                                     
+                MaximumConstraintError = SIMP ( statut = "o",
+                                                typ = "R",
+                                                max = 1,
+                                                defaut = 1E-4,
+                                                val_min = 0.0,
+                                                fr = "Valeur maximum absolue de la fonction moins la valeur du niveau",
+                                                ang = "Maximum absolute value of the constraint function minus the level value",
+                                                ),
+
+                ImportanceSampling = SIMP ( statut = "o",
+                                            typ = 'TXM',
+                                            into = ( 'yes', 'no' ),
+                                            defaut = 'no',
+                                            max = 1,
+                                            fr = "Tirage d'importance au point de conception",
+                                            ang = "Importance sampling at design point",
+                                            ),
+
+                FORMResult = BLOC ( condition = " Approximation in ( 'FirstOrder', ) ",
+
+                    Probability = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Probabiblite",
+                                         ang = "Probability",
+                                         ),
+
+                    DesignPoint = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', 'no' ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Point de conception",
+                                         ang = "Design point",
+                                         ),
+
+                    HasoferReliabilityIndex = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Indice de fiabilite",
+                                                 ang = "Reliability index",
+                                                 ),
+
+                    ImportanceFactor = SIMP ( statut = "o",
+                                              typ = 'TXM',
+                                              into = ( 'yes', 'no' ),
+                                              defaut = 'yes',
+                                              max = 1,
+                                              fr = "Facteur d'importance pour variable de sortie scalaire",
+                                              ang = "Importance factor",
+                                              ),
+
+                    ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                                     ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique des facteurs d'importance",
+                                                                              ang = "Importance Factor Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC ImportanceFactorSettings
+                                      
+                    SensitivityAnalysis = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Analyse de sensibilite",
+                                                 ang = "Sensitivity analysis",
+                                                 ),
+
+                    SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+                            FORMEventProbabilitySensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+        
+                            FORMEventProbabilitySensitivitySettings = BLOC ( condition = " FORMEventProbabilitySensitivity in ( 'yes', ) ",
+
+                                     FORMEventProbabilitySensitivityDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique des sensibilites",
+                                                                         ang = "Sensitivity Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC FORMEventProbabilitySensitivitySettings
+                                      
+                            HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+        
+                            HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+                                     HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique des sensibilites",
+                                                                         ang = "Sensitivity Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+                                      
+                    ), # Fin BLOC SensitivityAnalysisSettings
+
+                    FunctionCallsNumber = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Nombre d'appels a la fonction",
+                                                 ang = "Function calls number",
+                                                 ),
+
+
+                ), # Fin BLOC FORMResult
+
+
+                SORMResult = BLOC ( condition = " Approximation in ( 'SecondOrder', ) ",
+
+
+                    TvedtApproximation = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Approximation de Tvedt",
+                                                ang = "Tvedt approximation",
+                                                ),
+
+                    HohenBichlerApproximation = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'yes',
+                                                       max = 1,
+                                                       fr = "Approximation de HohenBichler",
+                                                       ang = "HohenBichler approximation",
+                                                       ),
+
+                    BreitungApproximation = SIMP ( statut = "o",
+                                                   typ = 'TXM',
+                                                   into = ( 'yes', 'no' ),
+                                                   defaut = 'yes',
+                                                   max = 1,
+                                                   fr = "Approximation de Breitung",
+                                                   ang = "Breitung approximation",
+                                                   ),
+
+                    DesignPoint = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', 'no' ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Point de conception",
+                                         ang = "Design point",
+                                         ),
+
+                    ImportanceFactor = SIMP ( statut = "o",
+                                              typ = 'TXM',
+                                              into = ( 'yes', 'no' ),
+                                              defaut = 'yes',
+                                              max = 1,
+                                              fr = "Facteur d'importance pour variable de sortie scalaire",
+                                              ang = "Importance factor",
+                                              ),
+
+                    ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                                     ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique des facteurs d'importance",
+                                                                              ang = "Importance Factor Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC ImportanceFactorSettings
+                                      
+                    SensitivityAnalysis = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Analyse de sensibilite",
+                                                 ang = "Sensitivity analysis",
+                                                 ),
+
+                    SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+                            HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+                                                                 
+                            HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+                                     HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique des sensibilites",
+                                                                         ang = "Sensitivity Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+                                      
+                    ), # Fin BLOC SensitivityAnalysisSettings
+
+                    FunctionCallsNumber = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Nombre d'appels a la fonction",
+                                                 ang = "Function calls number",
+                                                 ),
+
+
+                ), # Fin BLOC SecondOrder
+
+
+                                     
+        ), # Fin BLOC FORM_SORMSettings
+
+
+                               
+  ), # Fin BLOC ThresholdExceedence
+
+
+
+) # Fin PROC CRITERIA
+# Ordre Catalogue CRITERIA
+
+
+
+
+
+
+
diff --git a/Openturns_Study/OpenTURNS_Cata_Study_V7.py.orig b/Openturns_Study/OpenTURNS_Cata_Study_V7.py.orig
new file mode 100644 (file)
index 0000000..9a239a0
--- /dev/null
@@ -0,0 +1,1719 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+#from Accas import ASSD, JDC_CATA, AU_MOINS_UN, PROC, SIMP, FACT, OPER, MACRO, BLOC, A_VALIDATOR
+from Accas import *
+
+class loi      ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+import types
+class Tuple:
+  def __init__(self,ntuple):
+    self.ntuple=ntuple
+
+  def __convert__(self,valeur):
+    if type(valeur) == types.StringType:
+      return None
+    if len(valeur) != self.ntuple:
+      return None
+    return valeur
+
+  def info(self):
+    return "Tuple de %s elements" % self.ntuple
+
+  __repr__=info
+  __str__=info
+
+class Matrice:
+  def __init__(self,nbLigs=None,nbCols=None,methodeCalculTaille=None,formatSortie="ligne",valSup=None,valMin=None,structure=None):
+      self.nbLigs=nbLigs
+      self.nbCols=nbCols
+      self.methodeCalculTaille=methodeCalculTaille
+      self.formatSortie=formatSortie
+      self.valSup=valSup
+      self.valMin=valMin
+      self.structure=structure
+
+  def __convert__(self,valeur):
+    # Attention ne verifie pas grand chose
+    if type(valeur) != types.ListType :
+      return None
+    return valeur
+
+  def info(self):
+      return "Matrice %s x %s" % (self.nbLigs, self.nbCols)
+
+      __repr__=info
+      __str__=info
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_STUDY',
+                 execmodul = None,
+                 regles = ( AU_MOINS_UN ( 'CRITERIA' ),
+                            AU_MOINS_UN ( 'MODEL' ),
+                            AVANT ( ('DISTRIBUTION', 'MODEL'), 'VARIABLE' ),
+#                            A_CLASSER ( 'VARIABLE',                'CORRELATION' ),
+#                            A_CLASSER ( 'VARIABLE',                'CRITERIA' ),
+#                            A_CLASSER ( 'CORRELATION',             'CRITERIA' ),
+                            ),
+                 ) # Fin JDC_CATA
+
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+LOG = PROC ( nom = "LOG",
+             op = None,
+             docu = "",
+               
+  DebugMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de debug de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library debug level print",
+                 ),
+               
+  WrapperMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de wrapper de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library debug level print",
+                 ),
+               
+  UserMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de user de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library user level print",
+                 ),
+               
+  InfoMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de info de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library info level print",
+                 ),
+               
+  WarningMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de warning de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library warning level print",
+                 ),
+               
+  ErrorMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de error de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library error level print",
+                 ),
+               
+) # Fin PROC LOG
+# Ordre Catalogue LOG
+
+
+
+
+
+#================================
+# Definition des LOIS
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+DISTRIBUTION = OPER ( nom = "DISTRIBUTION",
+                      sd_prod = loi,
+                      op = 68,
+                      fr = "Definitions des lois marginales utilisees par les variables d'entree", 
+                      
+                      
+#====
+# Type de distribution
+#====
+
+  Kind = SIMP ( statut = "o", typ = "TXM",
+                into = ( "Beta",
+                         "Exponential",
+                         "Gamma",
+                         "Geometric",
+                         "Gumbel",
+                         "Histogram",
+                         "Laplace",
+                         "Logistic",
+                         "LogNormal",
+                         "MultiNomial",
+                         "NonCentralStudent",
+                         "Normal",
+                         "Poisson",
+                         "Rayleigh",
+                         "Student",
+                         "Triangular",
+                         "TruncatedNormal",
+                         "Uniform",
+                         #"UserDefined",
+                         "Weibull",
+                         ),
+                fr = "Choix du type de la loi marginale",
+                ang = "1D marginal distribution",
+                ),
+
+#====
+# Definition des parametres selon le type de la loi
+#====
+
+  BETA = BLOC ( condition = " Kind in ( 'Beta', ) ",
+
+                  Settings = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       max = 1,
+                                       into = ( "RT", "MuSigma" ),
+                                       defaut = "RT",
+                                       fr = "Parametrage de la loi beta",
+                                       ang = "Beta distribution parameter set",
+                                       ),
+
+                  RT_Parameters = BLOC ( condition = " Settings in ( 'RT', ) ",
+
+                                      R = SIMP ( statut = "o",
+                                                 typ = "R",
+                                                 max = 1,
+                                                 val_min = 0.,
+                                                 fr = "Parametre R de la loi | R > 0",
+                                                 ang = "R parameter | R > 0",
+                                                 ),
+
+                                      # T > R
+                                      T = SIMP ( statut = "o",
+                                                 typ = "R",
+                                                 max = 1,
+                                                 val_min = 0.,
+                                                 fr = "Parametre T de la loi | T > R",
+                                                 ang = "T parameter | T > R",
+                                                 ),
+
+                                      ), # Fin BLOC RT_Parameters
+
+
+                  MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                      Mu = SIMP ( statut = "o",
+                                                  typ = "R",
+                                                  max = 1,
+                                                  fr = "Moyenne de la loi",
+                                                  ang = "Mean value",
+                                                  ),
+
+                                      Sigma = SIMP ( statut = "o",
+                                                     typ = "R",
+                                                     max = 1,
+                                                     val_min = 0.,
+                                                     fr = "Ecart type de la loi",
+                                                     ang = "Standard deviation",
+                                                     ),
+
+                                      ), # Fin BLOC MuSigma_Parameters
+
+
+                  A = SIMP ( statut = "o",
+                             typ = "R",
+                             max = 1,
+                             fr = "Borne inferieure du support de la loi",
+                             ang = "Support lower bound",
+                             ),
+
+                  # B > A
+                  B = SIMP ( statut = "o",
+                             typ = "R",
+                             max = 1,
+                             fr = "Borne superieure du support de la loi",
+                             ang = "Support upper bound",
+                             ),
+
+  ), # Fin BLOC BETA
+
+
+
+  EXPONENTIAL = BLOC ( condition = " Kind in ( 'Exponential', ) ",
+
+                         Lambda = SIMP ( statut = "o",
+                                         typ = "R",
+                                         max = 1,
+                                         val_min = 0.,
+                                         fr = "Parametre Lambda | Lambda > 0",
+                                         ang = "Lambda parameter | Lambda > 0",
+                                         ),
+
+                         Gamma = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Borne inferieure du support de la loi",
+                                        ang = "Support lower bound",
+                                        ),
+
+  ), # Fin BLOC EXPONENTIAL
+
+
+
+  GAMMA = BLOC ( condition = " Kind in ( 'Gamma', ) ",
+
+                   Settings = SIMP ( statut = "o",
+                                        typ = "TXM",
+                                        max = 1,
+                                        into = ( "KLambda", "MuSigma" ),
+                                        defaut = "KLambda",
+                                        fr = "Parametrage de la loi gamma",
+                                        ang = "Gamma distribution parameter set",
+                                        ),
+
+                   KLambda_Parameters = BLOC ( condition = " Settings in ( 'KLambda', ) ",
+
+                                       K = SIMP ( statut = "o",
+                                                  typ = "R",
+                                                  max = 1,
+                                                  val_min = 0.,
+                                                  fr = "Parametre K de la loi | K > 0",
+                                                  ang = "K parameter | K > 0",
+                                                  ),
+
+                                       Lambda = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Lambda de la loi | Lambda > 0",
+                                                       ang = "Lambda parameter | Lambda > 0",
+                                                       ),
+
+                                       ), # Fin BLOC KLambda_Parameters
+
+
+                   MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                       Mu = SIMP ( statut = "o",
+                                                   typ = "R",
+                                                   max = 1,
+                                                   fr = "Moyenne de la loi",
+                                                   ang = "Mean value",
+                                                   ),
+
+                                       Sigma = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      val_min = 0.,
+                                                      fr = "Ecart type de la loi",
+                                                      ang = "Standard deviation",
+                                                      ),
+
+                                       ), # Fin BLOC MuSigma_Parameters
+
+                   Gamma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Gamma",
+                                  ang = "Gamma parameter",
+                                  ),
+
+
+  ), # Fin BLOC GAMMA
+
+
+
+  GEOMETRIC = BLOC ( condition = " Kind in ( 'Geometric', ) ",
+
+                       P = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  val_min = 0.,
+                                  val_max = 1.,
+                                  fr = "Parametre P | 0 < P < 1",
+                                  ang = "P parameter | 0 < P < 1",
+                                  ),
+
+  ), # Fin BLOC GEOMETRIC
+
+
+
+  GUMBEL = BLOC ( condition = " Kind in ( 'Gumbel', ) ",
+
+                    Settings = SIMP ( statut = "o",
+                                         typ = "TXM",
+                                         max = 1,
+                                         into = ( "AlphaBeta", "MuSigma" ),
+                                         defaut = "AlphaBeta",
+                                         fr = "Parametrage de la loi gumbel",
+                                         ang = "Gumbel distribution parameter set",
+                                         ),
+
+                    AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+                                        Alpha = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Alpha de la loi | Alpha > 0",
+                                                       ang = "Alpha parameter | Alpha > 0",
+                                                       ),
+
+                                        Beta = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      fr = "Parametre Beta de la loi",
+                                                      ang = "Beta parameter",
+                                                      ),
+
+                                        ), # Fin BLOC AlphaBeta_Parameters
+
+
+                    MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                        Mu = SIMP ( statut = "o",
+                                                    typ = "R",
+                                                    max = 1,
+                                                    fr = "Moyenne de la loi",
+                                                    ang = "Mean value",
+                                                    ),
+
+                                        Sigma = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Ecart type de la loi",
+                                                       ang = "Standard deviation",
+                                                       ),
+
+                                        ), # Fin BLOC MuSigma_Parameters
+
+  ), # Fin BLOC GUMBEL
+
+
+
+  HISTOGRAM = BLOC ( condition = " Kind in ( 'Histogram', ) ",
+
+                       First = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Premier point de la distribution",
+                                    ang = "First point",
+                                    ),
+
+                       # Il faut definir une collection de couples ( x,p ) 
+                       Values = SIMP ( statut = 'o',
+                                       typ = Tuple(2),
+                                       max = '**',
+                                       fr = "Liste de couples (point,probabilite)",
+                                       ang = "(point,probabiblity) couple list",
+                                       validators=VerifTypeTuple(('R','R')),
+                                       ),
+
+  ), # Fin BLOC HISTOGRAM
+
+
+
+  LAPLACE = BLOC ( condition = " Kind in ( 'Laplace', ) ",
+
+                   Lambda = SIMP ( statut = "o",
+                                   typ = "R",
+                                   max = 1,
+                                   val_min = 0.,
+                                   fr = "Parametre Lambda | Lambda > 0",
+                                   ang = "Lambda parameter | Lambda > 0",
+                                   ),
+                   
+                   Mu = SIMP ( statut = "o",
+                               typ = "R",
+                               max = 1,
+                               fr = "Moyenne de la loi",
+                               ang = "Mean value",
+                              ),
+
+  ), # Fin BLOC LAPLACE
+
+  LOGNORMAL = BLOC ( condition = " Kind in ( 'LogNormal', ) ",
+
+                     Settings = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       max = 1,
+                                       into = ( "MuSigmaLog", "MuSigma", "MuSigmaOverMu" ),
+                                       defaut = "MuSigmaLog",
+                                       fr = "Parametrage de la loi lognormale",
+                                       ang = "Lognormal distribution parameter set",
+                                       ),
+
+                     MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                                 Mu = SIMP ( statut = "o",
+                                                             typ = "R",
+                                                             max = 1,
+                                                             fr = "Moyenne de la loi",
+                                                             ang = "Mean value",
+                                                             ),
+
+                                                 Sigma = SIMP ( statut = "o",
+                                                                typ = "R",
+                                                                max = 1,
+                                                                val_min = 0.,
+                                                                fr = "Ecart type de la loi",
+                                                                ang = "Standard deviation",
+                                                                ),
+
+                                                 ), # Fin BLOC MuSigma_Parameters
+
+                     MuSigmaOverMu_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaOverMu', ) ",
+
+                                                 Mu = SIMP ( statut = "o",
+                                                             typ = "R",
+                                                             max = 1,
+                                                             fr = "Moyenne de la loi",
+                                                             ang = "Mean value",
+                                                             ),
+
+                                                 SigmaOverMu = SIMP ( statut = "o",
+                                                                typ = "R",
+                                                                max = 1,
+                                                                val_min = 0.,
+                                                                fr = "Rapport ecart type / moyenne de la loi",
+                                                                ang = "Standard deviation / mean value ratio",
+                                                                ),
+
+                                                 ), # Fin BLOC MuSigmaOverMu_Parameters
+
+                     MuSigmaLog_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaLog', ) ",
+
+                                                    MuLog = SIMP ( statut = "o",
+                                                                   typ = "R",
+                                                                   max = 1,
+                                                                   fr = "Moyenne du log",
+                                                                   ang = "Log mean value",
+                                                                   ),
+
+                                                    SigmaLog = SIMP ( statut = "o",
+                                                                      typ = "R",
+                                                                      max = 1,
+                                                                      val_min = 0.,
+                                                                      fr = "Ecart type du log",
+                                                                      ang = "Log standard deviation",
+                                                                      ),
+                                            
+                                                    ), # Fin BLOC MuSigmaLog_Parameters
+
+                     Gamma = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du supoport de la loi",
+                                    ang = "Support lower bound",
+                                    ),
+
+   ), # Fin BLOC LOGNORMAL
+
+
+
+   LOGISTIC = BLOC ( condition = " Kind in ( 'Logistic', ) ",
+
+                       Alpha = SIMP ( statut = "o",
+                                      typ = "R",
+                                      max = 1,
+                                      fr = "Borne inferieure du supoport de la loi",
+                                      ang = "Support lower bound",
+                                      ),
+
+                       Beta = SIMP ( statut = "o",
+                                     typ = "R",
+                                     max = 1,
+                                     val_min = 0.,
+                                     fr = "Parametre Beta de la loi | Beta > = 0",
+                                     ang = "Beta parameter | Beta > = 0",
+                                     ),
+
+   ), # Fin BLOC LOGISTIC
+
+
+
+   MULTINOMIAL = BLOC ( condition = " Kind in ( 'MultiNomial', ) ",
+                         
+                         N = SIMP ( statut = "o",
+                                    typ = "I",
+                                    max = 1,
+                                    fr = "Dimension de la loi",
+                                    ang = "Distribution dimension",
+                                    ),
+
+                         # Il faut un vecteur P de taille N
+                         Mu = SIMP ( statut = 'o',
+                                     typ = 'R',
+                                     max = '**',
+                                     ),
+
+   ), # Fin BLOC MULTINOMIAL
+
+
+  NONCENTRALSTUDENT = BLOC ( condition = " Kind in ( 'NonCentralStudent', ) ",
+
+                   Nu = SIMP ( statut = "o",
+                               typ = "R",
+                               max = 1,
+                               fr = "Parametre Nu de la loi",
+                               ang = "Nu parameter",
+                              ),
+
+                   Delta = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Delta de la loi",
+                                  ang = "Delta parameter",
+                                  ),
+                   
+                   Gamma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Gamma de la loi",
+                                  ang = "Gamma parameter",
+                                  ),
+
+  ), # Fin BLOC NONCENTRALSTUDENT
+
+
+   NORMAL = BLOC ( condition = " Kind in ( 'Normal', ) ",
+
+                    Mu = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Moyenne de la loi",
+                                ang = "Mean value",
+                                ),
+
+                   Sigma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  val_min = 0.,
+                                  fr = "Ecart type de la loi",
+                                  ang = "Standard deviation",
+                                  ),
+
+   ), # Fin BLOC NORMAL
+
+
+
+   POISSON = BLOC ( condition = " Kind in ( 'Poisson', ) ",
+
+                     Lambda = SIMP ( statut = "o",
+                                     typ = "R",
+                                     max = 1,
+                                     val_min = 0.,
+                                     fr = "Parametre Lambda de la loi | Lambda > 0",
+                                     ang = "Lambda parameter | Lambda > 0",
+                                     ),
+
+   ), # Fin BLOC POISSON
+
+
+
+  RAYLEIGH = BLOC ( condition = " Kind in ( 'Rayleigh', ) ",
+
+                   Sigma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Sigma de la loi | Sigma > 0",
+                                  ang = "Sigma parameter | Sigma > 0",
+                                  ),
+
+                   Gamma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Borne inferieure du support de la loi",
+                                  ang = "Support lower bound",
+                                  ),
+ ), # Fin BLOC RAYLEIGH
+
+
+   STUDENT = BLOC ( condition = " Kind in ( 'Student', ) ",
+
+                     Mu = SIMP ( statut = "o",
+                                 typ = "R",
+                                 max = 1,
+                                 fr = "Moyenne de la loi",
+                                 ang = "Mean value",
+                                 ),
+
+                     Nu = SIMP ( statut = "o",
+                                 typ = "R",
+                                 max = 1,
+                                 val_min = 2.,
+                                 fr = "Parametre Nu de la loi | V > 2",
+                                 ang = "Nu parameter | V > 2",
+                                 ),
+
+                   Sigma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Sigma de la loi",
+                                  ang = "Sigma parameter",
+                                  ),
+
+   ), # Fin BLOC STUDENT
+
+
+
+   TRIANGULAR = BLOC ( condition = " Kind in ( 'Triangular', ) ",
+
+                         A = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du support de la loi | A < M < B",
+                                    ang = "Support lower bound | A < M < B",
+                                    ),
+
+                         M = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Mode de la loi | A < M < B",
+                                    ang = "Mode | A < M < B",
+                                    ),
+
+                         B = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne superieure du support de la loi | A < M < B",
+                                    ang = "Support upper bound | A < M < B",
+                                    ),
+
+   ), # Fin BLOC TRIANGULAR
+
+
+
+   TRUNCATEDNORMAL = BLOC ( condition = " Kind in ( 'TruncatedNormal', ) ",
+
+                             MuN = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = 1,
+                                          fr = "Parametre Mu de la loi",
+                                          ang = "Mu parameter",
+                                          ),
+
+                             SigmaN = SIMP ( statut = "o",
+                                             typ = "R",
+                                             max = 1,
+                                             val_min = 0.,
+                                             fr = "Parametre SigmaN de la loi | SigmaN > 0",
+                                             ang = "SigmaN parameter | SigmaN> 0",
+                                             ),
+
+                             A = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Borne inferieure de la loi | A < = B",
+                                        ang = "Lower bound | A < = B",
+                                        ),
+
+                             B = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Borne superieure de la loi | A < = B",
+                                        ang = "Upper bound | A < = B",
+                                        ),
+
+   ), # Fin BLOC TRUNCATEDNORMAL
+
+
+
+   UNIFORM = BLOC ( condition = " Kind in ( 'Uniform', ) ",
+
+                     A = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Borne inferieure du support de la loi | A < B",
+                                ang = "Support lower bound | A < B",
+                                ),
+
+                     B = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Borne superieure du support de la loi | A < B",
+                                ang = "Support upper bound | A < B",
+                                ),
+
+   ), # Fin BLOC UNIFORM
+
+
+
+   USERDEFINED = BLOC ( condition = " Kind in ( 'UserDefined', ) ",
+
+                           # Il faut definir une collection de couples ( x,p ) 
+                         Values = SIMP ( statut = 'o',
+                                         typ = 'R',
+                                         max = '**',
+                                         ),
+
+   ), # Fin BLOC USERDEFINED
+
+
+
+   WEIBULL = BLOC ( condition = " Kind in ( 'Weibull', ) ",
+
+                     Settings = SIMP ( statut = "o",
+                                          typ = "TXM",
+                                          max = 1,
+                                          into = ( "AlphaBeta", "MuSigma" ),
+                                          defaut = "AlphaBeta",
+                                          fr = "Parametrage de la loi weibull",
+                                          ang = "Weibull distribution parameter set",
+                                          ),
+
+                     AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+                                         Alpha = SIMP ( statut = "o",
+                                                        typ = "R",
+                                                        max = 1,
+                                                        val_min = 0.,
+                                                        fr = "Parametre Alpha de la loi | Alpha > 0",
+                                                        ang = "Alpha parameter | Alpha > 0",
+                                                        ),
+
+                                         Beta = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Beta de la loi | Beta > 0",
+                                                       ang = "Beta parameter | Beta > 0",
+                                                       ),
+
+                                         ), # Fin BLOC AlphaBeta_Parameters
+
+
+                     MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                         Mu = SIMP ( statut = "o",
+                                                     typ = "R",
+                                                     max = 1,
+                                                     fr = "Moyenne de la loi",
+                                                     ang = "Mean value",
+                                                     ),
+
+                                         Sigma = SIMP ( statut = "o",
+                                                        typ = "R",
+                                                        max = 1,
+                                                        val_min = 0.,
+                                                        fr = "Ecart type de la loi",
+                                                        ang = "Standard deviation",
+                                                        ),
+
+                                         ), # Fin BLOC MuSigma_Parameters
+
+                     Gamma = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du support de la loi",
+                                    ang = "Support lower bound",
+                                    ),
+
+    ), # Fin BLOC WEIBULL
+
+) # Fin OPER DISTRIBUTION
+# Ordre Catalogue DISTRIBUTION
+
+
+
+#================================
+# Definition du modele physique
+#================================
+
+
+DETERMINISTICVARIABLE = OPER ( nom = "DETERMINISTICVARIABLE",
+            sd_prod = variable,
+            op = None,
+            fr = "Variable deterministe",
+            ang = "Deterministic variable",
+            
+  N = SIMP ( statut = 'o',
+             typ = "TXM",
+             fr = "Nom",
+             ang = "Name",
+             ),
+            
+  T = SIMP ( statut = 'o',
+             defaut = "in",
+             into = ( "in" , "out", ),
+             typ = "TXM",
+             fr = "Type",
+             ang = "Type",
+             ),
+            
+  R = SIMP ( statut = 'o',
+             defaut = 0,
+             typ = "I",
+             fr = "Rang",
+             ang = "Rank",
+             ),
+            
+) # Fin OPER DETERMINISTICVARIABLE
+# Ordre Catalogue DETERMINISTICVARIABLE
+
+
+
+import opsOT
+MODEL = MACRO ( nom = "MODEL",
+                op = None,
+                UIinfo = { "groupes" : ( "Gestion du travail", ) },
+                fr = "Chargement du wrapper du modele physique",
+                ang = "Physical model wrapper load",
+                sd_prod = opsOT.INCLUDE,
+                op_init = opsOT.INCLUDE_context,
+                fichier_ini = 1,
+               
+  FileName = SIMP ( statut = "o",
+                    typ = "Fichier",
+                    fr = "Nom du modele physique",
+                    ang = "Physical model identifier",
+                    ),
+               
+) # Fin PROC MODEL
+# Ordre Catalogue MODEL
+
+
+
+
+VARIABLE = PROC ( nom = "VARIABLE",
+                  op = None,
+                  docu = "",
+                  fr = "Variable probabiliste",
+                  ang = "Probabilistic variable",
+
+  ModelVariable = SIMP ( statut = "o",
+                         typ = ( variable, ),
+                         ),
+
+  Distribution = SIMP ( statut = "o",
+                        typ = ( loi, ),
+                        ),
+                  
+) # Fin PROC VARIABLE
+# Ordre Catalogue VARIABLE
+
+
+CORRELATION = PROC ( nom = 'CORRELATION',
+                     op = None,
+                     docu = "",
+                     fr = "Correlation entre variables",
+                     ang = "Variable correlation",
+
+  Copula = SIMP ( statut = "o",
+                  typ = 'TXM',
+                  into = ( "Independent", "Normal" ),
+                  defaut = "Independent",
+                  fr = "Type de la copule",
+                  ang = "Copula kind",
+                  ),
+
+  Matrix = BLOC ( condition = "Copula in ( 'Normal', )",
+                  
+    CorrelationMatrix = SIMP ( statut = "o",
+                               typ = Matrice(nbLigs=None,
+                                             nbCols=None,
+                                             methodeCalculTaille='NbDeVariables',
+                                             valSup=1,
+                                             valMin=-1,
+                                             structure="symetrique"),
+                               fr = "Matrice de correlation entre les variables d'entree",
+                               ang = "Correlation matrix for input variables",
+                               ),
+  ), # Fin BLOC Matrix
+
+
+) # Fin PROC CORRELATION
+# Ordre Catalogue CORRELATION
+
+
+
+
+
+#================================
+# Definition de l'etude
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+CRITERIA = PROC ( nom = "CRITERIA",
+                  op = None,
+                  docu = "",
+                  fr = "Mise en donnee pour le fichier de configuration de OPENTURNS.",
+                  ang = "Writes the configuration file for OPENTURNS.",
+
+
+
+  Type = SIMP ( statut = "o",
+                typ = "TXM",
+                into = ( "Min/Max", "Central Uncertainty", "Threshold Exceedence" ),
+                fr = "Type d'Analyse",
+                ang = "Analysis",
+                ),
+
+
+
+
+
+
+
+  MinMax = BLOC ( condition = " Type in ( 'Min/Max', ) ",
+
+                  Method = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "Experiment Plane", "Random Sampling" ),
+                                  fr = "Methode",
+                                  ang = "Method",
+                                  ),
+                  # UC 3.1.1
+                  ExperimentPlaneSettings = BLOC ( condition = " Method in ( 'Experiment Plane', ) ",
+
+                          ExperimentPlane = SIMP ( statut = "o",
+                                                   typ = "TXM",
+                                                   into = ( "Axial", "Factorial", "Composite", ),
+                                                   fr = "Methode",
+                                                   ang = "Method",
+                                                   ),
+
+                          Levels = SIMP ( statut = "o",
+                                          typ = "R",
+                                          val_min = 0.0,
+                                          max = '**',    
+                                          fr = "Nombre de niveaux dans chaque direction",
+                                          ang = "Levels in each direction",
+                                          ),
+
+                          # Scaled Vector
+                          UnitsPerDimension = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = '**',    
+                                          fr = "Unite par dimension (autant que de variables declarees)",
+                                          ang = "Units per dimension (as much as declared variables)",
+                                          ),
+
+                          # Translation Vector
+                          Center = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = '**',    
+                                          fr = "Unite par dimension",
+                                          ang = "Units per dimension",
+                                          ),
+
+                    ), # Fin BLOC ExperimentPlaneSettings
+
+
+
+                  RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+                          SimulationsNumber = SIMP ( statut = "o",
+                                                typ = "I",
+                                                val_min = 1,
+                                                fr = "Nombre de points",
+                                                ang = "Points number",
+                                                ),
+
+                    ), # Fin BLOC RandomSamplingSettings
+
+                  Result = SIMP (  statut = "o",
+                                   typ = "TXM",
+                                   into = ( "Min/Max", ),
+                                   defaut = "Min/Max",
+                                   fr = "Le minimum et le maximum",
+                                   ang = "The min and max values",
+                                   ),
+
+
+  ), # Fin BLOC MinMax
+
+
+
+
+  CentralUncertainty = BLOC ( condition = " Type in ( 'Central Uncertainty', ) ",
+
+                  Method = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "Taylor Variance Decomposition", "Random Sampling" ),
+                                  fr = "Methode",
+                                  ang = "Method",
+                                  ),
+                              
+                  # UC 3.2.
+                  TaylorVarianceDecompositionSettings = BLOC ( condition = " Method in ( 'Taylor Variance Decomposition', ) ",
+
+                      Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                              MeanFirstOrder = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Moyenne au premier ordre",
+                                                ang = "MeanFirstOrder",
+                                                ),
+
+                              StandardDeviationFirstOrder = SIMP ( statut = "o",
+                                                                   typ = 'TXM',
+                                                                   into = ( 'yes', 'no' ),
+                                                                   defaut = 'yes',
+                                                                   max = 1,
+                                                                   fr = "Ecart-type au premier ordre",
+                                                                   ang = "StandardDeviationFirstOrder",
+                                                                   ),
+
+                              MeanSecondOrder = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'no',
+                                                       max = 1,
+                                                       fr = "Moyenne au second ordre",
+                                                       ang = "MeanSecondOrder",
+                                                       ),
+
+                              ImportanceFactor = SIMP ( statut = "o",
+                                                        typ = 'TXM',
+                                                        into = ( 'yes', 'no' ),
+                                                        defaut = 'yes',
+                                                        max = 1,
+                                                        fr = "Facteur d'importance pour variable de sortie scalaire",
+                                                        ang = "ImportanceFactor",
+                                                        ),
+                              ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                                     ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique des facteurs d'importance",
+                                                                              ang = "Importance Factor Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC ImportanceFactorSettings
+                                      
+                      ), # Fin FACT Result
+                                                               
+                  ), # Fin BLOC TaylorVarianceDecompositionSettings
+
+
+
+                  RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+                          SimulationsNumber = SIMP ( statut = "o",
+                                                typ = "I",
+                                                val_min = 1,
+                                                fr = "Nombre de points",
+                                                ang = "Points number",
+                                                ),
+
+                       Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                              EmpiricalMean = SIMP ( statut = "o",
+                                                     typ = 'TXM',
+                                                     into = ( 'yes', 'no' ),
+                                                     defaut = 'yes',
+                                                     max = 1,
+                                                     fr = "Moyenne empirique",
+                                                     ang = "Empirical mean",
+                                                     ),
+
+                              EmpiricalStandardDeviation = SIMP ( statut = "o",
+                                                                  typ = 'TXM',
+                                                                  into = ( 'yes', 'no' ),
+                                                                  defaut = 'yes',
+                                                                  max = 1,
+                                                                  fr = "Ecart-type empirique",
+                                                                  ang = "Empirical standard deviation",
+                                                                  ),
+
+                              EmpiricalQuantile = SIMP ( statut = "o",
+                                                         typ = 'TXM',
+                                                         into = ( 'yes', 'no' ),
+                                                         defaut = 'yes',
+                                                         max = 1,
+                                                         fr = "Quantile empirique",
+                                                         ang = "Empirical quantile",
+                                                         ),
+
+                              EmpiricalQuantileSettings = BLOC ( condition = " EmpiricalQuantile in ( 'yes', ) ",
+
+                                  EmpiricalQuantile_Order = SIMP ( statut = "o",
+                                                                   typ = 'R',
+                                                                   defaut = 0.95,
+                                                                   max = 1,
+                                                                   val_min = 0.0,
+                                                                   val_max = 1.0,
+                                                                   fr = "Ordre du quantile empirique",
+                                                                   ang = "Empirical quantile order",
+                                                                   ),
+
+                              ), # Fin BLOC EmpiricalQuantileSettings
+
+                              CorrelationAnalysis = SIMP ( statut = "o",
+                                                            typ = 'TXM',
+                                                            into = ( 'yes', 'no' ),
+                                                            defaut = 'yes',
+                                                            max = 1,
+                                                            fr = "Correlations analysees",
+                                                            ang = "Analysed correlations",
+                                                            ),
+
+                              KernelSmoothing = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'yes',
+                                                       max = 1,
+                                                       fr = "Kernel smoothing de l'echantillon",
+                                                       ang = "Kernel smoothing of the sample",
+                                                       ),
+
+                              KernelSmoothingSettings = BLOC ( condition = " KernelSmoothing in ( 'yes', ) ",
+
+                                     KernelSmoothingDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique de la reconstruction a noyau",
+                                                                              ang = "Kernel Smoothing Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC KernelSmoothingSettings
+                                      
+                      ), # Fin FACT Result
+                                                               
+                  ), # Fin BLOC RandomSamplingSettings
+
+  ), # Fin BLOC CentralUncertainty
+
+
+
+
+  ThresholdExceedence = BLOC ( condition = " Type in ( 'Threshold Exceedence', ) ",
+
+         Event =  FACT ( statut = "o",
+                         min = 1,
+                         max = 1,
+
+                         Threshold = SIMP ( statut = "o",
+                                            typ = "R",
+                                            max = 1,
+                                            fr = "Le seuil de defaillance",
+                                            ang = "Failure threshold",
+                                            ),
+
+                         ComparisonOperator = SIMP ( statut = "o",
+                                                     typ = "TXM",
+                                                     max = 1,
+                                                     into = ( "Less", "LessOrEqual", "Equal", "GreaterOrEqual", "Greater" ),
+                                                     fr = "Que faut-il ne pas depasser : un maximum ou un minimum",
+                                                     ang = "What is the failure threshold : maximum or minimum",
+                                                     ),
+         ), # Fin FACT Event
+                         
+
+         Method = SIMP ( statut = "o",
+                         typ = "TXM",
+                         into = ( "Simulation", "FORM_SORM" ),
+                         fr = "Methode",
+                         ang = "Method",
+                         ),
+
+         SimulationSettings = BLOC ( condition = " Method in ( 'Simulation', ) ",
+
+               Algorithm = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "MonteCarlo", "LHS", "ImportanceSampling" ),
+                                  fr = "Algorithme de simulation",
+                                  ang = "Simulation algorithm",
+                                  ),
+
+                                 
+               RandomGenerator = FACT ( statut = "o",
+                                        min = 1,
+                                        max = 1,
+
+                           SeedToBeSet = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'no',
+                                                max = 1,
+                                                fr = "La racine du generateur aleatoire doit-elle etre positionnee ?",
+                                                ang = "Does the random generator seed need to be set ?",
+                                                ),
+
+                           SeedSettings = BLOC ( condition = " SeedToBeSet in ( 'yes', ) ",
+
+                                                 RandomGeneratorSeed = SIMP ( statut = "o",
+                                                                              typ = "I",
+                                                                              max = 1,
+                                                                              fr = "Racine du generateur aleatoire",
+                                                                              ang = "Random generator seed",
+                                                                              ),
+
+                                               ), # Fin BLOC SeedSettings
+
+               ), # Fin FACT RandomGenerator
+
+
+               BlockSize = SIMP ( statut = "o",
+                                  typ = "I",
+                                  max = 1,
+                                  val_min = 1,
+                                  defaut = 1,
+                                  fr = "Nombre de calculs realises en bloc",
+                                  ang = "Number of computations as a block",
+                                  ),
+
+               MaximumOuterSampling = SIMP ( statut = "o",
+                                             typ = "I",
+                                             max = 1,
+                                             val_min = 1,
+                                             fr = "Maximum d'iterations externes",
+                                             ang = "Maximum outer Sampling value",
+                                             ),
+
+               MaximumCoefficientOfVariation = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      defaut = 0.1,
+                                                      val_min = 0.0,
+                                                      val_max = 1.0,
+                                                      fr = " maximum ...",
+                                                      ang = "Absolute maximum ...."
+                                                      ),
+
+               ImportanceSamplingSettings = BLOC ( condition = " Algorithm in ( 'ImportanceSampling', ) ",
+
+                            MeanVector = SIMP ( statut = "o",
+                                                typ = "R",
+                                                max = "**",
+                                                fr = "Moyenne",
+                                                ang = "Mean vector",
+                                                ),
+
+                            Correlation = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'Independent', 'Linear' ),
+                                                 defaut = 'Independent',
+                                                 max = 1,
+                                                 fr = "Le type de correlation entre les variables",
+                                                 ang = "Correlation between variables",
+                                                 ),
+
+               ), # Fin BLOC ImportanceSamplingSettings
+
+               Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                    Probability = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Probabiblite",
+                                         ang = "Probability",
+                                         ),
+
+                    StandardDeviation = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Ecart type",
+                                         ang = "Standard deviation",
+                                         ),
+
+                    ConfidenceInterval = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Intervale de confiance",
+                                                ang = "Confidence interval",
+                                                ),
+
+                    ConfidenceIntervalSettings = BLOC ( condition = " ConfidenceInterval in ( 'yes', ) ",
+
+                          Level = SIMP ( statut = "o",
+                                         typ = 'R',
+                                         defaut = 0.9,
+                                         max = 1,
+                                         val_min = 0.0,
+                                         val_max = 1.0,
+                                         fr = "Niveau de confiance",
+                                         ang = "Confidence level",
+                                         ),
+                                                     
+                    ), # Fin BLOC ConfidenceIntervalSettings
+                               
+                    VariationCoefficient = SIMP ( statut = "o",
+                                                  typ = 'TXM',
+                                                  into = ( 'yes', 'no' ),
+                                                  defaut = 'yes',
+                                                  max = 1,
+                                                  fr = "Coefficient de variation",
+                                                  ang = "Coefficient of variation",
+                                                  ),
+
+                    SimulationsNumber = SIMP ( statut = "o",
+                                             typ = 'TXM',
+                                             into = ( 'yes', 'no' ),
+                                             defaut = 'yes',
+                                             max = 1,
+                                             fr = "Nombre d'iterations",
+                                             ang = "Iteration number",
+                                             ),
+
+                    ConvergenceGraph = SIMP ( statut = "o",
+                                             typ = 'TXM',
+                                             into = ( 'yes', 'no' ),
+                                             defaut = 'yes',
+                                             max = 1,
+                                             fr = "Graphe de convergence",
+                                             ang = "Convergence graph",
+                                             ),
+                               
+                    ConvergenceGraphSettings = BLOC ( condition = " ConvergenceGraph in ( 'yes', ) ",
+
+                                     ConvergenceDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique de la convergence",
+                                                                         ang = "Convergence Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC ConvergenceGraphSettings
+                                      
+             ), # Fin FACT Result
+                                                               
+
+
+         ), # Fin BLOC SimulationSettings
+
+
+                               
+         FORM_SORMSettings = BLOC ( condition = " Method in ( 'FORM_SORM', ) ",
+
+                Approximation = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       defaut = "FirstOrder",
+                                       into = ( "FirstOrder", "SecondOrder" ),
+                                       max = 1,
+                                       fr = "Approximation",
+                                       ang = "Approximation",
+                                       ),
+
+                OptimizationAlgorithm = SIMP ( statut = "o",
+                                               typ = "TXM",
+                                               defaut = "Cobyla",
+                                               into = ( "Cobyla", "AbdoRackwitz" ),
+                                               max = 1,
+                                               fr = "Methode d'optimisation",
+                                               ang = "Optimization method",
+                                               ),
+
+                                     
+                PhysicalStartingPoint = SIMP ( statut = "f",
+                                               typ = "R",
+                                               max = "**",
+                                               fr = "Point de demarrage de l'algorithme iteratif",
+                                               ang = "Initial point for iterative process",
+                                               ),
+
+                MaximumIterationsNumber = SIMP ( statut = "f",
+                                                 typ = "I",
+                                                 max = 1,
+                                                 val_min = 1,
+                                                 fr = "Nombre maximum d'iterations",
+                                                 ang = "Maximum number of iterations",
+                                                 ),
+
+                                     
+                MaximumAbsoluteError = SIMP ( statut = "o",
+                                              typ = "R",
+                                              max = 1,
+                                              defaut = 1E-4,
+                                              val_min = 0.0,
+                                              fr = "Distance maximum absolue entre 2 iterations successives",
+                                              ang = "Absolute maximum distance between 2 successive iterates",
+                                              ),
+
+                MaximumRelativeError = SIMP ( statut = "o",
+                                               typ = "R",
+                                               max = 1,
+                                               defaut = 1E-4,
+                                               val_min = 0.0,
+                                               fr = "Distance maximum relative entre 2 iterations successives",
+                                               ang = "Relative maximum distance between 2 successive iterates",
+                                               ),
+                                     
+                MaximumConstraintError = SIMP ( statut = "o",
+                                                typ = "R",
+                                                max = 1,
+                                                defaut = 1E-4,
+                                                val_min = 0.0,
+                                                fr = "Valeur maximum absolue de la fonction moins la valeur du niveau",
+                                                ang = "Maximum absolute value of the constraint function minus the level value",
+                                                ),
+
+                ImportanceSampling = SIMP ( statut = "o",
+                                            typ = 'TXM',
+                                            into = ( 'yes', 'no' ),
+                                            defaut = 'no',
+                                            max = 1,
+                                            fr = "Tirage d'importance au point de conception",
+                                            ang = "Importance sampling at design point",
+                                            ),
+
+                FORMResult = BLOC ( condition = " Approximation in ( 'FirstOrder', ) ",
+
+                    Probability = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Probabiblite",
+                                         ang = "Probability",
+                                         ),
+
+                    DesignPoint = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', 'no' ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Point de conception",
+                                         ang = "Design point",
+                                         ),
+
+                    HasoferReliabilityIndex = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Indice de fiabilite",
+                                                 ang = "Reliability index",
+                                                 ),
+
+                    ImportanceFactor = SIMP ( statut = "o",
+                                              typ = 'TXM',
+                                              into = ( 'yes', 'no' ),
+                                              defaut = 'yes',
+                                              max = 1,
+                                              fr = "Facteur d'importance pour variable de sortie scalaire",
+                                              ang = "Importance factor",
+                                              ),
+
+                    ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                                     ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique des facteurs d'importance",
+                                                                              ang = "Importance Factor Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC ImportanceFactorSettings
+                                      
+                    SensitivityAnalysis = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Analyse de sensibilite",
+                                                 ang = "Sensitivity analysis",
+                                                 ),
+
+                    SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+                            FORMEventProbabilitySensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+        
+                            FORMEventProbabilitySensitivitySettings = BLOC ( condition = " FORMEventProbabilitySensitivity in ( 'yes', ) ",
+
+                                     FORMEventProbabilitySensitivityDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique des sensibilites",
+                                                                         ang = "Sensitivity Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC FORMEventProbabilitySensitivitySettings
+                                      
+                            HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+        
+                            HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+                                     HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique des sensibilites",
+                                                                         ang = "Sensitivity Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+                                      
+                    ), # Fin BLOC SensitivityAnalysisSettings
+
+                    FunctionCallsNumber = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Nombre d'appels a la fonction",
+                                                 ang = "Function calls number",
+                                                 ),
+
+
+                ), # Fin BLOC FORMResult
+
+
+                SORMResult = BLOC ( condition = " Approximation in ( 'SecondOrder', ) ",
+
+
+                    TvedtApproximation = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'no',
+                                                max = 1,
+                                                fr = "Approximation de Tvedt",
+                                                ang = "Tvedt approximation",
+                                                ),
+
+                    HohenBichlerApproximation = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'no',
+                                                       max = 1,
+                                                       fr = "Approximation de HohenBichler",
+                                                       ang = "HohenBichler approximation",
+                                                       ),
+
+                    BreitungApproximation = SIMP ( statut = "o",
+                                                   typ = 'TXM',
+                                                   into = ( 'yes', 'no' ),
+                                                   defaut = 'no',
+                                                   max = 1,
+                                                   fr = "Approximation de Breitung",
+                                                   ang = "Breitung approximation",
+                                                   ),
+
+                    DesignPoint = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', 'no' ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Point de conception",
+                                         ang = "Design point",
+                                         ),
+
+                    ImportanceFactor = SIMP ( statut = "o",
+                                              typ = 'TXM',
+                                              into = ( 'yes', 'no' ),
+                                              defaut = 'yes',
+                                              max = 1,
+                                              fr = "Facteur d'importance pour variable de sortie scalaire",
+                                              ang = "Importance factor",
+                                              ),
+
+                    ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                                     ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique des facteurs d'importance",
+                                                                              ang = "Importance Factor Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC ImportanceFactorSettings
+                                      
+                    SensitivityAnalysis = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Analyse de sensibilite",
+                                                 ang = "Sensitivity analysis",
+                                                 ),
+
+                    SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+                            HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+                                                                 
+                            HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+                                     HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique des sensibilites",
+                                                                         ang = "Sensitivity Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+                                      
+                    ), # Fin BLOC SensitivityAnalysisSettings
+
+                    FunctionCallsNumber = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Nombre d'appels a la fonction",
+                                                 ang = "Function calls number",
+                                                 ),
+
+
+                ), # Fin BLOC SecondOrder
+
+
+                                     
+        ), # Fin BLOC FORM_SORMSettings
+
+
+                               
+  ), # Fin BLOC ThresholdExceedence
+
+
+
+) # Fin PROC CRITERIA
+# Ordre Catalogue CRITERIA
+
+
+
+
+
+
+
diff --git a/Openturns_Study/OpenTURNS_Cata_Study_V8.py b/Openturns_Study/OpenTURNS_Cata_Study_V8.py
new file mode 100644 (file)
index 0000000..6a43ee3
--- /dev/null
@@ -0,0 +1,1718 @@
+# -*- coding: iso-8859-1 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+#from Accas import ASSD, JDC_CATA, AU_MOINS_UN, PROC, SIMP, FACT, OPER, MACRO, BLOC, A_VALIDATOR
+from Accas import *
+
+class loi      ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+import types
+class Tuple:
+  def __init__(self,ntuple):
+    self.ntuple=ntuple
+
+  def __convert__(self,valeur):
+    if type(valeur) == types.StringType:
+      return None
+    if len(valeur) != self.ntuple:
+      return None
+    return valeur
+
+  def info(self):
+    return "Tuple de %s elements" % self.ntuple
+
+  __repr__=info
+  __str__=info
+
+class Matrice:
+  def __init__(self,nbLigs=None,nbCols=None,methodeCalculTaille=None,formatSortie="ligne",valSup=None,valMin=None,structure=None):
+      self.nbLigs=nbLigs
+      self.nbCols=nbCols
+      self.methodeCalculTaille=methodeCalculTaille
+      self.formatSortie=formatSortie
+      self.valSup=valSup
+      self.valMin=valMin
+      self.structure=structure
+
+  def __convert__(self,valeur):
+    # Attention ne verifie pas grand chose
+    if type(valeur) != types.ListType :
+      return None
+    return valeur
+
+  def info(self):
+      return "Matrice %s x %s" % (self.nbLigs, self.nbCols)
+
+      __repr__=info
+      __str__=info
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_STUDY',
+                 execmodul = None,
+                 regles = ( AU_MOINS_UN ( 'CRITERIA' ),
+                            AU_MOINS_UN ( 'MODEL' ),
+                            AVANT ( ('DISTRIBUTION', 'MODEL'), 'VARIABLE' ),
+#                            A_CLASSER ( 'VARIABLE',                'CORRELATION' ),
+#                            A_CLASSER ( 'VARIABLE',                'CRITERIA' ),
+#                            A_CLASSER ( 'CORRELATION',             'CRITERIA' ),
+                            ),
+                 ) # Fin JDC_CATA
+
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+LOG = PROC ( nom = "LOG",
+             op = None,
+             docu = "",
+               
+  DebugMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de debug de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library debug level print",
+                 ),
+               
+  WrapperMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de wrapper de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library debug level print",
+                 ),
+               
+  UserMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de user de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library user level print",
+                 ),
+               
+  InfoMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de info de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library info level print",
+                 ),
+               
+  WarningMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de warning de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library warning level print",
+                 ),
+               
+  ErrorMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de error de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library error level print",
+                 ),
+               
+) # Fin PROC LOG
+# Ordre Catalogue LOG
+
+
+
+
+
+#================================
+# Definition des LOIS
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+DISTRIBUTION = OPER ( nom = "DISTRIBUTION",
+                      sd_prod = loi,
+                      op = 68,
+                      fr = "Definitions des lois marginales utilisees par les variables d'entree", 
+                      
+                      
+#====
+# Type de distribution
+#====
+
+  Kind = SIMP ( statut = "o", typ = "TXM",
+                into = ( "Beta",
+                         "Exponential",
+                         "Gamma",
+                         "Geometric",
+                         "Gumbel",
+                         "Histogram",
+                         "Laplace",
+                         "Logistic",
+                         "LogNormal",
+                         "MultiNomial",
+                         "NonCentralStudent",
+                         "Normal",
+                         "Poisson",
+                         "Rayleigh",
+                         "Student",
+                         "Triangular",
+                         "TruncatedNormal",
+                         "Uniform",
+                         #"UserDefined",
+                         "Weibull",
+                         ),
+                fr = "Choix du type de la loi marginale",
+                ang = "1D marginal distribution",
+                ),
+
+#====
+# Definition des parametres selon le type de la loi
+#====
+
+  BETA = BLOC ( condition = " Kind in ( 'Beta', ) ",
+
+                  Settings = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       max = 1,
+                                       into = ( "RT", "MuSigma" ),
+                                       defaut = "RT",
+                                       fr = "Parametrage de la loi beta",
+                                       ang = "Beta distribution parameter set",
+                                       ),
+
+                  RT_Parameters = BLOC ( condition = " Settings in ( 'RT', ) ",
+
+                                      R = SIMP ( statut = "o",
+                                                 typ = "R",
+                                                 max = 1,
+                                                 val_min = 0.,
+                                                 fr = "Parametre R de la loi | R > 0",
+                                                 ang = "R parameter | R > 0",
+                                                 ),
+
+                                      # T > R
+                                      T = SIMP ( statut = "o",
+                                                 typ = "R",
+                                                 max = 1,
+                                                 val_min = 0.,
+                                                 fr = "Parametre T de la loi | T > R",
+                                                 ang = "T parameter | T > R",
+                                                 ),
+
+                                      ), # Fin BLOC RT_Parameters
+
+
+                  MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                      Mu = SIMP ( statut = "o",
+                                                  typ = "R",
+                                                  max = 1,
+                                                  fr = "Moyenne de la loi",
+                                                  ang = "Mean value",
+                                                  ),
+
+                                      Sigma = SIMP ( statut = "o",
+                                                     typ = "R",
+                                                     max = 1,
+                                                     val_min = 0.,
+                                                     fr = "Ecart type de la loi",
+                                                     ang = "Standard deviation",
+                                                     ),
+
+                                      ), # Fin BLOC MuSigma_Parameters
+
+
+                  A = SIMP ( statut = "o",
+                             typ = "R",
+                             max = 1,
+                             fr = "Borne inferieure du support de la loi",
+                             ang = "Support lower bound",
+                             ),
+
+                  # B > A
+                  B = SIMP ( statut = "o",
+                             typ = "R",
+                             max = 1,
+                             fr = "Borne superieure du support de la loi",
+                             ang = "Support upper bound",
+                             ),
+
+  ), # Fin BLOC BETA
+
+
+
+  EXPONENTIAL = BLOC ( condition = " Kind in ( 'Exponential', ) ",
+
+                         Lambda = SIMP ( statut = "o",
+                                         typ = "R",
+                                         max = 1,
+                                         val_min = 0.,
+                                         fr = "Parametre Lambda | Lambda > 0",
+                                         ang = "Lambda parameter | Lambda > 0",
+                                         ),
+
+                         Gamma = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Borne inferieure du support de la loi",
+                                        ang = "Support lower bound",
+                                        ),
+
+  ), # Fin BLOC EXPONENTIAL
+
+
+
+  GAMMA = BLOC ( condition = " Kind in ( 'Gamma', ) ",
+
+                   Settings = SIMP ( statut = "o",
+                                        typ = "TXM",
+                                        max = 1,
+                                        into = ( "KLambda", "MuSigma" ),
+                                        defaut = "KLambda",
+                                        fr = "Parametrage de la loi gamma",
+                                        ang = "Gamma distribution parameter set",
+                                        ),
+
+                   KLambda_Parameters = BLOC ( condition = " Settings in ( 'KLambda', ) ",
+
+                                       K = SIMP ( statut = "o",
+                                                  typ = "R",
+                                                  max = 1,
+                                                  val_min = 0.,
+                                                  fr = "Parametre K de la loi | K > 0",
+                                                  ang = "K parameter | K > 0",
+                                                  ),
+
+                                       Lambda = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Lambda de la loi | Lambda > 0",
+                                                       ang = "Lambda parameter | Lambda > 0",
+                                                       ),
+
+                                       ), # Fin BLOC KLambda_Parameters
+
+
+                   MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                       Mu = SIMP ( statut = "o",
+                                                   typ = "R",
+                                                   max = 1,
+                                                   fr = "Moyenne de la loi",
+                                                   ang = "Mean value",
+                                                   ),
+
+                                       Sigma = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      val_min = 0.,
+                                                      fr = "Ecart type de la loi",
+                                                      ang = "Standard deviation",
+                                                      ),
+
+                                       ), # Fin BLOC MuSigma_Parameters
+
+                   Gamma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Borne inferieure du supoport de la loi",
+                                  ang = "Support lower bound",
+                                  ),
+
+
+  ), # Fin BLOC GAMMA
+
+
+
+  GEOMETRIC = BLOC ( condition = " Kind in ( 'Geometric', ) ",
+
+                       P = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  val_min = 0.,
+                                  val_max = 1.,
+                                  fr = "Parametre P | 0 < P < 1",
+                                  ang = "P parameter | 0 < P < 1",
+                                  ),
+
+  ), # Fin BLOC GEOMETRIC
+
+
+
+  GUMBEL = BLOC ( condition = " Kind in ( 'Gumbel', ) ",
+
+                    Settings = SIMP ( statut = "o",
+                                         typ = "TXM",
+                                         max = 1,
+                                         into = ( "AlphaBeta", "MuSigma" ),
+                                         defaut = "AlphaBeta",
+                                         fr = "Parametrage de la loi gumbel",
+                                         ang = "Gumbel distribution parameter set",
+                                         ),
+
+                    AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+                                        Alpha = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Alpha de la loi | Alpha > 0",
+                                                       ang = "Alpha parameter | Alpha > 0",
+                                                       ),
+
+                                        Beta = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      fr = "Parametre Beta de la loi",
+                                                      ang = "Beta parameter",
+                                                      ),
+
+                                        ), # Fin BLOC AlphaBeta_Parameters
+
+
+                    MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                        Mu = SIMP ( statut = "o",
+                                                    typ = "R",
+                                                    max = 1,
+                                                    fr = "Moyenne de la loi",
+                                                    ang = "Mean value",
+                                                    ),
+
+                                        Sigma = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Ecart type de la loi",
+                                                       ang = "Standard deviation",
+                                                       ),
+
+                                        ), # Fin BLOC MuSigma_Parameters
+
+  ), # Fin BLOC GUMBEL
+
+
+
+  HISTOGRAM = BLOC ( condition = " Kind in ( 'Histogram', ) ",
+
+                       First = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du supoport de la loi",
+                                    ang = "Support lower bound",
+                                    ),
+
+                       # Il faut definir une collection de couples ( x,p ) 
+                       Values = SIMP ( statut = 'o',
+                                       typ = Tuple(2),
+                                       max = '**',
+                                       fr = "Liste de couples : largeur de classe, hauteur de classe",
+                                       ang = "Class bandwidth, class height couple list",
+                                       validators=VerifTypeTuple(('R','R')),
+                                       ),
+
+  ), # Fin BLOC HISTOGRAM
+
+
+
+  LAPLACE = BLOC ( condition = " Kind in ( 'Laplace', ) ",
+
+                   Lambda = SIMP ( statut = "o",
+                                   typ = "R",
+                                   max = 1,
+                                   val_min = 0.,
+                                   fr = "Parametre Lambda | Lambda > 0",
+                                   ang = "Lambda parameter | Lambda > 0",
+                                   ),
+                   
+                   Mu = SIMP ( statut = "o",
+                               typ = "R",
+                               max = 1,
+                               fr = "Moyenne de la loi",
+                               ang = "Mean value",
+                              ),
+
+  ), # Fin BLOC LAPLACE
+
+  LOGNORMAL = BLOC ( condition = " Kind in ( 'LogNormal', ) ",
+
+                     Settings = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       max = 1,
+                                       into = ( "MuSigmaLog", "MuSigma", "MuSigmaOverMu" ),
+                                       defaut = "MuSigmaLog",
+                                       fr = "Parametrage de la loi lognormale",
+                                       ang = "Lognormal distribution parameter set",
+                                       ),
+
+                     MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                                 Mu = SIMP ( statut = "o",
+                                                             typ = "R",
+                                                             max = 1,
+                                                             fr = "Moyenne de la loi",
+                                                             ang = "Mean value",
+                                                             ),
+
+                                                 Sigma = SIMP ( statut = "o",
+                                                                typ = "R",
+                                                                max = 1,
+                                                                val_min = 0.,
+                                                                fr = "Ecart type de la loi",
+                                                                ang = "Standard deviation",
+                                                                ),
+
+                                                 ), # Fin BLOC MuSigma_Parameters
+
+                     MuSigmaOverMu_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaOverMu', ) ",
+
+                                                 Mu = SIMP ( statut = "o",
+                                                             typ = "R",
+                                                             max = 1,
+                                                             fr = "Moyenne de la loi",
+                                                             ang = "Mean value",
+                                                             ),
+
+                                                 SigmaOverMu = SIMP ( statut = "o",
+                                                                typ = "R",
+                                                                max = 1,
+                                                                val_min = 0.,
+                                                                fr = "Rapport ecart type / moyenne de la loi",
+                                                                ang = "Standard deviation / mean value ratio",
+                                                                ),
+
+                                                 ), # Fin BLOC MuSigmaOverMu_Parameters
+
+                     MuSigmaLog_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaLog', ) ",
+
+                                                    MuLog = SIMP ( statut = "o",
+                                                                   typ = "R",
+                                                                   max = 1,
+                                                                   fr = "Moyenne du log",
+                                                                   ang = "Log mean value",
+                                                                   ),
+
+                                                    SigmaLog = SIMP ( statut = "o",
+                                                                      typ = "R",
+                                                                      max = 1,
+                                                                      val_min = 0.,
+                                                                      fr = "Ecart type du log",
+                                                                      ang = "Log standard deviation",
+                                                                      ),
+                                            
+                                                    ), # Fin BLOC MuSigmaLog_Parameters
+
+                     Gamma = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du support de la loi",
+                                    ang = "Support lower bound",
+                                    ),
+
+   ), # Fin BLOC LOGNORMAL
+
+
+
+   LOGISTIC = BLOC ( condition = " Kind in ( 'Logistic', ) ",
+
+                       Alpha = SIMP ( statut = "o",
+                                      typ = "R",
+                                      max = 1,
+                                      fr = "Borne inferieure du supoport de la loi",
+                                      ang = "Support lower bound",
+                                      ),
+
+                       Beta = SIMP ( statut = "o",
+                                     typ = "R",
+                                     max = 1,
+                                     val_min = 0.,
+                                     fr = "Parametre Beta de la loi | Beta > 0",
+                                     ang = "Beta parameter | Beta > 0",
+                                     ),
+
+   ), # Fin BLOC LOGISTIC
+
+
+
+   MULTINOMIAL = BLOC ( condition = " Kind in ( 'MultiNomial', ) ",
+                         
+                         N = SIMP ( statut = "o",
+                                    typ = "I",
+                                    max = 1,
+                                    fr = "Parametre N de la loi | N > 0",
+                                    ang = "N parameter | N > 0",
+                                    ),
+
+                       # Il faut definir une collection de couples ( x,p ) 
+                       Values = SIMP ( statut = 'o',
+                                       typ = "R",
+                                       max = '**',
+                                       fr = "Liste de probabilités",
+                                       ang = "Probability list",
+                                       validators=VerifTypeTuple(('R','R')),
+                                       ),
+
+   ), # Fin BLOC MULTINOMIAL
+
+
+  NONCENTRALSTUDENT = BLOC ( condition = " Kind in ( 'NonCentralStudent', ) ",
+
+                   Nu = SIMP ( statut = "o",
+                               typ = "R",
+                               max = 1,
+                               fr = "Parametre Nu de la loi | Nu > 0",
+                               ang = "Nu parameter | Nu > 0",
+                              ),
+
+                   Delta = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Delta de la loi | Delta > 0",
+                                  ang = "Delta parameter | Delta > 0",
+                                  ),
+                   
+                   Gamma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Gamma de centrage de la loi",
+                                  ang = "Gamma parameter",
+                                  ),
+
+  ), # Fin BLOC NONCENTRALSTUDENT
+
+
+   NORMAL = BLOC ( condition = " Kind in ( 'Normal', ) ",
+
+                    Mu = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Moyenne de la loi",
+                                ang = "Mean value",
+                                ),
+
+                   Sigma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  val_min = 0.,
+                                  fr = "Ecart type de la loi",
+                                  ang = "Standard deviation",
+                                  ),
+
+   ), # Fin BLOC NORMAL
+
+
+
+   POISSON = BLOC ( condition = " Kind in ( 'Poisson', ) ",
+
+                     Lambda = SIMP ( statut = "o",
+                                     typ = "R",
+                                     max = 1,
+                                     val_min = 0.,
+                                     fr = "Parametre Lambda de la loi | Lambda > 0",
+                                     ang = "Lambda parameter | Lambda > 0",
+                                     ),
+
+   ), # Fin BLOC POISSON
+
+
+
+  RAYLEIGH = BLOC ( condition = " Kind in ( 'Rayleigh', ) ",
+
+                   Sigma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Sigma de la loi | Sigma > 0",
+                                  ang = "Sigma parameter | Sigma > 0",
+                                  ),
+
+                   Gamma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Borne inferieure du support de la loi",
+                                  ang = "Support lower bound",
+                                  ),
+ ), # Fin BLOC RAYLEIGH
+
+
+   STUDENT = BLOC ( condition = " Kind in ( 'Student', ) ",
+
+                     Mu = SIMP ( statut = "o",
+                                 typ = "R",
+                                 max = 1,
+                                 fr = "Parametre Mu de la loi",
+                                 ang = "Mu parameter",
+                                 ),
+
+                     Nu = SIMP ( statut = "o",
+                                 typ = "R",
+                                 max = 1,
+                                 val_min = 2.,
+                                 fr = "Parametre Nu de la loi | Nu > 2",
+                                 ang = "Nu parameter | Nu > 2",
+                                 ),
+
+                   Sigma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Sigma de la loi",
+                                  ang = "Sigma parameter",
+                                  ),
+
+   ), # Fin BLOC STUDENT
+
+
+
+   TRIANGULAR = BLOC ( condition = " Kind in ( 'Triangular', ) ",
+
+                         A = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du support de la loi | A < M < B",
+                                    ang = "Support lower bound | A < M < B",
+                                    ),
+
+                         M = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Mode de la loi | A < M < B",
+                                    ang = "Mode | A < M < B",
+                                    ),
+
+                         B = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne superieure du support de la loi | A < M < B",
+                                    ang = "Support upper bound | A < M < B",
+                                    ),
+
+   ), # Fin BLOC TRIANGULAR
+
+
+
+   TRUNCATEDNORMAL = BLOC ( condition = " Kind in ( 'TruncatedNormal', ) ",
+
+                             MuN = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = 1,
+                                          fr = "Moyenne de la loi Normale non tronquée",
+                                          ang = "Mean value of the associated non truncated normal distribution",
+                                          ),
+
+                             SigmaN = SIMP ( statut = "o",
+                                             typ = "R",
+                                             max = 1,
+                                             val_min = 0.,
+                                             fr = "Ecart-type de la loi Normale non tronquée",
+                                             ang = "Standard deviation of the associated non truncated normal distribution",
+                                             ),
+
+                             A = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Borne inferieure de la loi | A < B",
+                                        ang = "Lower bound | A < B",
+                                        ),
+
+                             B = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Borne superieure de la loi | A < B",
+                                        ang = "Upper bound | A < B",
+                                        ),
+
+   ), # Fin BLOC TRUNCATEDNORMAL
+
+
+
+   UNIFORM = BLOC ( condition = " Kind in ( 'Uniform', ) ",
+
+                     A = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Borne inferieure du support de la loi | A < B",
+                                ang = "Support lower bound | A < B",
+                                ),
+
+                     B = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Borne superieure du support de la loi | A < B",
+                                ang = "Support upper bound | A < B",
+                                ),
+
+   ), # Fin BLOC UNIFORM
+
+
+
+   USERDEFINED = BLOC ( condition = " Kind in ( 'UserDefined', ) ",
+
+                           # Il faut definir une collection de couples ( x,p ) 
+                         Values = SIMP ( statut = 'o',
+                                         typ = 'R',
+                                         max = '**',
+                                         ),
+
+   ), # Fin BLOC USERDEFINED
+
+
+
+   WEIBULL = BLOC ( condition = " Kind in ( 'Weibull', ) ",
+
+                     Settings = SIMP ( statut = "o",
+                                          typ = "TXM",
+                                          max = 1,
+                                          into = ( "AlphaBeta", "MuSigma" ),
+                                          defaut = "AlphaBeta",
+                                          fr = "Parametrage de la loi weibull",
+                                          ang = "Weibull distribution parameter set",
+                                          ),
+
+                     AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+                                         Alpha = SIMP ( statut = "o",
+                                                        typ = "R",
+                                                        max = 1,
+                                                        val_min = 0.,
+                                                        fr = "Parametre Alpha de la loi | Alpha > 0",
+                                                        ang = "Alpha parameter | Alpha > 0",
+                                                        ),
+
+                                         Beta = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Beta de la loi | Beta > 0",
+                                                       ang = "Beta parameter | Beta > 0",
+                                                       ),
+
+                                         ), # Fin BLOC AlphaBeta_Parameters
+
+
+                     MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                         Mu = SIMP ( statut = "o",
+                                                     typ = "R",
+                                                     max = 1,
+                                                     fr = "Moyenne de la loi",
+                                                     ang = "Mean value",
+                                                     ),
+
+                                         Sigma = SIMP ( statut = "o",
+                                                        typ = "R",
+                                                        max = 1,
+                                                        val_min = 0.,
+                                                        fr = "Ecart type de la loi",
+                                                        ang = "Standard deviation",
+                                                        ),
+
+                                         ), # Fin BLOC MuSigma_Parameters
+
+                     Gamma = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du support de la loi",
+                                    ang = "Support lower bound",
+                                    ),
+
+    ), # Fin BLOC WEIBULL
+
+) # Fin OPER DISTRIBUTION
+# Ordre Catalogue DISTRIBUTION
+
+
+
+#================================
+# Definition du modele physique
+#================================
+
+
+DETERMINISTICVARIABLE = OPER ( nom = "DETERMINISTICVARIABLE",
+            sd_prod = variable,
+            op = None,
+            fr = "Variable deterministe",
+            ang = "Deterministic variable",
+            
+  N = SIMP ( statut = 'o',
+             typ = "TXM",
+             fr = "Nom",
+             ang = "Name",
+             ),
+            
+  T = SIMP ( statut = 'o',
+             defaut = "in",
+             into = ( "in" , "out", ),
+             typ = "TXM",
+             fr = "Type",
+             ang = "Type",
+             ),
+            
+  R = SIMP ( statut = 'o',
+             defaut = 0,
+             typ = "I",
+             fr = "Rang",
+             ang = "Rank",
+             ),
+            
+) # Fin OPER DETERMINISTICVARIABLE
+# Ordre Catalogue DETERMINISTICVARIABLE
+
+
+
+import opsOT
+MODEL = MACRO ( nom = "MODEL",
+                op = None,
+                UIinfo = { "groupes" : ( "Gestion du travail", ) },
+                fr = "Chargement du wrapper du modele physique",
+                ang = "Physical model wrapper load",
+                sd_prod = opsOT.INCLUDE,
+                op_init = opsOT.INCLUDE_context,
+                fichier_ini = 1,
+               
+  FileName = SIMP ( statut = "o",
+                    typ = ('Fichier', 'Wrapper Files (*.xml);;All Files (*)',),
+                    fr = "Nom du modele physique",
+                    ang = "Physical model identifier",
+                    ),
+               
+) # Fin PROC MODEL
+# Ordre Catalogue MODEL
+
+
+
+
+VARIABLE = PROC ( nom = "VARIABLE",
+                  op = None,
+                  docu = "",
+                  fr = "Variable probabiliste",
+                  ang = "Probabilistic variable",
+
+  ModelVariable = SIMP ( statut = "o",
+                         typ = ( variable, ),
+                         fr = "Variable d'entrée du modèle",
+                         ang = "Input variable of the model",
+                         ),
+
+  Distribution = SIMP ( statut = "o",
+                        typ = ( loi, ),
+                        fr = "Modélisation probabiliste",
+                        ang = "Probabilistic modelisation",
+                        ),
+                  
+) # Fin PROC VARIABLE
+# Ordre Catalogue VARIABLE
+
+
+CORRELATION = PROC ( nom = 'CORRELATION',
+                     op = None,
+                     docu = "",
+                     fr = "Correlation entre variables",
+                     ang = "Variable correlation",
+
+  Copula = SIMP ( statut = "o",
+                  typ = 'TXM',
+                  into = ( "Independent", "Normal" ),
+                  defaut = "Independent",
+                  fr = "Type de la copule",
+                  ang = "Copula kind",
+                  ),
+
+  Matrix = BLOC ( condition = "Copula in ( 'Normal', )",
+                  
+    CorrelationMatrix = SIMP ( statut = "o",
+                               typ = Matrice(nbLigs=None,
+                                             nbCols=None,
+                                             methodeCalculTaille='NbDeVariables',
+                                             valSup=1,
+                                             valMin=-1,
+                                             structure="symetrique"),
+                               fr = "Matrice de correlation entre les variables d'entree",
+                               ang = "Correlation matrix for input variables",
+                               ),
+  ), # Fin BLOC Matrix
+
+
+) # Fin PROC CORRELATION
+# Ordre Catalogue CORRELATION
+
+
+
+
+
+#================================
+# Definition de l'etude
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+CRITERIA = PROC ( nom = "CRITERIA",
+                  op = None,
+                  docu = "",
+                  fr = "Critère de l'étude d'incertitudes",
+                  ang = "Uncertainty study criteria",
+
+
+
+  Type = SIMP ( statut = "o",
+                typ = "TXM",
+                into = ( "Min/Max", "Central Uncertainty", "Threshold Exceedence" ),
+                fr = "Type du critère",
+                ang = "Criteria type",
+                ),
+
+
+
+
+
+
+
+  MinMax = BLOC ( condition = " Type in ( 'Min/Max', ) ",
+
+                  Method = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "Experiment Plane", "Random Sampling" ),
+                                  fr = "Methode",
+                                  ang = "Method",
+                                  ),
+                  # UC 3.1.1
+                  ExperimentPlaneSettings = BLOC ( condition = " Method in ( 'Experiment Plane', ) ",
+
+                          ExperimentPlane = SIMP ( statut = "o",
+                                                   typ = "TXM",
+                                                   into = ( "Axial", "Factorial", "Composite", ),
+                                                   fr = "Type du plan d'expérience",
+                                                   ang = "Experiment plane type",
+                                                   ),
+
+                          Levels = SIMP ( statut = "o",
+                                          typ = "R",
+                                          val_min = 0.0,
+                                          max = '**',    
+                                          fr = "Liste de niveaux dans chaque direction",
+                                          ang = "Levels in each direction",
+                                          ),
+
+                          # Scaled Vector
+                          UnitPerDimension = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = '**',    
+                                          fr = "Unité par dimension (autant que de variables declarées)",
+                                          ang = "Units per dimension (as much as declared variables)",
+                                          ),
+
+                          # Translation Vector
+                          Center = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = '**',    
+                                          fr = "Centre du plan d'expérience",
+                                          ang = "Experiment plan center",
+                                          ),
+
+                    ), # Fin BLOC ExperimentPlaneSettings
+
+
+
+                  RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+                          SimulationsNumber = SIMP ( statut = "o",
+                                                typ = "I",
+                                                val_min = 1,
+                                                fr = "Nombre de points",
+                                                ang = "Points number",
+                                                ),
+
+                    ), # Fin BLOC RandomSamplingSettings
+
+                  Result = SIMP (  statut = "o",
+                                   typ = "TXM",
+                                   into = ( "Min/Max", ),
+                                   defaut = "Min/Max",
+                                   fr = "Le minimum et le maximum de la variable d'intérêt",
+                                   ang = "The min and max values",
+                                   ),
+
+
+  ), # Fin BLOC MinMax
+
+
+
+
+  CentralUncertainty = BLOC ( condition = " Type in ( 'Central Uncertainty', ) ",
+
+                  Method = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "Taylor Variance Decomposition", "Random Sampling" ),
+                                  fr = "Methode",
+                                  ang = "Method",
+                                  ),
+                              
+                  # UC 3.2.
+                  TaylorVarianceDecompositionSettings = BLOC ( condition = " Method in ( 'Taylor Variance Decomposition', ) ",
+
+                      Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                              MeanFirstOrder = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Moyenne au premier ordre",
+                                                ang = "MeanFirstOrder",
+                                                ),
+
+                              StandardDeviationFirstOrder = SIMP ( statut = "o",
+                                                                   typ = 'TXM',
+                                                                   into = ( 'yes', 'no' ),
+                                                                   defaut = 'yes',
+                                                                   max = 1,
+                                                                   fr = "Ecart-type au premier ordre",
+                                                                   ang = "StandardDeviationFirstOrder",
+                                                                   ),
+
+                              MeanSecondOrder = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'no',
+                                                       max = 1,
+                                                       fr = "Moyenne au second ordre",
+                                                       ang = "MeanSecondOrder",
+                                                       ),
+
+                              ImportanceFactor = SIMP ( statut = "o",
+                                                        typ = 'TXM',
+                                                        into = ( 'yes', 'no' ),
+                                                        defaut = 'yes',
+                                                        max = 1,
+                                                        fr = "Facteur d'importance pour variable de sortie scalaire",
+                                                        ang = "ImportanceFactor",
+                                                        ),
+                              ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                                     ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique des facteurs d'importance",
+                                                                              ang = "Importance Factor Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC ImportanceFactorSettings
+                                      
+                      ), # Fin FACT Result
+                                                               
+                  ), # Fin BLOC TaylorVarianceDecompositionSettings
+
+
+
+                  RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+                          SimulationsNumber = SIMP ( statut = "o",
+                                                typ = "I",
+                                                val_min = 1,
+                                                fr = "Nombre de points",
+                                                ang = "Points number",
+                                                ),
+
+                       Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                              EmpiricalMean = SIMP ( statut = "o",
+                                                     typ = 'TXM',
+                                                     into = ( 'yes', 'no' ),
+                                                     defaut = 'yes',
+                                                     max = 1,
+                                                     fr = "Moyenne empirique",
+                                                     ang = "Empirical mean",
+                                                     ),
+
+                              EmpiricalStandardDeviation = SIMP ( statut = "o",
+                                                                  typ = 'TXM',
+                                                                  into = ( 'yes', 'no' ),
+                                                                  defaut = 'yes',
+                                                                  max = 1,
+                                                                  fr = "Ecart-type empirique",
+                                                                  ang = "Empirical standard deviation",
+                                                                  ),
+
+                              EmpiricalQuantile = SIMP ( statut = "o",
+                                                         typ = 'TXM',
+                                                         into = ( 'yes', 'no' ),
+                                                         defaut = 'yes',
+                                                         max = 1,
+                                                         fr = "Quantile empirique",
+                                                         ang = "Empirical quantile",
+                                                         ),
+
+                              EmpiricalQuantileSettings = BLOC ( condition = " EmpiricalQuantile in ( 'yes', ) ",
+
+                                  EmpiricalQuantile_Order = SIMP ( statut = "o",
+                                                                   typ = 'R',
+                                                                   defaut = 0.95,
+                                                                   max = 1,
+                                                                   val_min = 0.0,
+                                                                   val_max = 1.0,
+                                                                   fr = "Ordre du quantile empirique",
+                                                                   ang = "Empirical quantile order",
+                                                                   ),
+
+                              ), # Fin BLOC EmpiricalQuantileSettings
+
+                              CorrelationAnalysis = SIMP ( statut = "o",
+                                                            typ = 'TXM',
+                                                            into = ( 'yes', 'no' ),
+                                                            defaut = 'yes',
+                                                            max = 1,
+                                                            fr = "Correlations analysees",
+                                                            ang = "Analysed correlations",
+                                                            ),
+
+                              KernelSmoothing = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'yes',
+                                                       max = 1,
+                                                       fr = "Kernel smoothing de l'echantillon",
+                                                       ang = "Kernel smoothing of the sample",
+                                                       ),
+
+                              KernelSmoothingSettings = BLOC ( condition = " KernelSmoothing in ( 'yes', ) ",
+
+                                     KernelSmoothingDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique de la reconstruction a noyau",
+                                                                              ang = "Kernel Smoothing Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC KernelSmoothingSettings
+                                      
+                      ), # Fin FACT Result
+                                                               
+                  ), # Fin BLOC RandomSamplingSettings
+
+  ), # Fin BLOC CentralUncertainty
+
+
+
+
+  ThresholdExceedence = BLOC ( condition = " Type in ( 'Threshold Exceedence', ) ",
+
+         Event =  FACT ( statut = "o",
+                         min = 1,
+                         max = 1,
+
+                         Threshold = SIMP ( statut = "o",
+                                            typ = "R",
+                                            max = 1,
+                                            fr = "Le seuil de defaillance",
+                                            ang = "Failure threshold",
+                                            ),
+
+                         ComparisonOperator = SIMP ( statut = "o",
+                                                     typ = "TXM",
+                                                     max = 1,
+                                                     into = ( "Less", "LessOrEqual", "Equal", "GreaterOrEqual", "Greater" ),
+                                                     fr = "Que faut-il ne pas depasser : un maximum ou un minimum",
+                                                     ang = "What is the failure threshold : maximum or minimum",
+                                                     ),
+         ), # Fin FACT Event
+                         
+
+         Method = SIMP ( statut = "o",
+                         typ = "TXM",
+                         into = ( "Simulation", "FORM_SORM" ),
+                         fr = "Methode",
+                         ang = "Method",
+                         ),
+
+         SimulationSettings = BLOC ( condition = " Method in ( 'Simulation', ) ",
+
+               Algorithm = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "MonteCarlo", "LHS", "ImportanceSampling" ),
+                                  fr = "Algorithme de simulation",
+                                  ang = "Simulation algorithm",
+                                  ),
+
+                                 
+               RandomGenerator = FACT ( statut = "o",
+                                        min = 1,
+                                        max = 1,
+
+                           SeedToBeSet = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'no',
+                                                max = 1,
+                                                fr = "La racine du generateur aleatoire doit-elle etre positionnee ?",
+                                                ang = "Does the random generator seed need to be set ?",
+                                                ),
+
+                           SeedSettings = BLOC ( condition = " SeedToBeSet in ( 'yes', ) ",
+
+                                                 RandomGeneratorSeed = SIMP ( statut = "o",
+                                                                              typ = "I",
+                                                                              max = 1,
+                                                                              fr = "Racine du generateur aleatoire",
+                                                                              ang = "Random generator seed",
+                                                                              ),
+
+                                               ), # Fin BLOC SeedSettings
+
+               ), # Fin FACT RandomGenerator
+
+
+               BlockSize = SIMP ( statut = "o",
+                                  typ = "I",
+                                  max = 1,
+                                  val_min = 1,
+                                  defaut = 1,
+                                  fr = "Nombre de calculs realises en bloc",
+                                  ang = "Number of computations as a block",
+                                  ),
+
+               MaximumOuterSampling = SIMP ( statut = "o",
+                                             typ = "I",
+                                             max = 1,
+                                             val_min = 1,
+                                             fr = "Maximum d'iterations externes",
+                                             ang = "Maximum outer Sampling value",
+                                             ),
+
+               MaximumCoefficientOfVariation = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      defaut = 0.1,
+                                                      val_min = 0.0,
+                                                      val_max = 1.0,
+                                                      fr = "Coefficient de variation maximum",
+                                                      ang = "Maximum coefficient of variation"
+                                                      ),
+
+               ImportanceSamplingSettings = BLOC ( condition = " Algorithm in ( 'ImportanceSampling', ) ",
+
+                            MeanVector = SIMP ( statut = "o",
+                                                typ = "R",
+                                                max = "**",
+                                                fr = "Moyenne",
+                                                ang = "Mean vector",
+                                                ),
+
+
+               ), # Fin BLOC ImportanceSamplingSettings
+
+               Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                    Probability = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Probabiblite",
+                                         ang = "Probability",
+                                         ),
+
+                    StandardDeviation = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Ecart type",
+                                         ang = "Standard deviation",
+                                         ),
+
+                    ConfidenceInterval = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Intervale de confiance",
+                                                ang = "Confidence interval",
+                                                ),
+
+                    ConfidenceIntervalSettings = BLOC ( condition = " ConfidenceInterval in ( 'yes', ) ",
+
+                          Level = SIMP ( statut = "o",
+                                         typ = 'R',
+                                         defaut = 0.9,
+                                         max = 1,
+                                         val_min = 0.0,
+                                         val_max = 1.0,
+                                         fr = "Niveau de confiance",
+                                         ang = "Confidence level",
+                                         ),
+                                                     
+                    ), # Fin BLOC ConfidenceIntervalSettings
+                               
+                    VariationCoefficient = SIMP ( statut = "o",
+                                                  typ = 'TXM',
+                                                  into = ( 'yes', 'no' ),
+                                                  defaut = 'yes',
+                                                  max = 1,
+                                                  fr = "Coefficient de variation",
+                                                  ang = "Coefficient of variation",
+                                                  ),
+
+                    SimulationsNumber = SIMP ( statut = "o",
+                                             typ = 'TXM',
+                                             into = ( 'yes', 'no' ),
+                                             defaut = 'yes',
+                                             max = 1,
+                                             fr = "Nombre d'iterations",
+                                             ang = "Iteration number",
+                                             ),
+
+                    ConvergenceGraph = SIMP ( statut = "o",
+                                             typ = 'TXM',
+                                             into = ( 'yes', 'no' ),
+                                             defaut = 'yes',
+                                             max = 1,
+                                             fr = "Graphe de convergence",
+                                             ang = "Convergence graph",
+                                             ),
+                               
+                    ConvergenceGraphSettings = BLOC ( condition = " ConvergenceGraph in ( 'yes', ) ",
+
+                                     ConvergenceDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique de la convergence",
+                                                                         ang = "Convergence Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC ConvergenceGraphSettings
+                                      
+             ), # Fin FACT Result
+                                                               
+
+
+         ), # Fin BLOC SimulationSettings
+
+
+                               
+         FORM_SORMSettings = BLOC ( condition = " Method in ( 'FORM_SORM', ) ",
+
+                Approximation = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       defaut = "FirstOrder",
+                                       into = ( "FirstOrder", "SecondOrder" ),
+                                       max = 1,
+                                       fr = "Approximation",
+                                       ang = "Approximation",
+                                       ),
+
+                OptimizationAlgorithm = SIMP ( statut = "o",
+                                               typ = "TXM",
+                                               defaut = "Cobyla",
+                                               into = ( "Cobyla", "AbdoRackwitz" ),
+                                               max = 1,
+                                               fr = "Methode d'optimisation",
+                                               ang = "Optimization method",
+                                               ),
+
+                                     
+                PhysicalStartingPoint = SIMP ( statut = "f",
+                                               typ = "R",
+                                               max = "**",
+                                               fr = "Point de demarrage de l'algorithme iteratif",
+                                               ang = "Initial point for iterative process",
+                                               ),
+
+                MaximumIterationsNumber = SIMP ( statut = "f",
+                                                 typ = "I",
+                                                 max = 1,
+                                                 val_min = 1,
+                                                 fr = "Nombre maximum d'iterations",
+                                                 ang = "Maximum number of iterations",
+                                                 ),
+
+                                     
+                MaximumAbsoluteError = SIMP ( statut = "o",
+                                              typ = "R",
+                                              max = 1,
+                                              defaut = 1E-4,
+                                              val_min = 0.0,
+                                              fr = "Distance maximum absolue entre 2 iterations successives",
+                                              ang = "Absolute maximum distance between 2 successive iterates",
+                                              ),
+
+                MaximumRelativeError = SIMP ( statut = "o",
+                                               typ = "R",
+                                               max = 1,
+                                               defaut = 1E-4,
+                                               val_min = 0.0,
+                                               fr = "Distance maximum relative entre 2 iterations successives",
+                                               ang = "Relative maximum distance between 2 successive iterates",
+                                               ),
+                                     
+                MaximumConstraintError = SIMP ( statut = "o",
+                                                typ = "R",
+                                                max = 1,
+                                                defaut = 1E-4,
+                                                val_min = 0.0,
+                                                fr = "Valeur maximum absolue de la fonction moins la valeur du niveau",
+                                                ang = "Maximum absolute value of the constraint function minus the level value",
+                                                ),
+
+                ImportanceSampling = SIMP ( statut = "o",
+                                            typ = 'TXM',
+                                            into = ( 'yes', 'no' ),
+                                            defaut = 'no',
+                                            max = 1,
+                                            fr = "Tirage d'importance au point de conception",
+                                            ang = "Importance sampling at design point",
+                                            ),
+
+                FORMResult = BLOC ( condition = " Approximation in ( 'FirstOrder', ) ",
+
+                    Probability = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Probabiblite",
+                                         ang = "Probability",
+                                         ),
+
+                    DesignPoint = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', 'no' ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Point de conception",
+                                         ang = "Design point",
+                                         ),
+
+                    HasoferReliabilityIndex = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Indice de fiabilite",
+                                                 ang = "Reliability index",
+                                                 ),
+
+                    ImportanceFactor = SIMP ( statut = "o",
+                                              typ = 'TXM',
+                                              into = ( 'yes', 'no' ),
+                                              defaut = 'yes',
+                                              max = 1,
+                                              fr = "Facteur d'importance pour variable de sortie scalaire",
+                                              ang = "Importance factor",
+                                              ),
+
+                    ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                                     ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique des facteurs d'importance",
+                                                                              ang = "Importance Factor Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC ImportanceFactorSettings
+                                      
+                    SensitivityAnalysis = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Analyse de sensibilite",
+                                                 ang = "Sensitivity analysis",
+                                                 ),
+
+                    SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+                            FORMEventProbabilitySensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+        
+                            FORMEventProbabilitySensitivitySettings = BLOC ( condition = " FORMEventProbabilitySensitivity in ( 'yes', ) ",
+
+                                     FORMEventProbabilitySensitivityDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique des sensibilites",
+                                                                         ang = "Sensitivity Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC FORMEventProbabilitySensitivitySettings
+                                      
+                            HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+        
+                            HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+                                     HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique des sensibilites",
+                                                                         ang = "Sensitivity Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+                                      
+                    ), # Fin BLOC SensitivityAnalysisSettings
+
+                    FunctionCallsNumber = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Nombre d'appels a la fonction",
+                                                 ang = "Function calls number",
+                                                 ),
+
+
+                ), # Fin BLOC FORMResult
+
+
+                SORMResult = BLOC ( condition = " Approximation in ( 'SecondOrder', ) ",
+
+
+                    TvedtApproximation = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Approximation de Tvedt",
+                                                ang = "Tvedt approximation",
+                                                ),
+
+                    HohenBichlerApproximation = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'yes',
+                                                       max = 1,
+                                                       fr = "Approximation de HohenBichler",
+                                                       ang = "HohenBichler approximation",
+                                                       ),
+
+                    BreitungApproximation = SIMP ( statut = "o",
+                                                   typ = 'TXM',
+                                                   into = ( 'yes', 'no' ),
+                                                   defaut = 'yes',
+                                                   max = 1,
+                                                   fr = "Approximation de Breitung",
+                                                   ang = "Breitung approximation",
+                                                   ),
+
+                    DesignPoint = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', 'no' ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Point de conception",
+                                         ang = "Design point",
+                                         ),
+
+                    ImportanceFactor = SIMP ( statut = "o",
+                                              typ = 'TXM',
+                                              into = ( 'yes', 'no' ),
+                                              defaut = 'yes',
+                                              max = 1,
+                                              fr = "Facteur d'importance pour variable de sortie scalaire",
+                                              ang = "Importance factor",
+                                              ),
+
+                    ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                                     ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique des facteurs d'importance",
+                                                                              ang = "Importance Factor Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC ImportanceFactorSettings
+                                      
+                    SensitivityAnalysis = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Analyse de sensibilite",
+                                                 ang = "Sensitivity analysis",
+                                                 ),
+
+                    SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+                            HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+                                                                 
+                            HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+                                     HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique des sensibilites",
+                                                                         ang = "Sensitivity Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+                                      
+                    ), # Fin BLOC SensitivityAnalysisSettings
+
+                    FunctionCallsNumber = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Nombre d'appels a la fonction",
+                                                 ang = "Function calls number",
+                                                 ),
+
+
+                ), # Fin BLOC SecondOrder
+
+
+                                     
+        ), # Fin BLOC FORM_SORMSettings
+
+
+                               
+  ), # Fin BLOC ThresholdExceedence
+
+
+
+) # Fin PROC CRITERIA
+# Ordre Catalogue CRITERIA
+
+
+
+
+
+
+
diff --git a/Openturns_Study/OpenTURNS_Cata_Study_V9.py b/Openturns_Study/OpenTURNS_Cata_Study_V9.py
new file mode 100644 (file)
index 0000000..6a43ee3
--- /dev/null
@@ -0,0 +1,1718 @@
+# -*- coding: iso-8859-1 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+#from Accas import ASSD, JDC_CATA, AU_MOINS_UN, PROC, SIMP, FACT, OPER, MACRO, BLOC, A_VALIDATOR
+from Accas import *
+
+class loi      ( ASSD ) : pass
+class variable ( ASSD ) : pass
+
+import types
+class Tuple:
+  def __init__(self,ntuple):
+    self.ntuple=ntuple
+
+  def __convert__(self,valeur):
+    if type(valeur) == types.StringType:
+      return None
+    if len(valeur) != self.ntuple:
+      return None
+    return valeur
+
+  def info(self):
+    return "Tuple de %s elements" % self.ntuple
+
+  __repr__=info
+  __str__=info
+
+class Matrice:
+  def __init__(self,nbLigs=None,nbCols=None,methodeCalculTaille=None,formatSortie="ligne",valSup=None,valMin=None,structure=None):
+      self.nbLigs=nbLigs
+      self.nbCols=nbCols
+      self.methodeCalculTaille=methodeCalculTaille
+      self.formatSortie=formatSortie
+      self.valSup=valSup
+      self.valMin=valMin
+      self.structure=structure
+
+  def __convert__(self,valeur):
+    # Attention ne verifie pas grand chose
+    if type(valeur) != types.ListType :
+      return None
+    return valeur
+
+  def info(self):
+      return "Matrice %s x %s" % (self.nbLigs, self.nbCols)
+
+      __repr__=info
+      __str__=info
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_STUDY',
+                 execmodul = None,
+                 regles = ( AU_MOINS_UN ( 'CRITERIA' ),
+                            AU_MOINS_UN ( 'MODEL' ),
+                            AVANT ( ('DISTRIBUTION', 'MODEL'), 'VARIABLE' ),
+#                            A_CLASSER ( 'VARIABLE',                'CORRELATION' ),
+#                            A_CLASSER ( 'VARIABLE',                'CRITERIA' ),
+#                            A_CLASSER ( 'CORRELATION',             'CRITERIA' ),
+                            ),
+                 ) # Fin JDC_CATA
+
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+LOG = PROC ( nom = "LOG",
+             op = None,
+             docu = "",
+               
+  DebugMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de debug de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library debug level print",
+                 ),
+               
+  WrapperMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de wrapper de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library debug level print",
+                 ),
+               
+  UserMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'no',
+                 fr = "Affichage du niveau de user de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library user level print",
+                 ),
+               
+  InfoMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de info de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library info level print",
+                 ),
+               
+  WarningMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de warning de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library warning level print",
+                 ),
+               
+  ErrorMessages = SIMP ( statut = "o",
+                 typ = "TXM",
+                 into = ( 'yes', 'no' ),
+                 defaut = 'yes',
+                 fr = "Affichage du niveau de error de la bibliotheque Open TURNS",
+                 ang = "Open TURNS library error level print",
+                 ),
+               
+) # Fin PROC LOG
+# Ordre Catalogue LOG
+
+
+
+
+
+#================================
+# Definition des LOIS
+#================================
+
+# Nota : les variables de type OPER doivent etre en majuscules !
+# Nota : les variables de type OPER doivent etre de premier niveau (pas imbriquees dans un autre type)
+DISTRIBUTION = OPER ( nom = "DISTRIBUTION",
+                      sd_prod = loi,
+                      op = 68,
+                      fr = "Definitions des lois marginales utilisees par les variables d'entree", 
+                      
+                      
+#====
+# Type de distribution
+#====
+
+  Kind = SIMP ( statut = "o", typ = "TXM",
+                into = ( "Beta",
+                         "Exponential",
+                         "Gamma",
+                         "Geometric",
+                         "Gumbel",
+                         "Histogram",
+                         "Laplace",
+                         "Logistic",
+                         "LogNormal",
+                         "MultiNomial",
+                         "NonCentralStudent",
+                         "Normal",
+                         "Poisson",
+                         "Rayleigh",
+                         "Student",
+                         "Triangular",
+                         "TruncatedNormal",
+                         "Uniform",
+                         #"UserDefined",
+                         "Weibull",
+                         ),
+                fr = "Choix du type de la loi marginale",
+                ang = "1D marginal distribution",
+                ),
+
+#====
+# Definition des parametres selon le type de la loi
+#====
+
+  BETA = BLOC ( condition = " Kind in ( 'Beta', ) ",
+
+                  Settings = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       max = 1,
+                                       into = ( "RT", "MuSigma" ),
+                                       defaut = "RT",
+                                       fr = "Parametrage de la loi beta",
+                                       ang = "Beta distribution parameter set",
+                                       ),
+
+                  RT_Parameters = BLOC ( condition = " Settings in ( 'RT', ) ",
+
+                                      R = SIMP ( statut = "o",
+                                                 typ = "R",
+                                                 max = 1,
+                                                 val_min = 0.,
+                                                 fr = "Parametre R de la loi | R > 0",
+                                                 ang = "R parameter | R > 0",
+                                                 ),
+
+                                      # T > R
+                                      T = SIMP ( statut = "o",
+                                                 typ = "R",
+                                                 max = 1,
+                                                 val_min = 0.,
+                                                 fr = "Parametre T de la loi | T > R",
+                                                 ang = "T parameter | T > R",
+                                                 ),
+
+                                      ), # Fin BLOC RT_Parameters
+
+
+                  MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                      Mu = SIMP ( statut = "o",
+                                                  typ = "R",
+                                                  max = 1,
+                                                  fr = "Moyenne de la loi",
+                                                  ang = "Mean value",
+                                                  ),
+
+                                      Sigma = SIMP ( statut = "o",
+                                                     typ = "R",
+                                                     max = 1,
+                                                     val_min = 0.,
+                                                     fr = "Ecart type de la loi",
+                                                     ang = "Standard deviation",
+                                                     ),
+
+                                      ), # Fin BLOC MuSigma_Parameters
+
+
+                  A = SIMP ( statut = "o",
+                             typ = "R",
+                             max = 1,
+                             fr = "Borne inferieure du support de la loi",
+                             ang = "Support lower bound",
+                             ),
+
+                  # B > A
+                  B = SIMP ( statut = "o",
+                             typ = "R",
+                             max = 1,
+                             fr = "Borne superieure du support de la loi",
+                             ang = "Support upper bound",
+                             ),
+
+  ), # Fin BLOC BETA
+
+
+
+  EXPONENTIAL = BLOC ( condition = " Kind in ( 'Exponential', ) ",
+
+                         Lambda = SIMP ( statut = "o",
+                                         typ = "R",
+                                         max = 1,
+                                         val_min = 0.,
+                                         fr = "Parametre Lambda | Lambda > 0",
+                                         ang = "Lambda parameter | Lambda > 0",
+                                         ),
+
+                         Gamma = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Borne inferieure du support de la loi",
+                                        ang = "Support lower bound",
+                                        ),
+
+  ), # Fin BLOC EXPONENTIAL
+
+
+
+  GAMMA = BLOC ( condition = " Kind in ( 'Gamma', ) ",
+
+                   Settings = SIMP ( statut = "o",
+                                        typ = "TXM",
+                                        max = 1,
+                                        into = ( "KLambda", "MuSigma" ),
+                                        defaut = "KLambda",
+                                        fr = "Parametrage de la loi gamma",
+                                        ang = "Gamma distribution parameter set",
+                                        ),
+
+                   KLambda_Parameters = BLOC ( condition = " Settings in ( 'KLambda', ) ",
+
+                                       K = SIMP ( statut = "o",
+                                                  typ = "R",
+                                                  max = 1,
+                                                  val_min = 0.,
+                                                  fr = "Parametre K de la loi | K > 0",
+                                                  ang = "K parameter | K > 0",
+                                                  ),
+
+                                       Lambda = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Lambda de la loi | Lambda > 0",
+                                                       ang = "Lambda parameter | Lambda > 0",
+                                                       ),
+
+                                       ), # Fin BLOC KLambda_Parameters
+
+
+                   MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                       Mu = SIMP ( statut = "o",
+                                                   typ = "R",
+                                                   max = 1,
+                                                   fr = "Moyenne de la loi",
+                                                   ang = "Mean value",
+                                                   ),
+
+                                       Sigma = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      val_min = 0.,
+                                                      fr = "Ecart type de la loi",
+                                                      ang = "Standard deviation",
+                                                      ),
+
+                                       ), # Fin BLOC MuSigma_Parameters
+
+                   Gamma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Borne inferieure du supoport de la loi",
+                                  ang = "Support lower bound",
+                                  ),
+
+
+  ), # Fin BLOC GAMMA
+
+
+
+  GEOMETRIC = BLOC ( condition = " Kind in ( 'Geometric', ) ",
+
+                       P = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  val_min = 0.,
+                                  val_max = 1.,
+                                  fr = "Parametre P | 0 < P < 1",
+                                  ang = "P parameter | 0 < P < 1",
+                                  ),
+
+  ), # Fin BLOC GEOMETRIC
+
+
+
+  GUMBEL = BLOC ( condition = " Kind in ( 'Gumbel', ) ",
+
+                    Settings = SIMP ( statut = "o",
+                                         typ = "TXM",
+                                         max = 1,
+                                         into = ( "AlphaBeta", "MuSigma" ),
+                                         defaut = "AlphaBeta",
+                                         fr = "Parametrage de la loi gumbel",
+                                         ang = "Gumbel distribution parameter set",
+                                         ),
+
+                    AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+                                        Alpha = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Alpha de la loi | Alpha > 0",
+                                                       ang = "Alpha parameter | Alpha > 0",
+                                                       ),
+
+                                        Beta = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      fr = "Parametre Beta de la loi",
+                                                      ang = "Beta parameter",
+                                                      ),
+
+                                        ), # Fin BLOC AlphaBeta_Parameters
+
+
+                    MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                        Mu = SIMP ( statut = "o",
+                                                    typ = "R",
+                                                    max = 1,
+                                                    fr = "Moyenne de la loi",
+                                                    ang = "Mean value",
+                                                    ),
+
+                                        Sigma = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Ecart type de la loi",
+                                                       ang = "Standard deviation",
+                                                       ),
+
+                                        ), # Fin BLOC MuSigma_Parameters
+
+  ), # Fin BLOC GUMBEL
+
+
+
+  HISTOGRAM = BLOC ( condition = " Kind in ( 'Histogram', ) ",
+
+                       First = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du supoport de la loi",
+                                    ang = "Support lower bound",
+                                    ),
+
+                       # Il faut definir une collection de couples ( x,p ) 
+                       Values = SIMP ( statut = 'o',
+                                       typ = Tuple(2),
+                                       max = '**',
+                                       fr = "Liste de couples : largeur de classe, hauteur de classe",
+                                       ang = "Class bandwidth, class height couple list",
+                                       validators=VerifTypeTuple(('R','R')),
+                                       ),
+
+  ), # Fin BLOC HISTOGRAM
+
+
+
+  LAPLACE = BLOC ( condition = " Kind in ( 'Laplace', ) ",
+
+                   Lambda = SIMP ( statut = "o",
+                                   typ = "R",
+                                   max = 1,
+                                   val_min = 0.,
+                                   fr = "Parametre Lambda | Lambda > 0",
+                                   ang = "Lambda parameter | Lambda > 0",
+                                   ),
+                   
+                   Mu = SIMP ( statut = "o",
+                               typ = "R",
+                               max = 1,
+                               fr = "Moyenne de la loi",
+                               ang = "Mean value",
+                              ),
+
+  ), # Fin BLOC LAPLACE
+
+  LOGNORMAL = BLOC ( condition = " Kind in ( 'LogNormal', ) ",
+
+                     Settings = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       max = 1,
+                                       into = ( "MuSigmaLog", "MuSigma", "MuSigmaOverMu" ),
+                                       defaut = "MuSigmaLog",
+                                       fr = "Parametrage de la loi lognormale",
+                                       ang = "Lognormal distribution parameter set",
+                                       ),
+
+                     MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                                 Mu = SIMP ( statut = "o",
+                                                             typ = "R",
+                                                             max = 1,
+                                                             fr = "Moyenne de la loi",
+                                                             ang = "Mean value",
+                                                             ),
+
+                                                 Sigma = SIMP ( statut = "o",
+                                                                typ = "R",
+                                                                max = 1,
+                                                                val_min = 0.,
+                                                                fr = "Ecart type de la loi",
+                                                                ang = "Standard deviation",
+                                                                ),
+
+                                                 ), # Fin BLOC MuSigma_Parameters
+
+                     MuSigmaOverMu_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaOverMu', ) ",
+
+                                                 Mu = SIMP ( statut = "o",
+                                                             typ = "R",
+                                                             max = 1,
+                                                             fr = "Moyenne de la loi",
+                                                             ang = "Mean value",
+                                                             ),
+
+                                                 SigmaOverMu = SIMP ( statut = "o",
+                                                                typ = "R",
+                                                                max = 1,
+                                                                val_min = 0.,
+                                                                fr = "Rapport ecart type / moyenne de la loi",
+                                                                ang = "Standard deviation / mean value ratio",
+                                                                ),
+
+                                                 ), # Fin BLOC MuSigmaOverMu_Parameters
+
+                     MuSigmaLog_Parameters = BLOC ( condition = " Settings in ( 'MuSigmaLog', ) ",
+
+                                                    MuLog = SIMP ( statut = "o",
+                                                                   typ = "R",
+                                                                   max = 1,
+                                                                   fr = "Moyenne du log",
+                                                                   ang = "Log mean value",
+                                                                   ),
+
+                                                    SigmaLog = SIMP ( statut = "o",
+                                                                      typ = "R",
+                                                                      max = 1,
+                                                                      val_min = 0.,
+                                                                      fr = "Ecart type du log",
+                                                                      ang = "Log standard deviation",
+                                                                      ),
+                                            
+                                                    ), # Fin BLOC MuSigmaLog_Parameters
+
+                     Gamma = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du support de la loi",
+                                    ang = "Support lower bound",
+                                    ),
+
+   ), # Fin BLOC LOGNORMAL
+
+
+
+   LOGISTIC = BLOC ( condition = " Kind in ( 'Logistic', ) ",
+
+                       Alpha = SIMP ( statut = "o",
+                                      typ = "R",
+                                      max = 1,
+                                      fr = "Borne inferieure du supoport de la loi",
+                                      ang = "Support lower bound",
+                                      ),
+
+                       Beta = SIMP ( statut = "o",
+                                     typ = "R",
+                                     max = 1,
+                                     val_min = 0.,
+                                     fr = "Parametre Beta de la loi | Beta > 0",
+                                     ang = "Beta parameter | Beta > 0",
+                                     ),
+
+   ), # Fin BLOC LOGISTIC
+
+
+
+   MULTINOMIAL = BLOC ( condition = " Kind in ( 'MultiNomial', ) ",
+                         
+                         N = SIMP ( statut = "o",
+                                    typ = "I",
+                                    max = 1,
+                                    fr = "Parametre N de la loi | N > 0",
+                                    ang = "N parameter | N > 0",
+                                    ),
+
+                       # Il faut definir une collection de couples ( x,p ) 
+                       Values = SIMP ( statut = 'o',
+                                       typ = "R",
+                                       max = '**',
+                                       fr = "Liste de probabilités",
+                                       ang = "Probability list",
+                                       validators=VerifTypeTuple(('R','R')),
+                                       ),
+
+   ), # Fin BLOC MULTINOMIAL
+
+
+  NONCENTRALSTUDENT = BLOC ( condition = " Kind in ( 'NonCentralStudent', ) ",
+
+                   Nu = SIMP ( statut = "o",
+                               typ = "R",
+                               max = 1,
+                               fr = "Parametre Nu de la loi | Nu > 0",
+                               ang = "Nu parameter | Nu > 0",
+                              ),
+
+                   Delta = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Delta de la loi | Delta > 0",
+                                  ang = "Delta parameter | Delta > 0",
+                                  ),
+                   
+                   Gamma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Gamma de centrage de la loi",
+                                  ang = "Gamma parameter",
+                                  ),
+
+  ), # Fin BLOC NONCENTRALSTUDENT
+
+
+   NORMAL = BLOC ( condition = " Kind in ( 'Normal', ) ",
+
+                    Mu = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Moyenne de la loi",
+                                ang = "Mean value",
+                                ),
+
+                   Sigma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  val_min = 0.,
+                                  fr = "Ecart type de la loi",
+                                  ang = "Standard deviation",
+                                  ),
+
+   ), # Fin BLOC NORMAL
+
+
+
+   POISSON = BLOC ( condition = " Kind in ( 'Poisson', ) ",
+
+                     Lambda = SIMP ( statut = "o",
+                                     typ = "R",
+                                     max = 1,
+                                     val_min = 0.,
+                                     fr = "Parametre Lambda de la loi | Lambda > 0",
+                                     ang = "Lambda parameter | Lambda > 0",
+                                     ),
+
+   ), # Fin BLOC POISSON
+
+
+
+  RAYLEIGH = BLOC ( condition = " Kind in ( 'Rayleigh', ) ",
+
+                   Sigma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Sigma de la loi | Sigma > 0",
+                                  ang = "Sigma parameter | Sigma > 0",
+                                  ),
+
+                   Gamma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Borne inferieure du support de la loi",
+                                  ang = "Support lower bound",
+                                  ),
+ ), # Fin BLOC RAYLEIGH
+
+
+   STUDENT = BLOC ( condition = " Kind in ( 'Student', ) ",
+
+                     Mu = SIMP ( statut = "o",
+                                 typ = "R",
+                                 max = 1,
+                                 fr = "Parametre Mu de la loi",
+                                 ang = "Mu parameter",
+                                 ),
+
+                     Nu = SIMP ( statut = "o",
+                                 typ = "R",
+                                 max = 1,
+                                 val_min = 2.,
+                                 fr = "Parametre Nu de la loi | Nu > 2",
+                                 ang = "Nu parameter | Nu > 2",
+                                 ),
+
+                   Sigma = SIMP ( statut = "o",
+                                  typ = "R",
+                                  max = 1,
+                                  fr = "Parametre Sigma de la loi",
+                                  ang = "Sigma parameter",
+                                  ),
+
+   ), # Fin BLOC STUDENT
+
+
+
+   TRIANGULAR = BLOC ( condition = " Kind in ( 'Triangular', ) ",
+
+                         A = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du support de la loi | A < M < B",
+                                    ang = "Support lower bound | A < M < B",
+                                    ),
+
+                         M = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Mode de la loi | A < M < B",
+                                    ang = "Mode | A < M < B",
+                                    ),
+
+                         B = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne superieure du support de la loi | A < M < B",
+                                    ang = "Support upper bound | A < M < B",
+                                    ),
+
+   ), # Fin BLOC TRIANGULAR
+
+
+
+   TRUNCATEDNORMAL = BLOC ( condition = " Kind in ( 'TruncatedNormal', ) ",
+
+                             MuN = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = 1,
+                                          fr = "Moyenne de la loi Normale non tronquée",
+                                          ang = "Mean value of the associated non truncated normal distribution",
+                                          ),
+
+                             SigmaN = SIMP ( statut = "o",
+                                             typ = "R",
+                                             max = 1,
+                                             val_min = 0.,
+                                             fr = "Ecart-type de la loi Normale non tronquée",
+                                             ang = "Standard deviation of the associated non truncated normal distribution",
+                                             ),
+
+                             A = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Borne inferieure de la loi | A < B",
+                                        ang = "Lower bound | A < B",
+                                        ),
+
+                             B = SIMP ( statut = "o",
+                                        typ = "R",
+                                        max = 1,
+                                        fr = "Borne superieure de la loi | A < B",
+                                        ang = "Upper bound | A < B",
+                                        ),
+
+   ), # Fin BLOC TRUNCATEDNORMAL
+
+
+
+   UNIFORM = BLOC ( condition = " Kind in ( 'Uniform', ) ",
+
+                     A = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Borne inferieure du support de la loi | A < B",
+                                ang = "Support lower bound | A < B",
+                                ),
+
+                     B = SIMP ( statut = "o",
+                                typ = "R",
+                                max = 1,
+                                fr = "Borne superieure du support de la loi | A < B",
+                                ang = "Support upper bound | A < B",
+                                ),
+
+   ), # Fin BLOC UNIFORM
+
+
+
+   USERDEFINED = BLOC ( condition = " Kind in ( 'UserDefined', ) ",
+
+                           # Il faut definir une collection de couples ( x,p ) 
+                         Values = SIMP ( statut = 'o',
+                                         typ = 'R',
+                                         max = '**',
+                                         ),
+
+   ), # Fin BLOC USERDEFINED
+
+
+
+   WEIBULL = BLOC ( condition = " Kind in ( 'Weibull', ) ",
+
+                     Settings = SIMP ( statut = "o",
+                                          typ = "TXM",
+                                          max = 1,
+                                          into = ( "AlphaBeta", "MuSigma" ),
+                                          defaut = "AlphaBeta",
+                                          fr = "Parametrage de la loi weibull",
+                                          ang = "Weibull distribution parameter set",
+                                          ),
+
+                     AlphaBeta_Parameters = BLOC ( condition = " Settings in ( 'AlphaBeta', ) ",
+
+                                         Alpha = SIMP ( statut = "o",
+                                                        typ = "R",
+                                                        max = 1,
+                                                        val_min = 0.,
+                                                        fr = "Parametre Alpha de la loi | Alpha > 0",
+                                                        ang = "Alpha parameter | Alpha > 0",
+                                                        ),
+
+                                         Beta = SIMP ( statut = "o",
+                                                       typ = "R",
+                                                       max = 1,
+                                                       val_min = 0.,
+                                                       fr = "Parametre Beta de la loi | Beta > 0",
+                                                       ang = "Beta parameter | Beta > 0",
+                                                       ),
+
+                                         ), # Fin BLOC AlphaBeta_Parameters
+
+
+                     MuSigma_Parameters = BLOC ( condition = " Settings in ( 'MuSigma', ) ",
+
+                                         Mu = SIMP ( statut = "o",
+                                                     typ = "R",
+                                                     max = 1,
+                                                     fr = "Moyenne de la loi",
+                                                     ang = "Mean value",
+                                                     ),
+
+                                         Sigma = SIMP ( statut = "o",
+                                                        typ = "R",
+                                                        max = 1,
+                                                        val_min = 0.,
+                                                        fr = "Ecart type de la loi",
+                                                        ang = "Standard deviation",
+                                                        ),
+
+                                         ), # Fin BLOC MuSigma_Parameters
+
+                     Gamma = SIMP ( statut = "o",
+                                    typ = "R",
+                                    max = 1,
+                                    fr = "Borne inferieure du support de la loi",
+                                    ang = "Support lower bound",
+                                    ),
+
+    ), # Fin BLOC WEIBULL
+
+) # Fin OPER DISTRIBUTION
+# Ordre Catalogue DISTRIBUTION
+
+
+
+#================================
+# Definition du modele physique
+#================================
+
+
+DETERMINISTICVARIABLE = OPER ( nom = "DETERMINISTICVARIABLE",
+            sd_prod = variable,
+            op = None,
+            fr = "Variable deterministe",
+            ang = "Deterministic variable",
+            
+  N = SIMP ( statut = 'o',
+             typ = "TXM",
+             fr = "Nom",
+             ang = "Name",
+             ),
+            
+  T = SIMP ( statut = 'o',
+             defaut = "in",
+             into = ( "in" , "out", ),
+             typ = "TXM",
+             fr = "Type",
+             ang = "Type",
+             ),
+            
+  R = SIMP ( statut = 'o',
+             defaut = 0,
+             typ = "I",
+             fr = "Rang",
+             ang = "Rank",
+             ),
+            
+) # Fin OPER DETERMINISTICVARIABLE
+# Ordre Catalogue DETERMINISTICVARIABLE
+
+
+
+import opsOT
+MODEL = MACRO ( nom = "MODEL",
+                op = None,
+                UIinfo = { "groupes" : ( "Gestion du travail", ) },
+                fr = "Chargement du wrapper du modele physique",
+                ang = "Physical model wrapper load",
+                sd_prod = opsOT.INCLUDE,
+                op_init = opsOT.INCLUDE_context,
+                fichier_ini = 1,
+               
+  FileName = SIMP ( statut = "o",
+                    typ = ('Fichier', 'Wrapper Files (*.xml);;All Files (*)',),
+                    fr = "Nom du modele physique",
+                    ang = "Physical model identifier",
+                    ),
+               
+) # Fin PROC MODEL
+# Ordre Catalogue MODEL
+
+
+
+
+VARIABLE = PROC ( nom = "VARIABLE",
+                  op = None,
+                  docu = "",
+                  fr = "Variable probabiliste",
+                  ang = "Probabilistic variable",
+
+  ModelVariable = SIMP ( statut = "o",
+                         typ = ( variable, ),
+                         fr = "Variable d'entrée du modèle",
+                         ang = "Input variable of the model",
+                         ),
+
+  Distribution = SIMP ( statut = "o",
+                        typ = ( loi, ),
+                        fr = "Modélisation probabiliste",
+                        ang = "Probabilistic modelisation",
+                        ),
+                  
+) # Fin PROC VARIABLE
+# Ordre Catalogue VARIABLE
+
+
+CORRELATION = PROC ( nom = 'CORRELATION',
+                     op = None,
+                     docu = "",
+                     fr = "Correlation entre variables",
+                     ang = "Variable correlation",
+
+  Copula = SIMP ( statut = "o",
+                  typ = 'TXM',
+                  into = ( "Independent", "Normal" ),
+                  defaut = "Independent",
+                  fr = "Type de la copule",
+                  ang = "Copula kind",
+                  ),
+
+  Matrix = BLOC ( condition = "Copula in ( 'Normal', )",
+                  
+    CorrelationMatrix = SIMP ( statut = "o",
+                               typ = Matrice(nbLigs=None,
+                                             nbCols=None,
+                                             methodeCalculTaille='NbDeVariables',
+                                             valSup=1,
+                                             valMin=-1,
+                                             structure="symetrique"),
+                               fr = "Matrice de correlation entre les variables d'entree",
+                               ang = "Correlation matrix for input variables",
+                               ),
+  ), # Fin BLOC Matrix
+
+
+) # Fin PROC CORRELATION
+# Ordre Catalogue CORRELATION
+
+
+
+
+
+#================================
+# Definition de l'etude
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+CRITERIA = PROC ( nom = "CRITERIA",
+                  op = None,
+                  docu = "",
+                  fr = "Critère de l'étude d'incertitudes",
+                  ang = "Uncertainty study criteria",
+
+
+
+  Type = SIMP ( statut = "o",
+                typ = "TXM",
+                into = ( "Min/Max", "Central Uncertainty", "Threshold Exceedence" ),
+                fr = "Type du critère",
+                ang = "Criteria type",
+                ),
+
+
+
+
+
+
+
+  MinMax = BLOC ( condition = " Type in ( 'Min/Max', ) ",
+
+                  Method = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "Experiment Plane", "Random Sampling" ),
+                                  fr = "Methode",
+                                  ang = "Method",
+                                  ),
+                  # UC 3.1.1
+                  ExperimentPlaneSettings = BLOC ( condition = " Method in ( 'Experiment Plane', ) ",
+
+                          ExperimentPlane = SIMP ( statut = "o",
+                                                   typ = "TXM",
+                                                   into = ( "Axial", "Factorial", "Composite", ),
+                                                   fr = "Type du plan d'expérience",
+                                                   ang = "Experiment plane type",
+                                                   ),
+
+                          Levels = SIMP ( statut = "o",
+                                          typ = "R",
+                                          val_min = 0.0,
+                                          max = '**',    
+                                          fr = "Liste de niveaux dans chaque direction",
+                                          ang = "Levels in each direction",
+                                          ),
+
+                          # Scaled Vector
+                          UnitPerDimension = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = '**',    
+                                          fr = "Unité par dimension (autant que de variables declarées)",
+                                          ang = "Units per dimension (as much as declared variables)",
+                                          ),
+
+                          # Translation Vector
+                          Center = SIMP ( statut = "o",
+                                          typ = "R",
+                                          max = '**',    
+                                          fr = "Centre du plan d'expérience",
+                                          ang = "Experiment plan center",
+                                          ),
+
+                    ), # Fin BLOC ExperimentPlaneSettings
+
+
+
+                  RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+                          SimulationsNumber = SIMP ( statut = "o",
+                                                typ = "I",
+                                                val_min = 1,
+                                                fr = "Nombre de points",
+                                                ang = "Points number",
+                                                ),
+
+                    ), # Fin BLOC RandomSamplingSettings
+
+                  Result = SIMP (  statut = "o",
+                                   typ = "TXM",
+                                   into = ( "Min/Max", ),
+                                   defaut = "Min/Max",
+                                   fr = "Le minimum et le maximum de la variable d'intérêt",
+                                   ang = "The min and max values",
+                                   ),
+
+
+  ), # Fin BLOC MinMax
+
+
+
+
+  CentralUncertainty = BLOC ( condition = " Type in ( 'Central Uncertainty', ) ",
+
+                  Method = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "Taylor Variance Decomposition", "Random Sampling" ),
+                                  fr = "Methode",
+                                  ang = "Method",
+                                  ),
+                              
+                  # UC 3.2.
+                  TaylorVarianceDecompositionSettings = BLOC ( condition = " Method in ( 'Taylor Variance Decomposition', ) ",
+
+                      Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                              MeanFirstOrder = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Moyenne au premier ordre",
+                                                ang = "MeanFirstOrder",
+                                                ),
+
+                              StandardDeviationFirstOrder = SIMP ( statut = "o",
+                                                                   typ = 'TXM',
+                                                                   into = ( 'yes', 'no' ),
+                                                                   defaut = 'yes',
+                                                                   max = 1,
+                                                                   fr = "Ecart-type au premier ordre",
+                                                                   ang = "StandardDeviationFirstOrder",
+                                                                   ),
+
+                              MeanSecondOrder = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'no',
+                                                       max = 1,
+                                                       fr = "Moyenne au second ordre",
+                                                       ang = "MeanSecondOrder",
+                                                       ),
+
+                              ImportanceFactor = SIMP ( statut = "o",
+                                                        typ = 'TXM',
+                                                        into = ( 'yes', 'no' ),
+                                                        defaut = 'yes',
+                                                        max = 1,
+                                                        fr = "Facteur d'importance pour variable de sortie scalaire",
+                                                        ang = "ImportanceFactor",
+                                                        ),
+                              ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                                     ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique des facteurs d'importance",
+                                                                              ang = "Importance Factor Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC ImportanceFactorSettings
+                                      
+                      ), # Fin FACT Result
+                                                               
+                  ), # Fin BLOC TaylorVarianceDecompositionSettings
+
+
+
+                  RandomSamplingSettings = BLOC ( condition = " Method in ( 'Random Sampling', ) ",
+
+                          SimulationsNumber = SIMP ( statut = "o",
+                                                typ = "I",
+                                                val_min = 1,
+                                                fr = "Nombre de points",
+                                                ang = "Points number",
+                                                ),
+
+                       Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                              EmpiricalMean = SIMP ( statut = "o",
+                                                     typ = 'TXM',
+                                                     into = ( 'yes', 'no' ),
+                                                     defaut = 'yes',
+                                                     max = 1,
+                                                     fr = "Moyenne empirique",
+                                                     ang = "Empirical mean",
+                                                     ),
+
+                              EmpiricalStandardDeviation = SIMP ( statut = "o",
+                                                                  typ = 'TXM',
+                                                                  into = ( 'yes', 'no' ),
+                                                                  defaut = 'yes',
+                                                                  max = 1,
+                                                                  fr = "Ecart-type empirique",
+                                                                  ang = "Empirical standard deviation",
+                                                                  ),
+
+                              EmpiricalQuantile = SIMP ( statut = "o",
+                                                         typ = 'TXM',
+                                                         into = ( 'yes', 'no' ),
+                                                         defaut = 'yes',
+                                                         max = 1,
+                                                         fr = "Quantile empirique",
+                                                         ang = "Empirical quantile",
+                                                         ),
+
+                              EmpiricalQuantileSettings = BLOC ( condition = " EmpiricalQuantile in ( 'yes', ) ",
+
+                                  EmpiricalQuantile_Order = SIMP ( statut = "o",
+                                                                   typ = 'R',
+                                                                   defaut = 0.95,
+                                                                   max = 1,
+                                                                   val_min = 0.0,
+                                                                   val_max = 1.0,
+                                                                   fr = "Ordre du quantile empirique",
+                                                                   ang = "Empirical quantile order",
+                                                                   ),
+
+                              ), # Fin BLOC EmpiricalQuantileSettings
+
+                              CorrelationAnalysis = SIMP ( statut = "o",
+                                                            typ = 'TXM',
+                                                            into = ( 'yes', 'no' ),
+                                                            defaut = 'yes',
+                                                            max = 1,
+                                                            fr = "Correlations analysees",
+                                                            ang = "Analysed correlations",
+                                                            ),
+
+                              KernelSmoothing = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'yes',
+                                                       max = 1,
+                                                       fr = "Kernel smoothing de l'echantillon",
+                                                       ang = "Kernel smoothing of the sample",
+                                                       ),
+
+                              KernelSmoothingSettings = BLOC ( condition = " KernelSmoothing in ( 'yes', ) ",
+
+                                     KernelSmoothingDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique de la reconstruction a noyau",
+                                                                              ang = "Kernel Smoothing Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC KernelSmoothingSettings
+                                      
+                      ), # Fin FACT Result
+                                                               
+                  ), # Fin BLOC RandomSamplingSettings
+
+  ), # Fin BLOC CentralUncertainty
+
+
+
+
+  ThresholdExceedence = BLOC ( condition = " Type in ( 'Threshold Exceedence', ) ",
+
+         Event =  FACT ( statut = "o",
+                         min = 1,
+                         max = 1,
+
+                         Threshold = SIMP ( statut = "o",
+                                            typ = "R",
+                                            max = 1,
+                                            fr = "Le seuil de defaillance",
+                                            ang = "Failure threshold",
+                                            ),
+
+                         ComparisonOperator = SIMP ( statut = "o",
+                                                     typ = "TXM",
+                                                     max = 1,
+                                                     into = ( "Less", "LessOrEqual", "Equal", "GreaterOrEqual", "Greater" ),
+                                                     fr = "Que faut-il ne pas depasser : un maximum ou un minimum",
+                                                     ang = "What is the failure threshold : maximum or minimum",
+                                                     ),
+         ), # Fin FACT Event
+                         
+
+         Method = SIMP ( statut = "o",
+                         typ = "TXM",
+                         into = ( "Simulation", "FORM_SORM" ),
+                         fr = "Methode",
+                         ang = "Method",
+                         ),
+
+         SimulationSettings = BLOC ( condition = " Method in ( 'Simulation', ) ",
+
+               Algorithm = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  into = ( "MonteCarlo", "LHS", "ImportanceSampling" ),
+                                  fr = "Algorithme de simulation",
+                                  ang = "Simulation algorithm",
+                                  ),
+
+                                 
+               RandomGenerator = FACT ( statut = "o",
+                                        min = 1,
+                                        max = 1,
+
+                           SeedToBeSet = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'no',
+                                                max = 1,
+                                                fr = "La racine du generateur aleatoire doit-elle etre positionnee ?",
+                                                ang = "Does the random generator seed need to be set ?",
+                                                ),
+
+                           SeedSettings = BLOC ( condition = " SeedToBeSet in ( 'yes', ) ",
+
+                                                 RandomGeneratorSeed = SIMP ( statut = "o",
+                                                                              typ = "I",
+                                                                              max = 1,
+                                                                              fr = "Racine du generateur aleatoire",
+                                                                              ang = "Random generator seed",
+                                                                              ),
+
+                                               ), # Fin BLOC SeedSettings
+
+               ), # Fin FACT RandomGenerator
+
+
+               BlockSize = SIMP ( statut = "o",
+                                  typ = "I",
+                                  max = 1,
+                                  val_min = 1,
+                                  defaut = 1,
+                                  fr = "Nombre de calculs realises en bloc",
+                                  ang = "Number of computations as a block",
+                                  ),
+
+               MaximumOuterSampling = SIMP ( statut = "o",
+                                             typ = "I",
+                                             max = 1,
+                                             val_min = 1,
+                                             fr = "Maximum d'iterations externes",
+                                             ang = "Maximum outer Sampling value",
+                                             ),
+
+               MaximumCoefficientOfVariation = SIMP ( statut = "o",
+                                                      typ = "R",
+                                                      max = 1,
+                                                      defaut = 0.1,
+                                                      val_min = 0.0,
+                                                      val_max = 1.0,
+                                                      fr = "Coefficient de variation maximum",
+                                                      ang = "Maximum coefficient of variation"
+                                                      ),
+
+               ImportanceSamplingSettings = BLOC ( condition = " Algorithm in ( 'ImportanceSampling', ) ",
+
+                            MeanVector = SIMP ( statut = "o",
+                                                typ = "R",
+                                                max = "**",
+                                                fr = "Moyenne",
+                                                ang = "Mean vector",
+                                                ),
+
+
+               ), # Fin BLOC ImportanceSamplingSettings
+
+               Result = FACT ( statut = "o",
+                                      min = 1,
+                                      max = "**",
+
+                    Probability = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Probabiblite",
+                                         ang = "Probability",
+                                         ),
+
+                    StandardDeviation = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Ecart type",
+                                         ang = "Standard deviation",
+                                         ),
+
+                    ConfidenceInterval = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Intervale de confiance",
+                                                ang = "Confidence interval",
+                                                ),
+
+                    ConfidenceIntervalSettings = BLOC ( condition = " ConfidenceInterval in ( 'yes', ) ",
+
+                          Level = SIMP ( statut = "o",
+                                         typ = 'R',
+                                         defaut = 0.9,
+                                         max = 1,
+                                         val_min = 0.0,
+                                         val_max = 1.0,
+                                         fr = "Niveau de confiance",
+                                         ang = "Confidence level",
+                                         ),
+                                                     
+                    ), # Fin BLOC ConfidenceIntervalSettings
+                               
+                    VariationCoefficient = SIMP ( statut = "o",
+                                                  typ = 'TXM',
+                                                  into = ( 'yes', 'no' ),
+                                                  defaut = 'yes',
+                                                  max = 1,
+                                                  fr = "Coefficient de variation",
+                                                  ang = "Coefficient of variation",
+                                                  ),
+
+                    SimulationsNumber = SIMP ( statut = "o",
+                                             typ = 'TXM',
+                                             into = ( 'yes', 'no' ),
+                                             defaut = 'yes',
+                                             max = 1,
+                                             fr = "Nombre d'iterations",
+                                             ang = "Iteration number",
+                                             ),
+
+                    ConvergenceGraph = SIMP ( statut = "o",
+                                             typ = 'TXM',
+                                             into = ( 'yes', 'no' ),
+                                             defaut = 'yes',
+                                             max = 1,
+                                             fr = "Graphe de convergence",
+                                             ang = "Convergence graph",
+                                             ),
+                               
+                    ConvergenceGraphSettings = BLOC ( condition = " ConvergenceGraph in ( 'yes', ) ",
+
+                                     ConvergenceDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique de la convergence",
+                                                                         ang = "Convergence Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC ConvergenceGraphSettings
+                                      
+             ), # Fin FACT Result
+                                                               
+
+
+         ), # Fin BLOC SimulationSettings
+
+
+                               
+         FORM_SORMSettings = BLOC ( condition = " Method in ( 'FORM_SORM', ) ",
+
+                Approximation = SIMP ( statut = "o",
+                                       typ = "TXM",
+                                       defaut = "FirstOrder",
+                                       into = ( "FirstOrder", "SecondOrder" ),
+                                       max = 1,
+                                       fr = "Approximation",
+                                       ang = "Approximation",
+                                       ),
+
+                OptimizationAlgorithm = SIMP ( statut = "o",
+                                               typ = "TXM",
+                                               defaut = "Cobyla",
+                                               into = ( "Cobyla", "AbdoRackwitz" ),
+                                               max = 1,
+                                               fr = "Methode d'optimisation",
+                                               ang = "Optimization method",
+                                               ),
+
+                                     
+                PhysicalStartingPoint = SIMP ( statut = "f",
+                                               typ = "R",
+                                               max = "**",
+                                               fr = "Point de demarrage de l'algorithme iteratif",
+                                               ang = "Initial point for iterative process",
+                                               ),
+
+                MaximumIterationsNumber = SIMP ( statut = "f",
+                                                 typ = "I",
+                                                 max = 1,
+                                                 val_min = 1,
+                                                 fr = "Nombre maximum d'iterations",
+                                                 ang = "Maximum number of iterations",
+                                                 ),
+
+                                     
+                MaximumAbsoluteError = SIMP ( statut = "o",
+                                              typ = "R",
+                                              max = 1,
+                                              defaut = 1E-4,
+                                              val_min = 0.0,
+                                              fr = "Distance maximum absolue entre 2 iterations successives",
+                                              ang = "Absolute maximum distance between 2 successive iterates",
+                                              ),
+
+                MaximumRelativeError = SIMP ( statut = "o",
+                                               typ = "R",
+                                               max = 1,
+                                               defaut = 1E-4,
+                                               val_min = 0.0,
+                                               fr = "Distance maximum relative entre 2 iterations successives",
+                                               ang = "Relative maximum distance between 2 successive iterates",
+                                               ),
+                                     
+                MaximumConstraintError = SIMP ( statut = "o",
+                                                typ = "R",
+                                                max = 1,
+                                                defaut = 1E-4,
+                                                val_min = 0.0,
+                                                fr = "Valeur maximum absolue de la fonction moins la valeur du niveau",
+                                                ang = "Maximum absolute value of the constraint function minus the level value",
+                                                ),
+
+                ImportanceSampling = SIMP ( statut = "o",
+                                            typ = 'TXM',
+                                            into = ( 'yes', 'no' ),
+                                            defaut = 'no',
+                                            max = 1,
+                                            fr = "Tirage d'importance au point de conception",
+                                            ang = "Importance sampling at design point",
+                                            ),
+
+                FORMResult = BLOC ( condition = " Approximation in ( 'FirstOrder', ) ",
+
+                    Probability = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Probabiblite",
+                                         ang = "Probability",
+                                         ),
+
+                    DesignPoint = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', 'no' ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Point de conception",
+                                         ang = "Design point",
+                                         ),
+
+                    HasoferReliabilityIndex = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Indice de fiabilite",
+                                                 ang = "Reliability index",
+                                                 ),
+
+                    ImportanceFactor = SIMP ( statut = "o",
+                                              typ = 'TXM',
+                                              into = ( 'yes', 'no' ),
+                                              defaut = 'yes',
+                                              max = 1,
+                                              fr = "Facteur d'importance pour variable de sortie scalaire",
+                                              ang = "Importance factor",
+                                              ),
+
+                    ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                                     ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique des facteurs d'importance",
+                                                                              ang = "Importance Factor Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC ImportanceFactorSettings
+                                      
+                    SensitivityAnalysis = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Analyse de sensibilite",
+                                                 ang = "Sensitivity analysis",
+                                                 ),
+
+                    SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+                            FORMEventProbabilitySensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+        
+                            FORMEventProbabilitySensitivitySettings = BLOC ( condition = " FORMEventProbabilitySensitivity in ( 'yes', ) ",
+
+                                     FORMEventProbabilitySensitivityDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique des sensibilites",
+                                                                         ang = "Sensitivity Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC FORMEventProbabilitySensitivitySettings
+                                      
+                            HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+        
+                            HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+                                     HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique des sensibilites",
+                                                                         ang = "Sensitivity Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+                                      
+                    ), # Fin BLOC SensitivityAnalysisSettings
+
+                    FunctionCallsNumber = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Nombre d'appels a la fonction",
+                                                 ang = "Function calls number",
+                                                 ),
+
+
+                ), # Fin BLOC FORMResult
+
+
+                SORMResult = BLOC ( condition = " Approximation in ( 'SecondOrder', ) ",
+
+
+                    TvedtApproximation = SIMP ( statut = "o",
+                                                typ = 'TXM',
+                                                into = ( 'yes', 'no' ),
+                                                defaut = 'yes',
+                                                max = 1,
+                                                fr = "Approximation de Tvedt",
+                                                ang = "Tvedt approximation",
+                                                ),
+
+                    HohenBichlerApproximation = SIMP ( statut = "o",
+                                                       typ = 'TXM',
+                                                       into = ( 'yes', 'no' ),
+                                                       defaut = 'yes',
+                                                       max = 1,
+                                                       fr = "Approximation de HohenBichler",
+                                                       ang = "HohenBichler approximation",
+                                                       ),
+
+                    BreitungApproximation = SIMP ( statut = "o",
+                                                   typ = 'TXM',
+                                                   into = ( 'yes', 'no' ),
+                                                   defaut = 'yes',
+                                                   max = 1,
+                                                   fr = "Approximation de Breitung",
+                                                   ang = "Breitung approximation",
+                                                   ),
+
+                    DesignPoint = SIMP ( statut = "o",
+                                         typ = 'TXM',
+                                         into = ( 'yes', 'no' ),
+                                         defaut = 'yes',
+                                         max = 1,
+                                         fr = "Point de conception",
+                                         ang = "Design point",
+                                         ),
+
+                    ImportanceFactor = SIMP ( statut = "o",
+                                              typ = 'TXM',
+                                              into = ( 'yes', 'no' ),
+                                              defaut = 'yes',
+                                              max = 1,
+                                              fr = "Facteur d'importance pour variable de sortie scalaire",
+                                              ang = "Importance factor",
+                                              ),
+
+                    ImportanceFactorSettings = BLOC ( condition = " ImportanceFactor in ( 'yes', ) ",
+
+                                     ImportanceFactorDrawingFilename = SIMP ( statut = "o",
+                                                                              typ = "TXM",
+                                                                              max = 1,
+                                                                              fr = "Nom du fichier graphique des facteurs d'importance",
+                                                                              ang = "Importance Factor Drawing Filename",
+                                                                              ),
+                                                                             
+
+                              ), # Fin BLOC ImportanceFactorSettings
+                                      
+                    SensitivityAnalysis = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Analyse de sensibilite",
+                                                 ang = "Sensitivity analysis",
+                                                 ),
+
+                    SensitivityAnalysisSettings = BLOC ( condition = " SensitivityAnalysis in ( 'yes', ) ",
+
+                            HasoferReliabilityIndexSensitivity = SIMP ( statut = "o",
+                                                             typ = 'TXM',
+                                                             into = ( 'yes', 'no' ),
+                                                             defaut = 'yes',
+                                                             max = 1,
+                                                             fr = "Indice de fiabilite de Hasofer",
+                                                             ang = "Hasofer reliability index",
+                                                             ),
+                                                                 
+                            HasoferReliabilityIndexSensitivitySettings = BLOC ( condition = " HasoferReliabilityIndexSensitivity in ( 'yes', ) ",
+
+                                     HasoferReliabilityIndexSensitivityDrawingFilename = SIMP ( statut = "o",
+                                                                         typ = "TXM",
+                                                                         max = 1,
+                                                                         fr = "Nom du fichier graphique des sensibilites",
+                                                                         ang = "Sensitivity Drawing Filename",
+                                                                         ),
+                                                                             
+
+                              ), # Fin BLOC FHasoferReliabilityIndexSensitivitySettings
+                                      
+                    ), # Fin BLOC SensitivityAnalysisSettings
+
+                    FunctionCallsNumber = SIMP ( statut = "o",
+                                                 typ = 'TXM',
+                                                 into = ( 'yes', 'no' ),
+                                                 defaut = 'yes',
+                                                 max = 1,
+                                                 fr = "Nombre d'appels a la fonction",
+                                                 ang = "Function calls number",
+                                                 ),
+
+
+                ), # Fin BLOC SecondOrder
+
+
+                                     
+        ), # Fin BLOC FORM_SORMSettings
+
+
+                               
+  ), # Fin BLOC ThresholdExceedence
+
+
+
+) # Fin PROC CRITERIA
+# Ordre Catalogue CRITERIA
+
+
+
+
+
+
+
index 7592ca46775cdd9064dc4df48a16647a76d397d1..35cd8c86d4534e4ec4153b62c71821199d86bca0 100644 (file)
@@ -5,9 +5,6 @@ rep_cata=os.getcwd()
 
 catalogues = (
 # (code,version,catalogue,formatIn,formatOut)
-  #('OPENTURNS_WRAPPER','V1',os.path.join(rep_cata,'OpenTURNS_Cata_Wrapper_V1.py'),'openturns_wrapper','wrapper'),
-  ('OPENTURNS_STUDY','V4',os.path.join(rep_cata,'OpenTURNS_Cata_Study_V4.py'),'openturns_study','wrapper'),
-  #('OPENTURNS_STUDY','V4',os.path.join(rep_cata,'OpenTURNS_Cata_Study_VPN.py'),'openturns_study','wrapper'),
-  #('OPENTURNS','Wrapper',os.path.join(rep_cata,'OpenTURNS_Cata_Wrapper_V1.py'),'openturns'),
+  ('OPENTURNS_STUDY','V8',os.path.join(rep_cata,'OpenTURNS_Cata_Study_V10.py'),'openturns_study','wrapper'),
 )
 
diff --git a/Openturns_Study/configuration_OPENTURNS_STUDY.py b/Openturns_Study/configuration_OPENTURNS_STUDY.py
new file mode 100644 (file)
index 0000000..7eab383
--- /dev/null
@@ -0,0 +1,64 @@
+# -*- coding: utf-8 -*-\r
+#            CONFIGURATION MANAGEMENT OF EDF VERSION\r
+# ======================================================================\r
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG\r
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY\r
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY\r
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR\r
+# (AT YOUR OPTION) ANY LATER VERSION.\r
+#\r
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT\r
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF\r
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU\r
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.\r
+#\r
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE\r
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,\r
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.\r
+#\r
+#\r
+# ======================================================================\r
+"""\r
+    Ce module sert pour charger les paramètres de configuration d'EFICAS\r
+"""\r
+# Modules Python\r
+import configuration\r
+import os\r
+\r
+\r
+class CONFIG(configuration.CONFIG_BASE):\r
+\r
+  #-----------------------------------\r
+  def __init__(self,appli,repIni):\r
+  #-----------------------------------\r
+\r
+      configuration.CONFIG_BASE.__init__(self,appli,repIni,'.Eficas_Openturns')\r
+      self.INSTALLDIR =os.path.dirname(__file__)\r
+\r
+      self.labels_user=['exec_acrobat', 'catalogues','savedir','path_doc','OpenTURNS_path']\r
+      self.labels_eficas=["OpenTURNS_path","rep_user","INSTALLDIR","path_doc","exec_acrobat"]\r
+      self.labels_eficas=self.labels_eficas+["rep_cata","initialdir","savedir","catalogues"]\r
+      self.setValeurs()\r
+      self.cataFile="catalogues_openturns.ini"\r
+\r
+  #---------------------------------------\r
+  def lecture_fichier_ini_standard(self):\r
+  #---------------------------------------\r
+       configuration.CONFIG_BASE.lecture_fichier_ini_standard(self)\r
+       if hasattr(self,'OpenTURNS_path') :\r
+         self.oldOTPath=self.OpenTURNS_path\r
+\r
+  #---------------------------------------\r
+  def lecture_fichier_ini_utilisateur(self):\r
+  #---------------------------------------\r
+       configuration.CONFIG_BASE.lecture_fichier_ini_utilisateur(self)\r
+       if hasattr(self,'OpenTURNS_path') :\r
+          if hasattr(self,'oldOTPath') and (self.OpenTURNS_path != self.oldOTPath):\r
+               import sys\r
+               sys.path.remove(self.oldOTPath)\r
+               sys.path[:0]=[self.OpenTURNS_path]\r
+               self.oldOTPath=self.OpenTURNS_path\r
+\r
+def make_config(appli,rep):\r
+    return CONFIG(appli,rep)\r
+\r
diff --git a/Openturns_Study/opsOT.py b/Openturns_Study/opsOT.py
new file mode 100644 (file)
index 0000000..e2af408
--- /dev/null
@@ -0,0 +1,20 @@
+# -*- coding: iso-8859-1 -*-
+
+def INCLUDE(self,FileName,**args):
+   """ 
+       Fonction sd_prod pour la macro INCLUDE
+   """
+   if hasattr(self,'change_fichier'):
+       delattr(self,'change_fichier')
+       delattr(self,'fichier_ini')
+
+   self.make_include2(fichier=FileName)
+
+def INCLUDE_context(self,d):
+   """ 
+       Fonction op_init pour macro INCLUDE
+   """
+   for k,v in self.g_context.items():
+      d[k]=v
+
+
diff --git a/Openturns_Study/prefs_OPENTURNS_STUDY.py b/Openturns_Study/prefs_OPENTURNS_STUDY.py
new file mode 100644 (file)
index 0000000..7b64330
--- /dev/null
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import os, sys
+# Les variables pouvant positionnees sont :
+print "import des prefs de OPENTURNS"
+
+# REPINI sert à localiser le fichier 
+# initialdir sert comme directory initial des QFileDialog
+# positionnee a repin au debut mise a jour dans configuration
+REPINI=os.path.dirname(os.path.abspath(__file__))
+initialdir=REPINI 
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+INSTALLDIR=os.path.join(REPINI,'..')
+
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+encoding='iso-8859-1'
+
+# Acces a la documentation
+rep_cata        = INSTALLDIR
+path_doc        = os.path.join(rep_cata,'Doc')
+exec_acrobat    = "/usr/bin/xpdf"
+savedir         = os.environ['HOME']
+
+
+# OpenTURNS Python module
+OpenTURNS_path="/local00/home/dutka/OpenTURNS/dutka/build/install/lib/python2.4/site-packages"
+# Choix des catalogues
+sys.path[:0]=[INSTALLDIR, OpenTURNS_path]
diff --git a/Openturns_Study/prefs_OPENTURNS_STUDY.py.in b/Openturns_Study/prefs_OPENTURNS_STUDY.py.in
new file mode 100644 (file)
index 0000000..e945405
--- /dev/null
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import os, sys
+# Les variables pouvant positionnees sont :
+print "import des prefs de OPENTURNS"
+
+# REPINI sert à localiser le fichier 
+# initialdir sert comme directory initial des QFileDialog
+# positionnee a repin au debut mise a jour dans configuration
+REPINI=os.path.dirname(os.path.abspath(__file__))
+initialdir=REPINI 
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+INSTALLDIR=os.path.join(REPINI,'..')
+
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+encoding='iso-8859-1'
+
+# Acces a la documentation
+rep_cata        = INSTALLDIR
+path_doc        = os.path.join(rep_cata,'Doc')
+exec_acrobat    = "/usr/bin/xpdf"
+savedir         = os.environ['HOME']
+
+
+# OpenTURNS Python module
+OpenTURNS_path="@OpenTURNS_PYTHON_MODULE_DIR@"
+# Choix des catalogues
+sys.path[:0]=[INSTALLDIR, OpenTURNS_path]
diff --git a/Openturns_Wrapper/CMakeLists.txt b/Openturns_Wrapper/CMakeLists.txt
new file mode 100644 (file)
index 0000000..da3bb73
--- /dev/null
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Question : Que faire des fichiers sdistOTqt.py et style.py
+
+configure_file ( ${CMAKE_CURRENT_SOURCE_DIR}/prefs_OPENTURNS_WRAPPER.py.in
+                 ${CMAKE_CURRENT_SOURCE_DIR}/prefs_OPENTURNS_WRAPPER.py
+                @ONLY )
+
+install ( FILES qtEficas_openturns_wrapper.py
+                ${CMAKE_CURRENT_SOURCE_DIR}/prefs_OPENTURNS_WRAPPER.py
+               prefs.py
+               configuration_OPENTURNS_WRAPPER.py
+               catalogues_openturns.ini
+               OpenTURNS_Cata_Wrapper_V4.py
+         DESTINATION ${CMAKE_INSTALL_PREFIX}/Openturns_Wrapper
+        )
+
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/Openturns_Wrapper/OpenTURNS_Cata_Wrapper_V3.py b/Openturns_Wrapper/OpenTURNS_Cata_Wrapper_V3.py
new file mode 100644 (file)
index 0000000..f99f40b
--- /dev/null
@@ -0,0 +1,301 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class variable(ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_WRAPPER',
+                 execmodul = None,
+                 regles = ( AU_MOINS_UN ( 'WRAPPER' ), ),
+                 ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+
+#================================
+# 2. Definition des variables
+#================================
+
+
+                       
+VARIABLE = OPER ( nom = "VARIABLE",
+                      sd_prod = variable,
+                      op = None,
+                      fr = "Definitions des lois marginales utilisees par les variables d'entree",
+              
+
+                     Type = SIMP ( statut = "o",
+                                   typ = "TXM",
+                                   max = 1,
+                                   into = ( "in", "out", ),
+                                   defaut = "in",
+                                   fr = "variable d'entree ou de sortie du solver",
+                                   ang = "Input or Output variable",
+                                   ),
+
+                     Unit = SIMP ( statut = "f",
+                                   typ = "TXM",
+                                   max = 1,
+                                   fr = "Unite",
+                                   ang = "Unit",
+                                   ),
+
+                     Comment = SIMP ( statut = "f",
+                                      typ = "TXM",
+                                      max = 1,
+                                      fr = "Commentaire",
+                                      ang = "Comment",
+                                      ),
+
+                     Regexp = SIMP ( statut = "f",
+                                     typ = "TXM",
+                                     max = 1,
+                                     fr = "Expression reguliere",
+                                     ang = "Regular expression",
+                                     ),
+
+                     Format = SIMP ( statut = "f",
+                                     typ = "TXM",
+                                     max = 1,
+                                     fr = "Format d'ecriture",
+                                     ang = "Format",
+                                     ),
+
+
+             ) # Fin FACT Variables
+#
+
+
+#================================
+# Definition des parametres du wrapper
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+WRAPPER = PROC ( nom = "WRAPPER",
+                 op = None,
+                 docu = "",
+                 fr = "Mise en donnee pour le fichier de configuration de OPENTURNS.",
+                 ang = "Writes the configuration file for OPENTURNS.",
+
+    Framework = SIMP ( statut = "o",
+                       typ = "TXM",
+                       into = ( "Salome", "Stand-alone", ),
+                       max = 1,
+                       fr = "Dans quel environnement le wrapper doit-il etre utilise ?",
+                       ang = "Which framework is this wrapper designed for ?",
+                       ),
+
+    StandAlone = BLOC ( condition = " Framework in ( 'Stand-alone', ) ",
+    
+    
+        WrapperPath = SIMP ( statut = "o",
+                             typ = "TXM",
+                             max = 1,
+                             fr = "Chemin d acces au wrapper",
+                             ang = "Wrapper library path",
+                             ),
+    
+        FunctionName = SIMP ( statut = "o",
+                              typ = "TXM",
+                              max = 1,
+                              fr = "Nom de la fonction dans le wrapper",
+                              ang = "Function's name in wrapper",
+                              ),
+    
+        GradientName = SIMP ( statut = "f",
+                              typ = "TXM",
+                              max = 1,
+                              fr = "Nom du gradient dans le wrapper",
+                              ang = "Gradient's name in wrapper",
+                              ),
+    
+        HessianName = SIMP ( statut = "f",
+                             typ = "TXM",
+                             max = 1,
+                             fr = "Nom du hessian dans le wrapper",
+                             ang = "Hessian's name in wrapper",
+                             ),
+    
+        WrapCouplingMode = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  max = 1,
+                                  into = ( "static-link", "dynamic-link", "fork", ),
+                                  defaut = "fork",
+                                  fr = "Mode de couplage du solver",
+                                  ang = "Solver coupling mode",
+                                  ),
+    
+        Fork = BLOC ( condition = " WrapCouplingMode in ( 'fork', ) ",
+                        
+                      Command = SIMP ( statut = "o",
+                                       max = 1,
+                                       typ = "TXM",
+                                       fr = "Chemin du solver",
+                                       ang = "solver path",
+                                       ),
+                      ), # Fin BLOC Fork
+    
+        State = SIMP ( statut = "f",
+                       typ = "TXM",
+                       max = 1,
+                       into = ( "shared", "specific" ),
+                       fr = "Partage de l'etat interne entre les fonctions",
+                       ang = "Internal state sharing",
+                       ),
+    
+        InDataTransfer = SIMP ( statut = "o",
+                                typ = "TXM",
+                                max = 1,
+                                into = ( "files", "arguments", "corba" ),
+                                fr = "Mode de transfert des donnees d'entree",
+                                ang = "Input transfering mode",
+                                ),
+    
+        OutDataTransfer = SIMP ( statut = "o",
+                                 typ = "TXM",
+                                 max = 1,
+                                 into = ( "files", "arguments", "corba" ),
+                                 fr = "Mode de transfert des donnees de sortie",
+                                 ang = "Output transfering mode",
+                                 ),
+  
+    ), # Fin BLOC StandAlone
+
+
+    Salome = BLOC ( condition = " Framework in ( 'Salome', ) ",
+
+        SolverComponentName  = SIMP ( statut = "f",
+                                      typ = "TXM",
+                                      max = 1,
+                                      defaut = "UNDEFINED",
+                                      fr = "Nom du composant solver",
+                                      ang = "Solver component name",
+                                      ),
+    
+    
+        WrapperPath = SIMP ( statut = "o",
+                             typ = "TXM",
+                             into = ( "GenericWrapper4Salome.so", ),
+                             defaut = "GenericWrapper4Salome.so",
+                             max = 1,
+                             fr = "Chemin d acces au wrapper",
+                             ang = "Wrapper library path",
+                             ),
+    
+        FunctionName = SIMP ( statut = "o",
+                              typ = "TXM",
+                              into = ( "GENERICSOLVER", ),
+                              defaut = "GENERICSOLVER",
+                              max = 1,
+                              fr = "Nom de la fonction dans le wrapper",
+                              ang = "Function's name in wrapper",
+                              ),
+    
+        GradientName = SIMP ( statut = "f",
+                              typ = "TXM",
+                              into = ( "GENERICSOLVER", ),
+                              defaut = "GENERICSOLVER",
+                              max = 1,
+                              fr = "Nom du gradient dans le wrapper",
+                              ang = "Gradient's name in wrapper",
+                              ),
+    
+        HessianName = SIMP ( statut = "f",
+                             typ = "TXM",
+                             into = ( "GENERICSOLVER", ),
+                             defaut = "GENERICSOLVER",
+                             max = 1,
+                             fr = "Nom du hessian dans le wrapper",
+                             ang = "Hessian's name in wrapper",
+                             ),
+    
+        WrapCouplingMode = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  max = 1,
+                                  into = ( "static-link", ),
+                                  defaut = "static-link",
+                                  fr = "Mode de couplage du solver",
+                                  ang = "Solver coupling mode",
+                                  ),
+    
+        State = SIMP ( statut = "f",
+                       typ = "TXM",
+                       max = 1,
+                       into = ( "shared", "specific" ),
+                       fr = "Partage de l'etat interne entre les fonctions",
+                       ang = "Internal state sharing",
+                       ),
+    
+        InDataTransfer = SIMP ( statut = "o",
+                                typ = "TXM",
+                                max = 1,
+                                into = ( "files", "arguments", "corba", ),
+                                defaut = "corba",
+                                fr = "Mode de transfert des donnees d'entree",
+                                ang = "Input transfering mode",
+                                ),
+    
+        OutDataTransfer = SIMP ( statut = "o",
+                                 typ = "TXM",
+                                 max = 1,
+                                 into = ( "files", "arguments", "corba", ),
+                                 defaut = "corba",
+                                 fr = "Mode de transfert des donnees de sortie",
+                                 ang = "Output transfering mode",
+                                 ),
+  
+    ), # Fin BLOC Salome
+
+
+  Files = FACT ( statut = "f",
+                 min = 1,
+                 max = "**",
+
+                 Id = SIMP ( statut = "o",
+                             typ = "TXM",
+                             max = 1,
+                             fr = "Identificateur du  fichier",
+                             ang = "File id",
+                             ),
+
+                 Type = SIMP ( statut = "o",
+                               typ = "TXM",
+                               max = 1,
+                               into = ( "in", "out", ),
+                               fr = "Fichier d entree ou de sortie du solveur ?",
+                               ang = "Input or Output file ?",
+                               ),
+
+                 Name = SIMP ( statut = "f",
+                               typ = "TXM",
+                               max = 1,
+                               fr = "Nom du fichier",
+                               ang = "File name",
+                               ),
+
+                 Path = SIMP ( statut = "o",
+                               typ = "TXM",
+                               max = 1,
+                               fr = "Chemin du fichier",
+                               ang = "Path file ",
+                               ),
+
+                 Subst = SIMP ( statut = "f",
+                                typ = "TXM",
+                                max = "**",
+                                fr = "Liste de variables",
+                                ang = "List",
+                                ),
+
+                 ), # Fin FACT Files
+
+) # Fin PROC WRAPPER
diff --git a/Openturns_Wrapper/OpenTURNS_Cata_Wrapper_V4.py b/Openturns_Wrapper/OpenTURNS_Cata_Wrapper_V4.py
new file mode 100644 (file)
index 0000000..4b42fef
--- /dev/null
@@ -0,0 +1,308 @@
+# -*- coding: utf-8 -*-
+
+# --------------------------------------------------
+# debut entete
+# --------------------------------------------------
+
+import Accas
+from Accas import *
+
+class variable(ASSD ) : pass
+
+
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'OPENTURNS_WRAPPER',
+                 execmodul = None,
+                 regles = ( AU_MOINS_UN ( 'WRAPPER' ), ),
+                 ) # Fin JDC_CATA
+
+# --------------------------------------------------
+# fin entete
+# --------------------------------------------------
+
+
+#================================
+# 2. Definition des variables
+#================================
+
+
+                       
+VARIABLE = OPER ( nom = "VARIABLE",
+                      sd_prod = variable,
+                      op = None,
+                      fr = "Definitions des lois marginales utilisees par les variables d'entree",
+              
+
+                     Type = SIMP ( statut = "o",
+                                   typ = "TXM",
+                                   max = 1,
+                                   into = ( "in", "out", ),
+                                   defaut = "in",
+                                   fr = "variable d'entree ou de sortie du solver",
+                                   ang = "Input or Output variable",
+                                   ),
+
+                     Unit = SIMP ( statut = "f",
+                                   typ = "TXM",
+                                   max = 1,
+                                   fr = "Unite",
+                                   ang = "Unit",
+                                   ),
+
+                     Comment = SIMP ( statut = "f",
+                                      typ = "TXM",
+                                      max = 1,
+                                      fr = "Commentaire",
+                                      ang = "Comment",
+                                      ),
+
+                     Regexp = SIMP ( statut = "f",
+                                     typ = "TXM",
+                                     max = 1,
+                                     fr = "Expression reguliere",
+                                     ang = "Regular expression",
+                                     ),
+
+                     Format = SIMP ( statut = "f",
+                                     typ = "TXM",
+                                     max = 1,
+                                     fr = "Format d'ecriture",
+                                     ang = "Format",
+                                     ),
+
+
+             ) # Fin FACT Variables
+#
+
+
+#================================
+# Definition des parametres du wrapper
+#================================
+
+# Nota : les variables de type PROC doivent etre en majuscules !
+WRAPPER = PROC ( nom = "WRAPPER",
+                 op = None,
+                 docu = "",
+                 fr = "Mise en donnee pour le fichier de configuration de OPENTURNS.",
+                 ang = "Writes the configuration file for OPENTURNS.",
+
+    Framework = SIMP ( statut = "o",
+                       typ = "TXM",
+                       into = ( "Salome", "Stand-alone", ),
+                       max = 1,
+                       fr = "Dans quel environnement le wrapper doit-il etre utilise ?",
+                       ang = "Which framework is this wrapper designed for ?",
+                       ),
+
+    StandAlone = BLOC ( condition = " Framework in ( 'Stand-alone', ) ",
+    
+    
+        WrapperPath = SIMP ( statut = "o",
+                             typ = "TXM",
+                             max = 1,
+                             fr = "Chemin d acces au wrapper",
+                             ang = "Wrapper library path",
+                             ),
+    
+        FunctionName = SIMP ( statut = "o",
+                              typ = "TXM",
+                              max = 1,
+                              fr = "Nom de la fonction dans le wrapper",
+                              ang = "Function's name in wrapper",
+                              ),
+    
+        GradientName = SIMP ( statut = "f",
+                              typ = "TXM",
+                              max = 1,
+                              fr = "Nom du gradient dans le wrapper",
+                              ang = "Gradient's name in wrapper",
+                              ),
+    
+        HessianName = SIMP ( statut = "f",
+                             typ = "TXM",
+                             max = 1,
+                             fr = "Nom du hessian dans le wrapper",
+                             ang = "Hessian's name in wrapper",
+                             ),
+    
+        WrapCouplingMode = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  max = 1,
+                                  into = ( "static-link", "dynamic-link", "fork", ),
+                                  defaut = "fork",
+                                  fr = "Mode de couplage du solver",
+                                  ang = "Solver coupling mode",
+                                  ),
+    
+        Fork = BLOC ( condition = " WrapCouplingMode in ( 'fork', ) ",
+                        
+                      Command = SIMP ( statut = "o",
+                                       max = 1,
+                                       typ = "TXM",
+                                       fr = "Chemin du solver",
+                                       ang = "Solver path",
+                                       ),
+                        
+                      UserPrefix = SIMP ( statut = "f",
+                                       max = 1,
+                                       typ = "TXM",
+                                       fr = "Prefixe pour retrouver les repertories temporaires de calcul",
+                                       ang = "Prefix to help finding compute directories",
+                                       ),
+                      ), # Fin BLOC Fork
+    
+        State = SIMP ( statut = "f",
+                       typ = "TXM",
+                       max = 1,
+                       into = ( "shared", "specific" ),
+                       fr = "Partage de l'etat interne entre les fonctions",
+                       ang = "Internal state sharing",
+                       ),
+    
+        InDataTransfer = SIMP ( statut = "o",
+                                typ = "TXM",
+                                max = 1,
+                                into = ( "files", "arguments", "corba" ),
+                                fr = "Mode de transfert des donnees d'entree",
+                                ang = "Input transfering mode",
+                                ),
+    
+        OutDataTransfer = SIMP ( statut = "o",
+                                 typ = "TXM",
+                                 max = 1,
+                                 into = ( "files", "arguments", "corba" ),
+                                 fr = "Mode de transfert des donnees de sortie",
+                                 ang = "Output transfering mode",
+                                 ),
+  
+    ), # Fin BLOC StandAlone
+
+
+    Salome = BLOC ( condition = " Framework in ( 'Salome', ) ",
+
+        SolverComponentName  = SIMP ( statut = "f",
+                                      typ = "TXM",
+                                      max = 1,
+                                      defaut = "UNDEFINED",
+                                      fr = "Nom du composant solver",
+                                      ang = "Solver component name",
+                                      ),
+    
+    
+        WrapperPath = SIMP ( statut = "o",
+                             typ = "TXM",
+                             into = ( "GenericWrapper4Salome.so", ),
+                             defaut = "GenericWrapper4Salome.so",
+                             max = 1,
+                             fr = "Chemin d acces au wrapper",
+                             ang = "Wrapper library path",
+                             ),
+    
+        FunctionName = SIMP ( statut = "o",
+                              typ = "TXM",
+                              into = ( "GENERICSOLVER", ),
+                              defaut = "GENERICSOLVER",
+                              max = 1,
+                              fr = "Nom de la fonction dans le wrapper",
+                              ang = "Function's name in wrapper",
+                              ),
+    
+        GradientName = SIMP ( statut = "f",
+                              typ = "TXM",
+                              into = ( "GENERICSOLVER", ),
+                              defaut = "GENERICSOLVER",
+                              max = 1,
+                              fr = "Nom du gradient dans le wrapper",
+                              ang = "Gradient's name in wrapper",
+                              ),
+    
+        HessianName = SIMP ( statut = "f",
+                             typ = "TXM",
+                             into = ( "GENERICSOLVER", ),
+                             defaut = "GENERICSOLVER",
+                             max = 1,
+                             fr = "Nom du hessian dans le wrapper",
+                             ang = "Hessian's name in wrapper",
+                             ),
+    
+        WrapCouplingMode = SIMP ( statut = "o",
+                                  typ = "TXM",
+                                  max = 1,
+                                  into = ( "static-link", ),
+                                  defaut = "static-link",
+                                  fr = "Mode de couplage du solver",
+                                  ang = "Solver coupling mode",
+                                  ),
+    
+        State = SIMP ( statut = "f",
+                       typ = "TXM",
+                       max = 1,
+                       into = ( "shared", "specific" ),
+                       fr = "Partage de l'etat interne entre les fonctions",
+                       ang = "Internal state sharing",
+                       ),
+    
+        InDataTransfer = SIMP ( statut = "o",
+                                typ = "TXM",
+                                max = 1,
+                                into = ( "files", "arguments", "corba", ),
+                                defaut = "corba",
+                                fr = "Mode de transfert des donnees d'entree",
+                                ang = "Input transfering mode",
+                                ),
+    
+        OutDataTransfer = SIMP ( statut = "o",
+                                 typ = "TXM",
+                                 max = 1,
+                                 into = ( "files", "arguments", "corba", ),
+                                 defaut = "corba",
+                                 fr = "Mode de transfert des donnees de sortie",
+                                 ang = "Output transfering mode",
+                                 ),
+  
+    ), # Fin BLOC Salome
+
+
+  Files = FACT ( statut = "f",
+                 min = 1,
+                 max = "**",
+
+                 Id = SIMP ( statut = "o",
+                             typ = "TXM",
+                             max = 1,
+                             fr = "Identificateur du  fichier",
+                             ang = "File id",
+                             ),
+
+                 Type = SIMP ( statut = "o",
+                               typ = "TXM",
+                               max = 1,
+                               into = ( "in", "out", ),
+                               fr = "Fichier d entree ou de sortie du solveur ?",
+                               ang = "Input or Output file ?",
+                               ),
+
+                 Name = SIMP ( statut = "f",
+                               typ = "TXM",
+                               max = 1,
+                               fr = "Nom du fichier",
+                               ang = "File name",
+                               ),
+
+                 Path = SIMP ( statut = "o",
+                               typ = "TXM",
+                               max = 1,
+                               fr = "Chemin du fichier",
+                               ang = "Path file ",
+                               ),
+
+                 Subst = SIMP ( statut = "f",
+                                typ = "TXM",
+                                max = "**",
+                                fr = "Liste de variables",
+                                ang = "List",
+                                ),
+
+                 ), # Fin FACT Files
+
+) # Fin PROC WRAPPER
index 9593c04d9eedd9cb070030b542a71c95ddbfcef4..cbc9643b665246da294a463883df11cce8432b27 100644 (file)
@@ -1,12 +1,11 @@
 # Choix des catalogues
 import os
-#rep_cata=os.path.dirname(os.path.abspath(__file__))
 rep_cata=os.getcwd()
 
 catalogues = (
 # (code,version,catalogue,formatIn,formatOut)
   #('OPENTURNS_WRAPPER','V1',os.path.join(rep_cata,'OpenTURNS_Cata_Wrapper_V1.py'),'openturns_wrapper','wrapper'),
-  ('OPENTURNS_WRAPPER','V2',os.path.join(rep_cata,'OpenTURNS_Cata_Wrapper_V2.py'),'openturns_wrapper','wrapper'),
+  ('OPENTURNS_WRAPPER','V3',os.path.join(rep_cata,'OpenTURNS_Cata_Wrapper_V4.py'),'openturns_wrapper','wrapper'),
   #('OPENTURNS','Wrapper',os.path.join(rep_cata,'OpenTURNS_Cata_Wrapper_V1.py'),'openturns'),
 )
 
diff --git a/Openturns_Wrapper/configuration_OPENTURNS_WRAPPER.py b/Openturns_Wrapper/configuration_OPENTURNS_WRAPPER.py
new file mode 100644 (file)
index 0000000..f15bcd9
--- /dev/null
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-\r
+#            CONFIGURATION MANAGEMENT OF EDF VERSION\r
+# ======================================================================\r
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG\r
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY\r
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY\r
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR\r
+# (AT YOUR OPTION) ANY LATER VERSION.\r
+#\r
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT\r
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF\r
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU\r
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.\r
+#\r
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE\r
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,\r
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.\r
+#\r
+#\r
+# ======================================================================\r
+"""\r
+    Ce module sert pour charger les paramètres de configuration d'EFICAS\r
+"""\r
+# Modules Python\r
+import configuration\r
+import os\r
+\r
+\r
+class CONFIG(configuration.CONFIG_BASE):\r
+\r
+  #-----------------------------------\r
+  def __init__(self,appli,repIni):\r
+  #-----------------------------------\r
+\r
+      configuration.CONFIG_BASE.__init__(self,appli,repIni,'.Eficas_Openturns')\r
+      self.INSTALLDIR =os.path.dirname(__file__)\r
+\r
+      self.labels_user=['exec_acrobat', 'catalogues','savedir','path_doc','OpenTURNS_path']\r
+      self.labels_eficas=["OpenTURNS_path","rep_user","INSTALLDIR","path_doc","exec_acrobat"]\r
+      self.labels_eficas=self.labels_eficas+["rep_cata","initialdir","savedir","catalogues"]\r
+      self.setValeurs()\r
+      self.cataFile="catalogues_openturns.ini"\r
+\r
+\r
+  #---------------------------------------\r
+  def lecture_fichier_ini_standard(self):\r
+  #---------------------------------------\r
+       configuration.CONFIG_BASE.lecture_fichier_ini_standard(self)\r
+       if hasattr(self,'OpenTURNS_path') :\r
+         self.oldOTPath=self.OpenTURNS_path\r
+\r
+  #---------------------------------------\r
+  def lecture_fichier_ini_utilisateur(self):\r
+  #---------------------------------------\r
+       configuration.CONFIG_BASE.lecture_fichier_ini_utilisateur(self)\r
+       if hasattr(self,'OpenTURNS_path') :\r
+          if hasattr(self,'oldOTPath') and (self.OpenTURNS_path != self.oldOTPath):\r
+               import sys\r
+               sys.path.remove(self.oldOTPath)\r
+               sys.path[:0]=[self.OpenTURNS_path]\r
+               self.oldOTPath=self.OpenTURNS_path\r
+\r
+def make_config(appli,rep):\r
+    return CONFIG(appli,rep)\r
+\r
index e3141852c246156f056b8095b41541a07d7a8942..a1c7888e9f09b67fa8830b85af670257fd863871 100644 (file)
 #
 #
 # ======================================================================
-
-import os, sys
-# Les variables pouvant positionnees sont :
-# "CODE_PATH_SURCHARGE","OpenTURNS_path","rep_user","INSTALLDIR","path_doc","exec_acrobat","rep_cata"
-print "import des prefs de OPENTURNS_WRAPPER"
-
 code = "OPENTURNS_WRAPPER"
-
-# REPINI sert à localiser le fichier 
-# initialdir sert comme directory initial des QFileDialog
-# positionnee a repin au debut mise a jour dans configuration
-REPINI=os.path.dirname(os.path.abspath(__file__))
-initialdir=REPINI 
-
-# INSTALLDIR sert à localiser l'installation d'Eficas
-INSTALLDIR=os.path.join(REPINI,'..')
-
-
-# Codage des strings qui accepte les accents (en remplacement de 'ascii')
-# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
-lang='fr'
-encoding='iso-8859-1'
-
-# Acces a la documentation
-rep_cata        = INSTALLDIR
-path_doc        = os.path.join(rep_cata,'Doc')
-exec_acrobat    = "/usr/bin/xpdf"
-
-# OpenTURNS Python module
-OpenTURNS_path="/opt/OpenTURNS/install/lib/python2.4/site-packages"
-
-# Choix des catalogues
-sys.path[:0]=[INSTALLDIR]
-sys.path.append( OpenTURNS_path )
-
-
diff --git a/Openturns_Wrapper/prefs_OPENTURNS_WRAPPER.py b/Openturns_Wrapper/prefs_OPENTURNS_WRAPPER.py
new file mode 100644 (file)
index 0000000..7b64330
--- /dev/null
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import os, sys
+# Les variables pouvant positionnees sont :
+print "import des prefs de OPENTURNS"
+
+# REPINI sert à localiser le fichier 
+# initialdir sert comme directory initial des QFileDialog
+# positionnee a repin au debut mise a jour dans configuration
+REPINI=os.path.dirname(os.path.abspath(__file__))
+initialdir=REPINI 
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+INSTALLDIR=os.path.join(REPINI,'..')
+
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+encoding='iso-8859-1'
+
+# Acces a la documentation
+rep_cata        = INSTALLDIR
+path_doc        = os.path.join(rep_cata,'Doc')
+exec_acrobat    = "/usr/bin/xpdf"
+savedir         = os.environ['HOME']
+
+
+# OpenTURNS Python module
+OpenTURNS_path="/local00/home/dutka/OpenTURNS/dutka/build/install/lib/python2.4/site-packages"
+# Choix des catalogues
+sys.path[:0]=[INSTALLDIR, OpenTURNS_path]
diff --git a/Openturns_Wrapper/prefs_OPENTURNS_WRAPPER.py.in b/Openturns_Wrapper/prefs_OPENTURNS_WRAPPER.py.in
new file mode 100644 (file)
index 0000000..e945405
--- /dev/null
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import os, sys
+# Les variables pouvant positionnees sont :
+print "import des prefs de OPENTURNS"
+
+# REPINI sert à localiser le fichier 
+# initialdir sert comme directory initial des QFileDialog
+# positionnee a repin au debut mise a jour dans configuration
+REPINI=os.path.dirname(os.path.abspath(__file__))
+initialdir=REPINI 
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+INSTALLDIR=os.path.join(REPINI,'..')
+
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+encoding='iso-8859-1'
+
+# Acces a la documentation
+rep_cata        = INSTALLDIR
+path_doc        = os.path.join(rep_cata,'Doc')
+exec_acrobat    = "/usr/bin/xpdf"
+savedir         = os.environ['HOME']
+
+
+# OpenTURNS Python module
+OpenTURNS_path="@OpenTURNS_PYTHON_MODULE_DIR@"
+# Choix des catalogues
+sys.path[:0]=[INSTALLDIR, OpenTURNS_path]
index 8da18067d48d73f47bb0eb3cbb5b5768a3cdf5cd..705dc1653684d078b51738335d5eb5d3a28ca216 100755 (executable)
 
 # Modules Eficas
 import prefs
-prefs.code="OPENTURNS_WRAPPER"
+name='prefs_'+prefs.code
+__import__(name)
+
+import sys
 from InterfaceQT4 import eficas_go
 
 eficas_go.lance_eficas(code=prefs.code)
diff --git a/Pmw/CMakeLists.txt b/Pmw/CMakeLists.txt
new file mode 100644 (file)
index 0000000..e59468d
--- /dev/null
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python, texte et images du repertoire et des sous-repertoires (sauf CVS)
+install (
+          FILES
+                __init__.py
+          DESTINATION ${CMAKE_INSTALL_PREFIX}/Pmw
+       )
+add_subdirectory (Pmw_1_2)
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/Pmw/Pmw_1_2/CMakeLists.txt b/Pmw/Pmw_1_2/CMakeLists.txt
new file mode 100644 (file)
index 0000000..d61f544
--- /dev/null
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python, texte et images du repertoire et des sous-repertoires (sauf CVS)
+install ( 
+          FILES
+           __init__.py
+          DESTINATION ${CMAKE_INSTALL_PREFIX}/Pmw/Pmw_1_2
+       )
+install (
+          DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin
+                    ${CMAKE_CURRENT_SOURCE_DIR}/contrib
+                    ${CMAKE_CURRENT_SOURCE_DIR}/demos
+                    ${CMAKE_CURRENT_SOURCE_DIR}/doc
+                    ${CMAKE_CURRENT_SOURCE_DIR}/lib
+                    ${CMAKE_CURRENT_SOURCE_DIR}/tests
+          DESTINATION ${CMAKE_INSTALL_PREFIX}/Pmw/Pmw_1_2
+)
+
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/README b/README
index 4bd7cc4abf873409292dc861a0bf06df0af60261..410e977f4d4be79f58fb01b31cb7692677ec2fbf 100644 (file)
--- a/README
+++ b/README
@@ -2,6 +2,13 @@
 EFICAS est constitué de plusieurs packages Python qui sont
 décrits rapidement ci-dessous.
 
+UiQT4:
+   est le répertoire de l'interface graphique QT4 d'Eficas.
+   Celle-ci doit impérativement être construite avant
+   toute utilisation d'Eficas. Pour cela:
+
+   make -C UiQT4
+
 Noyau:
    est le package de base d'Eficas et du superviseur Aster.
    Il contient les foonctionnalités nécessaires à la création des
@@ -75,5 +82,13 @@ Minicode:
    Les catalogues se trouvent dans le répertoire.
    Pour executer, aller dans le répertoire et taper ./eficas_mini.py
 
-
+OpenTURNS:
+   deux répertoires Study et Wrapper contiennent des scripts pour
+   produire les études d'incertitudes (en python) et les fichiers de
+   description des wrappers.
+   Dans chaque répertoire, un fichier prefs_OPENTURNS_(STUDY|WRAPPER).py 
+   doit être modifié pour signaler à Eficas où se trouve le module
+   python d'Open TURNS (variable OpenTURNS_path).
+   Pour executer, aller dans le répertoire et taper ./qtEficas_openturns_study.py
+   ou bien ./qtEficas_openturns_wrapper.py
 
diff --git a/Sep/CMakeLists.txt b/Sep/CMakeLists.txt
new file mode 100644 (file)
index 0000000..6088508
--- /dev/null
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+
+install ( FILES 
+              catalogues_sep.ini  configuration_SEP.py  editeur.ini  prefs.py      
+              properties.py    sdistSEP.py     SEP_Cata_V1.py
+              __init__.py  prefs_SEP.py  qtEficas_SEP.py  SEP_Cata_V0.py  style.py
+         DESTINATION ${CMAKE_INSTALL_PREFIX}/Sep
+        )
+
+
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/Sep/SEP_Cata_V0.py b/Sep/SEP_Cata_V0.py
new file mode 100644 (file)
index 0000000..9a0097b
--- /dev/null
@@ -0,0 +1,33 @@
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'SEP',
+                 execmodul = None,
+                # regles = ( AU_MOINS_UN ( 'M_TUBE','MAILLAGE_COUDE','CHARGE_LIMITE ), ),
+                 regles = ( AU_MOINS_UN ( 'S_EP_INTERNE',), ),
+                 ) # Fin JDC_CATA
+#
+
+S_EP_INTERNE= MACRO (nom       = 'S_EP_INTERNE',
+              op        = None,
+              sd_prod   = None,
+              reentrant = 'n',
+              UIinfo    = {"groupes":("Outils métier",)},
+              fr        = "Sous epaisseur  ",
+              dir_name  = SIMP(statut='o', typ='TXM',),
+              methode   = SIMP(statut='o', typ='TXM',into=('generatrices','tortue',),),
+              PARA_GEOM = FACT( statut='o',
+                               max=1,
+                               r_ext=SIMP(statut='o', typ='R', defaut=228.6,val_min=100,val_max=300),
+                               unite=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+                               ep_nominale=SIMP(statut='o', typ='R', defaut=22.000),   
+                               ),
+)
+
+
diff --git a/Sep/SEP_Cata_V1.py b/Sep/SEP_Cata_V1.py
new file mode 100644 (file)
index 0000000..65bab21
--- /dev/null
@@ -0,0 +1,127 @@
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'SEP',
+                execmodul = None,
+                # regles=(AU_MOINS_UN('SOUS_EPAISSEUR_INTERNE','SOUS_EPAISSEUR_EXTERNE',),),
+                  regles=( UN_PARMI('S_EP_INTERNE','MACRO_OUTIL1','MACRO_OUTIL2'),),
+                       )# Fin JDC_CATA
+#
+
+
+S_EP_INTERNE= MACRO (nom       = 'S_EP_INTERNE',
+              op        = None,
+              sd_prod   = None,
+              reentrant = 'n',
+              UIinfo    = {"groupes":("Outils métier",)},
+              fr        = "sous epaisseur  ",
+              dir_name  = SIMP(statut='o', typ='TXM',),
+              TYPE_SEP = SIMP(statut='o', typ='TXM',into=('TUBE_SOUS_EPAISSEUR','COUDE_SOUS_EPAISSEUR',)),
+              b_tube_sous_epaisseur =BLOC(condition = "TYPE_SEP == 'TUBE_SOUS_EPAISSEUR' ",
+              regles = (AU_MOINS_UN('MAIL_TUBE','CHARGE_LIMITE')),
+              MAIL_TUBE = FACT( statut='f',max='**',
+            fr        = "Parametres maillage du tube  ",
+            unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+                               r_ext=SIMP(statut='o', typ='R', defaut=228.6,val_min=100,val_max=300, fr="rayon exterieur du tube"),
+                          ep_nominale=SIMP(statut='o', typ='R', defaut=22.0, fr="epaisseur nominale du tube sans sous epaisseur"),
+            nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+            nb_seg_transition=SIMP(statut='o', typ='I', defaut=4, fr="nombre de segments dans longueur de transition"),
+            nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans la longueur des génératrices dans la zone de sous épaisseur"),
+            petite_distance=SIMP(statut='o', typ='R', defaut=100.0, fr="distance entre deux abscisses de points de mesure au dessous de laquelle on discrétise avec nb_seg_petites_distances au lieu de nb_seg_generatrices"),
+            nb_seg_petites_distances=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans les aretes dont la longueur est inferieur a petite distance"),
+            nb_seg_arc=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans l'arc du tube entre deux generatrices"),
+            nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaisseur du tube"),
+            critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="Critère de rafinement de maillage"),
+                                          ),
+            CHARGE_LIMITE = FACT( statut='f',max='**',
+            fr        = "Parametres pour calcul de charge limite  ",
+            unite_mem=SIMP(statut='o', typ='TXM', defaut='Mo',into=('Mo',),),
+            memoire=SIMP(statut='o', typ='R', defaut=4096.,val_min=4096.,val_max=8000.),
+            unite_temps=SIMP(statut='o', typ='TXM', defaut='h',into=('h',),),
+            temps=SIMP(statut='o', typ='R', defaut=50.),
+            version_aster=SIMP(statut='o', typ='TXM', defaut='STA8',into=('STA8','STA9','STA9_mpi'),),
+            unite_sig=SIMP(statut='o', typ='TXM', defaut='MPa',into=('PA','MPa'),),
+            E=SIMP(statut='o', typ='R', defaut=200000., fr="Module d'Young"),
+            NU=SIMP(statut='o', typ='R', defaut=0.3, fr="coefficient de poisson"),
+            SY=SIMP(statut='o', typ='R', defaut=98.7, fr="limite d'elasticite"),
+            D_SIGM_EPSI=SIMP(statut='o', typ='R', defaut=100.0, fr="pente de la courbe d'ecrouissage"),
+                               ),
+            ),
+           b_coude_sous_epaisseur =BLOC(condition = "TYPE_SEP == 'COUDE_SOUS_EPAISSEUR' ",
+              regles = (AU_MOINS_UN('MAIL_COUDE','CHARGE_LIMITE')),
+              MAIL_COUDE = FACT( statut='f',max='**',
+            fr        = "Parametres maillage du coude  ",
+            unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+            r_coude=SIMP(statut='o', typ='R', defaut=381.,val_min=100,val_max=500,fr="rayon du coude"),
+            r_ext=SIMP(statut='o', typ='R', defaut=136.5,val_min=100,val_max=200,fr="rayon exterieur"),
+            ep_nominale=SIMP(statut='o', typ='R', defaut=15.1,fr="epaisseur nominale sans sous epaisseur"),
+            angle_coude=SIMP(statut='o', typ='R', defaut=90,fr="angle du coude"),
+            orientation_coude=SIMP(statut='o', typ='TXM', defaut='D',into=('D','G'),fr="orientation du coude"),
+            longueur_prolongement_amont=SIMP(statut='o', typ='R', defaut=150.,fr="longueur du prolongement amont"),
+            longueur_prolongement_aval=SIMP(statut='o', typ='R', defaut=150.,fr="longueur du prologenment aval"),
+            pas_mesure=SIMP(statut='o', typ='I', defaut=80,fr="pas de la mesure"),
+            debut_mesure=SIMP(statut='o', typ='R', defaut=40.,fr="distance de la premiere mesure"),
+            angle_mesure=SIMP(statut='o', typ='R', defaut=45.,fr="angle entre deux generatrices"),
+            nb_seg_prolongement_amont = SIMP(statut='o', typ='I', defaut=6, fr="nombre de segments dans la longueur de prolongement amont"),
+            nb_seg_prolongement_aval  = SIMP(statut='o', typ='I', defaut=6, fr="nombre de segments dans la longueur de prolongement aval"),
+            nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+            nb_seg_transition=SIMP(statut='o', typ='I', defaut=4, fr="nombre de segments dans longueur de transition"),
+            nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans la longueur des génératrices dans la zone de sous épaisseur"),
+            nb_seg_arc=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans l'arc du coude entre deux generatrices"),
+            nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaissuer"),
+            critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="Critère de rafinement de maillage"),
+                               ),
+            CHARGE_LIMITE = FACT( statut='f',max='**',
+            fr        = "Parametres pour calcul de charge limite  ",
+            unite_mem=SIMP(statut='o', typ='TXM', defaut='Mo',into=('Mo',),),
+            memoire=SIMP(statut='o', typ='R', defaut=4096,val_min=4096,val_max=8000),
+            unite_temps=SIMP(statut='o', typ='TXM', defaut='h',into=('h',),),
+            temps=SIMP(statut='o', typ='R', defaut=50.),
+            version_aster=SIMP(statut='o', typ='TXM', defaut='STA8',into=('STA8','STA9','STA9_mpi'),),
+            unite_sig=SIMP(statut='o', typ='TXM', defaut='MPa',into=('PA','MPa'),),
+            E=SIMP(statut='o', typ='R', defaut=200000, fr="Module d'Young"),
+            NU=SIMP(statut='o', typ='R', defaut=0.3, fr="coefficient de poisson"),
+            SY=SIMP(statut='o', typ='R', defaut=98.7, fr="limite d'elasticite"),
+            D_SIGM_EPSI=SIMP(statut='o', typ='R', defaut=100.0, fr="pente de la courbe d'ecrouissage"),
+                               ),
+            ),
+)
+
+
+MACRO_OUTIL1= MACRO (nom       = 'MACRO_OUTIL1',
+              op        = None,
+              sd_prod   = None,
+              reentrant = 'n',
+              UIinfo    = {"groupes":("Outils métier",)},
+              fr        = "Outil 1",
+              dir_name  = SIMP(statut='o', typ='TXM',),
+              PARA_GEOM = FACT( statut='o',
+                               max=1,
+                               r_ext=SIMP(statut='o', typ='R', defaut=228.6,val_min=100,val_max=300),
+                               unite=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+                               ep_nominale=SIMP(statut='o', typ='R', defaut=22.000),   
+                               ),
+)
+
+MACRO_OUTIL2= MACRO (nom       = 'MACRO_OUTIL2',
+              op        = None,
+              sd_prod   = None,
+              reentrant = 'n',
+              UIinfo    = {"groupes":("Outils métier",)},
+              fr        = "Outil 2",
+              dir_name  = SIMP(statut='o', typ='TXM',),
+              PARA_GEOM = FACT( statut='o',
+                               max=1,
+                               r_ext=SIMP(statut='o', typ='R', defaut=228.6,val_min=100,val_max=300),
+                               unite=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+                               ep_nominale=SIMP(statut='o', typ='R', defaut=22.000),   
+                               ),
+)
+
diff --git a/Sep/SEP_Cata_V1_2.py b/Sep/SEP_Cata_V1_2.py
new file mode 100644 (file)
index 0000000..3f1c771
--- /dev/null
@@ -0,0 +1,127 @@
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'SEP',
+                execmodul = None,
+                # regles=(AU_MOINS_UN('SOUS_EPAISSEUR_INTERNE','SOUS_EPAISSEUR_EXTERNE',),),
+                  regles=( UN_PARMI('S_EP_INTERNE'),),
+                       )# Fin JDC_CATA
+#
+
+
+S_EP_INTERNE= MACRO (nom       = 'S_EP_INTERNE',
+              op        = None,
+              sd_prod   = None,
+              reentrant = 'n',
+              UIinfo    = {"groupes":("Outils métier",)},
+              fr        = "sous epaisseur  ",
+              dir_name  = SIMP(statut='o', typ='TXM',),
+              TYPE_EXEC = SIMP(statut='o', typ='TXM',into=('MAILLAGE','CALCUL',)),
+              TYPE_SEP = SIMP(statut='o', typ='TXM',into=('TUBE_SOUS_EPAISSEUR','COUDE_SOUS_EPAISSEUR','TEST_SOUS_EPAISSEUR')),
+              b_tube_sous_epaisseur =BLOC(condition = "TYPE_SEP == 'TUBE_SOUS_EPAISSEUR' ",
+              regles = (AU_MOINS_UN('MAIL_TUBE','CHARGE_LIMITE')),
+              MAIL_TUBE = FACT( statut='f',max='**',
+            fr        = "Parametres maillage du tube  ",
+            unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+                               r_ext=SIMP(statut='o', typ='R', defaut=228.6,val_min=100,val_max=300, fr="rayon exterieur du tube"),
+                          ep_nominale=SIMP(statut='o', typ='R', defaut=22.0, fr="epaisseur nominale du tube sans sous epaisseur"),
+            nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+            nb_seg_transition=SIMP(statut='o', typ='I', defaut=4, fr="nombre de segments dans longueur de transition"),
+            nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans la longueur des génératrices dans la zone de sous épaisseur"),
+            petite_distance=SIMP(statut='o', typ='R', defaut=100.0, fr="distance entre deux abscisses de points de mesure au dessous de laquelle on discrétise avec nb_seg_petites_distances au lieu de nb_seg_generatrices"),
+            nb_seg_petites_distances=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans les aretes dont la longueur est inferieur a petite distance"),
+            nb_seg_arc=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans l'arc du tube entre deux generatrices"),
+            nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaisseur du tube"),
+            critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="Critère de rafinement de maillage"),
+                                          ),
+            CHARGE_LIMITE = FACT( statut='f',max='**',
+            fr        = "Parametres pour calcul de charge limite  ",
+            unite_mem=SIMP(statut='o', typ='TXM', defaut='Mo',into=('Mo',),),
+            memoire=SIMP(statut='o', typ='I', defaut=2000,val_min=128,val_max=8000),
+            unite_temps=SIMP(statut='o', typ='TXM', defaut='h',into=('h',),),
+            temps=SIMP(statut='o', typ='R', defaut=50.),
+            version_aster=SIMP(statut='o', typ='TXM', defaut='STA8',into=('STA8','STA9','STA9_mpi'),),
+            unite_sig=SIMP(statut='o', typ='TXM', defaut='MPa',into=('PA','MPa'),),
+            E=SIMP(statut='o', typ='R', defaut=200000., fr="Module d'Young"),
+            NU=SIMP(statut='o', typ='R', defaut=0.3, fr="coefficient de poisson"),
+            SY=SIMP(statut='o', typ='R', defaut=98.7, fr="limite d'elasticite"),
+            D_SIGM_EPSI=SIMP(statut='o', typ='R', defaut=100.0, fr="pente de la courbe d'ecrouissage"),
+                               ),
+            ),
+           b_coude_sous_epaisseur =BLOC(condition = "TYPE_SEP == 'COUDE_SOUS_EPAISSEUR' ",
+              regles = (AU_MOINS_UN('MAIL_COUDE','CHARGE_LIMITE')),
+              MAIL_COUDE = FACT( statut='f',max='**',
+            fr        = "Parametres maillage du coude  ",
+            unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+            r_coude=SIMP(statut='o', typ='R', defaut=381.,val_min=100,val_max=500,fr="rayon du coude"),
+            r_ext=SIMP(statut='o', typ='R', defaut=136.5,val_min=100,val_max=200,fr="rayon exterieur"),
+            ep_nominale=SIMP(statut='o', typ='R', defaut=15.1,fr="epaisseur nominale sans sous epaisseur"),
+            angle_coude=SIMP(statut='o', typ='R', defaut=90,fr="angle du coude"),
+            orientation_coude=SIMP(statut='o', typ='TXM', defaut='D',into=('D','G'),fr="orientation du coude"),
+            longueur_prolongement_amont=SIMP(statut='o', typ='R', defaut=150.,fr="longueur du prolongement amont"),
+            longueur_prolongement_aval=SIMP(statut='o', typ='R', defaut=150.,fr="longueur du prologenment aval"),
+            pas_mesure=SIMP(statut='o', typ='I', defaut=80,fr="pas de la mesure"),
+            debut_mesure=SIMP(statut='o', typ='R', defaut=40.,fr="distance de la premiere mesure"),
+            angle_mesure=SIMP(statut='o', typ='R', defaut=45.,fr="angle entre deux generatrices"),
+            nb_seg_prolongement_amont = SIMP(statut='o', typ='I', defaut=6, fr="nombre de segments dans la longueur de prolongement amont"),
+            nb_seg_prolongement_aval  = SIMP(statut='o', typ='I', defaut=6, fr="nombre de segments dans la longueur de prolongement aval"),
+            nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+            nb_seg_transition=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans longueur de transition"),
+            nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=25, fr="nombre de segments dans la longueur des génératrices dans la zone de sous épaisseur"),
+            nb_seg_arc=SIMP(statut='o', typ='I', defaut=7, fr="nombre de segments dans l'arc du coude entre deux generatrices"),
+            nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaissuer"),
+            critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="Critère de rafinement de maillage"),
+                               ),
+            CHARGE_LIMITE = FACT( statut='f',max='**',
+            fr        = "Parametres pour calcul de charge limite  ",
+            unite_mem=SIMP(statut='o', typ='TXM', defaut='Mo',into=('Mo',),),
+            memoire=SIMP(statut='o', typ='I', defaut=2000,val_min=128,val_max=8000),
+            unite_temps=SIMP(statut='o', typ='TXM', defaut='h',into=('h',),),
+            temps=SIMP(statut='o', typ='R', defaut=50.),
+            version_aster=SIMP(statut='o', typ='TXM', defaut='STA8',into=('STA8','STA9','STA9_mpi'),),
+            unite_sig=SIMP(statut='o', typ='TXM', defaut='MPa',into=('PA','MPa'),),
+            E=SIMP(statut='o', typ='R', defaut=200000, fr="Module d'Young"),
+            NU=SIMP(statut='o', typ='R', defaut=0.3, fr="coefficient de poisson"),
+            SY=SIMP(statut='o', typ='R', defaut=98.7, fr="limite d'elasticite"),
+            D_SIGM_EPSI=SIMP(statut='o', typ='R', defaut=100.0, fr="pente de la courbe d'ecrouissage"),
+                               ),
+            ),
+            b_test_sous_epaisseur =BLOC(condition = "TYPE_SEP == 'TEST_SOUS_EPAISSEUR' ",
+              regles = (AU_MOINS_UN('MAIL_TUBE','CHARGE_LIMITE')),
+              MAIL_TUBE = FACT( statut='f',max='**',
+            fr        = "Parametres maillage du tube  ",
+            unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+                               r_ext=SIMP(statut='o', typ='R', defaut=228.6,val_min=100,val_max=300, fr="rayon exterieur du tube"),
+                          ep_nominale=SIMP(statut='o', typ='R', defaut=22.0, fr="epaisseur nominale du tube sans sous epaisseur"),
+            nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+            nb_seg_transition=SIMP(statut='o', typ='I', defaut=4, fr="nombre de segments dans longueur de transition"),
+            nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans la longueur des génératrices dans la zone de sous épaisseur"),
+            petite_distance=SIMP(statut='o', typ='R', defaut=100.0, fr="distance entre deux abscisses de points de mesure au dessous de laquelle on discrétise avec nb_seg_petites_distances au lieu de nb_seg_generatrices"),
+            nb_seg_petites_distances=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans les aretes dont la longueur est inferieur a petite distance"),
+            nb_seg_arc=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans l'arc du tube entre deux generatrices"),
+            nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaisseur du tube"),
+            critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="Critère de rafinement de maillage"),
+                                          ),
+            CHARGE_LIMITE = FACT( statut='f',max='**',
+            fr        = "Parametres pour calcul de charge limite  ",
+            unite_mem=SIMP(statut='o', typ='TXM', defaut='Mo',into=('Mo',),),
+            memoire=SIMP(statut='o', typ='I', defaut=128,val_min=128,val_max=8000),
+            unite_temps=SIMP(statut='o', typ='TXM', defaut='h',into=('h',),),
+            temps=SIMP(statut='o', typ='R', defaut=50.),
+            version_aster=SIMP(statut='o', typ='TXM', defaut='STA8',into=('STA8','STA9','STA9_mpi'),),
+            unite_sig=SIMP(statut='o', typ='TXM', defaut='MPa',into=('PA','MPa'),),
+            E=SIMP(statut='o', typ='R', defaut=200000., fr="Module d'Young"),
+            NU=SIMP(statut='o', typ='R', defaut=0.3, fr="coefficient de poisson"),
+            SY=SIMP(statut='o', typ='R', defaut=98.7, fr="limite d'elasticite"),
+            D_SIGM_EPSI=SIMP(statut='o', typ='R', defaut=100.0, fr="pente de la courbe d'ecrouissage"),
+                               ),
+            )
+)
+
diff --git a/Sep/SEP_Cata_V1_3.py b/Sep/SEP_Cata_V1_3.py
new file mode 100644 (file)
index 0000000..2895dbb
--- /dev/null
@@ -0,0 +1,126 @@
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'SEP',
+                execmodul = None,
+               # regles=(AU_MOINS_UN('STRUCTURE_SIMPLE','STRUCTURE_COMPOSEE',),),
+                regles=(AU_MOINS_UN('STRUCTURE_SIMPLE',),),
+                       )# Fin JDC_CATA
+#
+
+
+STRUCTURE_SIMPLE= MACRO (nom       = 'STRUCTURE_SIMPLE',
+              op        = None,
+              sd_prod   = None,
+              reentrant = 'n',
+              UIinfo    = {"groupes":("Outils métier",)},
+              fr        = "sous epaisseur  ",
+              dir_name  = SIMP(statut='o', typ='TXM',),
+              
+              MAILLAGE           = SIMP(statut='o', typ='TXM',into=('OUI', 'NON')),
+              CHARGE_LIMITE = SIMP(statut='o', typ='TXM',into=('OUI', 'NON')),
+              
+                  lecture_maillage = BLOC(condition = "(MAILLAGE == 'NON') and (CHARGE_LIMITE=='OUI') ",
+                                              LECTURE_MAILLAGE  = FACT( statut='o',max='**',
+                                                               FICHIER    =SIMP(statut='o',typ='Fichier',),
+                                                               FORMAT   =SIMP(statut='f',typ='TXM',defaut="ASTER",into=("ASTER","MED"),
+                                                               fr="Format du fichier : ASTER ou MED.",),
+                                                               NOM         = SIMP(statut='f',typ='TXM',
+                                                               fr="Nom du maillage dans le fichier MED.",),),
+                                                      ),
+                                                 
+                  execution_maillage = BLOC(condition = "MAILLAGE == 'OUI' ",
+                                         
+                        TYPE_SEP = SIMP(statut='o', typ='TXM',into=('TUBE_SOUS_EP_INTERNE','TUBE_SOUS_EP_EXTERNE','COUDE_SOUS_EP_INTERNE','COUDE_SOUS_EP_EXTERNE')),
+                                       
+                         b_tube_sous_epaisseur =BLOC(condition="(TYPE_SEP=='TUBE_SOUS_EP_INTERNE') or (TYPE_SEP=='TUBE_SOUS_EP_EXTERNE') ",
+                            regles=(UN_PARMI('TUBE_SOUS_EP_INTERNE','TUBE_SOUS_EP_EXTERNE'),),
+                            MAIL_TUBE = FACT( statut='f',max='**',
+                                        fr        = "Parametres maillage du tube  ",
+                                        points_de_mesure = FACT( statut='o',max='**',
+                                                                             FICHIER =SIMP(statut='o',typ='Fichier',
+                                                                                                       fr="Format du fichier : CSV.",),
+                                                                              FORMAT =SIMP(statut='f',typ='TXM',defaut="CSV",into=("CSV"),
+                                                                                                       fr="Format du fichier : CSV",),
+                                                                                                       ),
+                                        unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+                                        r_ext=SIMP(statut='o', typ='R', defaut=228.6,val_min=100,val_max=300, fr="rayon exterieur du tube"),
+                                        ep_nominale=SIMP(statut='o', typ='R', defaut=22.0, fr="epaisseur nominale du tube sans sous epaisseur"),
+                                        nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+                                        nb_seg_transition=SIMP(statut='o', typ='I', defaut=4, fr="nombre de segments dans longueur de transition"),
+                                        nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans la longueur des generatrices dans la zone de sous épaisseur"),
+                                        petite_distance=SIMP(statut='o', typ='R', defaut=100.0, fr="distance entre deux abscisses de points de mesure au dessous de laquelle on discrétise avec nb_seg_petites_distances au lieu de nb_seg_generatrices"),
+                                        nb_seg_petites_distances=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans les aretes dont la longueur est inferieur a petite distance"),
+                                        nb_seg_arc=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans l'arc du tube entre deux generatrices"),
+                                        nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaisseur du tube"),
+                                        critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="Critère de raffinement de maillage"),
+                                          ),
+                            INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+                                                   ),
+
+
+                         b_coude_sous_epaisseur =BLOC(condition="(TYPE_SEP=='COUDE_SOUS_EP_INTERNE') or (TYPE_SEP=='COUDE_SOUS_EP_EXTERNE') ",
+                            regles=(UN_PARMI('COUDE_SOUS_EP_INTERNE','COUDE_SOUS_EP_EXTERNE'),),
+                            MAIL_COUDE = FACT( statut='f',max='**',
+                                        fr        = "Parametres maillage du coude  ",
+                                        points_de_mesure = FACT( statut='o',max='**',
+                                                                              FICHIER =SIMP(statut='o',typ='Fichier',
+                                                                                                       fr="Format du fichier : CSV.",),
+                                                                              FORMAT =SIMP(statut='f',typ='TXM',defaut="CSV",into=("CSV"),
+                                                                                                       fr="Format du fichier : CSV",),
+                                                                                                       ),
+                                        unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+                                        r_coude=SIMP(statut='o', typ='R', defaut=381.,val_min=100,val_max=500,fr="rayon du coude"),
+                                        r_ext=SIMP(statut='o', typ='R', defaut=136.5,val_min=100,val_max=200,fr="rayon exterieur"),
+                                        ep_nominale=SIMP(statut='o', typ='R', defaut=15.1,fr="epaisseur nominale sans sous epaisseur"),
+                                        angle_coude=SIMP(statut='o', typ='R', defaut=90,fr="angle du coude"),
+                                        orientation_coude=SIMP(statut='o', typ='TXM', defaut='D',into=('D','G'),fr="orientation du coude"),
+                                        longueur_prolongement_amont=SIMP(statut='o', typ='R', defaut=150.,fr="longueur du prolongement amont"),
+                                        longueur_prolongement_aval=SIMP(statut='o', typ='R', defaut=150.,fr="longueur du prologenment aval"),
+                                        pas_mesure=SIMP(statut='o', typ='I', defaut=80,fr="pas de la mesure"),
+                                        debut_mesure=SIMP(statut='o', typ='R', defaut=40.,fr="distance de la premiere mesure"),
+                                        angle_mesure=SIMP(statut='o', typ='R', defaut=45.,fr="angle entre deux generatrices"),
+                                        nb_seg_prolongement_amont = SIMP(statut='o', typ='I', defaut=6, fr="nombre de segments dans la longueur de prolongement amont"),
+                                        nb_seg_prolongement_aval  = SIMP(statut='o', typ='I', defaut=6, fr="nombre de segments dans la longueur de prolongement aval"),
+                                        nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+                                        nb_seg_transition=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans longueur de transition"),
+                                        nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=25, fr="nombre de segments dans la longueur des generatrices dans la zone de sous épaisseur"),
+                                        nb_seg_arc=SIMP(statut='o', typ='I', defaut=7, fr="nombre de segments dans l'arc du coude entre deux generatrices"),
+                                        nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaissuer"),
+                                        critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="critère de rafinement de maillage"),
+                                         
+                                              ),
+                            INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+                                                   ),
+                                              ),
+                             
+                            b_charge_limite_non=BLOC(condition = "CHARGE_LIMITE == 'NON' ",
+                                                INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+                                                        ),
+                            b_charge_limite_oui=BLOC(condition = "CHARGE_LIMITE == 'OUI' ",
+                                                CHARGE_LIMITE = FACT( statut='f',max='**',
+                                                    fr        = "Parametres pour calcul de charge limite  ",
+                                                    unite_mem=SIMP(statut='o', typ='TXM', defaut='Mo',into=('Mo',),),
+                                                    memoire=SIMP(statut='o', typ='I', defaut=2000,val_min=128,val_max=8000),
+                                                    unite_temps=SIMP(statut='o', typ='TXM', defaut='h',into=('h',),),
+                                                    temps=SIMP(statut='o', typ='R', defaut=50.),
+                                                    version_aster=SIMP(statut='o', typ='TXM', defaut='STA10',into=('STA9','STA10'),),
+                                                    unite_sig=SIMP(statut='o', typ='TXM', defaut='MPa',into=('PA','MPa'),),
+                                                    E=SIMP(statut='o', typ='R', defaut=200000., fr="Module d'Young"),
+                                                    NU=SIMP(statut='o', typ='R', defaut=0.3, fr="coefficient de poisson"),
+                                                    SY=SIMP(statut='o', typ='R', defaut=98.7, fr="limite d'elasticite"),
+                                                    D_SIGM_EPSI=SIMP(statut='o', typ='R', defaut=100.0, fr="pente de la courbe d'ecrouissage"),
+                                                                    ),
+                                                INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+                                                         ),         
+           
+            
+)
+
diff --git a/Sep/SEP_Cata_V1_4.py b/Sep/SEP_Cata_V1_4.py
new file mode 100644 (file)
index 0000000..62a3263
--- /dev/null
@@ -0,0 +1,132 @@
+## -*- coding: utf-8 -*-
+#
+## --------------------------------------------------
+## debut entete
+## --------------------------------------------------
+#
+from Accas import *
+
+#
+#CONTEXT.debug = 1
+JdC = JDC_CATA ( code = 'SEP',
+                execmodul = None,
+               # regles=(AU_MOINS_UN('STRUCTURE_SIMPLE','STRUCTURE_COMPOSEE',),),
+                regles=(AU_MOINS_UN('STRUCTURE_SIMPLE',),),
+                       )# Fin JDC_CATA
+#
+
+
+STRUCTURE_SIMPLE= MACRO (nom       = 'STRUCTURE_SIMPLE',
+              op        = None,
+              sd_prod   = None,
+              reentrant = 'n',
+              UIinfo    = {"groupes":("Outils métier",)},
+              fr        = "sous epaisseur  ",
+              dir_name  = SIMP(statut='o', typ='TXM',),
+              
+              CHARGE_LIMITE     = SIMP(statut='o', typ='TXM',into=('OUI', 'NON')),
+              
+              TYPE_SEP          = SIMP(statut='o', typ='TXM',into=('TUBE_SOUS_EP_INTERNE','COUDE_SOUS_EP_INTERNE')),
+              
+                         
+                b_tube_sous_epaisseur =BLOC(condition="(TYPE_SEP=='TUBE_SOUS_EP_INTERNE') ",
+                         
+                           points_de_mesure = FACT( statut='o',max='**',
+                                                        FICHIER =SIMP(statut='o',typ='Fichier',
+                                                                                 fr="Format du fichier : CSV.",),
+                                                                                 ), 
+                         
+                            
+                           MAIL_TUBE = FACT( statut='f',max='**',
+                                    fr        = "Parametres maillage du tube  ",
+
+                                    unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+                                    r_ext=SIMP(statut='o', typ='R', defaut=228.6,val_min=100,val_max=300, fr="rayon exterieur du tube"),
+                                    ep_nominale=SIMP(statut='o', typ='R', defaut=22.0, fr="epaisseur nominale du tube sans sous epaisseur"),
+                                    nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+                                    nb_seg_transition=SIMP(statut='o', typ='I', defaut=4, fr="nombre de segments dans longueur de transition"),
+                                    nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans la longueur des generatrices dans la zone de sous épaisseur"),
+                                    petite_distance=SIMP(statut='o', typ='R', defaut=100.0, fr="distance entre deux abscisses de points de mesure au dessous de laquelle on discrétise avec nb_seg_petites_distances au lieu de nb_seg_generatrices"),
+                                    nb_seg_petites_distances=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans les aretes dont la longueur est inferieur a petite distance"),
+                                    nb_seg_arc=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans l'arc du tube entre deux generatrices"),
+                                    nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaisseur du tube"),
+                                    critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="Critère de raffinement de maillage"),
+                                      ),
+                           INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+                                                   ),
+
+
+                b_coude_sous_epaisseur =BLOC(condition="(TYPE_SEP=='COUDE_SOUS_EP_INTERNE') ",
+                            
+                            points_de_mesure = FACT( statut='o',max='**',
+                                                        FICHIER =SIMP(statut='o',typ='Fichier',
+                                                                                 fr="Format du fichier : CSV.",),
+                                                        FORMAT =SIMP(statut='f',typ='TXM',defaut="CSV",into=("CSV"),
+                                                                                 fr="Format du fichier : CSV",),
+                                                                                 ),
+                            MAIL_COUDE = FACT( statut='f',max='**',
+                                        fr        = "Parametres maillage du coude  ",
+
+                                        unite_longueur=SIMP(statut='o', typ='TXM', defaut='mm',into=('mm',),),
+                                        r_coude=SIMP(statut='o', typ='R', defaut=381.,val_min=100,val_max=500,fr="rayon du coude"),
+                                        r_ext=SIMP(statut='o', typ='R', defaut=136.5,val_min=100,val_max=200,fr="rayon exterieur"),
+                                        ep_nominale=SIMP(statut='o', typ='R', defaut=15.1,fr="epaisseur nominale sans sous epaisseur"),
+                                        angle_coude=SIMP(statut='o', typ='R', defaut=90,fr="angle du coude"),
+                                        orientation_coude=SIMP(statut='o', typ='TXM', defaut='D',into=('D','G'),fr="orientation du coude"),
+                                        longueur_prolongement_amont=SIMP(statut='o', typ='R', defaut=150.,fr="longueur du prolongement amont"),
+                                        longueur_prolongement_aval=SIMP(statut='o', typ='R', defaut=150.,fr="longueur du prologenment aval"),
+                                        pas_mesure=SIMP(statut='o', typ='I', defaut=80,fr="pas de la mesure"),
+                                        debut_mesure=SIMP(statut='o', typ='R', defaut=40.,fr="distance de la premiere mesure"),
+                                        angle_mesure=SIMP(statut='o', typ='R', defaut=45.,fr="angle entre deux generatrices"),
+                                        nb_seg_prolongement_amont = SIMP(statut='o', typ='I', defaut=6, fr="nombre de segments dans la longueur de prolongement amont"),
+                                        nb_seg_prolongement_aval  = SIMP(statut='o', typ='I', defaut=6, fr="nombre de segments dans la longueur de prolongement aval"),
+                                        nb_seg_amortissement=SIMP(statut='o', typ='I', defaut=11, fr="nombre de segments dans la longueur d'amortissement"),
+                                        nb_seg_transition=SIMP(statut='o', typ='I', defaut=5, fr="nombre de segments dans longueur de transition"),
+                                        nb_seg_generatrices=SIMP(statut='o', typ='I', defaut=25, fr="nombre de segments dans la longueur des generatrices dans la zone de sous épaisseur"),
+                                        nb_seg_arc=SIMP(statut='o', typ='I', defaut=7, fr="nombre de segments dans l'arc du coude entre deux generatrices"),
+                                        nb_seg_ep=SIMP(statut='o', typ='I', defaut=3, fr="nombre de segments dans l'epaissuer"),
+                                        critere_dist_radial=SIMP(statut='o', typ='R', defaut=0.5, fr="critère de rafinement de maillage"),
+                                         
+                                              ),
+                            INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+                                                   ),
+                                              
+                             
+                            b_charge_limite_non=BLOC(condition = "CHARGE_LIMITE == 'NON' ",
+                                                INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+                                                        ),
+                            b_charge_limite_oui=BLOC(condition = "CHARGE_LIMITE == 'OUI' ",
+                              
+                              TYPE_CHARGE_LIMITE= SIMP(statut='o', typ='TXM',into=('CHARGE_LIMITE_INF','CHARGE_LIMITE_SUP')),
+                                                
+                                                PARAMETRES = FACT( statut='o',max='**',
+                                                    fr        = "Parametres pour calcul de charge limite  ",
+                                                    
+                                                    unite_mem=SIMP(statut='o', typ='TXM', defaut='Mo',into=('Mo',),),
+                                                    memoire=SIMP(statut='o', typ='I', defaut=2000,val_min=128,val_max=8000),
+                                                    unite_temps=SIMP(statut='o', typ='TXM', defaut='h',into=('h',),),
+                                                    temps=SIMP(statut='o', typ='R', defaut=50.),
+                                                    machine=SIMP(statut='o', typ='TXM', defaut='locale',into=('locale','distante'),),
+                                                    unite_sig=SIMP(statut='o', typ='TXM', defaut='MPa',into=('Pa','MPa'),),
+                                                    
+                                                    E =SIMP(statut='o', typ='R', defaut=200000., fr="Module d'Young"),
+                                                    NU=SIMP(statut='o', typ='R', defaut=0.3    , fr="coefficient de poisson"),
+                                                    SY=SIMP(statut='o', typ='R', defaut=98.7   , fr="limite d'elasticite"),
+                                                                    ),
+                                                
+                                                CHARGE_LIMITE_INF = BLOC(condition="(TYPE_CHARGE_LIMITE =='CHARGE_LIMITE_INF') ",
+                                                  FICHIER =SIMP(statut='o',typ='Fichier',
+                                                                                 fr="Format du fichier : .COMM",),
+                                                                                 ),                    
+                                                
+                                                CHARGE_LIMITE_SUP = BLOC(condition="(TYPE_CHARGE_LIMITE =='CHARGE_LIMITE_SUP') ",
+                                                  FICHIER =SIMP(statut='o',typ='Fichier',
+                                                                                 fr="Format du fichier : .COMM",),
+                                                                                 ),                    
+                                                                    
+                                                INFO = SIMP(statut='f',typ='I',defaut=1,into=(0,1,2)),
+                                                         ),         
+           
+            
+)
+
diff --git a/Sep/__init__.py b/Sep/__init__.py
new file mode 100644 (file)
index 0000000..40a96af
--- /dev/null
@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-
diff --git a/Sep/catalogues_sep.ini b/Sep/catalogues_sep.ini
new file mode 100644 (file)
index 0000000..ca1eb02
--- /dev/null
@@ -0,0 +1,14 @@
+# Choix des catalogues
+import os
+#rep_cata=os.path.dirname(os.path.abspath(__file__))
+rep_cata=os.getcwd()
+
+catalogues = (
+  #('SEP','V0',os.path.join(rep_cata,'SEP_Cata_V0.py'),'SEP','SEP'),
+  #('SEP','V1',os.path.join(rep_cata,'SEP_Cata_V1.py'),'SEP','SEP'),
+  #('SEP','V1_1',os.path.join(rep_cata,'SEP_Cata_V1_1.py'),'SEP','SEP'),
+  #('SEP','V1_2',os.path.join(rep_cata,'SEP_Cata_V1_2.py'),'SEP','SEP'),
+  #  ('SEP','V1_3',os.path.join(rep_cata,'SEP_Cata_V1_3.py'),'SEP','SEP'),
+     ('SEP','V1',os.path.join(rep_cata,'SEP_Cata_V0_1.py'),'SEP','SEP'),
+)
+
diff --git a/Sep/configuration_SEP.py b/Sep/configuration_SEP.py
new file mode 100644 (file)
index 0000000..d7518db
--- /dev/null
@@ -0,0 +1,193 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+"""
+    Ce module sert pour charger les paramètres de configuration d'EFICAS
+"""
+# Modules Python
+import os, sys, string, types, re
+import traceback
+from PyQt4.QtGui  import *
+
+# Modules Eficas
+from Editeur import utils
+
+class CONFIG:
+
+  #-----------------------------------
+  def __init__(self,appli,repIni):
+  #-----------------------------------
+
+  # Classe de base permettant de lire, afficher
+  # et sauvegarder les fichiers utilisateurs 
+  # On a deux directories : la directory generale (Repertoire d instal + Nom du code
+  #                       Par exemple : ~/Install_Eficas/EficasV1_14/Openturns_Wrapper
+  # et la directorie de l utilisateur 
+  #                      HOME/.Eficas_SousEp
+  # Le fichier prefs.py va etre lu dans la directory generale puis surcharge eventuellement 
+  # par celui de l utilisateur
+  # le fichier de catalogue va etre lu dans la directory de l utilisateur s il exite
+  # dans le fichier general sinon
+      self.appli   = appli  
+      self.code    = appli.code
+      self.salome  = appli.salome
+      self.repIni = repIni
+      self.fic_prefs ="prefs.py"
+
+      if self.appli: 
+         self.parent=appli.top
+         #self.appli.format_fichier="openturns_study"
+      else:         self.parent=None
+
+
+      self.labels=("rep_user","INSTALLDIR","path_doc","exec_acrobat","rep_cata","initialdir","savedir")
+
+      # Valeurs par defaut
+      self.rep_user     = os.path.join(os.environ['HOME'],'.Eficas_SousEp')
+      self.path_doc     = self.rep_user
+      self.savedir      = os.environ['HOME']
+      self.initialdir   = os.environ['HOME']
+      self.exec_acrobat = self.rep_user
+      #Lecture des fichiers utilisateurs
+      self.lecture_fichier_ini_standard()
+      self.lecture_fichier_ini_utilisateur()
+      self.lecture_catalogues()
+
+  #--------------------------------------
+  def lecture_fichier_ini_standard(self):
+  #--------------------------------------
+  # Verifie l'existence du fichier "standard"
+  # appelle la lecture de ce fichier
+      self.fic_ini = os.path.join(self.repIni,self.fic_prefs)
+      if not os.path.isfile(self.fic_ini):
+          QMessageBox.critical( None, "Import du fichier de Configuration", 
+                               "Erreur à la lecture du fichier de configuration "+self.fic_ini+".py" )
+          sys.exit(0)
+      import prefs
+      for k in self.labels :
+         try :
+            valeur=getattr(prefs,k)
+            setattr(self,k,valeur)
+         except :
+            pass
+              
+
+  #--------------------------------------
+  def lecture_fichier_ini_utilisateur(self):
+  #--------------------------------------
+  # Surcharge les paramètres standards par les paramètres utilisateur s'ils existent
+      self.fic_ini_utilisateur = os.path.join(self.rep_user,self.fic_prefs)
+      #if not os.path.isfile(self.fic_ini_utilisateur+".py"):
+      if not os.path.isfile(self.fic_ini_utilisateur):
+        return
+      from utils import read_file
+      txt = utils.read_file(self.fic_ini_utilisateur)
+      from styles import style
+      d=locals()
+      try:
+         exec txt in d
+      except :
+         l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+         QMessageBox.critical( None, "Import du fichier de Configuration", 
+                       "Erreur à la lecture du fichier de configuration " + self.fic_ini_utilisateur )
+         sys.exit(0)
+      for k in self.labels :
+         try :
+            setattr(self,k,d[k])
+         except :
+            pass
+
+
+
+  #--------------------------------------
+  def lecture_catalogues(self):
+  #--------------------------------------
+      rep_mat=" " # Compatbilite Aster
+      fic_cata  ="catalogues_sep.ini"
+      fic_ini = os.path.join(self.repIni,fic_cata)
+      fic_user= os.path.join(self.rep_user,fic_cata)
+      if  os.path.isfile(fic_user):
+          fichier = fic_user
+      else  :
+          fichier = fic_ini
+          if not os.path.isfile(fic_ini) :
+             QMessageBox.critical( None, "Erreur a l'import du fichier des Catalogues", 
+                       "Le fichier de configuration des catalogues "+fic_ini+" n a pas été trouvé" )
+             sys.exit(0)
+
+      print fic_cata
+      from utils import read_file
+      txt = utils.read_file(fichier)
+      d=locals()
+      try:
+         exec txt in d
+         self.catalogues=d["catalogues"]
+      except :
+         l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
+         QMessageBox.critical( None, "Import du fichier de Configuration", 
+                       "Erreur à la lecture du fichier de configuration " + fichier )
+         sys.exit(0)
+
+
+
+  #--------------------------------------
+  def save_params(self):
+  #--------------------------------------
+  # sauvegarde
+  # les nouveaux paramètres dans le fichier de configuration utilisateur
+  #
+       print "a ecrire PNPNPN"
+#      l_param=('exec_acrobat', 'repIni','catalogues','rep_travail','rep_mat','path_doc')
+#      texte=""
+#      for clef in l_param :
+#          if hasattr(self,clef):
+#             valeur=getattr(self,clef)
+#             texte= texte + clef+"    = " + repr(valeur) +"\n"
+#
+#
+#      # recuperation des repertoires materiaux
+#      try :
+#          for item in self.catalogues :
+#              try :
+#                  (code,version,cata,format,defaut)=item
+#              except :
+#                  (code,version,cata,format)=item
+#              codeSansPoint=re.sub("\.","",version)
+#              chaine="rep_mat_"+codeSansPoint
+#              if hasattr(self,chaine):
+#                 valeur=getattr(self,chaine)
+#                 texte= texte + chaine+"      = '" + str(valeur) +"'\n"
+#      except :
+#             pass
+#
+#      f=open(self.fic_ini_utilisateur,'w+')
+#      f.write(texte) 
+#      f.close()
+#
+
+
+def make_config(appli,rep):
+    return CONFIG(appli,rep)
+
+def make_config_style(appli,rep):
+    return None
+
+
diff --git a/Sep/editeur.ini b/Sep/editeur.ini
new file mode 100644 (file)
index 0000000..4ee8cc3
--- /dev/null
@@ -0,0 +1,44 @@
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import os
+
+from Sous_epaisseur import prefs
+
+rep_cata = os.path.join(prefs.REPINI,'Cata')
+print rep_cata
+
+# Accès à la documentation Aster
+path_doc              = os.path.join(rep_cata,'..','Doc')
+exec_acrobat    =       "acroread"
+# Utilisateur/Développeur
+isdeveloppeur   =       "NON"
+path_cata_dev   =       "/tmp/cata"
+# Répertoire temporaire
+rep_travail     =   "/tmp"
+# Répertoire initial
+initialdir=os.curdir
+
+# Choix des catalogues
+
+catalogues = (
+              ('Sous_epaisseur','v1.0',os.path.join(rep_cata,'SEP_Cata_V1_4'),'python'),
+             )
+
diff --git a/Sep/prefs.py b/Sep/prefs.py
new file mode 100644 (file)
index 0000000..c29caf8
--- /dev/null
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import os,sys
+
+# REPINI sert à localiser le fichier editeur.ini
+# Obligatoire
+REPINI=os.path.dirname(os.path.abspath(__file__))
+repIni=REPINI
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+# Obligatoire
+INSTALLDIR=os.path.join(REPINI,'..')
+
+# CODE_PATH sert à localiser Noyau et Validation éventuellement
+# non contenus dans la distribution EFICAS
+# Par défaut on utilise les modules de INSTALLDIR
+# Peut valoir None (defaut)
+CODE_PATH = None
+
+# la variable code donne le nom du code a selectionner
+code="SEP" 
+
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+encoding='iso-8859-1'
+
+
+EditeurDir=INSTALLDIR+"/Editeur"
+sys.path[:0]=[INSTALLDIR]
+
+ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
+
+# Preference
+if os.name == 'nt':
+   userprefs = os.sep.join( [ os.environ['HOMEDRIVE'], os.environ['HOMEPATH'], 'Eficas_install', 'prefs.py' ])
+else :
+   userprefs=os.path.expanduser("~/.Eficas_SEP/prefs.py")
+
+if os.path.isfile(userprefs):
+   try:
+      execfile(userprefs)
+   except:
+      pass
+
diff --git a/Sep/prefs_SEP.py b/Sep/prefs_SEP.py
new file mode 100644 (file)
index 0000000..c29caf8
--- /dev/null
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import os,sys
+
+# REPINI sert à localiser le fichier editeur.ini
+# Obligatoire
+REPINI=os.path.dirname(os.path.abspath(__file__))
+repIni=REPINI
+
+# INSTALLDIR sert à localiser l'installation d'Eficas
+# Obligatoire
+INSTALLDIR=os.path.join(REPINI,'..')
+
+# CODE_PATH sert à localiser Noyau et Validation éventuellement
+# non contenus dans la distribution EFICAS
+# Par défaut on utilise les modules de INSTALLDIR
+# Peut valoir None (defaut)
+CODE_PATH = None
+
+# la variable code donne le nom du code a selectionner
+code="SEP" 
+
+# lang indique la langue utilisée pour les chaines d'aide : fr ou ang
+lang='fr'
+
+# Codage des strings qui accepte les accents (en remplacement de 'ascii')
+encoding='iso-8859-1'
+
+
+EditeurDir=INSTALLDIR+"/Editeur"
+sys.path[:0]=[INSTALLDIR]
+
+ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
+
+# Preference
+if os.name == 'nt':
+   userprefs = os.sep.join( [ os.environ['HOMEDRIVE'], os.environ['HOMEPATH'], 'Eficas_install', 'prefs.py' ])
+else :
+   userprefs=os.path.expanduser("~/.Eficas_SEP/prefs.py")
+
+if os.path.isfile(userprefs):
+   try:
+      execfile(userprefs)
+   except:
+      pass
+
diff --git a/Sep/properties.py b/Sep/properties.py
new file mode 100644 (file)
index 0000000..bd8236c
--- /dev/null
@@ -0,0 +1,24 @@
+#@ MODIF properties Accas DATE 11/06/2008 AUTEUR aster M.ADMINISTRATEUR
+# RESPONSABLE D6BHHHH J-P.LEFEBVRE
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR   
+# (AT YOUR OPTION) ANY LATER VERSION.                                 
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT 
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF          
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU    
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                            
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE   
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,       
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.      
+# ======================================================================
+#     IDENTIFICATION DU GESTIONNAIRE DE COMMANDE ACCAS A PARTIR
+#     DE LA VERSION DU CODE_ASTER ASSOCIE
+#----------------------------------------------------------------------
+version = "0.1"
+date = "20/05/2009"
+exploit = False
diff --git a/Sep/qtEficas_SEP.py b/Sep/qtEficas_SEP.py
new file mode 100755 (executable)
index 0000000..815529e
--- /dev/null
@@ -0,0 +1,33 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+"""
+   Ce module sert à lancer EFICAS configuré pour Code_Aster
+"""
+# Modules Python
+
+# Modules Eficas
+import prefs
+from InterfaceQT4 import eficas_go
+#from InterfaceQT import eficas_go
+
+eficas_go.lance_eficas(code=prefs.code)
diff --git a/Sep/sdistSEP.py b/Sep/sdistSEP.py
new file mode 100644 (file)
index 0000000..e94077f
--- /dev/null
@@ -0,0 +1,99 @@
+# -*- coding: utf-8 -*-
+"""
+     Ce module sert à construire les distributions d'EFICAS pour SEP
+     en fonction du tag CVS courant
+     Les distributions sont :
+      - un tar.gz pour UNIX ne contenant pas mxTextTools
+     L'utilisation de ce module est la suivante :
+      1- Se mettre dans un répertoire de travail
+      2- Configurer son environnement pour utiliser le référentiel CVS EFICAS
+      3- Exporter les sources d'EficasV1 par la commande :
+            cvs export -r TAG -d Eficas_export EficasV1
+         ou TAG est le tag CVS de la version que l'on veut distribuer (par exemple V1_1p1)
+      5- Aller dans le répertoire Eficas_export
+      6- Executer le script sdist.py
+             python sdist.py
+         Ce qui a pour effet de creer un repertoire dist contenant la distribution
+         et de la copier dans le répertoire indiqué par dir_download s'il est accessible
+
+"""
+import os,shutil,glob,sys
+import types
+
+nom_distrib="QTEficasSEP_V1_0"
+path_distrib=os.path.join("dist",nom_distrib)
+dir_download= "/home/eficas/WWW/telechargement/eficas"
+
+def main():
+   if os.path.isdir('dist'):shutil.rmtree('dist')
+
+   copyfiles('.',path_distrib,['LICENSE.TERMS','INSTALL','NEWS'])
+
+   copyfiles('../Editeur',os.path.join(path_distrib,'Editeur'),['*.py','faqs.txt'])
+   copyfiles('../InterfaceQT4',os.path.join(path_distrib,'InterfaceQT4'),['*.py','faqs.txt'])
+   copyfiles('../UiQT4',os.path.join(path_distrib,'UiQT4'),['*.ui','makefile'])
+   copyfiles('../Sous_epaisseur',os.path.join(path_distrib,'Sous_epaisseur'),['*.py','*.ini'])
+   copyfiles('../Ihm',os.path.join(path_distrib,'Ihm'),['*.py'])
+   copyfiles('../Extensions',os.path.join(path_distrib,'Extensions'),['*.py'])
+   copyfiles('../Misc',os.path.join(path_distrib,'Misc'),['*.py'])
+   copyfiles('../Accas',os.path.join(path_distrib,'Accas'),['*.py'])
+   # AIDE
+   copyfiles('../AIDE',os.path.join(path_distrib,'AIDE'),['*.py'])
+   copyfiles('../AIDE/fichiers',os.path.join(path_distrib,'AIDE','fichiers'),['*'])
+   copyfiles('.',os.path.join(path_distrib,'AIDE','fichiers'),['INSTALL','NEWS'])
+   copyfiles('../Editeur',os.path.join(path_distrib,'AIDE','fichiers'),['faqs.txt'])
+   #                           ______________________
+
+   copyfiles('../convert',os.path.join(path_distrib,'convert'),['*.py'])
+   os.system("rm -rf .././convert/Parserv5 ")
+   os.system("rm -rf .././convert/convert_asterv5.py ")
+   copyfiles('../generator',os.path.join(path_distrib,'generator'),['*.py'])
+   copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.gif'])
+   copyfiles('../Editeur/icons',os.path.join(path_distrib,'Editeur','icons'),['*.png'])
+   copyfiles('../Editeur/Patrons/',os.path.join(path_distrib,'Editeur','Patrons'),['*.com*'])
+
+   copyfiles('../Noyau',os.path.join(path_distrib,'Noyau'),['*.py'])
+   copyfiles('../Validation',os.path.join(path_distrib,'Validation'),['*.py'])
+
+   
+   tarball= maketarball('dist',nom_distrib,nom_distrib)
+   try:
+      shutil.copy(tarball,dir_download)
+   except:
+      print "Repertoire de download inconnu : ",dir_download
+
+
+
+def make_dir(dir_cible):
+   if type(dir_cible) is not types.StringType:
+      raise "make_dir : dir_cible doit etre une string (%s)" % `dir_cible`
+   head,tail=os.path.split(dir_cible)
+   tails=[tail]
+   while head and tail and not os.path.isdir(head):
+      head,tail=os.path.split(head)
+      tails.insert(0, tail)
+
+   for d in tails:
+      head = os.path.join(head, d)
+      if not os.path.isdir(head):os.mkdir(head)
+
+
+def copyfiles(dir_origin,dir_cible,listfiles):
+   if not os.path.isdir(dir_cible):make_dir(dir_cible)
+   for glob_files in listfiles:
+      for file in glob.glob(os.path.join(dir_origin,glob_files)):
+         shutil.copy(file,dir_cible)
+
+
+def maketarball(dir_trav,dir_cible,nom_tar):
+   prev=os.getcwd()
+   print prev
+   os.chdir(dir_trav)
+   os.system("tar -cf "+nom_tar+".tar "+dir_cible)
+   os.system("gzip -f9 "+nom_tar+".tar ")
+   os.chdir(prev)
+   return os.path.join(dir_trav,nom_tar+".tar.gz")
+
+
+main()
+
diff --git a/Sep/style.py b/Sep/style.py
new file mode 100644 (file)
index 0000000..d485572
--- /dev/null
@@ -0,0 +1,66 @@
+# -*- coding: utf-8 -*-
+"""
+Pour modifier le style d'EFICAS  il faut ajouter un fichier style.py qui contiendra les
+informations sur le style voulu dans son repertoire Eficas_install.
+
+La methode la plus simple consiste à modifier directement les attributs de l'objet style dans le 
+fichier style.py d'Eficas_install. Exemple::
+
+    style.background='yellow'
+
+pour modifier la couleur du background.
+
+Il existe une autre méthode qui peut être utilisée quand on veut modifier plusieurs propriétés à la fois.
+
+Le fichier style.py doit définir une nouvelle classe qui dérive de la classe de base STYLE avec des attributs
+de classe qui définiront le nouveau style (par exemple, si on veut modifier le background)::
+
+   class STYLE(STYLE):
+       background='yellow'
+
+Il faut ensuite instancier cette classe, dans ce meme fichier, en donnant le nom style à l'objet cree::
+
+   style=STYLE()
+
+Tous les attributs de classe possibles sont visibles dans le module Editeur/basestyle.py::
+
+    background='gray90'
+    foreground='black'
+    entry_background='white'
+    list_background='white'
+    list_select_background='#00008b'
+    list_select_foreground='grey'
+    tooltip_background="yellow"
+
+    standard = ("Helvetica",12)
+    standard_italique = ("Helvetica",12,'italic')
+    standard_gras = ("Helvetica",12,'bold')
+    standard_gras_souligne = ("Helvetica",12,'bold','underline')
+
+    canvas = ('Helvetica',10)
+    canvas_italique = ('Helvetica',10,'italic')
+    canvas_gras = ("Helvetica",10,'bold')
+    canvas_gras_italique = ("Helvetica",12,'bold','italic')
+
+    standard12 = ("Helvetica",14)
+    standard12_gras = ("Helvetica",14,'bold')
+    standard12_gras_italique = ( "Helvetica",14,'bold','italic')
+
+
+Le fichier style.py contenu dans le répertoire Aster permet de spécifier des propriétés globales pour une installation.
+Les modifications de style contenues dans ce fichier et dans le fichier style.py d'Eficas_install
+sont prises en compte dans cet ordre.
+"""
+
+p1=10
+p2=14
+f1="Helvetica"
+
+style.background='gray90'
+style.foreground='black'
+style.standard = (f1,p1)
+style.standard_italique = (f1,p1,'italic')
+style.standard_gras = (f1,p1,'bold')
+style.canvas_italique = (f1,p1,'italic')
+style.canvas_gras = (f1,p1,'bold')
+style.statusfont = (f1,p2)
diff --git a/Tools/CMakeLists.txt b/Tools/CMakeLists.txt
new file mode 100644 (file)
index 0000000..edfd24d
--- /dev/null
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python, texte et images du repertoire et des sous-repertoires (sauf CVS)
+install (
+          FILES
+                 __init__.py  optparse.py  textwrap.py
+          DESTINATION ${CMAKE_INSTALL_PREFIX}/Tools
+       )
+add_subdirectory (foztools)
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/Tools/foztools/CMakeLists.txt b/Tools/foztools/CMakeLists.txt
new file mode 100644 (file)
index 0000000..eb12a25
--- /dev/null
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+
+install ( FILES 
+          foztools.py  __init__.py  slider.py
+         DESTINATION ${CMAKE_INSTALL_PREFIX}/Tools/foztools
+        )
+
+
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/Traducteur/CMakeLists.txt b/Traducteur/CMakeLists.txt
new file mode 100644 (file)
index 0000000..5884431
--- /dev/null
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python, texte et images du repertoire et des sous-repertoires (sauf CVS)
+install (
+          FILES
+               calcG.py changeValeur.py dictErreurs.py __init__.py inseremocle.py 
+               load.py log.py mocles.py movemocle.py parseur.py regles.py removemocle.py 
+               renamemocle.py traduitV7V8.py traduitV8V9.py utils.py
+               visiteur.py
+          DESTINATION ${CMAKE_INSTALL_PREFIX}/Traducteur
+       )
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/UiQT4/CMakeLists.txt b/UiQT4/CMakeLists.txt
new file mode 100644 (file)
index 0000000..c1a9425
--- /dev/null
@@ -0,0 +1,78 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+set ( _PYFILES )
+macro ( eficas_compile_ui uifile )
+  get_filename_component ( _file_we ${uifile} NAME_WE )
+  set ( _pyfile "${_file_we}.py" )
+  add_custom_command ( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_pyfile}
+                       COMMAND ${PYUIC4} ARGS -x -o ${CMAKE_CURRENT_BINARY_DIR}/${_pyfile} ${CMAKE_CURRENT_SOURCE_DIR}/${uifile}
+                      MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/${uifile}
+                      COMMENT "Compiling ${uifile}"
+                    )
+  list ( APPEND _PYFILES ${CMAKE_CURRENT_BINARY_DIR}/${_pyfile} )
+endmacro ( eficas_compile_ui )
+
+eficas_compile_ui ( OptionsCuve.ui )
+eficas_compile_ui ( OptionsEditeur.ui )
+eficas_compile_ui ( OptionsOT.ui )
+eficas_compile_ui ( OptionsPdf.ui )
+eficas_compile_ui ( aideQT.ui )
+eficas_compile_ui ( desChoixCata.ui )
+eficas_compile_ui ( desChoixMap.ui )
+eficas_compile_ui ( desCommande.ui )
+eficas_compile_ui ( desCommentaire.ui )
+eficas_compile_ui ( desError.ui )
+eficas_compile_ui ( desFormule.ui )
+eficas_compile_ui ( desInactif.ui )
+eficas_compile_ui ( desInclude.ui )
+eficas_compile_ui ( desListeParam.ui )
+eficas_compile_ui ( desMCFact.ui )
+eficas_compile_ui ( desMCListAjout.ui )
+eficas_compile_ui ( desMatrice.ui )
+eficas_compile_ui ( desParam.ui )
+eficas_compile_ui ( desPixmap.ui )
+eficas_compile_ui ( desPlusieursBase.ui )
+eficas_compile_ui ( desPlusieursInto.ui )
+eficas_compile_ui ( desPoursuite.ui )
+eficas_compile_ui ( desRacine.ui )
+eficas_compile_ui ( desSelectVal.ui )
+eficas_compile_ui ( desUniqueASSD.ui )
+eficas_compile_ui ( desUniqueBase.ui )
+eficas_compile_ui ( desUniqueComp.ui )
+eficas_compile_ui ( desUniqueInto.ui )
+eficas_compile_ui ( desUniqueSDCO.ui )
+eficas_compile_ui ( desUniqueSDCOInto.ui )
+eficas_compile_ui ( desViewTexte.ui )
+eficas_compile_ui ( desVisu.ui )
+eficas_compile_ui ( myMain.ui )
+
+add_custom_target ( CompileUI ALL DEPENDS ${_PYFILES}
+                    COMMENT "Built UI files"
+                  )
+
+install ( FILES ${_PYFILES}
+          DESTINATION ${CMAKE_INSTALL_PREFIX}/UiQT4
+        )
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/UiQT4/OptionsCuve.ui b/UiQT4/OptionsCuve.ui
new file mode 100644 (file)
index 0000000..cac61d7
--- /dev/null
@@ -0,0 +1,358 @@
+<ui version="4.0" >
+ <class>desOptions</class>
+ <widget class="QDialog" name="desOptions" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>657</width>
+    <height>645</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Option TURNS</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" >
+   <item row="0" column="0" >
+    <widget class="QGroupBox" name="groupBox1" >
+     <property name="minimumSize" >
+      <size>
+       <width>635</width>
+       <height>252</height>
+      </size>
+     </property>
+     <property name="maximumSize" >
+      <size>
+       <width>16777215</width>
+       <height>252</height>
+      </size>
+     </property>
+     <property name="title" >
+      <string>Configurer une Version</string>
+     </property>
+     <widget class="QComboBox" name="CBVersions" >
+      <property name="geometry" >
+       <rect>
+        <x>10</x>
+        <y>30</y>
+        <width>121</width>
+        <height>40</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>0</width>
+        <height>40</height>
+       </size>
+      </property>
+      <property name="maximumSize" >
+       <size>
+        <width>121</width>
+        <height>40</height>
+       </size>
+      </property>
+     </widget>
+     <widget class="QPushButton" name="Bok" >
+      <property name="geometry" >
+       <rect>
+        <x>500</x>
+        <y>30</y>
+        <width>121</width>
+        <height>40</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>90</width>
+        <height>40</height>
+       </size>
+      </property>
+      <property name="maximumSize" >
+       <size>
+        <width>121</width>
+        <height>40</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Valider</string>
+      </property>
+      <property name="autoDefault" >
+       <bool>false</bool>
+      </property>
+     </widget>
+     <widget class="QPushButton" name="PBajout" >
+      <property name="geometry" >
+       <rect>
+        <x>10</x>
+        <y>200</y>
+        <width>106</width>
+        <height>43</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>101</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Ajouter
+Version :</string>
+      </property>
+     </widget>
+     <widget class="QLineEdit" name="LEVersionAjout" >
+      <property name="geometry" >
+       <rect>
+        <x>122</x>
+        <y>200</y>
+        <width>154</width>
+        <height>43</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>101</width>
+        <height>41</height>
+       </size>
+      </property>
+     </widget>
+     <widget class="QPushButton" name="PBSup" >
+      <property name="geometry" >
+       <rect>
+        <x>360</x>
+        <y>200</y>
+        <width>106</width>
+        <height>43</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>101</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Supprimer
+Version :</string>
+      </property>
+     </widget>
+     <widget class="QLineEdit" name="LEVersionSup" >
+      <property name="geometry" >
+       <rect>
+        <x>470</x>
+        <y>200</y>
+        <width>155</width>
+        <height>43</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>0</width>
+        <height>41</height>
+       </size>
+      </property>
+     </widget>
+     <widget class="QWidget" name="layoutWidget" >
+      <property name="geometry" >
+       <rect>
+        <x>7</x>
+        <y>100</y>
+        <width>621</width>
+        <height>65</height>
+       </rect>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout" >
+       <item>
+        <widget class="QLabel" name="textLabel1_3" >
+         <property name="text" >
+          <string>Fichier catalogue (chemin complet) :</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="LERepCata" >
+         <property name="minimumSize" >
+          <size>
+           <width>501</width>
+           <height>41</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string/>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+   <item row="1" column="0" >
+    <widget class="QGroupBox" name="groupBox3" >
+     <property name="minimumSize" >
+      <size>
+       <width>548</width>
+       <height>90</height>
+      </size>
+     </property>
+     <property name="title" >
+      <string>Doc</string>
+     </property>
+     <widget class="QLabel" name="textLabel1" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>28</y>
+        <width>617</width>
+        <height>41</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>613</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="maximumSize" >
+       <size>
+        <width>16777215</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Répertoire d'accès à la documentation :</string>
+      </property>
+      <property name="wordWrap" >
+       <bool>false</bool>
+      </property>
+     </widget>
+     <widget class="QLineEdit" name="LERepDoc" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>74</y>
+        <width>617</width>
+        <height>41</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>520</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string/>
+      </property>
+     </widget>
+    </widget>
+   </item>
+   <item row="2" column="0" >
+    <widget class="QGroupBox" name="groupBox3_2" >
+     <property name="minimumSize" >
+      <size>
+       <width>548</width>
+       <height>90</height>
+      </size>
+     </property>
+     <property name="title" >
+      <string>Espace de travail</string>
+     </property>
+     <widget class="QLabel" name="textLabel1_4" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>28</y>
+        <width>617</width>
+        <height>41</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>613</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="maximumSize" >
+       <size>
+        <width>16777215</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Répertoire de sauvegarde par défaut :</string>
+      </property>
+      <property name="wordWrap" >
+       <bool>false</bool>
+      </property>
+     </widget>
+     <widget class="QLineEdit" name="LESaveDir" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>74</y>
+        <width>617</width>
+        <height>41</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>520</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string/>
+      </property>
+     </widget>
+    </widget>
+   </item>
+   <item row="3" column="0" >
+    <widget class="QSplitter" name="splitter_3" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <widget class="QCheckBox" name="Bdefaut" >
+      <property name="minimumSize" >
+       <size>
+        <width>340</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="maximumSize" >
+       <size>
+        <width>16777215</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="font" >
+       <font>
+        <pointsize>12</pointsize>
+       </font>
+      </property>
+      <property name="text" >
+       <string>Réinitialiser avec les valeurs par defaut</string>
+      </property>
+     </widget>
+     <widget class="QPushButton" name="PBQuit" >
+      <property name="minimumSize" >
+       <size>
+        <width>151</width>
+        <height>31</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Quitter</string>
+      </property>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/OptionsMAP.ui b/UiQT4/OptionsMAP.ui
new file mode 100644 (file)
index 0000000..bbff570
--- /dev/null
@@ -0,0 +1,545 @@
+<ui version="4.0" >
+ <class>desOptions</class>
+ <widget class="QDialog" name="desOptions" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>662</width>
+    <height>768</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Option TURNS</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" >
+   <item row="1" column="0" >
+    <spacer name="verticalSpacer_2" >
+     <property name="orientation" >
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType" >
+      <enum>QSizePolicy::Fixed</enum>
+     </property>
+     <property name="sizeHint" stdset="0" >
+      <size>
+       <width>20</width>
+       <height>18</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="2" column="0" colspan="2" >
+    <widget class="QGroupBox" name="groupBox2" >
+     <property name="minimumSize" >
+      <size>
+       <width>641</width>
+       <height>320</height>
+      </size>
+     </property>
+     <property name="title" >
+      <string>Configurer les répertoires</string>
+     </property>
+     <widget class="QLabel" name="textLabel1_2" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>155</y>
+        <width>617</width>
+        <height>20</height>
+       </rect>
+      </property>
+      <property name="text" >
+       <string>Répertoire d'installation d'Open TURNS :</string>
+      </property>
+      <property name="wordWrap" >
+       <bool>false</bool>
+      </property>
+     </widget>
+     <widget class="QLineEdit" name="LERepOT" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>180</y>
+        <width>617</width>
+        <height>30</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>520</width>
+        <height>30</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string/>
+      </property>
+     </widget>
+     <widget class="QLineEdit" name="LERepDoc" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>263</y>
+        <width>617</width>
+        <height>30</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>520</width>
+        <height>30</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string/>
+      </property>
+     </widget>
+     <widget class="QLabel" name="textLabel1_5" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>31</y>
+        <width>617</width>
+        <height>20</height>
+       </rect>
+      </property>
+      <property name="text" >
+       <string>Répertoire d'installation des codes MAP :</string>
+      </property>
+      <property name="wordWrap" >
+       <bool>false</bool>
+      </property>
+     </widget>
+     <widget class="QLineEdit" name="LERepMAP" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>56</y>
+        <width>617</width>
+        <height>30</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>520</width>
+        <height>30</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string/>
+      </property>
+     </widget>
+     <widget class="QLineEdit" name="LERepAster" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>118</y>
+        <width>617</width>
+        <height>30</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>520</width>
+        <height>30</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string/>
+      </property>
+     </widget>
+     <widget class="QLabel" name="textLabel1_6" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>93</y>
+        <width>617</width>
+        <height>20</height>
+       </rect>
+      </property>
+      <property name="text" >
+       <string>Répertoire d'installation de  code_Aster :</string>
+      </property>
+      <property name="wordWrap" >
+       <bool>false</bool>
+      </property>
+     </widget>
+     <widget class="QLabel" name="textLabel1" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>217</y>
+        <width>617</width>
+        <height>41</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>613</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="maximumSize" >
+       <size>
+        <width>16777215</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Répertoire d'accès à la documentation :</string>
+      </property>
+      <property name="wordWrap" >
+       <bool>false</bool>
+      </property>
+     </widget>
+    </widget>
+   </item>
+   <item row="3" column="0" >
+    <spacer name="verticalSpacer" >
+     <property name="orientation" >
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeType" >
+      <enum>QSizePolicy::Fixed</enum>
+     </property>
+     <property name="sizeHint" stdset="0" >
+      <size>
+       <width>20</width>
+       <height>18</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="4" column="0" colspan="2" >
+    <widget class="QGroupBox" name="groupBox3_2" >
+     <property name="minimumSize" >
+      <size>
+       <width>548</width>
+       <height>10</height>
+      </size>
+     </property>
+     <property name="title" >
+      <string>Espace de travail</string>
+     </property>
+     <widget class="QLineEdit" name="LESaveDir" >
+      <property name="geometry" >
+       <rect>
+        <x>0</x>
+        <y>50</y>
+        <width>617</width>
+        <height>31</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>520</width>
+        <height>20</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string/>
+      </property>
+     </widget>
+     <widget class="QLabel" name="textLabel1_4" >
+      <property name="geometry" >
+       <rect>
+        <x>10</x>
+        <y>20</y>
+        <width>617</width>
+        <height>31</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>613</width>
+        <height>10</height>
+       </size>
+      </property>
+      <property name="maximumSize" >
+       <size>
+        <width>16777215</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Répertoire de sauvegarde par défaut :</string>
+      </property>
+      <property name="wordWrap" >
+       <bool>false</bool>
+      </property>
+     </widget>
+    </widget>
+   </item>
+   <item row="5" column="0" >
+    <widget class="QCheckBox" name="Bdefaut" >
+     <property name="minimumSize" >
+      <size>
+       <width>340</width>
+       <height>41</height>
+      </size>
+     </property>
+     <property name="maximumSize" >
+      <size>
+       <width>16777215</width>
+       <height>41</height>
+      </size>
+     </property>
+     <property name="font" >
+      <font>
+       <pointsize>12</pointsize>
+      </font>
+     </property>
+     <property name="text" >
+      <string>Réinitialiser avec les valeurs par defaut</string>
+     </property>
+    </widget>
+   </item>
+   <item row="5" column="1" >
+    <widget class="QPushButton" name="PBQuit" >
+     <property name="minimumSize" >
+      <size>
+       <width>151</width>
+       <height>40</height>
+      </size>
+     </property>
+     <property name="maximumSize" >
+      <size>
+       <width>151</width>
+       <height>40</height>
+      </size>
+     </property>
+     <property name="text" >
+      <string>Quitter</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0" colspan="2" >
+    <widget class="QGroupBox" name="groupBox1" >
+     <property name="minimumSize" >
+      <size>
+       <width>635</width>
+       <height>195</height>
+      </size>
+     </property>
+     <property name="maximumSize" >
+      <size>
+       <width>16777215</width>
+       <height>252</height>
+      </size>
+     </property>
+     <property name="title" >
+      <string>Configurer une Version</string>
+     </property>
+     <widget class="QComboBox" name="CBVersions" >
+      <property name="geometry" >
+       <rect>
+        <x>10</x>
+        <y>20</y>
+        <width>180</width>
+        <height>40</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>0</width>
+        <height>40</height>
+       </size>
+      </property>
+      <property name="maximumSize" >
+       <size>
+        <width>180</width>
+        <height>40</height>
+       </size>
+      </property>
+     </widget>
+     <widget class="QPushButton" name="Bok" >
+      <property name="geometry" >
+       <rect>
+        <x>500</x>
+        <y>20</y>
+        <width>121</width>
+        <height>40</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>90</width>
+        <height>40</height>
+       </size>
+      </property>
+      <property name="maximumSize" >
+       <size>
+        <width>121</width>
+        <height>40</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Valider</string>
+      </property>
+      <property name="autoDefault" >
+       <bool>false</bool>
+      </property>
+     </widget>
+     <widget class="QPushButton" name="PBajout" >
+      <property name="geometry" >
+       <rect>
+        <x>10</x>
+        <y>140</y>
+        <width>111</width>
+        <height>40</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>101</width>
+        <height>40</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Ajouter
+Version :</string>
+      </property>
+     </widget>
+     <widget class="QLineEdit" name="LEVersionAjout" >
+      <property name="geometry" >
+       <rect>
+        <x>130</x>
+        <y>140</y>
+        <width>171</width>
+        <height>40</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>101</width>
+        <height>30</height>
+       </size>
+      </property>
+     </widget>
+     <widget class="QPushButton" name="PBSup" >
+      <property name="geometry" >
+       <rect>
+        <x>210</x>
+        <y>20</y>
+        <width>111</width>
+        <height>40</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>101</width>
+        <height>40</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Supprimer
+Version :</string>
+      </property>
+     </widget>
+     <widget class="QLineEdit" name="LEVersionSup" >
+      <property name="geometry" >
+       <rect>
+        <x>330</x>
+        <y>20</y>
+        <width>163</width>
+        <height>41</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>0</width>
+        <height>41</height>
+       </size>
+      </property>
+     </widget>
+     <widget class="QLabel" name="textLabel1_3" >
+      <property name="geometry" >
+       <rect>
+        <x>10</x>
+        <y>70</y>
+        <width>617</width>
+        <height>20</height>
+       </rect>
+      </property>
+      <property name="text" >
+       <string>Fichier catalogue (chemin complet) :</string>
+      </property>
+      <property name="wordWrap" >
+       <bool>false</bool>
+      </property>
+     </widget>
+     <widget class="QLineEdit" name="LERepCata" >
+      <property name="geometry" >
+       <rect>
+        <x>10</x>
+        <y>90</y>
+        <width>617</width>
+        <height>40</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>501</width>
+        <height>20</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string/>
+      </property>
+     </widget>
+     <widget class="QLineEdit" name="LEFormatOUT" >
+      <property name="enabled" >
+       <bool>false</bool>
+      </property>
+      <property name="geometry" >
+       <rect>
+        <x>450</x>
+        <y>140</y>
+        <width>171</width>
+        <height>40</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>101</width>
+        <height>30</height>
+       </size>
+      </property>
+     </widget>
+     <widget class="QLabel" name="textLabel1_7" >
+      <property name="geometry" >
+       <rect>
+        <x>390</x>
+        <y>140</y>
+        <width>51</width>
+        <height>31</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>50</width>
+        <height>10</height>
+       </size>
+      </property>
+      <property name="maximumSize" >
+       <size>
+        <width>16777215</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Schema</string>
+      </property>
+      <property name="wordWrap" >
+       <bool>false</bool>
+      </property>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/OptionsOT.ui b/UiQT4/OptionsOT.ui
new file mode 100644 (file)
index 0000000..0ed9364
--- /dev/null
@@ -0,0 +1,406 @@
+<ui version="4.0" >
+ <class>desOptions</class>
+ <widget class="QDialog" name="desOptions" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>657</width>
+    <height>794</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Option TURNS</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" >
+   <item row="0" column="0" >
+    <widget class="QGroupBox" name="groupBox1" >
+     <property name="minimumSize" >
+      <size>
+       <width>635</width>
+       <height>252</height>
+      </size>
+     </property>
+     <property name="maximumSize" >
+      <size>
+       <width>16777215</width>
+       <height>252</height>
+      </size>
+     </property>
+     <property name="title" >
+      <string>Configurer une Version</string>
+     </property>
+     <widget class="QComboBox" name="CBVersions" >
+      <property name="geometry" >
+       <rect>
+        <x>10</x>
+        <y>30</y>
+        <width>121</width>
+        <height>40</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>0</width>
+        <height>40</height>
+       </size>
+      </property>
+      <property name="maximumSize" >
+       <size>
+        <width>121</width>
+        <height>40</height>
+       </size>
+      </property>
+     </widget>
+     <widget class="QPushButton" name="Bok" >
+      <property name="geometry" >
+       <rect>
+        <x>500</x>
+        <y>30</y>
+        <width>121</width>
+        <height>40</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>90</width>
+        <height>40</height>
+       </size>
+      </property>
+      <property name="maximumSize" >
+       <size>
+        <width>121</width>
+        <height>40</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Valider</string>
+      </property>
+      <property name="autoDefault" >
+       <bool>false</bool>
+      </property>
+     </widget>
+     <widget class="QPushButton" name="PBajout" >
+      <property name="geometry" >
+       <rect>
+        <x>10</x>
+        <y>200</y>
+        <width>106</width>
+        <height>43</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>101</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Ajouter
+Version :</string>
+      </property>
+     </widget>
+     <widget class="QLineEdit" name="LEVersionAjout" >
+      <property name="geometry" >
+       <rect>
+        <x>122</x>
+        <y>200</y>
+        <width>154</width>
+        <height>43</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>101</width>
+        <height>41</height>
+       </size>
+      </property>
+     </widget>
+     <widget class="QPushButton" name="PBSup" >
+      <property name="geometry" >
+       <rect>
+        <x>360</x>
+        <y>200</y>
+        <width>106</width>
+        <height>43</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>101</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Supprimer
+Version :</string>
+      </property>
+     </widget>
+     <widget class="QLineEdit" name="LEVersionSup" >
+      <property name="geometry" >
+       <rect>
+        <x>470</x>
+        <y>200</y>
+        <width>155</width>
+        <height>43</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>0</width>
+        <height>41</height>
+       </size>
+      </property>
+     </widget>
+     <widget class="QWidget" name="layoutWidget" >
+      <property name="geometry" >
+       <rect>
+        <x>7</x>
+        <y>100</y>
+        <width>621</width>
+        <height>65</height>
+       </rect>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout" >
+       <item>
+        <widget class="QLabel" name="textLabel1_3" >
+         <property name="text" >
+          <string>Fichier catalogue (chemin complet) :</string>
+         </property>
+         <property name="wordWrap" >
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="LERepCata" >
+         <property name="minimumSize" >
+          <size>
+           <width>501</width>
+           <height>41</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string/>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+   <item row="1" column="0" >
+    <widget class="QGroupBox" name="groupBox2" >
+     <property name="minimumSize" >
+      <size>
+       <width>548</width>
+       <height>90</height>
+      </size>
+     </property>
+     <property name="title" >
+      <string>Configurer la bibliothèque Open TURNS</string>
+     </property>
+     <widget class="QLabel" name="textLabel1_2" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>28</y>
+        <width>617</width>
+        <height>17</height>
+       </rect>
+      </property>
+      <property name="text" >
+       <string>Répertoire d'installation d'Open TURNS :</string>
+      </property>
+      <property name="wordWrap" >
+       <bool>false</bool>
+      </property>
+     </widget>
+     <widget class="QLineEdit" name="LERepOT" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>50</y>
+        <width>617</width>
+        <height>41</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>520</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string/>
+      </property>
+     </widget>
+    </widget>
+   </item>
+   <item row="2" column="0" >
+    <widget class="QGroupBox" name="groupBox3" >
+     <property name="minimumSize" >
+      <size>
+       <width>548</width>
+       <height>90</height>
+      </size>
+     </property>
+     <property name="title" >
+      <string>Doc</string>
+     </property>
+     <widget class="QLabel" name="textLabel1" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>28</y>
+        <width>617</width>
+        <height>41</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>613</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="maximumSize" >
+       <size>
+        <width>16777215</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Répertoire d'accès à la documentation :</string>
+      </property>
+      <property name="wordWrap" >
+       <bool>false</bool>
+      </property>
+     </widget>
+     <widget class="QLineEdit" name="LERepDoc" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>74</y>
+        <width>617</width>
+        <height>41</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>520</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string/>
+      </property>
+     </widget>
+    </widget>
+   </item>
+   <item row="3" column="0" >
+    <widget class="QGroupBox" name="groupBox3_2" >
+     <property name="minimumSize" >
+      <size>
+       <width>548</width>
+       <height>90</height>
+      </size>
+     </property>
+     <property name="title" >
+      <string>Espace de travail</string>
+     </property>
+     <widget class="QLabel" name="textLabel1_4" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>28</y>
+        <width>617</width>
+        <height>41</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>613</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="maximumSize" >
+       <size>
+        <width>16777215</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Répertoire de sauvegarde par défaut :</string>
+      </property>
+      <property name="wordWrap" >
+       <bool>false</bool>
+      </property>
+     </widget>
+     <widget class="QLineEdit" name="LESaveDir" >
+      <property name="geometry" >
+       <rect>
+        <x>11</x>
+        <y>74</y>
+        <width>617</width>
+        <height>41</height>
+       </rect>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>520</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string/>
+      </property>
+     </widget>
+    </widget>
+   </item>
+   <item row="4" column="0" >
+    <widget class="QSplitter" name="splitter_3" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <widget class="QCheckBox" name="Bdefaut" >
+      <property name="minimumSize" >
+       <size>
+        <width>340</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="maximumSize" >
+       <size>
+        <width>16777215</width>
+        <height>41</height>
+       </size>
+      </property>
+      <property name="font" >
+       <font>
+        <pointsize>12</pointsize>
+       </font>
+      </property>
+      <property name="text" >
+       <string>Réinitialiser avec les valeurs par defaut</string>
+      </property>
+     </widget>
+     <widget class="QPushButton" name="PBQuit" >
+      <property name="minimumSize" >
+       <size>
+        <width>151</width>
+        <height>31</height>
+       </size>
+      </property>
+      <property name="text" >
+       <string>Quitter</string>
+      </property>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11" />
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desChoixMap.ui b/UiQT4/desChoixMap.ui
new file mode 100644 (file)
index 0000000..dc8e8a8
--- /dev/null
@@ -0,0 +1,201 @@
+<ui version="4.0" >
+ <class>ChoixMap</class>
+ <widget class="QDialog" name="ChoixMap" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>788</width>
+    <height>752</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Dialog</string>
+  </property>
+  <widget class="QLabel" name="label" >
+   <property name="geometry" >
+    <rect>
+     <x>10</x>
+     <y>370</y>
+     <width>141</width>
+     <height>41</height>
+    </rect>
+   </property>
+   <property name="text" >
+    <string>scheme description :</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="pushButton" >
+   <property name="geometry" >
+    <rect>
+     <x>10</x>
+     <y>440</y>
+     <width>83</width>
+     <height>30</height>
+    </rect>
+   </property>
+   <property name="text" >
+    <string>Doc</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="PBIconeMap" >
+   <property name="geometry" >
+    <rect>
+     <x>10</x>
+     <y>30</y>
+     <width>83</width>
+     <height>91</height>
+    </rect>
+   </property>
+   <property name="text" >
+    <string/>
+   </property>
+   <property name="icon" >
+    <iconset>
+     <normaloff>../../../map.ppm</normaloff>../../../map.ppm</iconset>
+   </property>
+   <property name="iconSize" >
+    <size>
+     <width>160</width>
+     <height>160</height>
+    </size>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="pushButton_3" >
+   <property name="geometry" >
+    <rect>
+     <x>670</x>
+     <y>30</y>
+     <width>81</width>
+     <height>101</height>
+    </rect>
+   </property>
+   <property name="text" >
+    <string/>
+   </property>
+   <property name="icon" >
+    <iconset>
+     <normaloff>image120.png</normaloff>image120.png</iconset>
+   </property>
+   <property name="iconSize" >
+    <size>
+     <width>160</width>
+     <height>160</height>
+    </size>
+   </property>
+  </widget>
+  <widget class="QGroupBox" name="groupBoxScheme" >
+   <property name="geometry" >
+    <rect>
+     <x>390</x>
+     <y>20</y>
+     <width>261</width>
+     <height>311</height>
+    </rect>
+   </property>
+   <property name="title" >
+    <string>Scheme</string>
+   </property>
+  </widget>
+  <widget class="QGroupBox" name="groupBoxModule" >
+   <property name="geometry" >
+    <rect>
+     <x>110</x>
+     <y>20</y>
+     <width>261</width>
+     <height>311</height>
+    </rect>
+   </property>
+   <property name="title" >
+    <string>Modules</string>
+   </property>
+   <layout class="QVBoxLayout" name="verticalLayout" >
+    <item>
+     <widget class="QRadioButton" name="RBM1" >
+      <property name="text" >
+       <string>oxides</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QRadioButton" name="RBM2" >
+      <property name="text" >
+       <string>scc</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QRadioButton" name="RBM3" >
+      <property name="text" >
+       <string>concrete</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QRadioButton" name="RBM4" >
+      <property name="text" >
+       <string>polycristals</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QRadioButton" name="RBM5" >
+      <property name="text" >
+       <string>polymers</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QRadioButton" name="RBM6" >
+      <property name="text" >
+       <string>micro</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QRadioButton" name="RBM7" >
+      <property name="text" >
+       <string>seal</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QRadioButton" name="RBM8" >
+      <property name="text" >
+       <string>mox</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QRadioButton" name="RBM9" >
+      <property name="text" >
+       <string>nano</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QRadioButton" name="RBM10" >
+      <property name="text" >
+       <string>insulator</string>
+      </property>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QLabel" name="labelScheme" >
+   <property name="geometry" >
+    <rect>
+     <x>160</x>
+     <y>380</y>
+     <width>551</width>
+     <height>31</height>
+    </rect>
+   </property>
+   <property name="text" >
+    <string/>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
index 72b3a67f2bf84931093f4fbabc104cc12109fb0f..434caad0fbfb2481c1021da5f9816f618e9fadcb 100644 (file)
   <property name="windowTitle" >
    <string>DComm</string>
   </property>
-  <layout class="QGridLayout" name="gridLayout_3" >
-   <item row="1" column="0" >
-    <widget class="QLabel" name="Commentaire" >
-     <property name="maximumSize" >
-      <size>
-       <width>793</width>
-       <height>20</height>
-      </size>
-     </property>
-     <property name="frameShape" >
-      <enum>QFrame::NoFrame</enum>
-     </property>
-     <property name="frameShadow" >
-      <enum>QFrame::Plain</enum>
-     </property>
-     <property name="text" >
-      <string/>
-     </property>
-     <property name="wordWrap" >
-      <bool>false</bool>
-     </property>
-    </widget>
-   </item>
-   <item row="2" column="0" >
-    <layout class="QHBoxLayout" name="horizontalLayout" >
-     <item>
-      <spacer name="horizontalSpacer" >
-       <property name="orientation" >
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0" >
-        <size>
-         <width>263</width>
-         <height>27</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item>
-      <widget class="QPushButton" name="bOk" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize" >
-        <size>
-         <width>160</width>
-         <height>30</height>
-        </size>
-       </property>
-       <property name="maximumSize" >
-        <size>
-         <width>16777215</width>
-         <height>30</height>
-        </size>
-       </property>
-       <property name="toolTip" >
-        <string>validation de la saisie</string>
-       </property>
-       <property name="text" >
-        <string>&amp;Valider</string>
-       </property>
-       <property name="shortcut" >
-        <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
-       </property>
-       <property name="autoDefault" >
-        <bool>true</bool>
-       </property>
-       <property name="default" >
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer name="horizontalSpacer_2" >
-       <property name="orientation" >
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0" >
-        <size>
-         <width>254</width>
-         <height>27</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-    </layout>
-   </item>
+  <layout class="QGridLayout" name="gridLayout_11" >
    <item row="0" column="0" >
     <widget class="QTabWidget" name="TWChoix" >
      <property name="currentIndex" >
          <property name="title" >
           <string>Concept</string>
          </property>
-         <layout class="QGridLayout" name="gridLayout_8" >
+         <layout class="QGridLayout" name="gridLayout_10" >
           <item row="0" column="0" >
-           <widget class="QSplitter" name="splitter" >
-            <property name="orientation" >
-             <enum>Qt::Horizontal</enum>
-            </property>
-            <widget class="QLabel" name="textLabel1_3" >
-             <property name="text" >
-              <string>&lt;u>Nom du concept :&lt;/u></string>
-             </property>
-             <property name="wordWrap" >
-              <bool>false</bool>
-             </property>
-            </widget>
-           </widget>
-          </item>
-          <item row="1" column="0" >
-           <layout class="QHBoxLayout" name="horizontalLayout_2" >
-            <item>
+           <layout class="QGridLayout" name="gridLayout_3" >
+            <item row="0" column="0" colspan="2" >
+             <widget class="QLabel" name="Label1" >
+              <property name="text" >
+               <string>&lt;u>Nom du concept :&lt;/u></string>
+              </property>
+              <property name="wordWrap" >
+               <bool>false</bool>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="0" >
              <widget class="QLineEdit" name="LENomConcept" >
               <property name="minimumSize" >
                <size>
               </property>
              </widget>
             </item>
-            <item>
+            <item row="1" column="1" >
              <spacer name="horizontalSpacer_3" >
               <property name="orientation" >
                <enum>Qt::Horizontal</enum>
             </item>
            </layout>
           </item>
-          <item row="2" column="0" >
-           <spacer name="verticalSpacer_3" >
-            <property name="orientation" >
-             <enum>Qt::Vertical</enum>
-            </property>
-            <property name="sizeHint" stdset="0" >
-             <size>
-              <width>20</width>
-              <height>51</height>
-             </size>
-            </property>
-           </spacer>
-          </item>
-          <item row="3" column="0" >
-           <layout class="QVBoxLayout" name="verticalLayout" >
-            <item>
-             <layout class="QGridLayout" name="gridLayout_7" >
-              <item row="0" column="0" >
-               <widget class="QLabel" name="textLabel1_3_2" >
-                <property name="text" >
-                 <string>&lt;u>Type du concept :&lt;/u></string>
-                </property>
-                <property name="wordWrap" >
-                 <bool>false</bool>
-                </property>
-               </widget>
-              </item>
-              <item row="1" column="0" >
-               <widget class="QLabel" name="textLabel3" >
-                <property name="text" >
-                 <string>L'opérateur retourne un concept de type :</string>
-                </property>
-                <property name="wordWrap" >
-                 <bool>false</bool>
-                </property>
-               </widget>
-              </item>
-              <item row="1" column="1" >
-               <widget class="QLabel" name="typeConcept" >
-                <property name="text" >
-                 <string>TypeDuConcept</string>
-                </property>
-                <property name="wordWrap" >
-                 <bool>false</bool>
-                </property>
-               </widget>
-              </item>
-             </layout>
+          <item row="1" column="0" >
+           <layout class="QGridLayout" name="gridLayout_8" >
+            <item row="0" column="0" >
+             <widget class="QListWidget" name="listBoxASSD" />
             </item>
-            <item>
+            <item row="1" column="0" >
              <spacer name="verticalSpacer" >
               <property name="orientation" >
                <enum>Qt::Vertical</enum>
               <property name="sizeHint" stdset="0" >
                <size>
                 <width>20</width>
-                <height>338</height>
+                <height>168</height>
                </size>
               </property>
              </spacer>
             </item>
            </layout>
           </item>
+          <item row="2" column="0" >
+           <layout class="QGridLayout" name="gridLayout_7" >
+            <item row="0" column="0" >
+             <widget class="QLabel" name="Label2" >
+              <property name="text" >
+               <string>&lt;u>Type du concept :&lt;/u></string>
+              </property>
+              <property name="wordWrap" >
+               <bool>false</bool>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="0" >
+             <widget class="QLabel" name="Label3" >
+              <property name="text" >
+               <string>L'opérateur retourne un concept de type :</string>
+              </property>
+              <property name="wordWrap" >
+               <bool>false</bool>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="1" >
+             <widget class="QLabel" name="typeConcept" >
+              <property name="text" >
+               <string>TypeDuConcept</string>
+              </property>
+              <property name="wordWrap" >
+               <bool>false</bool>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
          </layout>
         </widget>
        </item>
      </widget>
     </widget>
    </item>
+   <item row="1" column="0" >
+    <widget class="QLabel" name="Commentaire" >
+     <property name="maximumSize" >
+      <size>
+       <width>793</width>
+       <height>20</height>
+      </size>
+     </property>
+     <property name="frameShape" >
+      <enum>QFrame::NoFrame</enum>
+     </property>
+     <property name="frameShadow" >
+      <enum>QFrame::Plain</enum>
+     </property>
+     <property name="text" >
+      <string/>
+     </property>
+     <property name="wordWrap" >
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" >
+    <layout class="QHBoxLayout" name="horizontalLayout" >
+     <item>
+      <spacer name="horizontalSpacer" >
+       <property name="orientation" >
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0" >
+        <size>
+         <width>263</width>
+         <height>27</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="bOk" >
+       <property name="sizePolicy" >
+        <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize" >
+        <size>
+         <width>160</width>
+         <height>30</height>
+        </size>
+       </property>
+       <property name="maximumSize" >
+        <size>
+         <width>16777215</width>
+         <height>30</height>
+        </size>
+       </property>
+       <property name="toolTip" >
+        <string>validation de la saisie</string>
+       </property>
+       <property name="text" >
+        <string>&amp;Valider</string>
+       </property>
+       <property name="shortcut" >
+        <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+       </property>
+       <property name="autoDefault" >
+        <bool>true</bool>
+       </property>
+       <property name="default" >
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer_2" >
+       <property name="orientation" >
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0" >
+        <size>
+         <width>254</width>
+         <height>27</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
   </layout>
  </widget>
  <layoutdefault spacing="6" margin="11" />
index 984a27d3d9921ea3b53d2b80b19f9ad7d8c1d7de..b576f85fc8b58801c8a0b1f97fff3ae4eb5aa807 100644 (file)
@@ -353,12 +353,6 @@ valeurs seront effectivement prises en compte</string>
        <property name="shortcut" >
         <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
        </property>
-       <property name="autoDefault" >
-        <bool>true</bool>
-       </property>
-       <property name="default" >
-        <bool>true</bool>
-       </property>
       </widget>
      </item>
      <item>
index 291b7b33a0facc18bcb7783e0ae06bce2064a4ce..4ab0ed9a321e89554af68e2af150d8101710f439 100644 (file)
@@ -57,7 +57,7 @@
    <item row="0" column="0" colspan="3" >
     <widget class="QTabWidget" name="TWChoix" >
      <property name="currentIndex" >
-      <number>0</number>
+      <number>2</number>
      </property>
      <widget class="QWidget" name="MotClef" >
       <attribute name="title" >
        <property name="geometry" >
         <rect>
          <x>30</x>
-         <y>40</y>
+         <y>10</y>
          <width>440</width>
          <height>41</height>
         </rect>
       <widget class="QLineEdit" name="LENomFichier" >
        <property name="geometry" >
         <rect>
-         <x>18</x>
-         <y>117</y>
+         <x>20</x>
+         <y>50</y>
          <width>450</width>
          <height>40</height>
         </rect>
       <widget class="QPushButton" name="BBrowse" >
        <property name="geometry" >
         <rect>
-         <x>280</x>
-         <y>240</y>
+         <x>20</x>
+         <y>110</y>
          <width>161</width>
          <height>41</height>
         </rect>
       <widget class="QPushButton" name="BChangeFile" >
        <property name="geometry" >
         <rect>
-         <x>280</x>
-         <y>290</y>
+         <x>20</x>
+         <y>160</y>
          <width>161</width>
          <height>41</height>
         </rect>
@@ -300,6 +300,9 @@ p, li { white-space: pre-wrap; }
     </widget>
    </item>
   </layout>
+  <zorder>bOk</zorder>
+  <zorder>Commentaire</zorder>
+  <zorder>TWChoix</zorder>
  </widget>
  <layoutdefault spacing="6" margin="11" />
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
index 0e3a9fe3c65fe243ca7e754270316f184061fd10..f7eb24830e09a2b8297e80c7a5e7dced186be4d2 100644 (file)
@@ -1,26 +1,63 @@
-<ui version="4.0" stdsetdef="1" >
-  <author></author>
-  <comment></comment>
-  <exportmacro></exportmacro>
-  <class>DLisParam</class>
-  <widget class="QWidget" name="DLisParam" >
-    <property name="geometry" >
-      <rect>
-        <x>0</x>
-        <y>0</y>
-        <width>413</width>
-        <height>394</height>
-      </rect>
-    </property>
-    <property name="windowTitle" >
-      <string>Sélection de paramétres</string>
-    </property>
-    <layout class="QGridLayout" >
-      <item row="0" column="0" >
-        <widget class="QListWidget" name="LBParam" />
-      </item>
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>DLisParam</class>
+ <widget class="QWidget" name="DLisParam">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>420</width>
+    <height>425</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Sélection de paramétres</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QListWidget" name="LBParam"/>
+   </item>
+   <item row="1" column="0">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>128</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="BOk">
+       <property name="text">
+        <string>Valider</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer_2">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>168</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
     </layout>
-  </widget>
-  <layoutdefault spacing="6" margin="11" />
-  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <resources/>
+ <connections/>
 </ui>
diff --git a/UiQT4/desMatrice.ui b/UiQT4/desMatrice.ui
new file mode 100644 (file)
index 0000000..99a3f22
--- /dev/null
@@ -0,0 +1,67 @@
+<ui version="4.0" >
+ <class>desMatrice</class>
+ <widget class="QDialog" name="desMatrice" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Dialog</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout_2" >
+   <item row="0" column="0" >
+    <widget class="QTableWidget" name="TBMatrice" />
+   </item>
+   <item row="1" column="0" >
+    <widget class="QSplitter" name="splitter" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <widget class="QWidget" name="layoutWidget" >
+      <layout class="QGridLayout" name="gridLayout" >
+       <item row="0" column="0" >
+        <spacer name="horizontalSpacer" >
+         <property name="orientation" >
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>140</width>
+           <height>24</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="0" column="1" >
+        <widget class="QPushButton" name="BOk" >
+         <property name="text" >
+          <string>Valider</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="2" >
+        <spacer name="horizontalSpacer_2" >
+         <property name="orientation" >
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>138</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/UiQT4/desPixmap.ui b/UiQT4/desPixmap.ui
new file mode 100644 (file)
index 0000000..b67a335
--- /dev/null
@@ -0,0 +1,27 @@
+<ui version="4.0" >
+ <class>LabelPixmap</class>
+ <widget class="QDialog" name="LabelPixmap" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>PDF de la loi</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" >
+   <item row="0" column="0" >
+    <widget class="QLabel" name="labelPix" >
+     <property name="text" >
+      <string/>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
index 265ee2070c59eb0c2c6c1a75fed23fa2c84e2201..d94ed6dae64f6c04d3ffa441c91bc2da79904774 100644 (file)
@@ -26,7 +26,7 @@
        <string>Saisir Valeur</string>
       </attribute>
       <layout class="QGridLayout" name="gridLayout_2" >
-       <item row="0" column="0" >
+       <item rowspan="7" row="0" column="0" >
         <layout class="QVBoxLayout" name="verticalLayout_2" >
          <item>
           <widget class="QLabel" name="textLabel1" >
         </layout>
        </item>
        <item row="0" column="1" >
-        <layout class="QVBoxLayout" name="verticalLayout_5" >
-         <item>
-          <layout class="QGridLayout" name="gridLayout" >
-           <item row="0" column="0" colspan="3" >
-            <layout class="QHBoxLayout" name="horizontalLayout" >
-             <item>
-              <widget class="QLabel" name="textLabel1_2" >
-               <property name="minimumSize" >
-                <size>
-                 <width>61</width>
-                 <height>21</height>
-                </size>
-               </property>
-               <property name="maximumSize" >
-                <size>
-                 <width>61</width>
-                 <height>21</height>
-                </size>
-               </property>
-               <property name="text" >
-                <string>&lt;font size="+1">Valeur&lt;/font></string>
-               </property>
-               <property name="wordWrap" >
-                <bool>false</bool>
-               </property>
-              </widget>
-             </item>
-             <item>
-              <spacer name="spacer6" >
-               <property name="orientation" >
-                <enum>Qt::Horizontal</enum>
-               </property>
-               <property name="sizeType" >
-                <enum>QSizePolicy::Expanding</enum>
-               </property>
-               <property name="sizeHint" stdset="0" >
-                <size>
-                 <width>168</width>
-                 <height>18</height>
-                </size>
-               </property>
-              </spacer>
-             </item>
-            </layout>
-           </item>
-           <item row="1" column="0" >
-            <widget class="QToolButton" name="BAjout1Val" >
-             <property name="sizePolicy" >
-              <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
+        <layout class="QGridLayout" name="gridLayout" >
+         <item row="0" column="0" colspan="3" >
+          <layout class="QHBoxLayout" name="horizontalLayout" >
+           <item>
+            <widget class="QLabel" name="textLabel1_2" >
              <property name="minimumSize" >
               <size>
-               <width>40</width>
-               <height>30</height>
+               <width>61</width>
+               <height>21</height>
               </size>
              </property>
-             <property name="toolTip" >
-              <string>ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)</string>
+             <property name="maximumSize" >
+              <size>
+               <width>61</width>
+               <height>21</height>
+              </size>
              </property>
              <property name="text" >
-              <string/>
+              <string>&lt;font size="+1">Valeur&lt;/font></string>
              </property>
-             <property name="icon" >
-              <iconset>
-               <normaloff>../Editeur/icons/arrow_left.png</normaloff>../Editeur/icons/arrow_left.png</iconset>
+             <property name="wordWrap" >
+              <bool>false</bool>
              </property>
             </widget>
            </item>
-           <item row="1" column="1" colspan="2" >
-            <widget class="QLineEdit" name="LEValeur" >
-             <property name="sizePolicy" >
-              <sizepolicy vsizetype="Minimum" hsizetype="Minimum" >
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
+           <item>
+            <spacer name="spacer6" >
+             <property name="orientation" >
+              <enum>Qt::Horizontal</enum>
              </property>
-             <property name="minimumSize" >
+             <property name="sizeType" >
+              <enum>QSizePolicy::Expanding</enum>
+             </property>
+             <property name="sizeHint" stdset="0" >
               <size>
-               <width>220</width>
-               <height>30</height>
+               <width>168</width>
+               <height>18</height>
               </size>
              </property>
-            </widget>
+            </spacer>
            </item>
-           <item row="2" column="0" >
-            <widget class="QToolButton" name="BSup1Val" >
-             <property name="sizePolicy" >
-              <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
+          </layout>
+         </item>
+         <item row="1" column="0" >
+          <widget class="QToolButton" name="BAjout1Val" >
+           <property name="sizePolicy" >
+            <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="minimumSize" >
+            <size>
+             <width>40</width>
+             <height>30</height>
+            </size>
+           </property>
+           <property name="toolTip" >
+            <string>ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)</string>
+           </property>
+           <property name="text" >
+            <string/>
+           </property>
+           <property name="icon" >
+            <iconset>
+             <normaloff>../Editeur/icons/arrow_left.png</normaloff>../Editeur/icons/arrow_left.png</iconset>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="1" colspan="2" >
+          <widget class="QLineEdit" name="LEValeur" >
+           <property name="sizePolicy" >
+            <sizepolicy vsizetype="Minimum" hsizetype="Minimum" >
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="minimumSize" >
+            <size>
+             <width>220</width>
+             <height>30</height>
+            </size>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="0" >
+          <widget class="QToolButton" name="BSup1Val" >
+           <property name="sizePolicy" >
+            <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="minimumSize" >
+            <size>
+             <width>40</width>
+             <height>30</height>
+            </size>
+           </property>
+           <property name="toolTip" >
+            <string>enleve l occurence selectionnee</string>
+           </property>
+           <property name="text" >
+            <string/>
+           </property>
+           <property name="icon" >
+            <iconset>
+             <normaloff>../Editeur/icons/arrow_right.png</normaloff>../Editeur/icons/arrow_right.png</iconset>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="1" >
+          <widget class="QToolButton" name="BSalome" >
+           <property name="sizePolicy" >
+            <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="minimumSize" >
+            <size>
+             <width>40</width>
+             <height>30</height>
+            </size>
+           </property>
+           <property name="toolTip" >
+            <string>ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)</string>
+           </property>
+           <property name="text" >
+            <string/>
+           </property>
+           <property name="icon" >
+            <iconset>
+             <normaloff>image240.png</normaloff>image240.png</iconset>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="2" >
+          <widget class="QPushButton" name="BView2D" >
+           <property name="minimumSize" >
+            <size>
+             <width>120</width>
+             <height>30</height>
+            </size>
+           </property>
+           <property name="text" >
+            <string>Visualiser</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item row="1" column="1" >
+        <spacer name="verticalSpacer" >
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>20</width>
+           <height>158</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="2" column="1" >
+        <layout class="QHBoxLayout" name="horizontalLayout_2" >
+         <item>
+          <spacer name="spacer5" >
+           <property name="orientation" >
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeType" >
+            <enum>QSizePolicy::Expanding</enum>
+           </property>
+           <property name="sizeHint" stdset="0" >
+            <size>
+             <width>150</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item>
+          <layout class="QVBoxLayout" name="verticalLayout" >
+           <item>
+            <widget class="QPushButton" name="bParam" >
              <property name="minimumSize" >
               <size>
-               <width>40</width>
+               <width>100</width>
                <height>30</height>
               </size>
              </property>
-             <property name="toolTip" >
-              <string>enleve l occurence selectionnee</string>
-             </property>
-             <property name="text" >
-              <string/>
-             </property>
-             <property name="icon" >
-              <iconset>
-               <normaloff>../../EficasV1/Editeur/icons/arrow_right.png</normaloff>../../EficasV1/Editeur/icons/arrow_right.png</iconset>
-             </property>
-            </widget>
-           </item>
-           <item row="2" column="1" >
-            <widget class="QToolButton" name="BSalome" >
-             <property name="sizePolicy" >
-              <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="minimumSize" >
+             <property name="maximumSize" >
               <size>
-               <width>40</width>
+               <width>100</width>
                <height>30</height>
               </size>
              </property>
              <property name="toolTip" >
-              <string>ajoute la valeur saisie sous l occurence selectionnée (en fin de liste si il n y a pas de selection)</string>
+              <string>suppression du mot clef</string>
              </property>
              <property name="text" >
-              <string/>
+              <string>&amp;Parametres</string>
+             </property>
+             <property name="shortcut" >
+              <string>Alt+P</string>
              </property>
-             <property name="icon" >
-              <iconset>
-               <normaloff>image240.png</normaloff>image240.png</iconset>
+             <property name="autoDefault" >
+              <bool>true</bool>
              </property>
             </widget>
            </item>
-           <item row="2" column="2" >
-            <widget class="QPushButton" name="BView2D" >
+           <item>
+            <widget class="QPushButton" name="bImport" >
              <property name="minimumSize" >
               <size>
-               <width>120</width>
+               <width>100</width>
+               <height>30</height>
+              </size>
+             </property>
+             <property name="maximumSize" >
+              <size>
+               <width>100</width>
                <height>30</height>
               </size>
              </property>
+             <property name="toolTip" >
+              <string>suppression du mot clef</string>
+             </property>
              <property name="text" >
-              <string>Visualiser</string>
+              <string>&amp;Importer</string>
+             </property>
+             <property name="shortcut" >
+              <string>Alt+I</string>
+             </property>
+             <property name="autoDefault" >
+              <bool>true</bool>
              </property>
             </widget>
            </item>
           </layout>
          </item>
+        </layout>
+       </item>
+       <item row="3" column="1" >
+        <spacer name="spacer3_3" >
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeType" >
+          <enum>QSizePolicy::Expanding</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>289</width>
+           <height>100</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="4" column="1" >
+        <widget class="QLabel" name="Commentaire" >
+         <property name="minimumSize" >
+          <size>
+           <width>298</width>
+           <height>61</height>
+          </size>
+         </property>
+         <property name="text" >
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="1" >
+        <spacer name="spacer3_2" >
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeType" >
+          <enum>QSizePolicy::Expanding</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>265</width>
+           <height>48</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="6" column="1" >
+        <layout class="QHBoxLayout" name="horizontalLayout_3" >
          <item>
-          <spacer name="verticalSpacer" >
+          <spacer name="horizontalSpacer_2" >
            <property name="orientation" >
-            <enum>Qt::Vertical</enum>
+            <enum>Qt::Horizontal</enum>
            </property>
            <property name="sizeHint" stdset="0" >
             <size>
-             <width>20</width>
-             <height>158</height>
+             <width>118</width>
+             <height>27</height>
             </size>
            </property>
           </spacer>
          </item>
          <item>
-          <layout class="QVBoxLayout" name="verticalLayout_4" >
-           <item>
-            <layout class="QHBoxLayout" name="horizontalLayout_2" >
-             <item>
-              <spacer name="spacer5" >
-               <property name="orientation" >
-                <enum>Qt::Horizontal</enum>
-               </property>
-               <property name="sizeType" >
-                <enum>QSizePolicy::Expanding</enum>
-               </property>
-               <property name="sizeHint" stdset="0" >
-                <size>
-                 <width>150</width>
-                 <height>20</height>
-                </size>
-               </property>
-              </spacer>
-             </item>
-             <item>
-              <layout class="QVBoxLayout" name="verticalLayout" >
-               <item>
-                <widget class="QPushButton" name="bParam" >
-                 <property name="minimumSize" >
-                  <size>
-                   <width>100</width>
-                   <height>30</height>
-                  </size>
-                 </property>
-                 <property name="maximumSize" >
-                  <size>
-                   <width>100</width>
-                   <height>30</height>
-                  </size>
-                 </property>
-                 <property name="toolTip" >
-                  <string>suppression du mot clef</string>
-                 </property>
-                 <property name="text" >
-                  <string>&amp;Parametres</string>
-                 </property>
-                 <property name="shortcut" >
-                  <string>Alt+P</string>
-                 </property>
-                 <property name="autoDefault" >
-                  <bool>true</bool>
-                 </property>
-                </widget>
-               </item>
-               <item>
-                <widget class="QPushButton" name="bImport" >
-                 <property name="minimumSize" >
-                  <size>
-                   <width>100</width>
-                   <height>30</height>
-                  </size>
-                 </property>
-                 <property name="maximumSize" >
-                  <size>
-                   <width>100</width>
-                   <height>30</height>
-                  </size>
-                 </property>
-                 <property name="toolTip" >
-                  <string>suppression du mot clef</string>
-                 </property>
-                 <property name="text" >
-                  <string>&amp;Importer</string>
-                 </property>
-                 <property name="shortcut" >
-                  <string>Alt+I</string>
-                 </property>
-                 <property name="autoDefault" >
-                  <bool>true</bool>
-                 </property>
-                </widget>
-               </item>
-              </layout>
-             </item>
-            </layout>
-           </item>
-           <item>
-            <layout class="QVBoxLayout" name="verticalLayout_3" >
-             <item>
-              <spacer name="spacer3_3" >
-               <property name="orientation" >
-                <enum>Qt::Vertical</enum>
-               </property>
-               <property name="sizeType" >
-                <enum>QSizePolicy::Expanding</enum>
-               </property>
-               <property name="sizeHint" stdset="0" >
-                <size>
-                 <width>265</width>
-                 <height>48</height>
-                </size>
-               </property>
-              </spacer>
-             </item>
-             <item>
-              <widget class="QLabel" name="Commentaire" >
-               <property name="minimumSize" >
-                <size>
-                 <width>251</width>
-                 <height>21</height>
-                </size>
-               </property>
-               <property name="text" >
-                <string/>
-               </property>
-              </widget>
-             </item>
-             <item>
-              <spacer name="spacer3_2" >
-               <property name="orientation" >
-                <enum>Qt::Vertical</enum>
-               </property>
-               <property name="sizeType" >
-                <enum>QSizePolicy::Expanding</enum>
-               </property>
-               <property name="sizeHint" stdset="0" >
-                <size>
-                 <width>265</width>
-                 <height>48</height>
-                </size>
-               </property>
-              </spacer>
-             </item>
-            </layout>
-           </item>
-           <item>
-            <layout class="QHBoxLayout" name="horizontalLayout_3" >
-             <item>
-              <spacer name="horizontalSpacer_2" >
-               <property name="orientation" >
-                <enum>Qt::Horizontal</enum>
-               </property>
-               <property name="sizeHint" stdset="0" >
-                <size>
-                 <width>118</width>
-                 <height>27</height>
-                </size>
-               </property>
-              </spacer>
-             </item>
-             <item>
-              <widget class="QPushButton" name="bOk" >
-               <property name="minimumSize" >
-                <size>
-                 <width>160</width>
-                 <height>30</height>
-                </size>
-               </property>
-               <property name="maximumSize" >
-                <size>
-                 <width>160</width>
-                 <height>30</height>
-                </size>
-               </property>
-               <property name="toolTip" >
-                <string>validation de la saisie</string>
-               </property>
-               <property name="text" >
-                <string>&amp;Valider</string>
-               </property>
-               <property name="shortcut" >
-                <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
-               </property>
-               <property name="autoDefault" >
-                <bool>true</bool>
-               </property>
-               <property name="default" >
-                <bool>false</bool>
-               </property>
-              </widget>
-             </item>
-            </layout>
-           </item>
-          </layout>
+          <widget class="QPushButton" name="bOk" >
+           <property name="minimumSize" >
+            <size>
+             <width>160</width>
+             <height>30</height>
+            </size>
+           </property>
+           <property name="maximumSize" >
+            <size>
+             <width>160</width>
+             <height>30</height>
+            </size>
+           </property>
+           <property name="toolTip" >
+            <string>validation de la saisie</string>
+           </property>
+           <property name="text" >
+            <string>&amp;Valider</string>
+           </property>
+           <property name="shortcut" >
+            <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
+           </property>
+           <property name="autoDefault" >
+            <bool>true</bool>
+           </property>
+           <property name="default" >
+            <bool>false</bool>
+           </property>
+          </widget>
          </item>
         </layout>
        </item>
index ad9c6a75249ce3849fc7c42a5b7dca15c8b5eca6..4fd8997208bc79e4638ebd294580ed8c2cf6e321 100644 (file)
@@ -1,7 +1,8 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>DUnBase</class>
- <widget class="QWidget" name="DUnBase" >
-  <property name="geometry" >
+ <widget class="QWidget" name="DUnBase">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <height>480</height>
    </rect>
   </property>
-  <property name="minimumSize" >
+  <property name="minimumSize">
    <size>
     <width>350</width>
     <height>0</height>
    </size>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>DUnIn</string>
   </property>
-  <layout class="QGridLayout" >
-   <item row="0" column="0" >
-    <widget class="QTabWidget" name="tabuniqueinto" >
-     <widget class="QWidget" name="Widget8" >
-      <attribute name="title" >
+  <layout class="QGridLayout">
+   <item row="0" column="0">
+    <widget class="QTabWidget" name="tabuniqueinto">
+     <widget class="QWidget" name="Widget8">
+      <attribute name="title">
        <string>Saisir Valeur</string>
       </attribute>
-      <layout class="QGridLayout" name="gridLayout>
-       <item row="0" column="0" colspan="4" >
-        <layout class="QHBoxLayout" name="horizontalLayout" >
+      <layout class="QGridLayout" name="gridLayout_2">
+       <item row="0" column="0">
+        <layout class="QHBoxLayout" name="horizontalLayout">
          <item>
-          <widget class="QLabel" name="textLabel2" >
-           <property name="text" >
-            <string>&lt;b>&lt;u>&lt;p align="center">Valeur: &lt;/p>&lt;/u>&lt;/b></string>
+          <widget class="QLabel" name="textLabel2">
+           <property name="text">
+            <string>&lt;b&gt;&lt;u&gt;&lt;p align=&quot;center&quot;&gt;Valeur: &lt;/p&gt;&lt;/u&gt;&lt;/b&gt;</string>
            </property>
-           <property name="wordWrap" >
+           <property name="wordWrap">
             <bool>false</bool>
            </property>
           </widget>
          </item>
          <item>
-          <widget class="QLineEdit" name="lineEditVal" >
-           <property name="minimumSize" >
+          <widget class="QLineEdit" name="lineEditVal">
+           <property name="minimumSize">
             <size>
              <width>290</width>
              <height>50</height>
          </item>
         </layout>
        </item>
-       <item row="1" column="2" >
-        <spacer name="verticalSpacer" >
-         <property name="orientation" >
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" stdset="0" >
-          <size>
-           <width>137</width>
-           <height>43</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-       <item rowspan="2" row="1" column="3" >
-        <widget class="QPushButton" name="bParametres" >
-         <property name="sizePolicy" >
-          <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize" >
-          <size>
-           <width>140</width>
-           <height>45</height>
-          </size>
-         </property>
-         <property name="text" >
-          <string>Parametres</string>
-         </property>
-        </widget>
-       </item>
-       <item row="2" column="0" colspan="3" >
-        <spacer name="horizontalSpacer_3" >
-         <property name="orientation" >
-          <enum>Qt::Horizontal</enum>
-         </property>
-         <property name="sizeHint" stdset="0" >
-          <size>
-           <width>293</width>
-           <height>20</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-       <item row="3" column="0" >
-        <widget class="QPushButton" name="BSalome" >
-         <property name="minimumSize" >
-          <size>
-           <width>142</width>
-           <height>40</height>
-          </size>
-         </property>
-         <property name="text" >
-          <string/>
-         </property>
-         <property name="icon" >
-          <iconset>
-           <normaloff>image240.png</normaloff>image240.png</iconset>
-         </property>
-        </widget>
-       </item>
-       <item row="3" column="1" >
-        <spacer name="horizontalSpacer_5" >
-         <property name="orientation" >
-          <enum>Qt::Horizontal</enum>
-         </property>
-         <property name="sizeHint" stdset="0" >
-          <size>
-           <width>138</width>
-           <height>20</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-       <item rowspan="2" row="3" column="2" >
-        <spacer name="spacer4" >
-         <property name="orientation" >
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeType" >
-          <enum>QSizePolicy::Expanding</enum>
-         </property>
-         <property name="sizeHint" stdset="0" >
-          <size>
-           <width>137</width>
-           <height>77</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-       <item row="3" column="3" >
-        <widget class="QPushButton" name="BView2D" >
-         <property name="sizePolicy" >
-          <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize" >
-          <size>
-           <width>140</width>
-           <height>40</height>
-          </size>
-         </property>
-         <property name="text" >
-          <string>Visualiser</string>
-         </property>
-        </widget>
-       </item>
-       <item rowspan="2" row="4" column="3" >
-        <widget class="QPushButton" name="BFichier" >
-         <property name="sizePolicy" >
-          <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize" >
-          <size>
-           <width>140</width>
-           <height>40</height>
-          </size>
-         </property>
-         <property name="text" >
-          <string>Fichier</string>
-         </property>
-         <property name="icon" >
-          <iconset>
-           <normaloff>image240.png</normaloff>image240.png</iconset>
-         </property>
-        </widget>
-       </item>
-       <item row="5" column="0" colspan="3" >
-        <spacer name="horizontalSpacer_4" >
-         <property name="orientation" >
-          <enum>Qt::Horizontal</enum>
-         </property>
-         <property name="sizeHint" stdset="0" >
-          <size>
-           <width>293</width>
-           <height>20</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-       <item row="6" column="0" colspan="4" >
-        <layout class="QVBoxLayout" name="verticalLayout" >
-         <item>
-          <spacer name="verticalSpacer_2" >
-           <property name="orientation" >
-            <enum>Qt::Vertical</enum>
+       <item row="1" column="0">
+        <layout class="QGridLayout" name="gridLayout">
+         <item row="0" column="0">
+          <spacer name="horizontalSpacer_3">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
            </property>
-           <property name="sizeHint" stdset="0" >
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>293</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item row="0" column="1">
+          <widget class="QPushButton" name="BSalome">
+           <property name="minimumSize">
             <size>
-             <width>20</width>
+             <width>142</width>
              <height>40</height>
             </size>
            </property>
+           <property name="text">
+            <string>Selectionner</string>
+           </property>
+           <property name="icon">
+            <iconset>
+             <normaloff>image240.png</normaloff>image240.png</iconset>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="2">
+          <widget class="QPushButton" name="bParametres">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="minimumSize">
+            <size>
+             <width>140</width>
+             <height>45</height>
+            </size>
+           </property>
+           <property name="text">
+            <string>Parametres</string>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="0">
+          <spacer name="horizontalSpacer_5">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>138</width>
+             <height>20</height>
+            </size>
+           </property>
           </spacer>
          </item>
-         <item>
-          <widget class="QLabel" name="Commentaire" >
-           <property name="text" >
-            <string>TextLabel</string>
+         <item row="1" column="1">
+          <widget class="QPushButton" name="BView2D">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="minimumSize">
+            <size>
+             <width>140</width>
+             <height>40</height>
+            </size>
+           </property>
+           <property name="text">
+            <string>Visualiser</string>
            </property>
           </widget>
          </item>
-         <item>
-          <spacer name="verticalSpacer_3" >
-           <property name="orientation" >
-            <enum>Qt::Vertical</enum>
+         <item row="1" column="2">
+          <widget class="QPushButton" name="BFichier">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
            </property>
-           <property name="sizeHint" stdset="0" >
+           <property name="minimumSize">
             <size>
-             <width>20</width>
+             <width>140</width>
              <height>40</height>
             </size>
            </property>
-          </spacer>
+           <property name="text">
+            <string>Fichier</string>
+           </property>
+           <property name="icon">
+            <iconset>
+             <normaloff>image240.png</normaloff>image240.png</iconset>
+           </property>
+          </widget>
          </item>
         </layout>
        </item>
-       <item row="7" column="0" colspan="4" >
-        <layout class="QHBoxLayout" name="horizontalLayout_2" >
+       <item row="2" column="0">
+        <widget class="QLabel" name="Commentaire">
+         <property name="text">
+          <string>TextLabel</string>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="0">
+        <layout class="QHBoxLayout" name="horizontalLayout_2">
          <item>
-          <spacer name="horizontalSpacer" >
-           <property name="orientation" >
+          <spacer name="horizontalSpacer">
+           <property name="orientation">
             <enum>Qt::Horizontal</enum>
            </property>
-           <property name="sizeHint" stdset="0" >
+           <property name="sizeHint" stdset="0">
             <size>
              <width>40</width>
              <height>20</height>
           </spacer>
          </item>
          <item>
-          <widget class="QPushButton" name="bOk" >
-           <property name="sizePolicy" >
-            <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+          <widget class="QPushButton" name="bOk">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
              <horstretch>0</horstretch>
              <verstretch>0</verstretch>
             </sizepolicy>
            </property>
-           <property name="minimumSize" >
+           <property name="minimumSize">
             <size>
              <width>140</width>
              <height>40</height>
             </size>
            </property>
-           <property name="toolTip" >
+           <property name="toolTip">
             <string>validation de la saisie</string>
            </property>
-           <property name="text" >
+           <property name="text">
             <string>&amp;Valider</string>
            </property>
-           <property name="shortcut" >
+           <property name="shortcut">
             <string>Shift+A, Alt+A, Alt+A, Alt+A</string>
            </property>
-           <property name="autoDefault" >
-            <bool>true</bool>
-           </property>
-           <property name="default" >
-            <bool>true</bool>
-           </property>
           </widget>
          </item>
          <item>
-          <spacer name="horizontalSpacer_2" >
-           <property name="orientation" >
+          <spacer name="horizontalSpacer_2">
+           <property name="orientation">
             <enum>Qt::Horizontal</enum>
            </property>
-           <property name="sizeHint" stdset="0" >
+           <property name="sizeHint" stdset="0">
             <size>
              <width>40</width>
              <height>20</height>
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="11" />
+ <layoutdefault spacing="6" margin="11"/>
  <tabstops>
   <tabstop>lineEditVal</tabstop>
-  <tabstop>bOk</tabstop>
-  <tabstop>BSalome</tabstop>
-  <tabstop>BView2D</tabstop>
  </tabstops>
  <resources/>
  <connections/>
index 8327014dffd7bea727ae85c1641b2b7a856596f2..241af709b18ab9bc220c1c85eaec3e2c24af0d3d 100644 (file)
@@ -8,9 +8,13 @@ PY_FILES = desChoixCata.py desCommande.py desCommentaire.py desError.py desFormu
        desPlusieursBase.py desPlusieursInto.py desPoursuite.py desRacine.py desSelectVal.py \
        desUniqueASSD.py desUniqueBase.py desUniqueComp.py desUniqueInto.py desUniqueSDCOInto.py \
        desUniqueSDCO.py desVisu.py  aideQT.py OptionsEditeur.py OptionsPdf.py myMain.py \
-       desViewTexte.py
+       desViewTexte.py desPixmap.py desMatrice.py OptionsOT.py OptionsCuve.py desChoixMap.py \
+        OptionsMAP.py
 
 %.py:%.ui
        ${PYUIC} -x -o $@ $<
 
 all : $(PY_FILES)
+clean :
+       -rm -rf $(PY_FILES) *.pyc
+
index d658dd50ab038516ed97db0708f3829d75370d22..cf9dbea54cfb4bfa0c655bde6fa111bac79e5117 100644 (file)
@@ -19,7 +19,7 @@
      <x>0</x>
      <y>0</y>
      <width>1383</width>
-     <height>29</height>
+     <height>32</height>
     </rect>
    </property>
    <widget class="QMenu" name="menuFichier" >
@@ -44,6 +44,7 @@
     <addaction name="actionCouper" />
     <addaction name="actionCopier" />
     <addaction name="actionColler" />
+    <addaction name="actionSupprimer" />
    </widget>
    <widget class="QMenu" name="menuJdC" >
     <property name="title" >
@@ -57,6 +58,8 @@
     <property name="title" >
      <string>&amp;Aide</string>
     </property>
+    <addaction name="actionEficas" />
+    <addaction name="actionVersion" />
    </widget>
    <widget class="QMenu" name="menuOptions" >
     <property name="title" >
     <addaction name="actionParametres_Eficas" />
     <addaction name="actionLecteur_Pdf" />
    </widget>
-   <widget class="QMenu" name="menuTraduction" >
-    <property name="title" >
-     <string>Traduction</string>
-    </property>
-    <addaction name="actionTraduitV7V8" />
-    <addaction name="actionTraduitV8V9" />
-   </widget>
    <widget class="QMenu" name="menuPatrons" >
     <property name="title" >
      <string>Patrons</string>
@@ -82,7 +78,6 @@
    <addaction name="menuJdC" />
    <addaction name="menu_Aide" />
    <addaction name="menuOptions" />
-   <addaction name="menuTraduction" />
    <addaction name="menuPatrons" />
   </widget>
   <widget class="QStatusBar" name="statusbar" />
    <property name="shortcut" >
     <string>Ctrl+X</string>
    </property>
+   <property name="shortcutContext" >
+    <enum>Qt::ApplicationShortcut</enum>
+   </property>
   </action>
   <action name="actionCopier" >
    <property name="icon" >
    <property name="shortcut" >
     <string>Ctrl+C</string>
    </property>
+   <property name="shortcutContext" >
+    <enum>Qt::ApplicationShortcut</enum>
+   </property>
   </action>
   <action name="actionColler" >
    <property name="icon" >
    <property name="shortcut" >
     <string>Ctrl+V</string>
    </property>
+   <property name="shortcutContext" >
+    <enum>Qt::ApplicationShortcut</enum>
+   </property>
   </action>
   <action name="actionQuitter" >
    <property name="text" >
     <string>Lecteur Pdf</string>
    </property>
   </action>
-  <action name="actionTraduitV7V8" >
+  <action name="actionEficas" >
+   <property name="text" >
+    <string>Eficas</string>
+   </property>
+  </action>
+  <action name="actionVersion" >
    <property name="text" >
-    <string>TraduitV7V8</string>
+    <string>Version</string>
    </property>
   </action>
-  <action name="actionTraduitV8V9" >
+  <action name="actionSupprimer" >
    <property name="text" >
-    <string>TraduitV8V9</string>
+    <string>Supprimer</string>
    </property>
   </action>
  </widget>
diff --git a/Validation/CMakeLists.txt b/Validation/CMakeLists.txt
new file mode 100644 (file)
index 0000000..e3ce058
--- /dev/null
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+# Installation de tous les fichiers Python du repertoire et des sous-repertoires (sauf CVS)
+install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+          DESTINATION ${CMAKE_INSTALL_PREFIX}
+         FILES_MATCHING PATTERN *.py
+          PATTERN CVS EXCLUDE
+       )
+
+
+### Local Variables:
+### mode: cmake
+### End:
index a6b4b3631ea75e4b58229b2bc0dd66eceaca1c60..7e81be47fae77dff20528582108e53a45cff611f 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF V_AU_MOINS_UN Validation  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF V_AU_MOINS_UN Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index bd8b77620b26fee5b8ffc4e4ebe2685cafd08811..ddc76132c6d6261e8aab58731c5a16f8aaa15b14 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF V_AU_PLUS_UN Validation  DATE 28/01/2005   AUTEUR VABHHTS J.PELLET 
+#@ MODIF V_AU_PLUS_UN Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2005  EDF R&D                  WWW.CODE-ASTER.ORG
index 6f93c202d0127931950e067562c61f9584b47d08..649f8e32edd7ab08eec5d6e3f9e3ef58d05225a5 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF V_A_CLASSER Validation  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF V_A_CLASSER Validation  DATE 13/10/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -21,9 +22,6 @@
 # ======================================================================
 
 
-
-import types
-
 class A_CLASSER:
    """
       La règle A_CLASSER vérifie que ...
@@ -34,24 +32,22 @@ class A_CLASSER:
         print "Erreur à la création de la règle A_CLASSER(",args,")"
         return
       self.args=args
-      if type(args[0]) == types.TupleType:
+      if type(args[0]) == tuple:
         self.args0 = args[0]
-      elif type(args[0]) == types.StringType:
+      elif type(args[0]) == str:
         self.args0 = (args[0],)
       else :
         print "Le premier argument de :",args," doit etre un tuple ou une string"
-      if type(args[1]) == types.TupleType:
+      if type(args[1]) == tuple:
         self.args1 = args[1]
-      elif type(args[1]) == types.StringType:
+      elif type(args[1]) == str:
         self.args1 = (args[1],)
       else :
         print "Le deuxième argument de :",args," doit etre un tuple ou une string"
       # création de la liste des mcs
       liste = []
-      for arg0 in self.args0:
-        liste.append(arg0)
-      for arg1 in self.args1:
-        liste.append(arg1)
+      liste.extend(self.args0)
+      liste.extend(self.args1)
       self.mcs = liste
       self.init_couples_permis()
 
@@ -80,9 +76,7 @@ class A_CLASSER:
           couple.append(nom)
           if len(couple) == 2 :
             l_couples.append(tuple(couple))
-            couple=[]
-            if nom not in self.args1:
-              couple.append(nom)
+            couple = [nom,]
       if len(couple) > 0 :
         l_couples.append(tuple(couple))
       # l_couples peut etre vide si l'on n'a pas réussi à trouver au moins un
index 9170351a2871a70bfdb9ee9ca8b16644164fc66e..423ab1d6dcd5a6412158b92afb29ecfaf0e430ff 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF V_ENSEMBLE Validation  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF V_ENSEMBLE Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 2ec6d44adc8d1b006cb09910c2504d4f63a6cfd9..e2648af7d1510058ddc4e77f25529e75a857f843 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF V_ETAPE Validation  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF V_ETAPE Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index f477cff343b554e5cd668789c299a904326f6e26..52b95e488e19292d8c52703030606d48ad13344c 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF V_EXCLUS Validation  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF V_EXCLUS Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index b0536d6fa3b83b982158f66fffae5ccc93adf90f..35a84b48f0aec9f13254e6ed6988160313b8019d 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF V_JDC Validation  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF V_JDC Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 59764c8ff9027e7cbfe7bd751d055223ad09596f..9310812a29e9fc3fc88b5268df4d79962c5dbca5 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF V_MACRO_ETAPE Validation  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF V_MACRO_ETAPE Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 6a3f7a443f5001467a0612708ba4caa726ead6c8..e44b9d35f4e273d99c3adeaf26b043eece7e2bd4 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF V_MCBLOC Validation  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF V_MCBLOC Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 00b8209102a2eff648d69493171d022079b41ace..ff80d0872bd3438baf070e9976dd9068d6c56a9c 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF V_MCCOMPO Validation  DATE 22/05/2006   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF V_MCCOMPO Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index a9a186054635d21166db5b1301fc25d1f0d12ee7..19bb6419768701869c5a99b7591ee2453d4c6bbd 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF V_MCFACT Validation  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF V_MCFACT Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 0dc3fcdb0498acba36eeecc8fd16a6c181bdcaf8..690292d87e33057c24a88b4770775d6754608673 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF V_MCLIST Validation  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF V_MCLIST Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 28d0d661536767239ec0ce05f871c623aa51c894..88b55e528d7bb5b22c7bd452c8671d14ee91687f 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF V_MCSIMP Validation  DATE 16/05/2007   AUTEUR COURTOIS M.COURTOIS 
+#@ MODIF V_MCSIMP Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
@@ -153,6 +154,8 @@ class MCSIMP:
                        intoProto.adapt(val)
                    cardProto.adapt(lval)
                    if self.definition.validators:
+                       if hasattr(self.definition.validators,'set_MCSimp'):
+                          self.definition.validators.set_MCSimp(self)
                        self.definition.validators.convert(lval)
                except ValError,e:
                    valid=0
index eb6fbdfcfc4efc029ae618865938fcb0eaa21cc9..bab84a6e60059fb210a8d4da3672c39f20729b9e 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF V_PRESENT_ABSENT Validation  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF V_PRESENT_ABSENT Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 4848c2efe0596284a1f449ac696958567aaedc64..c06ef54fc2d7911cbadf1962aeb3b751b7270b64 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF V_PRESENT_PRESENT Validation  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF V_PRESENT_PRESENT Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index b41f75f4612f1e544c99750d88f0ed80ae22bf10..57506a1c982f528197c33595af0a67bebc6be754 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF V_PROC_ETAPE Validation  DATE 14/09/2004   AUTEUR MCOURTOI M.COURTOIS 
+#@ MODIF V_PROC_ETAPE Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
index 2f162976d5f5c4f3590bfa1b6c83f3a53d3782b1..464c0939fe895a7d046c9baf63753bbced5f4c03 100644 (file)
@@ -1,5 +1,6 @@
-#@ MODIF V_UN_PARMI Validation  DATE 16/09/2008   AUTEUR PELLET J.PELLET 
+#@ MODIF V_UN_PARMI Validation  DATE 07/09/2009   AUTEUR COURTOIS M.COURTOIS 
 # -*- coding: iso-8859-1 -*-
+# RESPONSABLE COURTOIS M.COURTOIS
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
diff --git a/convert/CMakeLists.txt b/convert/CMakeLists.txt
new file mode 100644 (file)
index 0000000..2ce0bfc
--- /dev/null
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+install ( FILES __init__.py parseur_python.py convert_python.py
+                convert_file_from_template.py
+          DESTINATION ${CMAKE_INSTALL_PREFIX}/convert
+        )
+
+# Installation des fichiers : Open TURNS
+if (WITH_OPENTURNS)
+  install ( FILES convert_openturns_study.py convert_openturns_wrapper.py
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/convert
+          )
+endif (WITH_OPENTURNS)
+
+# Installation des fichiers : Aster
+if (WITH_ASTER)
+  install ( FILES convert_asterv5.py
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/convert
+          )
+  install ( DIRECTORY Parserv5
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/convert
+           FILES_MATCHING PATTERN *.py PATTERN *.tag PATTERN README
+            PATTERN CVS EXCLUDE
+          )
+endif (WITH_ASTER)
+
+# Installation des fichiers : MAP
+if (WITH_MAP)
+  install ( FILES convert_map.py
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/convert
+          )
+endif (WITH_MAP)
+
+# Installation des fichiers : SEP
+if (WITH_SEP)
+  install ( FILES convert_SEP.py
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/convert
+          )
+endif (WITH_SEP)
+
+### Local Variables:
+### mode: cmake
+### End:
diff --git a/convert/convert_file_from_template.py b/convert/convert_file_from_template.py
new file mode 100644 (file)
index 0000000..39bd937
--- /dev/null
@@ -0,0 +1,28 @@
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+from convert_python import PythonParser
+
+def entryPoint():
+    """
+    Return a dictionary containing the description needed to load the plugin
+    """
+    return {'name' : 'file_from_template',
+            'factory' : PythonParser}
diff --git a/convert/convert_map.py b/convert/convert_map.py
new file mode 100644 (file)
index 0000000..4399814
--- /dev/null
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+"""
+"""
+
+import parseur_python
+from convert_python import *
+
+def entryPoint():
+   """
+       Retourne les informations nécessaires pour le chargeur de plugins
+       Ces informations sont retournées dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 'MAP',
+        # La factory pour créer une instance du plugin
+          'factory' : PythonParser,
+          }
+
+
diff --git a/convert/convert_perfect.py b/convert/convert_perfect.py
new file mode 100644 (file)
index 0000000..c5aed0e
--- /dev/null
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+"""
+"""
+
+import parseur_python
+from convert_python import *
+
+def entryPoint():
+   """
+       Retourne les informations nécessaires pour le chargeur de plugins
+       Ces informations sont retournées dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 'perfect',
+        # La factory pour créer une instance du plugin
+          'factory' : PythonParser,
+          }
+
+
index 68dc89052dcbf0a0aaf3ae7a528d9041a56c4014..0be93f2f7a65aa3d988ad3e7225c7c150a598494 100644 (file)
@@ -613,6 +613,8 @@ class PARSEUR_PYTHON:
              dict_reel_concept=construit_genea(epure2,self.appli.liste_simp_reel)
            else:
              dict_reel_concept={}
+        if nomConcept == "sansnom" :
+           nomConcept = ""
         if nomConcept !=None :
            if len(dict_reel_concept) != 0:
               self.appli.dict_reels[nomConcept]=dict_reel_concept
@@ -623,10 +625,12 @@ class PARSEUR_PYTHON:
         """
         self.appli=appli
         try:
+        #if 1:
             if not self.l_objets : self.analyse()
             txt=''
             for obj in self.l_objets:
                 txt = txt+str(obj)
+        #else :
         except ParserException:
             #Impossible de convertir le texte, on le retourne tel que
             txt=self.texte
diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt
new file mode 100644 (file)
index 0000000..7db19a8
--- /dev/null
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+install ( FILES __init__.py generator_python.py Formatage.py generator_aplat.py
+                generator_file_from_template.py
+          DESTINATION ${CMAKE_INSTALL_PREFIX}/generator
+        )
+
+# Installation des fichiers : Open TURNS
+if (WITH_OPENTURNS)
+  install ( FILES generator_openturns.py generator_openturns_study.py generator_openturns_wrapper.py
+                  OpenturnsBase.py OpenturnsSTD.py OpenturnsXML.py
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/generator
+          )
+endif (WITH_OPENTURNS)
+
+# Installation des fichiers : Aster
+if (WITH_ASTER)
+  install ( FILES generator_asterv5.py generator_GroupMA.py generator_vers3DSalome.py
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/generator
+          )
+endif (WITH_ASTER)
+
+# Installation des fichiers : MAP
+if (WITH_MAP)
+  install ( FILES generator_map.py
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/generator
+          )
+endif (WITH_MAP)
+
+
+# Installation des fichiers : SEP
+if (WITH_SEP)
+  install ( FILES generator_SEP.py tube.py
+            DESTINATION ${CMAKE_INSTALL_PREFIX}/generator
+          )
+endif (WITH_SEP)
+
+
+### Local Variables:
+### mode: cmake
+### End:
index 41b3870aab425d5700f6c3183e95ee20757de4fd..198af13f7e3470d69dee0e33c6ebc9aee8a748c8 100644 (file)
@@ -251,7 +251,7 @@ class Formatage :
       elif ',' in valeur:
         # il s'agit d'une liste de tuple
         # c est trop complique on ne splitte pas
-        if valeur[0:2]=='((' : 
+        if valeur[0:2]=='((' or valeur[0:2]=='[('
            s=s+valeur
            return s
         # il s'agit d'une liste
index 2b9d900c69e112a004dedb1cdce7b84ef7ffb46a..e027ed1e65bebe3559e67227937cf72b67c012a8 100644 (file)
@@ -34,11 +34,13 @@ class Generateur :
   #---------------------------------------------------------#
     self.ListeVariables = ListeVariables
     self.ListeVariablesIn = []
+    self.ListeVariablesOut = []
     self.DictLois = DictLois
     self.DictVariables = DictVariables
     self.DictMCVal = DictMCVal
     self.DictTypeVar = {}
     self.nbVarIn = 0
+    self.nbVarOut = 0
     self.creeInfoVar()
     self.appli = appli
     #
@@ -60,10 +62,10 @@ class Generateur :
   #--------------------------#
     try :
        gener = self.module.__dict__["MonSTDGenerateur"]
-       monSTDGenerateur=gener( self.DictMCVal, self.ListeVariablesIn, self.DictLois )
+       monSTDGenerateur=gener( self.DictMCVal, self.ListeVariablesIn, self.ListeVariablesOut, self.DictLois )
     except :
         from OpenturnsSTD import STDGenerateur
-        monSTDGenerateur = STDGenerateur( self.appli, self.DictMCVal, self.ListeVariablesIn, self.DictLois )
+        monSTDGenerateur = STDGenerateur( self.appli, self.DictMCVal, self.ListeVariablesIn, self.ListeVariablesOut, self.DictLois )
     return monSTDGenerateur
       
   def getXMLGenerateur(self) :
@@ -89,6 +91,11 @@ class Generateur :
       if DictVariable["Type"] == "in" : 
          self.nbVarIn = self.nbVarIn + 1
          self.ListeVariablesIn.append( DictVariable )
+         print "OpenturnsBase.py: new input variable = ", DictVariable
+      else:
+         self.nbVarOut = self.nbVarOut + 1
+         self.ListeVariablesOut.append( DictVariable )
+         print "OpenturnsBase.py: new output variable = ", DictVariable
       liste.append( DictVariable )
       num = num + 1
     self.ListeVariables = liste
index 5bd61e8c6d6047706fa3ce631c91159965e26375..7b845bcb774df1b67e359256fc9362235b7bfe9c 100644 (file)
@@ -25,19 +25,22 @@ headerSTD = """#! /usr/bin/env python
 
 # Chargement du module systeme
 import sys
-sys.path.append( '%s' )
+sys.path[:0]=['%s']
 
 # Chargement du module math
 import math
 
 # Chargement du module Open TURNS
 from openturns import *
-from openturns.viewer import ViewImage,StopViewer,WaitForViewer
 
 results = {}
 
 """
 
+viewerSTD = """
+from openturns.viewer import ViewImage,StopViewer,WaitForViewer
+"""
+
 footerSTD = """
 
 # Flush des messages en attente
@@ -56,12 +59,14 @@ class STDGenerateur :
   '''
   Generation du fichier python
   '''
-  def __init__ (self, appli, DictMCVal, ListeVariables, DictLois ) :
+  def __init__ (self, appli, DictMCVal, ListeVariablesIn, ListeVariablesOut, DictLois ) :
     self.DictMCVal = DictMCVal
-    self.ListeVariables = ListeVariables
+    self.ListeVariablesIn = ListeVariablesIn
+    self.ListeVariablesOut = ListeVariablesOut
     self.DictLois = DictLois
     #print "DictMCVal=", DictMCVal
-    #print "ListeVariables=", ListeVariables
+    print "ListeVariablesIn=", ListeVariablesIn
+    print "ListeVariablesOut=", ListeVariablesOut
     #print "DictLois=", DictLois
     self.texteSTD = defaultSTD
     self.OpenTURNS_path = appli.CONFIGURATION.OpenTURNS_path
@@ -83,7 +88,7 @@ class STDGenerateur :
       "Threshold Exceedence" :
       ( "ThresholdExceedence",
         { "Simulation" : "Simulation",
-          "Analytical" : "Analytical",
+          "FORM_SORM" : "Analytical",
           "MonteCarlo" : "MonteCarlo",
           "LHS" : "LHS",
           "ImportanceSampling" : "ImportanceSampling",
@@ -125,6 +130,10 @@ class STDGenerateur :
       "marginal" : "marginal",
       "collection" : "collection",
       "copula" : "copula",
+      "correlation" : "correlation",
+      "R" : "R",
+      "vars" : "vars",
+      "description" : "description",
       "inputRandomVector" : "inputRandomVector",
       "outputRandomVector" : "outputRandomVector",
       "myQuadraticCumul" : "myQuadraticCumul",
@@ -145,7 +154,10 @@ class STDGenerateur :
       "SRRCcoefficient" : 'results["SRRCcoefficient"]',
       "kernel" : "kernel",
       "kernelSmoothedDist" : "kernelSmoothedDist",
-      "kernelSmoothedPDF" : "kernelSmoothedPDF",
+      "kernelSmoothedPDFDrawing" : "kernelSmoothedPDFDrawing",
+      "kernelSmoothedGraph" : "kernelSmoothedGraph",
+      "meanVector" : "meanVector",
+      "importanceDensity" : "importanceDensity",
       "myEvent" : "myEvent",
       "myAlgo" : "myAlgo",
       "myResult" : "myResult",
@@ -155,7 +167,8 @@ class STDGenerateur :
       "length" : "length",
       "coefficientOfVariation" : 'results["coefficientOfVariation"]',
       "convergenceGraph" : "convergenceGraph",
-      "iterations" : 'results["iterations"]',
+      "convergenceDrawing" : "convergenceDrawing",
+      "simulationNumbers" : 'results["simulationNumbers"]',
       "myOptimizer" : "myOptimizer",
       "specificParameters" : "specificParameters",
       "startingPoint" : "startingPoint",
@@ -165,7 +178,9 @@ class STDGenerateur :
       "eventProbabilitySensitivity" : 'results["eventProbabilitySensitivity"]',
       "hasoferReliabilityIndexSensitivity" : 'results["hasoferReliabilityIndexSensitivity"]',
       "eventProbabilitySensitivityGraph" : "eventProbabilitySensitivityGraph",
+      "eventProbabilitySensitivityDrawing" : "eventProbabilitySensitivityDrawing",
       "hasoferReliabilityIndexSensitivityGraph" : "hasoferReliabilityIndexSensitivityGraph",
+      "hasoferReliabilityIndexSensitivityDrawing" : "hasoferReliabilityIndexSensitivityDrawing",
       "modelEvaluationCalls" : 'results["modelEvaluationCalls"]',
       "modelGradientCalls" : 'results["modelGradientCalls"]',
       "modelHessianCalls" : 'results["modelHessianCalls"]',
@@ -207,6 +222,7 @@ class STDGenerateur :
     Imprime l entete commun a tous les fichiers
     '''
     txt  = headerSTD % self.OpenTURNS_path
+    txt += viewerSTD
     txt += "# Definit le niveau d'affichage de la log\n"
     txt += "%s = Log.NONE\n" % self.variable["flags"]
     for flag in self.logFlags.keys():
@@ -231,8 +247,6 @@ class STDGenerateur :
     Produit le fichier study correspondant a une analyse Min/Max
     '''
     txt  = self.Header()
-    txt += "# Etude 'Min/Max'\n"
-
     txt += self.Model()
     
     Methode = None
@@ -246,7 +260,6 @@ class STDGenerateur :
     if ( Traitement is not None ):
       txt += apply( STDGenerateur.__dict__[ Traitement ], (self,) )
 
-    txt += self.MinMaxComputation()
     txt += self.MinMaxResult()
     
     txt += self.Footer()
@@ -263,15 +276,17 @@ class STDGenerateur :
       
     txt  = "# Charge le modele physique\n"
     txt  = "%s = WrapperFile( '%s' )\n" % (self.variable["wrapper"], name)
+    txt += "%s = %s.getWrapperData()\n" % (self.variable["wrapperdata"], self.variable["wrapper"])
 
+    txt += "# Ces lignes sont utiles pour le fonctionnement du script sous Salome\n"
     txt += "if globals().has_key('%s'):\n" % self.variable["framework"]
-    txt += "  %s = %s.getWrapperData()\n" % (self.variable["wrapperdata"], self.variable["wrapper"])
     txt += "  %s = %s.getFrameworkData()\n" % (self.variable["frameworkdata"], self.variable["wrapperdata"])
     txt += "  %s.studyid_ = %s['%s']\n"  % (self.variable["frameworkdata"], self.variable["framework"], self.variable["studyid"])
     txt += "  %s.studycase_ = %s['%s']\n"  % (self.variable["frameworkdata"], self.variable["framework"], self.variable["studycase"])
     txt += "  %s.componentname_ = %s['%s']\n"  % (self.variable["frameworkdata"], self.variable["framework"], self.variable["componentname"])
     txt += "  %s.setFrameworkData( %s )\n" % (self.variable["wrapperdata"], self.variable["frameworkdata"])
     txt += "  %s.setWrapperData( %s )\n" % (self.variable["wrapper"], self.variable["wrapperdata"])
+    txt += "# Fin des lignes pour Salome\n"
     
     txt += "%s = NumericalMathFunction( %s )\n" % (self.variable["model"], self.variable["wrapper"],)
     txt += "%s = %s.getInputNumericalPointDimension()\n" % (self.variable["n"], self.variable["model"])
@@ -289,6 +304,10 @@ class STDGenerateur :
     txt += self.TranslationVector()
     txt += "%s = %s\n" % (self.variable["inputSample"], self.variable["myExperimentPlane"])
     txt += "\n"
+    txt += "# Etude 'Min/Max'\n"
+    txt += "# Calcul\n"
+    txt += "%s = %s( %s )\n" % (self.variable["outputSample"], self.variable["model"], self.variable["inputSample"])
+    txt += "\n"
     return txt
 
   def MinMaxRandomSampling (self):
@@ -296,15 +315,18 @@ class STDGenerateur :
     Etude par echantillonage aleatoire
     '''
     size = 0
-    if ( self.DictMCVal.has_key( 'PointsNumber' ) ):
-      size =  self.DictMCVal[ 'PointsNumber' ]
+    if ( self.DictMCVal.has_key( 'SimulationsNumber' ) ):
+      size =  self.DictMCVal[ 'SimulationsNumber' ]
 
     txt  = "# Etude par echantillonage aleatoire\n"
     txt += self.InputDistribution()
     txt += self.InputRandomVector()
-    txt += "%s = %d\n" % (self.variable["inSize"], size)
-    txt += "%s = %s.getNumericalSample( %s )\n" % (self.variable["inputSample"], self.variable["inputRandomVector"], self.variable["inSize"])
     txt += "\n"
+    txt += "# Etude 'Min/Max'\n"
+    txt += "# Calcul\n"
+    txt += "%s = %d\n" % (self.variable["inSize"], size)
+    txt += "%s = RandomVector( %s, %s )\n" % (self.variable["outputRandomVector"], self.variable["model"], self.variable["inputRandomVector"])
+    txt += "%s = %s.getNumericalSample( %s )\n" % (self.variable["outputSample"], self.variable["outputRandomVector"], self.variable["inSize"])
     return txt
 
   def InputDistribution (self):
@@ -312,11 +334,12 @@ class STDGenerateur :
     Cree la loi jointe des variables d entree
     '''
     txt  = "# Definit la loi jointe des variables d'entree\n"
-    txt += "%s = DistributionCollection( %d )\n" % (self.variable["collection"], len( self.ListeVariables ))
+    txt += "%s = DistributionCollection( %s )\n" % (self.variable["collection"], self.variable["n"])
+    txt += "%s = Description( %s )\n" % (self.variable["description"], self.variable["n"])
     txt += "\n"
 
     dictVariables = {}
-    for variable in self.ListeVariables:
+    for variable in self.ListeVariablesIn:
       nomVar = variable['ModelVariable'].get_name()
       dictVariables[ nomVar ] = variable['Distribution']
 
@@ -329,24 +352,43 @@ class STDGenerateur :
       if loi.has_key( 'Kind' ):
         marginale = "%s_%d" % (self.variable["marginal"], i)
         txt += "# Definit la loi marginale de la composante %d\n" % i
-        txt += "%s = %s\n" % (marginale, apply( STDGenerateur.__dict__[ loi[ 'Kind' ] ], (self, loi, i, self.variable["collection"]) ))
+        txt += "%s = %s\n" % (marginale, apply( STDGenerateur.__dict__[ loi[ 'Kind' ] ], (self, loi) ))
+        txt += "%s.setName( '%s' )\n" % (marginale, conceptloi.get_name())
+        txt += "%s[ %d ] = '%s'\n" % (self.variable["description"], i, variable)
         txt += "%s[ %d ] = Distribution( %s )\n" % (self.variable["collection"], i, marginale)
         txt += "\n"
         i += 1
 
-    txt += self.Copula( len( self.ListeVariables ) )
+    txt += self.Copula()
 
     txt += "# Definit la loi jointe\n"
     txt += "%s = ComposedDistribution( %s, Copula( %s ) )\n" % (self.variable["distribution"], self.variable["collection"], self.variable["copula"])
+    txt += "%s.setDescription( %s )\n" % (self.variable["distribution"], self.variable["description"])
     txt += "\n"
     return txt
 
-  def Copula (self, dimension):
+  def Copula (self):
     '''
     Cree la copule de la loi jointe
     '''
     txt  = "# Definit la copule de la loi jointe\n"
-    txt += "%s = IndependentCopula( %d )\n" % (self.variable["copula"], dimension)
+
+    if ( not self.DictMCVal.has_key( 'Copula' ) ):
+      self.DictMCVal[ 'Copula' ] = 'Independent'
+
+    if ( self.DictMCVal[ 'Copula' ] in ( 'Independent', ) ):
+      txt += "%s = IndependentCopula( %s )\n" % (self.variable["copula"], self.variable["n"])
+    elif ( self.DictMCVal[ 'Copula' ] in ( 'Normal', ) ):
+      varList   = self.DictMCVal[ 'CorrelationMatrix' ][0]
+      dimension = len(varList)
+      txt += "%s = {}\n" % self.variable["correlation"]
+      for i in range( dimension ):
+        txt += "%s['%s'] = {}\n" % (self.variable["correlation"], varList[i])
+        for j in range ( dimension ):
+          txt += "%s['%s']['%s'] = %g\n" % (self.variable["correlation"], varList[i], varList[j], self.DictMCVal[ 'CorrelationMatrix' ][i+1][j])
+      txt += "%s = getCorrelationMatrixFromMap( %s.getVariableList(), %s )\n" % (self.variable["R"], self.variable["wrapperdata"], self.variable["correlation"])
+      txt += "%s = NormalCopula( %s )\n" % (self.variable["copula"], self.variable["R"])
+
     txt += "\n"
     return txt
 
@@ -363,8 +405,13 @@ class STDGenerateur :
     '''
     Cree le vector aleatoire de sortie
     '''
+    nomVar = "output"
+    for variable in self.ListeVariablesOut:
+      nomVar = variable['ModelVariable'].get_name()
+
     txt  = "# Definit le vecteur aleatoire de sortie\n"
     txt += "%s = RandomVector( %s, %s )\n" % (self.variable["outputRandomVector"], self.variable["model"], self.variable["inputRandomVector"])
+    txt += "%s.setName( '%s' )\n" % (self.variable["outputRandomVector"], nomVar)
     txt += "\n"
     return txt
 
@@ -432,25 +479,16 @@ class STDGenerateur :
     txt += "\n"
     return txt
 
-  def MinMaxComputation (self):
-    '''
-    Realise le calcul deterministe
-    '''
-    txt  = "# Calcul\n"
-    txt += "%s = %s( %s )\n" % (self.variable["outputSample"], self.variable["model"], self.variable["inputSample"])
-    txt += "\n"
-    return txt
-
   def MinMaxResult (self):
     '''
     Produit les resultats de l etude
     '''
     txt  = "# Resultats\n"
     txt += "%s = %s.getMin()\n" % (self.variable["minValue"], self.variable["outputSample"])
-    txt += "print '%s = ', %s\n" % (self.variable["minValue"], self.variable["minValue"])
+    txt += "print '%s = ', %s\n" % ("minValue", self.variable["minValue"])
     txt += "\n"
     txt += "%s = %s.getMax()\n" % (self.variable["maxValue"], self.variable["outputSample"])
-    txt += "print '%s = ', %s\n" % (self.variable["maxValue"], self.variable["maxValue"])
+    txt += "print '%s = ', %s\n" % ("maxValue", self.variable["maxValue"])
     txt += "\n"
     return txt
 
@@ -459,8 +497,6 @@ class STDGenerateur :
     Produit le fichier study correspondant a une analyse d incertitude en valeur centrale
     '''
     txt  = self.Header()
-    txt += "# Etude 'Central Uncertainty'\n"
-
     txt += self.Model()
     txt += self.InputDistribution()
     txt += self.InputRandomVector()
@@ -475,6 +511,7 @@ class STDGenerateur :
       Traitement =  subDict[ Methode ]
 
     if ( Traitement is not None ):
+      txt += "# Etude 'Central Uncertainty'\n"
       txt += apply( STDGenerateur.__dict__[ Traitement ], (self,) )
 
     txt += self.Footer()
@@ -493,13 +530,13 @@ class STDGenerateur :
     if ( self.DictMCVal.has_key( 'MeanFirstOrder' ) ):
       if ( self.DictMCVal[ 'MeanFirstOrder' ] == "yes" ):
         txt += "%s = %s.getMeanFirstOrder()\n" % (self.variable["meanFirstOrder"], self.variable["myQuadraticCumul"])
-        txt += "print '%s = ', %s\n" % (self.variable["meanFirstOrder"], self.variable["meanFirstOrder"])
+        txt += "print '%s = ', %s\n" % ("mean First Order", self.variable["meanFirstOrder"])
         txt += "\n"
        
     if ( self.DictMCVal.has_key( 'MeanSecondOrder' ) ):
       if ( self.DictMCVal[ 'MeanSecondOrder' ] == "yes" ):
         txt += "%s = %s.getMeanSecondOrder()\n" % (self.variable["meanSecondOrder"], self.variable["myQuadraticCumul"])
-        txt += "print '%s = ', %s\n" % (self.variable["meanSecondOrder"], self.variable["meanSecondOrder"])
+        txt += "print '%s = ', %s\n" % ("mean Second Order", self.variable["meanSecondOrder"])
         txt += "\n"
 
     if ( self.DictMCVal.has_key( 'StandardDeviationFirstOrder' ) ):
@@ -508,21 +545,19 @@ class STDGenerateur :
         txt += "dim = %s.getDimension()\n" % self.variable["standardDeviationFirstOrder"]
         txt += "for i in range( dim ):\n"
         txt += "  %s[ i, i ] = math.sqrt( %s[ i, i ] )\n" % (self.variable["standardDeviationFirstOrder"], self.variable["standardDeviationFirstOrder"])
-        txt += "print '%s = ', %s\n" % (self.variable["standardDeviationFirstOrder"], self.variable["standardDeviationFirstOrder"])
+        txt += "  print '%s = ', %s[ i, i ]\n" % ("standard Deviation First Order", self.variable["standardDeviationFirstOrder"])
         txt += "\n"
 
-    if ( self.DictMCVal.has_key( 'NumericalResults' ) ):
-      if ( self.DictMCVal[ 'NumericalResults' ] == "yes" ):
-        txt += "if ( %s.getDimension() == 1):\n" % self.variable["outputRandomVector"]
-        txt += "  %s = %s.getImportanceFactors()\n" % (self.variable["importanceFactors"], self.variable["myQuadraticCumul"])
-        txt += "  print '%s = ', %s\n" % (self.variable["importanceFactors"], self.variable["importanceFactors"])
+    if ( self.DictMCVal.has_key( 'ImportanceFactor' ) ):
+      if ( self.DictMCVal[ 'ImportanceFactor' ] == "yes" ):
+        txt += "%s = %s.getImportanceFactors()\n" % (self.variable["importanceFactors"], self.variable["myQuadraticCumul"])
+        txt += "for i in range(%s.getDimension()):\n" % self.variable["importanceFactors"]
+        txt += "  print %s.getDescription()[i], ':', %s[i]*100., '%%'\n" % (self.variable["distribution"], self.variable["importanceFactors"])
         txt += "\n"
-
-    if ( self.DictMCVal.has_key( 'GraphicalResults' ) ):
-      if ( self.DictMCVal[ 'GraphicalResults' ] == "yes" ):
         txt += "%s = %s.drawImportanceFactors()\n" % (self.variable["importanceFactorsGraph"], self.variable["myQuadraticCumul"])
-        txt += "Show( %s )\n"  % self.variable["importanceFactorsGraph"]
-        txt += "%s.draw( '%s' )\n" % (self.variable["importanceFactorsGraph"], self.variable["importanceFactorsDrawing"])
+        txt += "#Show( %s )\n"  % self.variable["importanceFactorsGraph"]
+        txt += "%s = '%s'\n" % (self.variable["importanceFactorsDrawing"], self.DictMCVal[ 'ImportanceFactorDrawingFilename' ])
+        txt += "%s.draw( %s )\n" % (self.variable["importanceFactorsGraph"], self.variable["importanceFactorsDrawing"])
         txt += "ViewImage( %s.getBitmap() )\n"  % self.variable["importanceFactorsGraph"]
         txt += "print 'bitmap =', %s.getBitmap()\n"  % self.variable["importanceFactorsGraph"]
         txt += "print 'postscript =', %s.getPostscript()\n"  % self.variable["importanceFactorsGraph"]
@@ -536,18 +571,19 @@ class STDGenerateur :
     Etude par echantillonage aleatoire
     '''
     size = 0
-    if ( self.DictMCVal.has_key( 'PointsNumber' ) ):
-      size =  self.DictMCVal[ 'PointsNumber' ]
+    if ( self.DictMCVal.has_key( 'SimulationsNumber' ) ):
+      size =  self.DictMCVal[ 'SimulationsNumber' ]
 
     txt  = "# Echantillonnage aleatoire de la variable de sortie\n"
     txt += "%s = %d\n" % (self.variable["inSize"], size)
-    txt += "%s = %s.getNumericalSample( %s )\n" % (self.variable["outputSample"], self.variable["outputRandomVector"], self.variable["inSize"])
+    txt += "%s = %s.getNumericalSample( %s )\n" % (self.variable["inputSample"], self.variable["inputRandomVector"], self.variable["inSize"])
+    txt += "%s = %s( %s )\n" % (self.variable["outputSample"], self.variable["model"], self.variable["inputSample"])
     txt += "\n"
 
     if ( self.DictMCVal.has_key( 'EmpiricalMean' ) ):
       if ( self.DictMCVal[ 'EmpiricalMean' ] == "yes" ):
         txt += "%s = %s.computeMean()\n" % (self.variable["empiricalMean"], self.variable["outputSample"])
-        txt += "print '%s =', %s\n" % (self.variable["empiricalMean"], self.variable["empiricalMean"])
+        txt += "print '%s =', %s[0]\n" % ("empirical Mean", self.variable["empiricalMean"])
         txt += "\n"
 
     if ( self.DictMCVal.has_key( 'EmpiricalStandardDeviation' ) ):
@@ -556,27 +592,37 @@ class STDGenerateur :
         txt += "dim = %s.getDimension()\n" % self.variable["empiricalStandardDeviation"]
         txt += "for i in range( dim ):\n"
         txt += "  %s[ i, i ] = math.sqrt( %s[ i, i ] )\n" % (self.variable["empiricalStandardDeviation"], self.variable["empiricalStandardDeviation"])
-        txt += "print '%s = ', %s\n" % (self.variable["empiricalStandardDeviation"], self.variable["empiricalStandardDeviation"])
+        txt += "  print '%s = ', %s[ i, i ]\n" % ("empirical Standard Deviation", self.variable["empiricalStandardDeviation"])
         txt += "\n"
 
     if ( self.DictMCVal.has_key( 'EmpiricalQuantile_Order' ) ):
       ordre = self.DictMCVal[ 'EmpiricalQuantile_Order' ]
       txt += "%s = %s.computeQuantile( %s )\n" % (self.variable["empiricalQuantile"], self.variable["outputSample"], ordre)
-      txt += "print '%s =', %s\n" % (self.variable["empiricalQuantile"], self.variable["empiricalQuantile"])
+      txt += "print '%s ( %s ) =', %s\n" % ("empirical Quantile", ordre, self.variable["empiricalQuantile"])
       txt += "\n"
    
-    if ( self.DictMCVal.has_key( 'AnalysedCorrelations' ) ):
-      if ( self.DictMCVal[ 'AnalysedCorrelations' ] == "yes" ):
-        txt += "# Ou est le %s ?\n" % self.variable["inputSample"]
-        txt += "#if ( ( %s.getDimension() == 1 ) and ( %s.getDimension() == 1 ) ):\n" % (self.variable["inputSample"], self.variable["outputSample"])
-        txt += "#  %s = CorrelationAnalysis.PCC( %s, %s )\n" % (self.variable["PCCcoefficient"], self.variable["inputSample"], self.variable["outputSample"])
-        txt += "#  print '%s = ', %s\n" % (self.variable["PCCcoefficient"], self.variable["PCCcoefficient"])
-        txt += "#  %s = CorrelationAnalysis.PRCC( %s, %s )\n" % (self.variable["PRCCcoefficient"], self.variable["inputSample"], self.variable["outputSample"])
-        txt += "#  print '%s = ', %s\n" % (self.variable["PRCCcoefficient"], self.variable["PRCCcoefficient"])
-        txt += "#  %s = CorrelationAnalysis.SRC( %s, %s )\n" % (self.variable["SRCcoefficient"], self.variable["inputSample"], self.variable["outputSample"])
-        txt += "#  print '%s = ', %s\n" % (self.variable["SRCcoefficient"], self.variable["SRCcoefficient"])
-        txt += "#  %s = CorrelationAnalysis.SRRC( %s, %s )\n" % (self.variable["SRRCcoefficient"], self.variable["inputSample"], self.variable["outputSample"])
-        txt += "#  print '%s = ', %s\n" % (self.variable["SRRCcoefficient"], self.variable["SRRCcoefficient"])
+    if ( self.DictMCVal.has_key( 'CorrelationAnalysis' ) ):
+      if ( self.DictMCVal[ 'CorrelationAnalysis' ] == "yes" ):
+        txt += "if ( %s.getDimension() == 1 ):\n" % self.variable["outputSample"]
+        txt += "  %s = CorrelationAnalysis.PCC( %s, %s )\n" % (self.variable["PCCcoefficient"], self.variable["inputSample"], self.variable["outputSample"])
+        txt += "  print 'PCC Coefficients:'\n"
+        txt += "  for i in range( %s ):\n" % self.variable["n"]
+        txt += "    print %s.getDescription()[i], ':', %s[i]\n" % (self.variable["distribution"], self.variable["PCCcoefficient"])
+        txt += "\n"
+        txt += "  %s = CorrelationAnalysis.PRCC( %s, %s )\n" % (self.variable["PRCCcoefficient"], self.variable["inputSample"], self.variable["outputSample"])
+        txt += "  print 'PRCC Coefficients:'\n"
+        txt += "  for i in range( %s ):\n" % self.variable["n"]
+        txt += "    print %s.getDescription()[i], ':', %s[i]\n" % (self.variable["distribution"], self.variable["PRCCcoefficient"])
+        txt += "\n"
+        txt += "  %s = CorrelationAnalysis.SRC( %s, %s )\n" % (self.variable["SRCcoefficient"], self.variable["inputSample"], self.variable["outputSample"])
+        txt += "  print 'SRC Coefficients:'\n"
+        txt += "  for i in range( %s ):\n" % self.variable["n"]
+        txt += "    print %s.getDescription()[i], ':', %s[i]\n" % (self.variable["distribution"], self.variable["SRCcoefficient"])
+        txt += "\n"
+        txt += "  %s = CorrelationAnalysis.SRRC( %s, %s )\n" % (self.variable["SRRCcoefficient"], self.variable["inputSample"], self.variable["outputSample"])
+        txt += "  print 'SRRC Coefficients:'\n"
+        txt += "  for i in range( %s ):\n" % self.variable["n"]
+        txt += "    print %s.getDescription()[i], ':', %s[i]\n" % (self.variable["distribution"], self.variable["SRRCcoefficient"])
         txt += "\n"
    
     if ( self.DictMCVal.has_key( 'KernelSmoothing' ) ):
@@ -584,9 +630,15 @@ class STDGenerateur :
         txt += "# Kernel Smoohing\n"
         txt += "%s = KernelSmoothing()\n" % self.variable["kernel"]
         txt += "if ( %s.getDimension() == 1 ):\n" % self.variable["outputSample"]
+        txt += "  %s.setName( 'Output' )\n" % self.variable["outputSample"]
         txt += "  %s = %s.buildImplementation( %s, 'TRUE')\n" % (self.variable["kernelSmoothedDist"], self.variable["kernel"], self.variable["outputSample"])
-        txt += "  %s = %s.drawPDF()\n" % (self.variable["kernelSmoothedPDF"], self.variable["kernelSmoothedDist"])
-        txt += "  Show( %s )\n" % self.variable["kernelSmoothedPDF"]
+        txt += "  %s = %s.drawPDF()\n" % (self.variable["kernelSmoothedGraph"], self.variable["kernelSmoothedDist"])
+        txt += "  #Show( %s )\n" % self.variable["kernelSmoothedGraph"]
+        txt += "  %s = '%s'\n" % (self.variable["kernelSmoothedPDFDrawing"], self.DictMCVal[ 'KernelSmoothingDrawingFilename' ])
+        txt += "  %s.draw( %s )\n" % (self.variable["kernelSmoothedGraph"], self.variable["kernelSmoothedPDFDrawing"])
+        txt += "  ViewImage( %s.getBitmap() )\n"  % self.variable["kernelSmoothedGraph"]
+        txt += "  print 'bitmap =', %s.getBitmap()\n"  % self.variable["kernelSmoothedGraph"]
+        txt += "  print 'postscript =', %s.getPostscript()\n"  % self.variable["kernelSmoothedGraph"]
         txt += "\n"
    
     return txt
@@ -641,7 +693,7 @@ class STDGenerateur :
 
     blockSize = None
     if ( self.DictMCVal.has_key( 'BlockSize' ) ):
-      maxOuterSampling = self.DictMCVal[ 'BlockSize' ]
+      blockSize = self.DictMCVal[ 'BlockSize' ]
       txt += "%s.setBlockSize( %s )\n" % (self.variable["myAlgo"], blockSize)
 
     maxCoefficientOfVariation = None
@@ -658,13 +710,13 @@ class STDGenerateur :
     if ( self.DictMCVal.has_key( 'Probability' ) ):
       if ( self.DictMCVal[ 'Probability' ] == "yes" ):
         txt += "%s = %s.getProbabilityEstimate()\n" % (self.variable["probability"], self.variable["myResult"])
-        txt += "print '%s =', %s\n" % (self.variable["probability"], self.variable["probability"])
+        txt += "print '%s =', %s\n" % ("probability", self.variable["probability"])
         txt += "\n"
 
     if ( self.DictMCVal.has_key( 'StandardDeviation' ) ):
       if ( self.DictMCVal[ 'StandardDeviation' ] == "yes" ):
         txt += "%s = math.sqrt( %s.getProbabilityEstimate() )\n" % (self.variable["standardDeviation"], self.variable["myResult"])
-        txt += "print '%s =', %s\n" % (self.variable["standardDeviation"], self.variable["standardDeviation"])
+        txt += "print '%s =', %s\n" % ("standard Deviation", self.variable["standardDeviation"])
         txt += "\n"
 
     if ( self.DictMCVal.has_key( 'ConfidenceInterval' ) and self.DictMCVal.has_key( 'Probability' ) ):
@@ -677,19 +729,23 @@ class STDGenerateur :
     if ( self.DictMCVal.has_key( 'VariationCoefficient' ) ):
       if ( self.DictMCVal[ 'VariationCoefficient' ] == "yes" ):
         txt += "%s = %s.getCoefficientOfVariation()\n" % (self.variable["coefficientOfVariation"], self.variable["myResult"])
-        txt += "print '%s =', %s\n" % (self.variable["coefficientOfVariation"], self.variable["coefficientOfVariation"])
+        txt += "print '%s =', %s\n" % ("coefficient of Variation", self.variable["coefficientOfVariation"])
         txt += "\n"
 
-    if ( self.DictMCVal.has_key( 'IterationNumber' ) ):
-      if ( self.DictMCVal[ 'IterationNumber' ] == "yes" ):
-        txt += "%s = %s.getOuterSampling()\n" % (self.variable["iterations"], self.variable["myResult"])
-        txt += "print '%s =', %s\n" % (self.variable["iterations"], self.variable["iterations"])
+    if ( self.DictMCVal.has_key( 'SimulationsNumber' ) ):
+      if ( self.DictMCVal[ 'SimulationsNumber' ] == "yes" ):
+        txt += "%s = %s.getOuterSampling()\n" % (self.variable["simulationNumbers"], self.variable["myResult"])
+        txt += "print '%s =', %s\n" % ("simulation Numbers", self.variable["simulationNumbers"])
         txt += "\n"
 
-    if ( self.DictMCVal.has_key( 'ConvergenceGraph' ) ):
-      if ( self.DictMCVal[ 'ConvergenceGraph' ] == "yes" ):
-        txt += "%s = %s.drawProbabilityConvergence()\n" % (self.variable["convergenceGraph"], self.variable["myAlgo"])
-        txt += "Show( %s )\n" % self.variable["convergenceGraph"]
+    if ( self.DictMCVal.has_key( 'ConvergenceGraph' ) and self.DictMCVal.has_key( 'ConfidenceInterval' ) ):
+      if ( ( self.DictMCVal[ 'ConvergenceGraph' ] == "yes" ) and ( self.DictMCVal[ 'ConfidenceInterval' ] == "yes" ) ):
+        txt += "%s = %s\n" % (self.variable["alpha"], self.DictMCVal[ 'Level' ])
+        txt += "%s = %s.drawProbabilityConvergence( %s )\n" % (self.variable["convergenceGraph"], self.variable["myAlgo"], self.variable["alpha"])
+        txt += "#Show( %s )\n" % self.variable["convergenceGraph"]
+        txt += "%s = '%s'\n" % (self.variable["convergenceDrawing"], self.DictMCVal[ 'ConvergenceDrawingFilename' ])
+        txt += "%s.draw( %s )\n" % (self.variable["convergenceGraph"], self.variable["convergenceDrawing"])
+        txt += "ViewImage( %s.getBitmap() )\n" % self.variable["convergenceGraph"]
         txt += "\n"
 
     return txt
@@ -736,10 +792,10 @@ class STDGenerateur :
     '''
     txt = ""
     
-    iterations = None
+    simulationNumbers = None
     if ( self.DictMCVal.has_key( 'MaximumIterationsNumber' ) ):
-      iterations = self.DictMCVal[ 'MaximumIterationsNumber' ]
-      txt += "%s.setMaximumIterationsNumber( %s )\n" % (self.variable["myOptimizer"], iterations)
+      simulationNumbers = self.DictMCVal[ 'MaximumIterationsNumber' ]
+      txt += "%s.setMaximumIterationsNumber( %s )\n" % (self.variable["myOptimizer"], simulationNumbers)
 
     absoluteError = None
     if ( self.DictMCVal.has_key( 'MaximumAbsoluteError' ) ):
@@ -800,69 +856,85 @@ class STDGenerateur :
     if ( self.DictMCVal.has_key( 'HasoferReliabilityIndex' ) ):
       if ( self.DictMCVal[ 'HasoferReliabilityIndex' ] == "yes" ):
         txt += "%s = %s.getHasoferReliabilityIndex()\n" % (self.variable["hasoferReliabilityIndex"], self.variable["myResult"])
-        txt += "print '%s =', %s\n" % (self.variable["hasoferReliabilityIndex"], self.variable["hasoferReliabilityIndex"])
+        txt += "print '%s =', %s\n" % ("hasofer Reliability Index", self.variable["hasoferReliabilityIndex"])
         txt += "\n"
 
     if ( self.DictMCVal.has_key( 'DesignPoint' ) ):
       if ( self.DictMCVal[ 'DesignPoint' ] == "yes" ):
         txt += "%s = %s.getStandardSpaceDesignPoint()\n" % (self.variable["standardSpaceDesignPoint"], self.variable["myResult"])
-        txt += "print '%s =', %s\n" % (self.variable["standardSpaceDesignPoint"], self.variable["standardSpaceDesignPoint"])
+        txt += "print '%s =', %s\n" % ("standard Space Design Point", self.variable["standardSpaceDesignPoint"])
         txt += "%s = %s.getPhysicalSpaceDesignPoint()\n" % (self.variable["physicalSpaceDesignPoint"], self.variable["myResult"])
-        txt += "print '%s =', %s\n" % (self.variable["physicalSpaceDesignPoint"], self.variable["physicalSpaceDesignPoint"])
+        txt += "print '%s =', %s\n" % ("physical Space Design Point", self.variable["physicalSpaceDesignPoint"])
         txt += "\n"
 
-    if ( self.DictMCVal.has_key( 'ImportanceFactorNumericalResults' ) ):
-      if ( self.DictMCVal[ 'ImportanceFactorNumericalResults' ] == "yes" ):
+    if ( self.DictMCVal.has_key( 'ImportanceFactor' ) ):
+      if ( self.DictMCVal[ 'ImportanceFactor' ] == "yes" ):
+        txt += "print 'Importance Factors:'\n"
         txt += "%s = %s.getImportanceFactors()\n" % (self.variable["importanceFactors"], self.variable["myResult"])
-        txt += "print '%s =', %s\n" % (self.variable["importanceFactors"], self.variable["importanceFactors"])
+        txt += "for i in range(%s.getDimension()):\n" % self.variable["importanceFactors"]
+        txt += "  print %s.getDescription()[i], ':', %s[i]*100., '%%'\n" % (self.variable["distribution"], self.variable["importanceFactors"])
         txt += "\n"
-
-    if ( self.DictMCVal.has_key( 'ImportanceFactorGraphicalResults' ) ):
-      if ( self.DictMCVal[ 'ImportanceFactorGraphicalResults' ] == "yes" ):
         txt += "%s = %s.drawImportanceFactors()\n" % (self.variable["importanceFactorsGraph"], self.variable["myResult"])
-        txt += "Show( %s )\n"  % self.variable["importanceFactorsGraph"]
+        txt += "#Show( %s )\n"  % self.variable["importanceFactorsGraph"]
+        txt += "%s = '%s'\n" % (self.variable["importanceFactorsDrawing"], self.DictMCVal[ 'ImportanceFactorDrawingFilename' ])
+        txt += "%s.draw( %s )\n" % (self.variable["importanceFactorsGraph"], self.variable["importanceFactorsDrawing"])
+        txt += "ViewImage( %s.getBitmap() )\n"  % self.variable["importanceFactorsGraph"]
+        txt += "print 'bitmap =', %s.getBitmap()\n"  % self.variable["importanceFactorsGraph"]
+        txt += "print 'postscript =', %s.getPostscript()\n"  % self.variable["importanceFactorsGraph"]
         txt += "\n"
 
-    if ( self.DictMCVal.has_key( 'FORMEventProbabilitySensitivityNumericalResults' ) ):
-      if ( self.DictMCVal[ 'FORMEventProbabilitySensitivityNumericalResults' ] == "yes" ):
+    if ( self.DictMCVal.has_key( 'FORMEventProbabilitySensitivity' ) ):
+      if ( self.DictMCVal[ 'FORMEventProbabilitySensitivity' ] == "yes" ):
         txt += "%s = %s.getEventProbabilitySensitivity()\n" % (self.variable["eventProbabilitySensitivity"], self.variable["myResult"])
-        txt += "print '%s =', %s\n" % (self.variable["eventProbabilitySensitivity"], self.variable["eventProbabilitySensitivity"])
+        txt += "print 'FORM Event Probability Sensitivity:'\n"
+        txt += "for i in range( %s ):\n" % self.variable["n"]
+        txt += "  print %s.getDescription()[i], ':'\n" % self.variable["distribution"]
+        txt += "  for j in range( %s[i].getDimension() ):\n" % self.variable["eventProbabilitySensitivity"]
+        txt += "    print '  ', %s[i].getDescription()[j], ':', %s[i][j]\n" % (self.variable["eventProbabilitySensitivity"], self.variable["eventProbabilitySensitivity"])
         txt += "\n"
-
-    if ( self.DictMCVal.has_key( 'FORMEventProbabilitySensitivityGraphicalResults' ) ):
-      if ( self.DictMCVal[ 'FORMEventProbabilitySensitivityGraphicalResults' ] == "yes" ):
-        txt += "%s = %s.drawEventProbabilitySensitivity()\n" % (self.variable["eventProbabilitySensitivityGraph"], self.variable["myResult"])
-        txt += "Show( %s[0] )\n" % self.variable["eventProbabilitySensitivityGraph"]
+        txt += "%s = %s.drawEventProbabilitySensitivity()[0]\n" % (self.variable["eventProbabilitySensitivityGraph"], self.variable["myResult"])
+        txt += "#Show( %s )\n" % self.variable["eventProbabilitySensitivityGraph"]
+        txt += "%s = '%s'\n" % (self.variable["eventProbabilitySensitivityDrawing"], self.DictMCVal[ 'FORMEventProbabilitySensitivityDrawingFilename' ])
+        txt += "%s.draw( %s )\n" % (self.variable["eventProbabilitySensitivityGraph"], self.variable["eventProbabilitySensitivityDrawing"])
+        txt += "ViewImage( %s.getBitmap() )\n"  % self.variable["eventProbabilitySensitivityGraph"]
+        txt += "print 'bitmap =', %s.getBitmap()\n"  % self.variable["eventProbabilitySensitivityGraph"]
+        txt += "print 'postscript =', %s.getPostscript()\n"  % self.variable["eventProbabilitySensitivityGraph"]
         txt += "\n"
 
-    if ( self.DictMCVal.has_key( 'HasoferReliabilityIndexSensitivityNumericalResults' ) ):
-      if ( self.DictMCVal[ 'HasoferReliabilityIndexSensitivityNumericalResults' ] == "yes" ):
+    if ( self.DictMCVal.has_key( 'HasoferReliabilityIndexSensitivity' ) ):
+      if ( self.DictMCVal[ 'HasoferReliabilityIndexSensitivity' ] == "yes" ):
         txt += "%s = %s.getHasoferReliabilityIndexSensitivity()\n" % (self.variable["hasoferReliabilityIndexSensitivity"], self.variable["myResult"])
-        txt += "print '%s =', %s\n" % (self.variable["hasoferReliabilityIndexSensitivity"], self.variable["hasoferReliabilityIndexSensitivity"])
+        txt += "print 'Hasofer Reliability Index Sensitivity:'\n"
+        txt += "for i in range( %s ):\n" % self.variable["n"]
+        txt += "  print %s.getDescription()[i], ':'\n" % self.variable["distribution"]
+        txt += "  for j in range( %s[i].getDimension() ):\n" % self.variable["hasoferReliabilityIndexSensitivity"]
+        txt += "    print '  ', %s[i].getDescription()[j], ':', %s[i][j]\n" % (self.variable["hasoferReliabilityIndexSensitivity"], self.variable["hasoferReliabilityIndexSensitivity"])
         txt += "\n"
-
-    if ( self.DictMCVal.has_key( 'HasoferReliabilityIndexSensitivityGraphicalResults' ) ):
-      if ( self.DictMCVal[ 'HasoferReliabilityIndexSensitivityGraphicalResults' ] == "yes" ):
-        txt += "%s = %s.drawHasoferReliabilityIndexSensitivity()\n" % (self.variable["hasoferReliabilityIndexSensitivityGraph"], self.variable["myResult"])
-        txt += "Show( %s[0] )\n" % self.variable["hasoferReliabilityIndexSensitivityGraph"]
+        txt += "%s = %s.drawHasoferReliabilityIndexSensitivity()[0]\n" % (self.variable["hasoferReliabilityIndexSensitivityGraph"], self.variable["myResult"])
+        txt += "#Show( %s )\n" % self.variable["hasoferReliabilityIndexSensitivityGraph"]
+        txt += "%s = '%s'\n" % (self.variable["hasoferReliabilityIndexSensitivityDrawing"], self.DictMCVal[ 'HasoferReliabilityIndexSensitivityDrawingFilename' ])
+        txt += "%s.draw( %s )\n" % (self.variable["hasoferReliabilityIndexSensitivityGraph"], self.variable["hasoferReliabilityIndexSensitivityDrawing"])
+        txt += "ViewImage( %s.getBitmap() )\n"  % self.variable["hasoferReliabilityIndexSensitivityGraph"]
+        txt += "print 'bitmap =', %s.getBitmap()\n"  % self.variable["hasoferReliabilityIndexSensitivityGraph"]
+        txt += "print 'postscript =', %s.getPostscript()\n"  % self.variable["hasoferReliabilityIndexSensitivityGraph"]
         txt += "\n"
 
     if ( self.DictMCVal.has_key( 'TvedtApproximation' ) ):
       if ( self.DictMCVal[ 'TvedtApproximation' ] == "yes" ):
         txt += "%s = %s.getEventProbabilityTvedt()\n" % (self.variable["tvedtApproximation"], self.variable["myResult"])
-        txt += "print '%s =', %s\n" % (self.variable["tvedtApproximation"], self.variable["tvedtApproximation"])
+        txt += "print '%s =', %s\n" % ("Tvedt Approximation", self.variable["tvedtApproximation"])
         txt += "\n"
 
     if ( self.DictMCVal.has_key( 'HohenBichlerApproximation' ) ):
       if ( self.DictMCVal[ 'HohenBichlerApproximation' ] == "yes" ):
         txt += "%s = %s.getEventProbabilityHohenBichler()\n" % (self.variable["hohenBichlerApproximation"], self.variable["myResult"])
-        txt += "print '%s =', %s\n" % (self.variable["hohenBichlerApproximation"], self.variable["tvedtApproximation"])
+        txt += "print '%s =', %s\n" % ("HohenBichler Approximation", self.variable["tvedtApproximation"])
         txt += "\n"
 
     if ( self.DictMCVal.has_key( 'BreitungApproximation' ) ):
       if ( self.DictMCVal[ 'BreitungApproximation' ] == "yes" ):
         txt += "%s = %s.getEventProbabilityBreitung()\n" % (self.variable["breitungApproximation"], self.variable["myResult"])
-        txt += "print '%s =', %s\n" % (self.variable["breitungApproximation"], self.variable["breitungApproximation"])
+        txt += "print '%s =', %s\n" % ("Breitung Approximation", self.variable["breitungApproximation"])
         txt += "\n"
 
 
@@ -897,6 +969,7 @@ class STDGenerateur :
     
     txt  = "# Evenement de defaillance\n"
     txt += "%s = Event( %s, ComparisonOperator( %s() ), %s )\n" % (self.variable["myEvent"], self.variable["outputRandomVector"], operator, threshold)
+    txt += "%s.setName( '%s' )\n" % (self.variable["myEvent"], "myEvent")
     txt += "\n"
     return txt
     
@@ -924,8 +997,19 @@ class STDGenerateur :
     '''
     Methode de tirage d importance
     '''
+    dimension = 0
+    if ( self.DictMCVal.has_key( 'MeanVector' ) ):
+      meanVector =  self.DictMCVal[ 'MeanVector' ]
+      dimension = len( meanVector )
+        
     txt  = "# Simulation par Tirage d'importance\n"
-    txt += "%s = ImportanceSampling( %s )\n"  % (self.variable["myAlgo"], self.variable["myEvent"])
+    txt += "# Densite d'importance\n"
+    txt += "%s = NumericalPoint( %s )\n" % (self.variable["meanVector"], self.variable["n"])
+    for i in range(dimension):
+      txt += "%s[%d] = %g\n" % (self.variable["meanVector"], i, meanVector[i])
+      
+    txt += "%s = Normal( %s, CovarianceMatrix( IdentityMatrix( %s ) ) )\n" % (self.variable["importanceDensity"], self.variable["meanVector"], self.variable["n"])
+    txt += "%s = ImportanceSampling( %s, Distribution( %s ) )\n"  % (self.variable["myAlgo"], self.variable["myEvent"], self.variable["importanceDensity"])
     txt += "\n"
 
     return txt
@@ -954,9 +1038,10 @@ class STDGenerateur :
     '''
     Do the computation
     '''
+    txt = ""
     if ( self.DictMCVal.has_key( 'FunctionCallsNumber' ) ):
       if ( self.DictMCVal[ 'FunctionCallsNumber' ] == "yes" ):
-        txt  = "%s = %s.getEvaluationCallsNumber()\n" % (self.variable["modelEvaluationCalls"], self.variable["model"])
+        txt += "%s = %s.getEvaluationCallsNumber()\n" % (self.variable["modelEvaluationCalls"], self.variable["model"])
         txt += "%s = %s.getGradientCallsNumber()\n" % (self.variable["modelGradientCalls"], self.variable["model"])
         txt += "%s = %s.getHessianCallsNumber()\n" % (self.variable["modelHessianCalls"], self.variable["model"])
         txt += "\n"
@@ -972,9 +1057,9 @@ class STDGenerateur :
         txt += "%s = %s.getGradientCallsNumber() - %s\n" % (self.variable["modelGradientCalls"], self.variable["model"], self.variable["modelGradientCalls"])
         txt += "%s = %s.getHessianCallsNumber() - %s\n" % (self.variable["modelHessianCalls"], self.variable["model"], self.variable["modelHessianCalls"])
         txt += "\n"
-        txt += "print '%s =', %s\n" % (self.variable["modelEvaluationCalls"], self.variable["modelEvaluationCalls"])
-        txt += "print '%s =', %s\n" % (self.variable["modelGradientCalls"], self.variable["modelGradientCalls"])
-        txt += "print '%s =', %s\n" % (self.variable["modelHessianCalls"], self.variable["modelHessianCalls"])
+        txt += "print '%s =', %s\n" % ("model Evaluation Calls", self.variable["modelEvaluationCalls"])
+        txt += "print '%s =', %s\n" % ("model Gradient Calls", self.variable["modelGradientCalls"])
+        txt += "print '%s =', %s\n" % ("model Hessian Calls", self.variable["modelHessianCalls"])
         txt += "\n"
 
     return txt
@@ -1002,7 +1087,7 @@ class STDGenerateur :
     txt += "\n"
     return txt
 
-  def Beta (self, loi, i, collection):
+  def Beta (self, loi):
     '''
     Definition de la loi Beta
     '''
@@ -1022,7 +1107,7 @@ class STDGenerateur :
     txt = "Beta( %g, %g, %g, %g, %s )" % (arg1, arg2, arg3, arg4, settings[ loi[ 'Settings' ] ])
     return txt
   
-  def Exponential (self, loi, i, collection):
+  def Exponential (self, loi):
     '''
     Definition de la loi Exponential
     '''
@@ -1031,7 +1116,7 @@ class STDGenerateur :
     txt = "Exponential( %g, %g )" % (arg1, arg2)
     return txt
   
-  def Gamma (self, loi, i, collection):
+  def Gamma (self, loi):
     '''
     Definition de la loi Gamma
     '''
@@ -1050,20 +1135,20 @@ class STDGenerateur :
     txt = "Gamma( %g, %g, %g, %s )" % (arg1, arg2, arg3, settings[ loi[ 'Settings' ] ])
     return txt
 
-  def Geometric (self, loi, i, collection):
+  def Geometric (self, loi):
     '''
     Definition de la loi Geometric
     '''
     txt = "Geometric( %g )" % loi[ 'P' ]
     return txt
 
-  def Gumbel (self, loi, i, collection):
+  def Gumbel (self, loi):
     '''
     Definition de la loi Gumbel
     '''
     settings = {
-      "AlphaBeta" : "Gamma.ALPHABETA",
-      "MuSigma" : "Gamma.MUSIGMA",
+      "AlphaBeta" : "Gumbel.ALPHABETA",
+      "MuSigma" : "Gumbel.MUSIGMA",
     }
     if loi[ 'Settings' ] == 'AlphaBeta' :
       arg1 = loi[ 'Alpha' ]
@@ -1072,10 +1157,10 @@ class STDGenerateur :
       arg1 = loi[ 'Mu'    ]
       arg2 = loi[ 'Sigma' ]
       
-    txt = "Gamma( %g, %g, %s )" % (arg1, arg2, settings[ loi[ 'Settings' ] ])
+    txt = "Gumbel( %g, %g, %s )" % (arg1, arg2, settings[ loi[ 'Settings' ] ])
     return txt
 
-  def Histogram (self, loi, i, collection):
+  def Histogram (self, loi):
     '''
     Definition de la loi Histogram
     '''
@@ -1084,7 +1169,16 @@ class STDGenerateur :
     txt = "Histogram( %g, %s )" % (arg1, arg2)
     return txt
 
-  def Logistic (self, loi, i, collection):
+  def Laplace (self, loi):
+    '''
+    Definition de la loi Laplace
+    '''
+    arg1 = loi[ 'Lambda' ]
+    arg2 = loi[ 'Mu'     ]
+    txt = "Laplace( %g, %g )" % (arg1, arg2)
+    return txt
+
+  def Logistic (self, loi):
     '''
     Definition de la loi Logistic
     '''
@@ -1093,7 +1187,7 @@ class STDGenerateur :
     txt = "Logistic( %g, %g )" % (arg1, arg2)
     return txt
 
-  def LogNormal (self, loi, i, collection):
+  def LogNormal (self, loi):
     '''
     Definition de la loi LogNormal
     '''
@@ -1116,7 +1210,7 @@ class STDGenerateur :
     txt = "LogNormal( %g, %g, %g, %s )" % (arg1, arg2, arg3, settings[ loi[ 'Settings' ] ])
     return txt
 
-  def MultiNomial (self, loi, i, collection):
+  def MultiNomial (self, loi):
     '''
     Definition de la loi MultiNomial
     '''
@@ -1125,7 +1219,17 @@ class STDGenerateur :
     txt = "MultiNomial( NumericalPoint( %s ) , %d)" % (arg1, arg2)
     return txt
 
-  def Normal (self, loi, i, collection):
+  def NonCentralStudent (self, loi):
+    '''
+    Definition de la loi NonCentralStudent
+    '''
+    arg1 = loi[ 'Nu'    ]
+    arg2 = loi[ 'Delta' ]
+    arg3 = loi[ 'Gamma' ]
+    txt = "NonCentralStudent( %g, %g )" % (arg1, arg2, arg3)
+    return txt
+
+  def Normal (self, loi):
     '''
     Definition de la loi Normal
     '''
@@ -1134,7 +1238,7 @@ class STDGenerateur :
     txt = "Normal( %g, %g )" % (arg1, arg2)
     return txt
 
-  def TruncatedNormal (self, loi, i, collection):
+  def TruncatedNormal (self, loi):
     '''
     Definition de la loi TruncatedNormal
     '''
@@ -1145,23 +1249,33 @@ class STDGenerateur :
     txt = "TruncatedNormal( %g, %g, %g, %g )" % (arg1, arg2, arg3, arg4)
     return txt
 
-  def Poisson (self, loi, i, collection):
+  def Poisson (self, loi):
     '''
-    Definition de la loi 
+    Definition de la loi Poisson
     '''
     txt = "Poisson( %g )" % loi[ 'Lambda' ]
     return txt
 
-  def Student (self, loi, i, collection):
+  def Rayleigh (self, loi):
+    '''
+    Definition de la loi Rayleigh
+    '''
+    arg1 = loi[ 'Sigma' ]
+    arg2 = loi[ 'Gamma' ]
+    txt = "Rayleigh( %g, %g )" % (arg1, arg2)
+    return txt
+
+  def Student (self, loi):
     '''
     Definition de la loi Student
     '''
     arg1 = loi[ 'Mu' ]
     arg2 = loi[ 'Nu' ]
-    txt = "Student( %g, %g )" % (arg1, arg2)
+    arg3 = loi[ 'Sigma' ]
+    txt = "Student( %g, %g, %g )" % (arg1, arg2, arg3)
     return txt
 
-  def Triangular (self, loi, i, collection):
+  def Triangular (self, loi):
     '''
     Definition de la loi Triangular
     '''
@@ -1171,7 +1285,7 @@ class STDGenerateur :
     txt = "Triangular( %g, %g, %g )" % (arg1, arg2, arg3)
     return txt
 
-  def Uniform (self, loi, i, collection):
+  def Uniform (self, loi):
     '''
     Definition de la loi Uniform
     '''
@@ -1180,14 +1294,14 @@ class STDGenerateur :
     txt = "Uniform( %g, %g )" % (arg1, arg2)
     return txt
 
-  def UserDefined (self, loi, i, collection):
+  def UserDefined (self, loi):
     '''
     Definition de la loi UserDefined
     '''
     txt = "** UserDefined not defined yet **"
     return txt
 
-  def Weibull (self, loi, i, collection):
+  def Weibull (self, loi):
     '''
     Definition de la loi Weibull
     '''
@@ -1203,6 +1317,19 @@ class STDGenerateur :
       arg2 = loi[ 'Sigma' ]
       
     arg3 = loi[ 'Gamma' ]
-    txt = "Weibull( %g, %g, %s )" % (arg1, arg2, arg3, settings[ loi[ 'Settings' ] ])
+    txt = "Weibull( %g, %g, %g, %s )" % (arg1, arg2, arg3, settings[ loi[ 'Settings' ] ])
     return txt
 
+
+
+  def GraphiquePDF (self, loi, fichier):
+    '''
+    Produit une image PNG representant la PDF de la loi
+    '''
+    txt  = headerSTD % self.OpenTURNS_path
+    txt += "dist = %s\n" % apply( STDGenerateur.__dict__[ loi[ 'Kind' ] ], (self, loi) )
+    txt += "graph = dist.drawPDF()\n"
+    txt += "graph.draw( '%s' )\n" % fichier
+    txt += footerSTD
+    return txt
+  
index 275e94ccd65283c222f6f947239f5f8308b4f12a..4f6007fe2039b75461f3f07d70300f40b0724cde 100644 (file)
@@ -98,7 +98,7 @@ class XMLGenerateur :
     '''
     Ecrit la liste des variables
     '''
-    varList = openturns.WrapperDataVariableList()
+    varList = openturns.WrapperDataVariableCollection()
     for var in sorted( self.DictVariables.keys(), self.__variable_ordering( self.DictVariables ) ) :
       varList.add( self.Variable( var, self.DictVariables[var] ) )
     return varList
@@ -150,7 +150,7 @@ class XMLGenerateur :
     '''
     Ecrit la liste des fichiers
     '''
-    fileList = openturns.WrapperDataFileList()
+    fileList = openturns.WrapperDataFileCollection()
     for dictFile in self.GetMCVal('Files', []) :
       fileList.add( self.File( dictFile ) )
     return fileList
@@ -176,6 +176,10 @@ class XMLGenerateur :
     '''
     parameters = openturns.WrapperParameter()
     parameters.mode_  = WrapperModeByName[ self.GetMCVal('WrapCouplingMode') ]
+    if (parameters.mode_ == openturns.WrapperMode.FORK ):
+      parameters.command_ = self.GetMCVal('Command')
+      userPrefix = self.GetMCVal('UserPrefix', None)
+      if userPrefix != None : parameters.userPrefix_ = userPrefix
     parameters.state_ = WrapperStateByName[ self.GetMCVal('State') ]
     parameters.in_    = WrapperDataTransferByName[ self.GetMCVal('InDataTransfer') ]
     parameters.out_   = WrapperDataTransferByName[ self.GetMCVal('OutDataTransfer') ]
@@ -186,8 +190,11 @@ class XMLGenerateur :
     Ecrit les donnees liees a l utilisation d un framework englobant
     '''
     framework = openturns.WrapperFrameworkData()
-    #framework.studycase_ = "12:23:34"
-    framework.componentname_ = self.GetMCVal('SolverComponentName')
+#   framework.studycase_ = "12:23:34"
+#   framework.componentname_ = self.GetMCVal('SolverComponentName', 'UNDEFINED')
+    CN = self.GetMCVal('SolverComponentName', 'UNDEFINED')
+    print 'CN = ', CN
+    framework.componentname_ = CN
     return framework
 
 
diff --git a/generator/generator_GroupMA.py b/generator/generator_GroupMA.py
new file mode 100644 (file)
index 0000000..f2c0d9e
--- /dev/null
@@ -0,0 +1,80 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+"""
+    Ce module contient le plugin generateur d une liste des GroupNo et GroupMA
+"""
+import traceback
+import types,string,re
+
+from generator_python import PythonGenerator
+def entryPoint():
+   """
+       Retourne les informations nécessaires pour le chargeur de plugins
+
+       Ces informations sont retournées dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 'GroupMA',
+        # La factory pour créer une instance du plugin
+          'factory' : GroupMAGenerator,
+          }
+
+
+class GroupMAGenerator(PythonGenerator):
+   """
+       Ce generateur parcourt un objet de type JDC et produit
+       un texte au format eficas et 
+       un texte au format homard 
+
+   """
+   # Les extensions de fichier préconisées
+   extensions=('.comm',)
+
+   def __init__(self):
+      PythonGenerator.__init__(self)
+      self.listeMA=[]
+      self.listeNO=[]
+
+   def gener(self,obj,format='brut',config=None):
+      self.liste=[]
+      self.text=PythonGenerator.gener(self,obj,'brut',config=None)
+      return self.listeMA,self.listeNO
+
+   def generMCSIMP(self,obj) :
+       if 'grma' in repr(obj.definition.type) :
+          if not type(obj.valeur) in (list, tuple):
+             aTraiter=(obj.valeur,)
+          else :
+            aTraiter=obj.valeur
+          for group in aTraiter :
+             if group not in self.listeMA :
+                self.listeMA.append(group)
+       if 'grno' in repr(obj.definition.type) :
+          if not type(obj.valeur) in (list, tuple):
+             aTraiter=(obj.valeur,)
+          else :
+            aTraiter=obj.valeur
+          for group in aTraiter :
+             if group not in self.listeNO :
+                self.listeNO.append(group)
+       s=PythonGenerator.generMCSIMP(self,obj)
+       return s
index 7439809ab1324ec98b293f0463250ecf648ea5c6..0c306db5bd07c769d90fd22f112dd7950af9f66d 100644 (file)
@@ -52,9 +52,11 @@ class SEPGenerator(PythonGenerator):
    # Les extensions de fichier permis?
    extensions=('.comm',)
 
-   def gener(self,obj,format='brut'):
+   def gener(self,obj,format='brut',config=None):
       self.initDico()
+      # Cette instruction génère le contenu du fichier de commandes (persistance)
       self.text=PythonGenerator.gener(self,obj,format)
+      # Cette instruction génère le contenu du fichier de paramètres python
       self.genereSEP()
       return self.text
 
@@ -62,36 +64,98 @@ class SEPGenerator(PythonGenerator):
       return self.texteTubePy
 
    def genereSEP(self) :
+      '''
+      Prépare le contenu du fichier de paramètres python. Le contenu
+      peut ensuite être obtenu au moyen de la fonction getTubePy().
+      '''
+      #self.__genereSEP_withVariables()
+      self.__genereSEP_withDico()
+
+   def __genereSEP_withVariables(self) :
+      '''
+      Les paramètres sont transcrits sous forme de variables nom=valeur.
+      '''
       self.texteTubePy="# Parametres generes par Eficas \n"
       for MC in self.dictMCVal.keys():
         ligne = MC +"="+ repr(self.dictMCVal[MC])+'\n'
          self.texteTubePy=self.texteTubePy+ligne
+
       print self.texteTubePy
 
+      # __GBO__: Tester self.tube pour aiguiller en fonction du cas (au besoin)
       fichier=os.path.join(os.path.dirname(__file__),"tube.py")
       f=open(fichier,'r')
       for ligne in f.readlines():
          self.texteTubePy=self.texteTubePy+ligne
       f.close
 
+   def __genereSEP_withDico(self) :
+      """
+      Les paramètres sont transcrits sous la forme d'un dictionnaire nom=valeur.
+      """
+      from Sep import properties
+      self.texteTubePy="# -*- coding: utf-8 -*-\n"
+      self.texteTubePy+="# ======================================================================================\n"
+      self.texteTubePy+="# FICHIER GENERE PAR EFICAS - OUTIL MÉTIER SOUS-EPAISSEUR - "
+      self.texteTubePy+="VERSION "+str(properties.version)+" du "+str(properties.date)+"\n"
+      self.texteTubePy+="# ======================================================================================\n"
+      self.texteTubePy+="\n"
+      self.texteTubePy+="# Parametres Utilisateur Eficas \n"
+      self.texteTubePy+="parameters={}\n"
+      
+      for MC in self.dictMCVal.keys():
+        ligne = "parameters['"+MC+"']="+ repr(self.dictMCVal[MC])+'\n'
+         self.texteTubePy=self.texteTubePy+ligne
+
+      # On ajoute des paramètres de configuration pour contrôle de
+      # cohérence avec la procédure outil métier
+      self.texteTubePy+="# Parametres de Configuration Eficas \n"
+      ligne = "parameters['OMVERSION']="+str(properties.version)+"\n"
+      self.texteTubePy+=ligne
+
+      # __GBO__: Tester self.tube pour aiguiller en fonction du cas (au besoin)
+      self.texteTubePy+="\n"
+      self.texteTubePy+="# Exécution de la procédure outil métier \n"
+      self.texteTubePy+="import os,sys\n"
+      self.texteTubePy+="sys.path.insert(0,os.environ['OM_ROOT_DIR'])\n"
+      self.texteTubePy+="import om_data\n"
+      self.texteTubePy+="om_data.setParameters(parameters)\n"
+      self.texteTubePy+="def run():\n"
+      self.texteTubePy+="    import om_smeca\n"
+      self.texteTubePy+="\n"
+      self.texteTubePy+='if __name__ == "__main__":\n'
+      self.texteTubePy+="    run()\n"
+
+      # For debug only
+      print self.texteTubePy
+
+
    def initDico(self) :
       self.tube=0
       self.coude=0
       self.dictMCVal={}
       self.texteTubePy=""
 
+   # __GBO__: surcharge de PythonGenerator:
+   # voir example generator_cuve2dg.py (genea)
    def generMCSIMP(self,obj) :
       """
       Convertit un objet MCSIMP en texte python
       Remplit le dictionnaire des MCSIMP si nous ne sommes ni dans une loi, ni dans une variable
       """
+      clef=""
+      for i in obj.get_genealogie() :
+         clef=clef+"__"+i
+      #self.dictMCVal[obj.nom]=obj.valeur
+      self.dictMCVal[clef]=obj.valeur
+
       s=PythonGenerator.generMCSIMP(self,obj)
-      self.dictMCVal[obj.nom]=obj.valeur
       return s
   
+   # __GBO__: surcharge de PythonGenerator
    def generMACRO_ETAPE(self,obj):
       print obj.nom
-      if obj.nom == "M_TUBE" :
+      if obj.nom == "S_EP_INTERNE" :
         self.tube=1
       if obj.nom == "M_COUDE" :
         self.coude=1
index 0361c4a083cc7cd14038e62c409aa361662dab40..5cd96bfeb0035244d9ad1fa8d1db9f7267f3bd74 100644 (file)
@@ -84,7 +84,7 @@ class AplatGenerator:
       fp.write(self.text)
       fp.close()
 
-   def gener(self,obj,format='brut'):
+   def gener(self,obj,format='brut',config=None):
       """
           Retourne une représentation du JDC obj sous une forme qui est paramétrée par format.
           Si format vaut 'brut', 'standard' ou 'beautifie', retourne le texte issu de generator
index 1e616ce9ceefb99c87f1ccf7e87e6de930569b83..f1bb0b262e0435d3118e7f4bec770adc76adc647 100644 (file)
 # ======================================================================
 """
     Ce module contient le plugin generateur de fichier au format 
-    homard pour EFICAS.
+    DefaillCUVE pour EFICAS.
 
 """
 import traceback
 import types,string,re
 
 from Noyau import N_CR
-from Noyau.N_utils import repr_float
-from Accas import ETAPE,PROC_ETAPE,MACRO_ETAPE,ETAPE_NIVEAU,JDC,FORM_ETAPE
-from Accas import MCSIMP,MCFACT,MCBLOC,MCList,EVAL
-from Accas import GEOM,ASSD,MCNUPLET
-from Accas import COMMENTAIRE,PARAMETRE, PARAMETRE_EVAL,COMMANDE_COMM
-from Formatage import Formatage
+from Accas import MCSIMP
 from generator_python import PythonGenerator
 
 def entryPoint():
@@ -53,7 +48,7 @@ class Cuve2dgGenerator(PythonGenerator):
    """
        Ce generateur parcourt un objet de type JDC et produit
        un texte au format eficas et 
-       un texte au format homard 
+       un texte au format DefaillCUVE
 
    """
    # Les extensions de fichier préconisées
@@ -64,12 +59,536 @@ class Cuve2dgGenerator(PythonGenerator):
       if cr :
          self.cr=cr
       else:
-         self.cr=N_CR.CR(debut='CR generateur format homard pour homard',
-                         fin='fin CR format homard pour homard')
-      # Le texte au format homard est stocké dans l'attribut text
-      self.text=''
+         self.cr=N_CR.CR(debut='CR generateur format DefaillCUVE pour DefaillCUVE',
+                         fin='fin CR format DefaillCUVE pour DefaillCUVE')
+      # Le texte au format DefaillCUVE est stocké dans l'attribut textCuve
       self.textCuve=''
 
+      # Ce dictionnaire liste le nom des variables utilisees dans le script
+      self.variable = {
+         "NiveauImpression" : "MESSAGE_LEVEL",
+        "FichierDataIn"    : "DATARESUME_FILE",
+        "FichierTempSigma" : "TEMPSIG_FILE",
+        "FichierCSV"       : "CSV_FILE",
+        "FichierCREARE" : "CREARE_FILE",
+        "GrandeurEvaluee" : "GRANDEUR",
+        "IncrementTemporel" : "INCRTPS",
+        "IncrementMaxTemperature" : "DTPREC",
+        "IncrementMaxTempsAffichage" : "DTARCH",
+        "TraitementGeometrie" : "TYPEGEOM",
+        "RayonInterne" : "RINT",
+        "RayonInterne_mess" : "RINT_MESSAGE",
+        "RayonExterne" : "REXT",
+        "RayonExterne_mess" : "REXT_MESSAGE",
+        "EpaisseurRevetement" : "LREV",
+        "EpaisseurRevetement_mess" : "LREV_MESSAGE",
+        "LigamentExterneMin" : "LIGMIN",
+        "LigamentExterneMin_mess" : "LIGMIN_MESSAGE",
+        "NombreNoeudsMaillage" : "NBNO",
+        "TypeInitial" : "TYPEDEF",
+        "Orientation" : "ORIEDEF",
+        "ProfondeurRadiale" : "PROFDEF",
+        "ProfondeurRadiale_mess" : "PROFDEF_MESSAGE",
+        "ModeCalculLongueur" : "OPTLONG",
+        "Longueur" : "LONGDEF",
+        "Longueur_mess" : "LONGDEF_MESSAGE",
+        "CoefDirecteur" : "PROFSURLONG",
+        "CoefDirecteur_mess" : "PROFSURLONG_MESSAGE",
+        "Constante" : "LONGCONST",
+        "ModeCalculDecalage" : "DECATYP",
+        "DecalageNormalise" : "DECANOR",
+        "DecalageNormalise_mess" : "DECANOR_MESSAGE",
+        "DecalageRadial" : "DECADEF",
+        "DecalageRadial_mess" : "DECADEF_MESSAGE",
+        "Azimut" : "ANGLDEF",
+        "Azimut_mess" : "ANGLDEF_MESSAGE",
+        "Altitude_mess" : "ANGLDEF_MESSAGE",
+        "Altitude" : "ALTIDEF",
+        "Altitude_mess" : "ALTIDEF_MESSAGE",
+        "Pointe" : "POINDEF",
+        "ModeleFluence" : "MODELFLUENCE",
+        "ZoneActiveCoeur_AltitudeSup" : "H1COEUR",
+        "ZoneActiveCoeur_AltitudeInf" : "H2COEUR",
+        "FluenceMax" : "fmax",
+        "KPFrance" : "KPFRANCE",
+        "KPUS" : "KPUS",
+        "Azimut_0deg" : "COEFFLUENCE1",
+        "Azimut_5deg" : "COEFFLUENCE2",
+        "Azimut_10deg" : "COEFFLUENCE3",
+        "Azimut_15deg" : "COEFFLUENCE4",
+        "Azimut_20deg" : "COEFFLUENCE5",
+        "Azimut_25deg" : "COEFFLUENCE6",
+        "Azimut_30deg" : "COEFFLUENCE7",
+        "Azimut_35deg" : "COEFFLUENCE8",
+        "Azimut_40deg" : "COEFFLUENCE9",
+        "Azimut_45deg" : "COEFFLUENCE10",
+        "TypeIrradiation" : "TYPEIRR",
+        "RTNDT" : "RTNDT",
+        "ModeleIrradiation" : "MODELIRR",
+        "TeneurCuivre" : "CU",
+        "TeneurCuivre_mess" : "CU_MESSAGE",
+        "TeneurNickel" : "NI",
+        "TeneurNickel_mess" : "NI_MESSAGE",
+        "TeneurPhosphore" : "P",
+        "TeneurPhosphore_mess" : "P_MESSAGE",
+        "MoyenneRTndt" : "RTimoy",
+        "MoyenneRTndt_mess" : "RTimoy_MESSAGE",
+        "CoefVariationRTndt" : "RTicov",
+        "CoefVariationRTndt_mess" : "RTicov_MESSAGE",
+        "EcartTypeRTndt" : "USectDRT",
+        "EcartTypeRTndt_mess" : "USectDRT_MESSAGE",
+        "NombreEcartTypeRTndt" : "nbectDRTNDT",
+        "NombreEcartTypeRTndt_mess" : "nbectDRTNDT_MESSAGE",
+        "ModeleTenacite" : "MODELKIC",
+        "NBRE_CARACTERISTIQUE" : "NBCARAC",
+        "NbEcartType_MoyKIc" : "nbectKIc",
+        "NbEcartType_MoyKIc_mess" : "nbectKIc_MESSAGE",
+        "PalierDuctile_KIc" : "KICPAL",
+        "CoefficientVariation_KIc" : "KICCDV",
+        "Fractile_KIc" : "fractKIc",
+        "Fractile_KIc_mess" : "fractKIc_MESSAGE",
+        "Temperature_KIc100" : "T0WALLIN",
+        "A1" : "A1",
+        "A2" : "A2",
+        "A3" : "A3",
+        "B1" : "B1",
+        "B2" : "B2",
+        "B3" : "B3",
+        "C1" : "C1",
+        "C2" : "C2",
+        "C3" : "C3",
+        "AttnCorrBeta" : "ATTNCORRBETA",
+        "CorrIrwin" : "CORRIRWIN",
+        "ArretDeFissure" : "ARRETFISSURE",
+        "IncrementTailleFissure" : "INCRDEF",
+        "IncrementTailleFissure_mess" : "INCRDEF_MESSAGE",
+        "NbEcartType_MoyKIa" : "nbectKIa",
+        "PalierDuctile_KIa" : "KIAPAL",
+        "CoefficientVariation_KIa" : "KIACDV",
+        "InstantInitialisation" : "INSTINIT",
+        "ConditionLimiteThermiqueREV" : "KTHREV",
+        "TemperatureDeformationNulleREV" : "TREFREV",
+        "TemperaturePourCoefDilatThermREV" : "TDETREV",
+        "CoefficientPoissonREV" : "NUREV",
+        "ConditionLimiteThermiqueMDB" : "KTHMDB",
+        "TemperatureDeformationNulleMDB" : "TREFMDB",
+        "TemperaturePourCoefDilatThermMDB" : "TDETMDB",
+        "CoefficientPoissonMDB" : "NUMDB",
+        "TypeConditionLimiteThermique" : "TYPCLTH",
+        "Instant_1" : "INSTANT1",
+        "Instant_2" : "INSTANT2",
+        "DebitAccumule" : "QACCU",
+        "DebitInjectionSecurite" : "QIS",
+        "TempInjectionSecurite_mess" : "TIS_MESSAGE",
+        "DiametreHydraulique" : "DH",
+        "DiametreHydraulique_mess" : "DH_MESSAGE",
+        "SectionEspaceAnnulaire" : "SECTION",
+        "SectionEspaceAnnulaire_mess" : "SECTION_MESSAGE",
+        "HauteurCaracConvectionNaturelle" : "DELTA",
+        "HauteurCaracConvectionNaturelle_mess" : "DELTA_MESSAGE",
+        "CritereConvergenceRelative" : "EPS",
+        "CoefficientsVestale" : "COEFVESTALE",
+        "VolumeMelange_CREARE" : "VM",
+        "VolumeMelange_CREARE_mess" : "VM_MESSAGE",
+        "TemperatureInitiale_CREARE" : "T0",
+        "TemperatureInitiale_CREARE_mess" : "T0_MESSAGE",
+        "SurfaceEchange_FluideStructure" : "SE",
+        "SurfaceEchange_FluideStructure_mess" : "SE_MESSAGE",
+         }
+
+      # Ce dictionnaire liste le commentaire des variables utilisees dans le script
+      self.comment = {
+         "NiveauImpression" : "Niveau d impression des messages a l ecran (=0 : rien, =1 : temps calcul total, =2 : temps intermediaires)",
+        "FichierDataIn"    : "sortie du fichier recapitulatif des donnees d entree {OUI ; NON}",
+        "FichierTempSigma" : "sortie des fichiers temperature et contraintes {OUI ; NON}",
+        "FichierCSV" : "sortie du fichier resultat template_DEFAILLCUVE.CSV {OUI ; NON}",
+        "FichierCREARE" : "sortie du fichier Tfluide et Coef Echange {OUI ; NON}",
+        "GrandeurEvaluee" : "choix de la grandeur sous critere evaluee {FM_KICSURKCP ; MARGE_KI ; MARGE_KCP}",
+        "IncrementTemporel" : "increment temporel pour l analyse PROBABILISTE (si DETERMINISTE, fixer a 1)",
+        "IncrementMaxTemperature" : "increment max de temp/noeud/instant (degC)",
+        "IncrementMaxTempsAffichage" : "increment max de temps pour affichage (s)",
+        "TraitementGeometrie" : "traitement de la geometrie de la cuve : {GEOMETRIE, MAILLAGE}",
+        "RayonInterne" : "rayon interne (m)",
+        "RayonInterne_mess" : "affichage ecran du rayon interne (m)",
+        "RayonExterne" : "rayon externe (m)",
+        "RayonExterne_mess" : "affichage ecran du rayon externe (m)",
+        "EpaisseurRevetement" : "epaisseur revetement (m)",
+        "EpaisseurRevetement_mess" : "affichage ecran de l epaisseur revetement (m)",
+        "LigamentExterneMin" : "ligament externe minimal avant rupture (% de l'epaisseur de cuve)",
+        "LigamentExterneMin_mess" : "affichage ecran du ligament externe minimal avant rupture (% de l'epaisseur de cuve)",
+        "NombreNoeudsMaillage" : "nbre de noeuds dans l'epaisseur de la cuve",
+        "TypeInitial" : "type initial du defaut : DEBOUCHANT=Defaut Debouchant, DSR=Defaut Sous Revetement, DECALE=Defaut Decale",
+        "Orientation" : "orientation (LONGITUD / CIRCONF)",
+        "ProfondeurRadiale" : "profondeur radiale ou encore hauteur (m)",
+        "ProfondeurRadiale_mess" : "affichage ecran de la profondeur radiale ou encore hauteur (m)",
+        "ModeCalculLongueur" : "option pour definir la longueur du defaut (VALEUR pour une valeur fixe, FCTAFFINE pour une fct affine de la profondeur)",
+        "Longueur" : "longueur (m) pour defaut Sous Revetement",
+        "Longueur_mess" : "affichage ecran de la longueur (m) pour defaut Sous Revetement",
+        "CoefDirecteur" : "pente de la fonction affine l = h/profsurlong + a0",
+        "CoefDirecteur_mess" : "affichage ecran de la pente de la fonction affine l = h/profsurlong + a0",
+        "Constante" : "constante de la fonction affine a0",
+        "ModeCalculDecalage" : "type de decalage : normalise (NORMALISE) ou reel (VALEUR)",
+        "DecalageNormalise" : "decalage radial normalise (valeur comprise entre 0. et 1.) pour defaut Sous Revetement",
+        "DecalageNormalise_mess" : "affichage ecran du decalage radial normalise (valeur comprise entre 0. et 1.) pour defaut Sous Revetement",
+        "DecalageRadial" : "decalage radial reel (m) pour defaut decale",
+        "DecalageRadial_mess" : "affichage ecran du decalage radial reel (m) pour defaut decale",
+        "Azimut" : "coordonnee angulaire (degre)",
+        "Azimut_mess" : "affichage ecran de la coordonnee angulaire (degre)",
+        "Altitude" : "altitude (m) : valeur negative",
+        "Altitude_mess" : "affichage ecran de l altitude (m) : valeur negative",
+        "Pointe" : "choix du(des) point(s) du defaut considere {'A','B','BOTH'} pour DSR et DECALE (pour DEBOUCHANT : automatiquement 'B')",
+        "ModeleFluence" : "modele de fluence : {Reglementaire, France, ValeurImposee, SDM, USNRC, REV_2, SDM_Lissage, GrandeDev, GD_Cuve, Cuve1D}",
+        "ZoneActiveCoeur_AltitudeSup" : "cote superieure de la zone active de coeur (ici pour cuve palier 900Mw)",
+        "ZoneActiveCoeur_AltitudeInf" : "cote inferieure de la zone active de coeur (ici pour cuve palier 900Mw)",
+        "FluenceMax" : "fluence maximale assimilee par la cuve (n/cm2)",
+        "KPFrance" : "parametre exponentiel du modele France",
+        "KPUS" : "parametre exponentiel du modele US",
+        "Azimut_0deg" : "fluence a l'azimut 0 (10^19 n/cm)",
+        "Azimut_5deg" : "fluence a l'azimut 5 (10^19 n/cm)",
+        "Azimut_10deg" : "fluence a l'azimut 10 (10^19 n/cm)",
+        "Azimut_15deg" : "fluence a l'azimut 15 (10^19 n/cm)",
+        "Azimut_20deg" : "fluence a l'azimut 20 (10^19 n/cm)",
+        "Azimut_25deg" : "fluence a l'azimut 25 (10^19 n/cm)",
+        "Azimut_30deg" : "fluence a l'azimut 30 (10^19 n/cm)",
+        "Azimut_35deg" : "fluence a l'azimut 35 (10^19 n/cm)",
+        "Azimut_40deg" : "fluence a l'azimut 40 (10^19 n/cm)",
+        "Azimut_45deg" : "fluence a l'azimut 45 (10^19 n/cm)",
+        "TypeIrradiation" : "type irradiation : {RTNDT, FLUENCE}",
+        "RTNDT" : "RTNDT finale (degC)",
+        "ModeleIrradiation" : "modele d irradiation : {HOUSSIN, PERSOZ, LEFEBVRE, USNRCmdb} pour virole et {BRILLAUD,USNRCsoud} pour jointsoude",
+        "TeneurCuivre" : "teneur en cuivre (%)",
+        "TeneurCuivre_mess" : "affichage ecran de la teneur en cuivre (%)",
+        "TeneurNickel" : "teneur en nickel (%)",
+        "TeneurNickel_mess" : "affichage ecran de la teneur en nickel (%)",
+        "TeneurPhosphore" : "teneur en phosphore (%)",
+        "TeneurPhosphore_mess" : "affichage ecran de la teneur en phosphore (%)",
+        "MoyenneRTndt" : "moyenne de la RTNDT initiale : virole C1 de cuve Chinon : mdb=>-17.degC et js=>42.degC (HT-56/05/038 : p.52)",
+        "MoyenneRTndt_mess" : "affichage ecran de la moyenne de la RTNDT initiale",
+        "CoefVariationRTndt" : "coef de variation de la RTNDT initiale",
+        "CoefVariationRTndt_mess" : "affichage ecran du coef de variation de la RTNDT initiale",
+        "EcartTypeRTndt" : "pour modeles USNRCsoud ou USNRCmdb, ecart-type du decalage de RTNDT (°F) (28. pour js et 17. pour mdb)",
+        "EcartTypeRTndt_mess" : "affichage ecran, pour modeles USNRCsoud ou USNRCmdb, ecart-type du decalage de RTNDT (°F) (28. pour js et 17. pour mdb)",
+        "NombreEcartTypeRTndt" : "Nbre d ecart-type par rapport a la moyenne de DRTNDT si analyse PROBABILISTE (en DETERMINISTE, fixer a 2.)",
+        "NombreEcartTypeRTndt_mess" : "affichage ecran du nbre d ecart-type par rapport a la moyenne de DRTNDT si analyse PROBABILISTE",
+        "ModeleTenacite" : "modele de tenacite : {RCC-M, RCC-M_pal, RCC-M_exp, RCC-M_simpl, Houssin_RC, Wallin, REME, ORNL, Frama, WEIB3, WEIB2, LOGWOLF, WEIB-GEN}",
+        "NBRE_CARACTERISTIQUE" : "Nb caracteristique : ORDRE ou QUANTILE",
+        "NbEcartType_MoyKIc" : "Nbre d ecart-type par rapport a la moyenne de KIc si analyse PROBABILISTE (en DETERMINISTE, fixer a -2.)",
+        "NbEcartType_MoyKIc_mess" : "affichage ecran du nbre d ecart-type par rapport a la moyenne de KIc si analyse PROBABILISTE",
+        "PalierDuctile_KIc" : "palier deterministe de K1c (MPa(m^0.5))",
+        "CoefficientVariation_KIc" : "coef de variation de la loi normale de K1c",
+        "Fractile_KIc" : "valeur caracteristique de KIc exprimee en ordre de fractile (%)",
+        "Fractile_KIc_mess" : "affichage ecran de la valeur caracteristique de KIc exprimee en ordre de fractile (%)",
+        "Temperature_KIc100" : "parametre T0 du modele Wallin (degC)",
+        "A1" : "coef des coefs d une WEIBULL generale",
+        "A2" : "",
+        "A3" : "",
+        "B1" : "",
+        "B2" : "",
+        "B3" : "",
+        "C1" : "",
+        "C2" : "",
+        "C3" : "",
+        "AttnCorrBeta" : "Attenuation de la correction plastique : {OUI, NON} ==> uniquement pour DSR ou DECALE",
+        "CorrIrwin" : "Correction plastique IRWIN : {OUI, NON} ==> uniquement pour DEBOUCHANT",
+        "ArretDeFissure" : "prise en compte de l arret de fissure {OUI, NON} (en PROBABILISTE, fixer a NON)",
+        "IncrementTailleFissure" : "increment de la taille de fissure (m)",
+        "IncrementTailleFissure_mess" : "affichage ecran de l increment de la taille de fissure (m)",
+        "NbEcartType_MoyKIa" : "Nbre d ecart-type par rapport a la moyenne de KIa (nb sigma)",
+        "PalierDuctile_KIa" : "palier deterministe de K1a quand modele RCC-M  (MPa(m^0.5))",
+        "CoefficientVariation_KIa" : "coef de variation de la loi normale de K1a",
+        "InstantInitialisation" : "instant initial (s)",
+        "ConditionLimiteThermiqueREV" : "Option 'ENTHALPIE' ou 'CHALEUR'",
+        "TemperatureDeformationNulleREV" : "temperature de deformation nulle (degC)",
+        "TemperaturePourCoefDilatThermREV" : "temperature de definition du coefficient de dilatation thermique (degC)",
+        "CoefficientPoissonREV" : "coefficient de Poisson",
+        "ConditionLimiteThermiqueMDB" : "Option 'ENTHALPIE' ou 'CHALEUR'",
+        "TemperatureDeformationNulleMDB" : "temperature de deformation nulle (degC)",
+        "TemperaturePourCoefDilatThermMDB" : "temperature de definition du coefficient de dilatation thermique (degC)",
+        "CoefficientPoissonMDB" : "coefficient de Poisson",
+        "TypeConditionLimiteThermique" : "Type de condition thermique en paroi interne {TEMP_IMPO,FLUX_REP,ECHANGE,DEBIT,TEMP_FLU,APRP}",
+        "Instant_1" : "Borne inferieure de l intervalle de temps du 2nd palier T1",
+        "Instant_2" : "Borne superieure de l intervalle de temps du 2nd palier T1",
+        "DebitAccumule" : "Debit accumule (en m3/h)",
+        "DebitInjectionSecurite" : "Debit injection de securite (en m3/h)",
+        "TempInjectionSecurite_mess" : "affichage ecran de la temperature injection de securite",
+        "DiametreHydraulique" : "Diametre hydraulique (m)",
+        "DiametreHydraulique_mess" : "affichage ecran du diametre hydraulique (m)",
+        "SectionEspaceAnnulaire" : "Section espace annulaire (m2)",
+        "SectionEspaceAnnulaire_mess" : "affichage ecran de la section espace annulaire (m2)",
+        "HauteurCaracConvectionNaturelle" : "Hauteur caracteristique convection naturelle (m)",
+        "HauteurCaracConvectionNaturelle_mess" : "affichage ecran de la hauteur caracteristique convection naturelle (m)",
+        "CritereConvergenceRelative" : "Critere convergence relative (-)",
+        "CoefficientsVestale" : "Application des coefs de Vestale {OUI;NON}",
+        "VolumeMelange_CREARE" : "Volume de melange CREARE (m3)",
+        "VolumeMelange_CREARE_mess" : "affichage ecran du volume de melange CREARE (m3)",
+        "TemperatureInitiale_CREARE" : "Temperature initiale CREARE (degC)",
+        "TemperatureInitiale_CREARE_mess" : "affichage ecran de la temperature initiale CREARE (degC)",
+        "SurfaceEchange_FluideStructure" : "Surface d'echange fluide/structure (m2)",
+        "SurfaceEchange_FluideStructure_mess" : "affichage ecran de la surface d'echange fluide/structure (m2)",
+         }
+
+      # Ce dictionnaire liste la valeur par defaut des variables utilisees dans le script
+      self.default = {
+         "NiveauImpression" : "1",
+        "FichierDataIn" : "NON",
+        "FichierTempSigma" : "NON",
+        "FichierCSV" : "NON",
+        "FichierCREARE" : "NON",
+        "GrandeurEvaluee" : "FM_KICSURKCP",
+        "IncrementTemporel" : "1",
+        "IncrementMaxTemperature" : "0.1",
+        "IncrementMaxTempsAffichage" : "1000.",
+        "TraitementGeometrie" : "GEOMETRIE",
+        "RayonInterne" : "1.994",
+        "RayonInterne_mess" : "NON",
+        "RayonExterne" : "2.2015",
+        "RayonExterne_mess" : "NON",
+        "EpaisseurRevetement" : "0.0075",
+        "EpaisseurRevetement_mess" : "NON",
+        "LigamentExterneMin" : "0.75",
+        "LigamentExterneMin_mess" : "NON",
+        "NombreNoeudsMaillage" : "300",
+        "TypeInitial" : "DSR",
+        "Orientation" : "LONGITUD",
+        "ProfondeurRadiale" : "0.006",
+        "ProfondeurRadiale_mess" : "NON",
+        "ModeCalculLongueur" : "VALEUR",
+        "Longueur" : "0.060",
+        "Longueur_mess" : "NON",
+        "CoefDirecteur" : "10.",
+        "CoefDirecteur_mess" : "NON",
+        "Constante" : "0.",
+        "ModeCalculDecalage" : "VALEUR",
+        "DecalageNormalise" : "0.1",
+        "DecalageNormalise_mess" : "NON",
+        "DecalageRadial" : "0.",
+        "DecalageRadial_mess" : "NON",
+        "Azimut" : "0.",
+        "Azimut_mess" : "NON",
+        "Altitude" : "-4.",
+        "Altitude_mess" : "NON",
+        "Pointe" : "B",
+        "ModeleFluence" : "Reglementaire",
+        "ZoneActiveCoeur_AltitudeSup" : "-3.536",
+        "ZoneActiveCoeur_AltitudeInf" : "-7.194",
+        "FluenceMax" : "6.5",
+        "KPFrance" : "12.7",
+        "KPUS" : "9.4488",
+        "Azimut_0deg" : "5.8",
+        "Azimut_5deg" : "5.48",
+        "Azimut_10deg" : "4.46",
+        "Azimut_15deg" : "3.41",
+        "Azimut_20deg" : "3.37",
+        "Azimut_25deg" : "3.16",
+        "Azimut_30deg" : "2.74",
+        "Azimut_35deg" : "2.25",
+        "Azimut_40deg" : "1.89",
+        "Azimut_45deg" : "1.78",
+        "TypeIrradiation" : "RTNDT",
+        "RTNDT" : "64.",
+        "ModeleIrradiation" : "HOUSSIN",
+        "TeneurCuivre" : "0.0972",
+        "TeneurCuivre_mess" : "NON",
+        "TeneurNickel" : "0.72",
+        "TeneurNickel_mess" : "NON",
+        "TeneurPhosphore" : "0.00912",
+        "TeneurPhosphore_mess" : "NON",
+        "MoyenneRTndt" : "-12.0",
+        "MoyenneRTndt_mess" : "NON",
+        "CoefVariationRTndt" : "0.1",
+        "CoefVariationRTndt_mess" : "NON",
+        "EcartTypeRTndt" : "-2.",
+        "EcartTypeRTndt_mess" : "NON",
+        "NombreEcartTypeRTndt" : "2.",
+        "NombreEcartTypeRTndt_mess" : "NON",
+        "ModeleTenacite" : "RCC-M",
+        "NBRE_CARACTERISTIQUE" : "QUANTILE",
+        "NbEcartType_MoyKIc" : "-2.",
+        "NbEcartType_MoyKIc_mess" : "NON",
+        "PalierDuctile_KIc" : "195.",
+        "CoefficientVariation_KIc" : "0.15",
+        "Fractile_KIc" : "5.",
+        "Fractile_KIc_mess" : "NON",
+        "Temperature_KIc100" : "-27.",
+        "A1" : "21.263",
+        "A2" : "9.159",
+        "A3" : "0.04057",
+        "B1" : "17.153",
+        "B2" : "55.089",
+        "B3" : "0.0144",
+        "C1" : "4.",
+        "C2" : "0.",
+        "C3" : "0.",
+        "AttnCorrBeta" : "NON",
+        "CorrIrwin" : "NON",
+        "ArretDeFissure" : "NON",
+        "IncrementTailleFissure" : "0.",
+        "IncrementTailleFissure_mess" : "NON",
+        "NbEcartType_MoyKIa" : "0.",
+        "PalierDuctile_KIa" : "0.",
+        "CoefficientVariation_KIa" : "0.",
+        "InstantInitialisation" : "-1.",
+        "ConditionLimiteThermiqueREV" : "CHALEUR",
+        "TemperatureDeformationNulleREV" : "20.",
+        "TemperaturePourCoefDilatThermREV" : "287.",
+        "CoefficientPoissonREV" : "0.3",
+        "ConditionLimiteThermiqueMDB" : "CHALEUR",
+        "TemperatureDeformationNulleMDB" : "20.",
+        "TemperaturePourCoefDilatThermMDB" : "287.",
+        "CoefficientPoissonMDB" : "0.3",
+        "TypeConditionLimiteThermique" : "TEMP_IMPO",
+        "Instant_1" : "21.",
+        "Instant_2" : "45.",
+        "DebitAccumule" : "2.3",
+        "DebitInjectionSecurite" : "0.375",
+        "TempInjectionSecurite_mess" : "NON",
+        "DiametreHydraulique" : "0.3816",
+        "DiametreHydraulique_mess" : "NON",
+        "SectionEspaceAnnulaire" : "0.21712",
+        "SectionEspaceAnnulaire_mess" : "NON",
+        "HauteurCaracConvectionNaturelle" : "6.",
+        "HauteurCaracConvectionNaturelle_mess" : "NON",
+        "CritereConvergenceRelative" : "0.00001",
+        "CoefficientsVestale" : "NON",
+        "VolumeMelange_CREARE" : "14.9",
+        "VolumeMelange_CREARE_mess" : "NON",
+        "TemperatureInitiale_CREARE" : "250.",
+        "TemperatureInitiale_CREARE_mess" : "NON",
+        "SurfaceEchange_FluideStructure" : "0.",
+        "SurfaceEchange_FluideStructure_mess" : "NON",
+         }
+
+      # Ce dictionnaire liste la rubrique d'appartenance des variables utilisees dans le script
+      self.bloc = {
+         "NiveauImpression" : "OPTIONS",
+        "FichierDataIn" : "OPTIONS",
+        "FichierTempSigma" : "OPTIONS",
+        "FichierCSV" : "OPTIONS",
+        "FichierCREARE" : "OPTIONS",
+        "GrandeurEvaluee" : "OPTIONS",
+        "IncrementTemporel" : "OPTIONS",
+        "IncrementMaxTemperature" : "OPTIONS",
+        "IncrementMaxTempsAffichage" : "OPTIONS",
+        "TraitementGeometrie" : "DONNEES DE LA CUVE",
+        "RayonInterne" : "DONNEES DE LA CUVE",
+        "RayonInterne_mess" : "DONNEES DE LA CUVE",
+        "RayonExterne" : "DONNEES DE LA CUVE",
+        "RayonExterne_mess" : "DONNEES DE LA CUVE",
+        "EpaisseurRevetement" : "DONNEES DE LA CUVE",
+        "EpaisseurRevetement_mess" : "DONNEES DE LA CUVE",
+        "LigamentExterneMin" : "DONNEES DE LA CUVE",
+        "LigamentExterneMin_mess" : "DONNEES DE LA CUVE",
+        "NombreNoeudsMaillage" : "DONNEES DE LA CUVE",
+        "TypeInitial" : "CARACTERISTIQUES DU DEFAUT",
+        "Orientation" : "CARACTERISTIQUES DU DEFAUT",
+        "ProfondeurRadiale" : "CARACTERISTIQUES DU DEFAUT",
+        "ProfondeurRadiale_mess" : "CARACTERISTIQUES DU DEFAUT",
+        "ModeCalculLongueur" : "CARACTERISTIQUES DU DEFAUT",
+        "Longueur" : "CARACTERISTIQUES DU DEFAUT",
+        "Longueur_mess" : "CARACTERISTIQUES DU DEFAUT",
+        "CoefDirecteur" : "CARACTERISTIQUES DU DEFAUT",
+        "CoefDirecteur_mess" : "CARACTERISTIQUES DU DEFAUT",
+        "Constante" : "CARACTERISTIQUES DU DEFAUT",
+        "ModeCalculDecalage" : "CARACTERISTIQUES DU DEFAUT",
+        "DecalageNormalise" : "CARACTERISTIQUES DU DEFAUT",
+        "DecalageNormalise_mess" : "CARACTERISTIQUES DU DEFAUT",
+        "DecalageRadial" : "CARACTERISTIQUES DU DEFAUT",
+        "DecalageRadial_mess" : "CARACTERISTIQUES DU DEFAUT",
+        "Azimut" : "CARACTERISTIQUES DU DEFAUT",
+        "Azimut_mess" : "CARACTERISTIQUES DU DEFAUT",
+        "Altitude" : "CARACTERISTIQUES DU DEFAUT",
+        "Altitude_mess" : "CARACTERISTIQUES DU DEFAUT",
+        "Pointe" : "CARACTERISTIQUES DU DEFAUT",
+        "ModeleFluence" : "MODELES",
+        "ZoneActiveCoeur_AltitudeSup" : "MODELES",
+        "ZoneActiveCoeur_AltitudeInf" : "MODELES",
+        "FluenceMax" : "MODELES",
+        "KPFrance" : "MODELES",
+        "KPUS" : "MODELES",
+        "Azimut_0deg" : "MODELES",
+        "Azimut_5deg" : "MODELES",
+        "Azimut_10deg" : "MODELES",
+        "Azimut_15deg" : "MODELES",
+        "Azimut_20deg" : "MODELES",
+        "Azimut_25deg" : "MODELES",
+        "Azimut_30deg" : "MODELES",
+        "Azimut_35deg" : "MODELES",
+        "Azimut_40deg" : "MODELES",
+        "Azimut_45deg" : "MODELES",
+        "TypeIrradiation" : "MODELES",
+        "RTNDT" : "MODELES",
+        "ModeleIrradiation" : "MODELES",
+        "TeneurCuivre" : "MODELES",
+        "TeneurCuivre_mess" : "MODELES",
+        "TeneurNickel" : "MODELES",
+        "TeneurNickel_mess" : "MODELES",
+        "TeneurPhosphore" : "MODELES",
+        "TeneurPhosphore_mess" : "MODELES",
+        "MoyenneRTndt" : "MODELES",
+        "MoyenneRTndt_mess" : "MODELES",
+        "CoefVariationRTndt" : "MODELES",
+        "CoefVariationRTndt_mess" : "MODELES",
+        "EcartTypeRTndt" : "MODELES",
+        "EcartTypeRTndt_mess" : "MODELES",
+        "NombreEcartTypeRTndt" : "MODELES",
+        "NombreEcartTypeRTndt_mess" : "MODELES",
+        "ModeleTenacite" : "MODELES",
+        "NBRE_CARACTERISTIQUE" : "MODELES",
+        "NbEcartType_MoyKIc" : "MODELES",
+        "NbEcartType_MoyKIc_mess" : "MODELES",
+        "PalierDuctile_KIc" : "MODELES",
+        "CoefficientVariation_KIc" : "MODELES",
+        "Fractile_KIc" : "MODELES",
+        "Fractile_KIc_mess" : "MODELES",
+        "Temperature_KIc100" : "MODELES",
+        "A1" : "MODELES",
+        "A2" : "MODELES",
+        "A3" : "MODELES",
+        "B1" : "MODELES",
+        "B2" : "MODELES",
+        "B3" : "MODELES",
+        "C1" : "MODELES",
+        "C2" : "MODELES",
+        "C3" : "MODELES",
+        "AttnCorrBeta" : "MODELES",
+        "CorrIrwin" : "MODELES",
+        "ArretDeFissure" : "MODELES",
+        "IncrementTailleFissure" : "MODELES",
+        "IncrementTailleFissure_mess" : "MODELES",
+        "NbEcartType_MoyKIa" : "MODELES",
+        "PalierDuctile_KIa" : "MODELES",
+        "CoefficientVariation_KIa" : "MODELES",
+        "InstantInitialisation" : "ETAT INITIAL",
+        "ConditionLimiteThermiqueREV" : "CARACTERISTIQUES DU REVETEMENT",
+        "TemperatureDeformationNulleREV" : "CARACTERISTIQUES DU REVETEMENT",
+        "TemperaturePourCoefDilatThermREV" : "CARACTERISTIQUES DU REVETEMENT",
+        "CoefficientPoissonREV" : "CARACTERISTIQUES DU REVETEMENT",
+        "ConditionLimiteThermiqueMDB" : "CARACTERISTIQUES DU MDB",
+        "TemperatureDeformationNulleMDB" : "CARACTERISTIQUES DU MDB",
+        "TemperaturePourCoefDilatThermMDB" : "CARACTERISTIQUES DU MDB",
+        "CoefficientPoissonMDB" : "CARACTERISTIQUES DU MDB",
+        "TypeConditionLimiteThermique" : "TRANSITOIRE",
+        "Instant_1" : "TRANSITOIRE",
+        "Instant_2" : "TRANSITOIRE",
+        "DebitAccumule" : "TRANSITOIRE",
+        "DebitInjectionSecurite" : "TRANSITOIRE",
+        "TempInjectionSecurite_mess" : "TRANSITOIRE",
+        "DiametreHydraulique" : "TRANSITOIRE",
+        "DiametreHydraulique_mess" : "TRANSITOIRE",
+        "SectionEspaceAnnulaire" : "TRANSITOIRE",
+        "SectionEspaceAnnulaire_mess" : "TRANSITOIRE",
+        "HauteurCaracConvectionNaturelle" : "TRANSITOIRE",
+        "HauteurCaracConvectionNaturelle_mess" : "TRANSITOIRE",
+        "CritereConvergenceRelative" : "TRANSITOIRE",
+        "CoefficientsVestale" : "TRANSITOIRE",
+        "VolumeMelange_CREARE" : "TRANSITOIRE",
+        "VolumeMelange_CREARE_mess" : "TRANSITOIRE",
+        "TemperatureInitiale_CREARE" : "TRANSITOIRE",
+        "TemperatureInitiale_CREARE_mess" : "TRANSITOIRE",
+        "SurfaceEchange_FluideStructure" : "TRANSITOIRE",
+        "SurfaceEchange_FluideStructure_mess" : "TRANSITOIRE",
+         }
+
    def gener(self,obj,format='brut'):
       self.text=''
       self.textCuve=''
@@ -87,24 +606,911 @@ class Cuve2dgGenerator(PythonGenerator):
        s=PythonGenerator.generMCSIMP(self,obj)
        return s
 
-   def writeCuve2DG(self):
+   def writeCuve2DG(self, filename):
       print "je passe dans writeCuve2DG"
       self.genereTexteCuve()
-      f = open( "/tmp/data_template", 'wb')
+      f = open( filename, 'wb')
       print self.texteCuve
       f.write( self.texteCuve )
       f.close()
+      ftmp = open( "/tmp/data_template", 'wb')
+      ftmp.write( self.texteCuve )
+      ftmp.close()
+
+   def entete(self):
+      '''
+      Ecrit l'entete du fichier data_template
+      '''
+      texte  = "############################################################################################"+"\n"
+      texte += "#"+"\n"
+      texte += "#                OUTIL D'ANALYSE PROBABILISTE DE LA DUREE DE VIE DES CUVES REP"+"\n"
+      texte += "#                                     ---------------"+"\n"
+      texte += "#                               FICHIER DE MISE EN DONNEES"+"\n"
+      texte += "#"+"\n"
+      texte += "# SI CALCUL DETERMINISTE :"+"\n"
+      texte += "#       - fixer INCRTPS=1, nbectDRTNDT=2., nbectKIc=-2."+"\n"
+      texte += "#       - les calculs ne sont possibles qu'en une seule pointe du defaut (POINDEF<>BOTH)"+"\n"
+      texte += "# SI CALCUL PROBABILISTE :"+"\n"
+      texte += "#       - fixer ARRETFISSURE=NON"+"\n"
+      texte += "#"+"\n"
+      texte += "############################################################################################"+"\n"
+      texte += "#"+"\n"
+      return texte
+
+   def rubrique(self, titre):
+      '''
+      Rubrique 
+      '''
+      texte  = "#"+"\n"
+      texte += "############################################################################################"+"\n"
+      texte += "# " + titre + "\n"
+      texte += "############################################################################################"+"\n"
+      texte += "#"+"\n"
+      return texte
+
+   def sousRubrique(self, soustitre, numtitre):
+      '''
+      Sous-rubrique 
+      '''
+      texte  = "#"+"\n"
+      texte += "# " + numtitre + soustitre + "\n"
+      texte += "#==========================================================================================="+"\n"
+      texte += "#"+"\n"
+      return texte
+
+   def ecritLigne(self, variablelue):
+      '''
+      Ecrit l'affectation d'une valeur a sa variable, suivie d'un commentaire
+      '''
+      texte = "%s = %s   # %s\n" % (self.variable[variablelue], str(self.dico_mot[variablelue]), self.comment[variablelue])
+      return texte
+
+   def affecteValeurDefaut(self, variablelue):
+      '''
+      Affecte une valeur par defaut a une variable, suivie d'un commentaire
+      '''
+      print "Warning ==> Dans la rubrique",self.bloc[variablelue],", valeur par defaut pour ",variablelue," = ",self.default[variablelue]
+      texte = "%s = %s   # %s\n" % (self.variable[variablelue], self.default[variablelue], self.comment[variablelue])
+      return texte
+
+   def affecteValeur(self, variablelue, valeuraffectee):
+      '''
+      Affecte une valeur a une variable, suivie d'un commentaire
+      '''
+      texte = "%s = %s   # %s\n" % (self.variable[variablelue], valeuraffectee, self.comment[variablelue])
+      return texte
+
+   def ecritVariable(self, variablelue):
+      if self.dico_mot.has_key(variablelue):
+         texte = self.ecritLigne(variablelue)
+      else :
+         texte = self.affecteValeurDefaut(variablelue)
+      return texte
+
+   def amontAval(self, amont, aval):
+      if str(self.dico_mot[amont])=='Continu':
+         if str(self.dico_mot[aval])=='Continu':
+            texte = 'CC'+"\n"
+        if str(self.dico_mot[aval])=='Lineaire':
+            texte = 'CL'+"\n"
+        if str(self.dico_mot[aval])=='Exclu':
+            texte = 'CE'+"\n"
+      if str(self.dico_mot[amont])=='Lineaire':
+         if str(self.dico_mot[aval])=='Continu':
+            texte = 'LC'+"\n"
+        if str(self.dico_mot[aval])=='Lineaire':
+            texte = 'LL'+"\n"
+        if str(self.dico_mot[aval])=='Exclu':
+            texte = 'LE'+"\n"
+      if str(self.dico_mot[amont])=='Exclu':
+         if str(self.dico_mot[aval])=='Continu':
+            texte = 'EC'+"\n"
+        if str(self.dico_mot[aval])=='Lineaire':
+            texte = 'EL'+"\n"
+        if str(self.dico_mot[aval])=='Exclu':
+            texte = 'EE'+"\n"
+      return texte
 
    def genereTexteCuve(self):
-      self.texteCuve=""
-      self.texteCuve+="############################################################################################"+"\n"
-      self.texteCuve+="# OPTIONS : Fichier Option.don"+"\n"
-      self.texteCuve+="############################################################################################"+"\n"
-      if self.dico_mot.has_key('IncrementTemporel'):
-         self.texteCuve+="INCRTPS = "+ str(self.dico_mot["IncrementTemporel"])+"\n"
+      self.texteCuve  = ""
+      self.texteCuve += self.entete()
+
+      # Rubrique OPTIONS
+      self.texteCuve += self.rubrique('OPTIONS')
+
+      self.texteCuve += self.sousRubrique('Impression a l ecran', '')
+      if self.dico_mot.has_key('NiveauImpression'):
+         if str(self.dico_mot["NiveauImpression"])=='Aucune impression':
+            self.texteCuve += self.affecteValeur('NiveauImpression', '0')
+         if str(self.dico_mot["NiveauImpression"])=='Temps total':
+            self.texteCuve += self.affecteValeur('NiveauImpression', '1')
+         if str(self.dico_mot["NiveauImpression"])=='Temps intermediaires':
+            self.texteCuve += self.affecteValeur('NiveauImpression', '2')
+
+      self.texteCuve += self.sousRubrique('Generation de fichiers', '')
+      self.texteCuve += self.ecritVariable('FichierDataIn')
+      self.texteCuve += self.ecritVariable('FichierTempSigma')
+      self.texteCuve += self.ecritVariable('FichierCSV')
+      self.texteCuve += self.ecritVariable('FichierCREARE')
+
+      self.texteCuve += self.sousRubrique('Grandeur evaluee', '')
+      if self.dico_mot.has_key('GrandeurEvaluee'):
+         if str(self.dico_mot["GrandeurEvaluee"])=='Facteur de marge KIc/KCP':
+            self.texteCuve += self.affecteValeur('GrandeurEvaluee', 'FM_KICSURKCP')
+         if str(self.dico_mot["GrandeurEvaluee"])=='Marge KIc-KI':
+            self.texteCuve += self.affecteValeur('GrandeurEvaluee', 'MARGE_KI')
+         if str(self.dico_mot["GrandeurEvaluee"])=='Marge KIc-KCP':
+            self.texteCuve += self.affecteValeur('GrandeurEvaluee', 'MARGE_KCP')
+
+      self.texteCuve += self.sousRubrique('Divers', '')
+      self.texteCuve += self.ecritVariable('IncrementTemporel')
+      self.texteCuve += self.ecritVariable('IncrementMaxTemperature')
+      self.texteCuve += self.ecritVariable('IncrementMaxTempsAffichage')
+      if self.dico_mot.has_key('ListeInstants'):
+         self.texteCuve += "# liste des instants pour ecriture des resultats (s)"+"\n"
+         self.imprime(1,(self.dico_mot["ListeInstants"]))
+      else :
+         print "Warning ==> Dans la rubrique OPTIONS, fournir ListeInstants."
+         self.texteCuve += "# liste des instants pour ecriture des resultats (s)"+"\n"
+         self.texteCuve += "  0.\n"
+         self.texteCuve += "  1.\n"
+
+
+      # Rubrique DONNEES DE LA CUVE
+      self.texteCuve += self.rubrique('DONNEES DE LA CUVE')
+      if self.dico_mot.has_key('TraitementGeometrie'):
+         if str(self.dico_mot["TraitementGeometrie"])=='Topologie':
+            self.texteCuve += self.affecteValeur('TraitementGeometrie', 'GEOMETRIE')
+            self.texteCuve+="# - si MAILLAGE, fournir NBNO et liste des abscisses (m)"+"\n"
+            self.texteCuve+="# - si GEOMETRIE, fournir (RINT, RINT_MESSAGE),"+"\n"
+            self.texteCuve+="#                         (REXT, REXT_MESSAGE),"+"\n"
+            self.texteCuve+="#                         (LREV, LREV_MESSAGE),"+"\n"
+            self.texteCuve+="#                         (LIGMIN, LIGMIN_MESSAGE),"+"\n"
+            self.texteCuve+="#                         NBNO"+"\n"
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('RayonInterne')
+            self.texteCuve += self.ecritVariable('RayonInterne_mess')
+            self.texteCuve += self.ecritVariable('RayonExterne')
+            self.texteCuve += self.ecritVariable('RayonExterne_mess')
+            self.texteCuve += self.ecritVariable('EpaisseurRevetement')
+            self.texteCuve += self.ecritVariable('EpaisseurRevetement_mess')
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('LigamentExterneMin')
+            self.texteCuve += self.ecritVariable('LigamentExterneMin_mess')
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('NombreNoeudsMaillage')
+         if str(self.dico_mot["TraitementGeometrie"])=='Maillage':
+            self.texteCuve += self.affecteValeur('TraitementGeometrie', 'MAILLAGE')
+            self.texteCuve+="# - si MAILLAGE, fournir NBNO et liste des abscisses (m)"+"\n"
+            self.texteCuve+="# - si GEOMETRIE, fournir (RINT, RINT_MESSAGE),"+"\n"
+            self.texteCuve+="#                         (REXT, REXT_MESSAGE),"+"\n"
+            self.texteCuve+="#                         (LREV, LREV_MESSAGE),"+"\n"
+            self.texteCuve+="#                         (LIGMIN, LIGMIN_MESSAGE),"+"\n"
+            self.texteCuve+="#                         NBNO"+"\n"
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('NombreNoeudsMaillage')
+            self.imprime(1,(self.dico_mot["ListeAbscisses"]))
+      else :
+         self.texteCuve += self.affecteValeurDefaut('TraitementGeometrie')
+         self.texteCuve+="# - si MAILLAGE, fournir NBNO et liste des abscisses (m)"+"\n"
+         self.texteCuve+="# - si GEOMETRIE, fournir (RINT, RINT_MESSAGE),"+"\n"
+         self.texteCuve+="#                         (REXT, REXT_MESSAGE),"+"\n"
+         self.texteCuve+="#                         (LREV, LREV_MESSAGE),"+"\n"
+         self.texteCuve+="#                         (LIGMIN, LIGMIN_MESSAGE),"+"\n"
+         self.texteCuve+="#                         NBNO"+"\n"
+         self.texteCuve+="#"+"\n"
+         self.texteCuve += self.affecteValeurDefaut('RayonInterne')
+         self.texteCuve += self.affecteValeurDefaut('RayonInterne_mess')
+         self.texteCuve += self.affecteValeurDefaut('RayonExterne')
+         self.texteCuve += self.affecteValeurDefaut('RayonExterne_mess')
+         self.texteCuve += self.affecteValeurDefaut('EpaisseurRevetement')
+         self.texteCuve += self.affecteValeurDefaut('EpaisseurRevetement_mess')
+         self.texteCuve+="#"+"\n"
+         self.texteCuve += self.affecteValeurDefaut('LigamentExterneMin')
+         self.texteCuve += self.affecteValeurDefaut('LigamentExterneMin_mess')
+         self.texteCuve+="#"+"\n"
+         self.texteCuve += self.affecteValeurDefaut('NombreNoeudsMaillage')
+
+
+      # Rubrique CARACTERISTIQUES DU DEFAUT
+      self.texteCuve += self.rubrique('CARACTERISTIQUES DU DEFAUT')
+
+      if self.dico_mot.has_key('TypeInitial'):
+         if str(self.dico_mot["TypeInitial"])=='Defaut Sous Revetement':
+            self.texteCuve += self.affecteValeur('TypeInitial', 'DSR')
+         if str(self.dico_mot["TypeInitial"])=='Defaut Decale':
+            self.texteCuve += self.affecteValeur('TypeInitial', 'DECALE')
+         if str(self.dico_mot["TypeInitial"])=='Defaut Debouchant':
+            self.texteCuve += self.affecteValeur('TypeInitial', 'DEBOUCHANT')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('TypeInitial')
+
+      self.texteCuve+="# Fournir ORIEDEF, (PROFDEF, PROFDEF_MESSAGE)"+"\n"
+      self.texteCuve+="# - Si DSR, fournir OPTLONG, (LONGDEF,LONGDEF_MESSAGE) ou (PROFSURLONG,PROFSURLONG_MESSAGE,LONGCONST)"+"\n"
+      self.texteCuve+="# - Si DECALE, fournir OPTLONG, (LONGDEF,LONGDEF_MESSAGE) ou (PROFSURLONG,PROFSURLONG_MESSAGE,LONGCONST), DECATYP, (DECANOR,DECANOR_MESSAGE) ou (DECADEF,DECADEF_MESSAGE)"+"\n"
+      self.texteCuve+="# - Si DEBOUCHANT, fournir IRWIN"+"\n"
+      self.texteCuve+="# Fournir (ANGLDEF, ANGLDEF_MESSAGE), (ALTIDEF, ALTIDEF_MESSAGE)"+"\n"
+      self.texteCuve+="# - Si DSR ou DECALE, fournir POINDEF"+"\n"
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Remarque :"+"\n"
+      self.texteCuve+="# - si DSR ou DECALE, dans la rubrique 'Modele de tenacite', fournir ATTNCORRBETA (ne pas fournir CORRIRWIN)"+"\n"
+      self.texteCuve+="# - si DEBOUCHANT,    dans la rubrique 'Modele de tenacite', fournir CORRIRWIN    (ne pas fournir ATTNCORRBETA)"+"\n"
+
+      self.texteCuve+="#"+"\n"
+
+      if self.dico_mot.has_key('Orientation'):
+         if str(self.dico_mot["Orientation"])=='Longitudinale':
+            self.texteCuve += self.affecteValeur('Orientation', 'LONGITUD')
+         if str(self.dico_mot["Orientation"])=='Circonferentielle':
+            self.texteCuve += self.affecteValeur('Orientation', 'CIRCONF')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('Orientation')
+        
+      self.texteCuve+="#"+"\n"
+      self.texteCuve += self.ecritVariable('ProfondeurRadiale')
+      self.texteCuve += self.ecritVariable('ProfondeurRadiale_mess')
+
+      self.texteCuve+="#"+"\n"
+      if self.dico_mot.has_key('ModeCalculLongueur'):
+         if str(self.dico_mot["ModeCalculLongueur"])=='Valeur':
+            self.texteCuve += self.affecteValeur('ModeCalculLongueur', 'VALEUR')
+            self.texteCuve+="# - Si VALEUR,    fournir (LONGDEF, LONGDEF_MESSAGE)"+"\n"
+            self.texteCuve+="# - Si FCTAFFINE, fournir (PROFSURLONG, PROFSURLONG_MESSAGE) et LONGCONST : LONGDEF=PROFDEF/PROFSURLONG + LONGCONST"+"\n"
+            self.texteCuve += self.ecritVariable('Longueur')
+            self.texteCuve += self.ecritVariable('Longueur_mess')
+         if str(self.dico_mot["ModeCalculLongueur"])=='Fonction affine de la profondeur':
+            self.texteCuve += self.affecteValeur('ModeCalculLongueur', 'FCTAFFINE')
+            self.texteCuve+="# - Si VALEUR,    fournir (LONGDEF, LONGDEF_MESSAGE)"+"\n"
+            self.texteCuve+="# - Si FCTAFFINE, fournir (PROFSURLONG, PROFSURLONG_MESSAGE) et LONGCONST : LONGDEF=PROFDEF/PROFSURLONG + LONGCONST"+"\n"
+            self.texteCuve += self.ecritVariable('CoefDirecteur')
+            self.texteCuve += self.ecritVariable('CoefDirecteur_mess')
+            self.texteCuve += self.ecritVariable('Constante')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('ModeCalculLongueur')
+         self.texteCuve+="# - Si VALEUR,    fournir (LONGDEF, LONGDEF_MESSAGE)"+"\n"
+         self.texteCuve+="# - Si FCTAFFINE, fournir (PROFSURLONG, PROFSURLONG_MESSAGE) et LONGCONST : LONGDEF=PROFDEF/PROFSURLONG + LONGCONST"+"\n"
+         self.texteCuve += self.affecteValeurDefaut('Longueur')
+         self.texteCuve += self.affecteValeurDefaut('Longueur_mess')
+
+      if self.dico_mot.has_key('TypeInitial'):
+         if str(self.dico_mot["TypeInitial"])!='Defaut Sous Revetement':
+            self.texteCuve+="#"+"\n"
+            if self.dico_mot.has_key('ModeCalculDecalage'):
+               if str(self.dico_mot["ModeCalculDecalage"])=='Valeur normalisee':
+                  self.texteCuve += self.affecteValeur('ModeCalculDecalage', 'NORMALISE')
+                  self.texteCuve+="# - Si NORMALISE, fournir (DECANOR, DECANOR_MESSAGE)"+"\n"
+                  self.texteCuve+="# - Si VALEUR,    fournir (DECADEF, DECADEF_MESSAGE)"+"\n"
+                  self.texteCuve += self.ecritVariable('DecalageNormalise')
+                  self.texteCuve += self.ecritVariable('DecalageNormalise_mess')
+               if str(self.dico_mot["ModeCalculDecalage"])=='Valeur':
+                  self.texteCuve += self.affecteValeur('ModeCalculDecalage', 'VALEUR')
+                  self.texteCuve+="# - Si NORMALISE, fournir (DECANOR, DECANOR_MESSAGE)"+"\n"
+                  self.texteCuve+="# - Si VALEUR,    fournir (DECADEF, DECADEF_MESSAGE)"+"\n"
+                  self.texteCuve += self.ecritVariable('DecalageRadial')
+                  self.texteCuve += self.ecritVariable('DecalageRadial_mess')
+            else :
+               self.texteCuve += self.affecteValeurDefaut('ModeCalculDecalage')
+               self.texteCuve+="# - Si NORMALISE, fournir (DECANOR, DECANOR_MESSAGE)"+"\n"
+               self.texteCuve+="# - Si VALEUR, fournir (DECADEF, DECADEF_MESSAGE)"+"\n"
+               self.texteCuve += self.affecteValeurDefaut('DecalageRadial')
+               self.texteCuve += self.affecteValeurDefaut('DecalageRadial_mess')
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve += self.ecritVariable('Azimut')
+      self.texteCuve += self.ecritVariable('Azimut_mess')
+      self.texteCuve+="#"+"\n"
+      self.texteCuve += self.ecritVariable('Altitude')
+      self.texteCuve += self.ecritVariable('Altitude_mess')
+      self.texteCuve+="#"+"\n"
+      if self.dico_mot.has_key('Pointe'):
+         if str(self.dico_mot["Pointe"])=='A':
+            self.texteCuve += self.affecteValeur('Pointe', 'A')
+         if str(self.dico_mot["Pointe"])=='B':
+            self.texteCuve += self.affecteValeur('Pointe', 'B')
+         if str(self.dico_mot["Pointe"])=='A et B':
+            self.texteCuve += self.affecteValeur('Pointe', 'BOTH')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('Pointe')
+
+      # Rubrique MODELES FLUENCE, IRRADIATION, TENACITE
+      self.texteCuve += self.rubrique('MODELES FLUENCE, IRRADIATION, TENACITE')
+      self.texteCuve += self.sousRubrique('Modele d attenuation de la fluence dans l epaisseur','A.')
+
+      if self.dico_mot.has_key('ModeleFluence'):
+         if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=9.7 (Reglementaire)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'Reglementaire')
+         if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=12.7 (France)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'France')
+         if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=0. (ValeurImposee)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'ValeurImposee')
+         if str(self.dico_mot["ModeleFluence"])=='Donnees francaises du palier CPY (SDM)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'SDM')
+         if str(self.dico_mot["ModeleFluence"])=='Regulatory Guide 1.99 rev 2 (USNRC)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'USNRC')
+         if str(self.dico_mot["ModeleFluence"])=='Dossier 900 MWe AP9701 rev 2 (REV_2)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'REV_2')
+         if str(self.dico_mot["ModeleFluence"])=='Lissage du modele ajuste (SDM_Lissage)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'SDM_Lissage')
+         if str(self.dico_mot["ModeleFluence"])=='Donnees francaises du palier CPY ajustees par secteur angulaire (GrandeDev)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'GrandeDev')
+         if str(self.dico_mot["ModeleFluence"])=='Grand developpement (GD_Cuve)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'GD_Cuve')
+         if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=9.7 (Reglementaire CUVE1D)':
+            self.texteCuve += self.affecteValeur('ModeleFluence', 'Cuve1D')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('ModeleFluence')
+
+      self.texteCuve+="# - si France,          fournir KPFRANCE"+"\n"
+      self.texteCuve+="# - si USNRC,           fournir KPUS"+"\n"
+      self.texteCuve+="# - si modele GD_Cuve,  fournir COEFFLUENCE1, COEFFLUENCE2, ..., COEFFLUENCE9, COEFFLUENCE10"+"\n"
+      self.texteCuve+="#"+"\n"
+
+      self.texteCuve += self.ecritVariable('ZoneActiveCoeur_AltitudeSup')
+      self.texteCuve += self.ecritVariable('ZoneActiveCoeur_AltitudeInf')
+      self.texteCuve += self.ecritVariable('FluenceMax')
+      if self.dico_mot.has_key('ModeleFluence'):
+         if str(self.dico_mot["ModeleFluence"])=='Exponentiel sans revetement k=12.7 (France)':
+            self.texteCuve += self.ecritVariable('KPFrance')
+         if str(self.dico_mot["ModeleFluence"])=='Regulatory Guide 1.99 rev 2 (USNRC)':
+            self.texteCuve += self.ecritVariable('KPUS')
+         if str(self.dico_mot["ModeleFluence"])=='Grand developpement (GD_Cuve)':
+            self.texteCuve += self.ecritVariable('Azimut_0deg')
+            self.texteCuve += self.ecritVariable('Azimut_5deg')
+            self.texteCuve += self.ecritVariable('Azimut_10deg')
+            self.texteCuve += self.ecritVariable('Azimut_15deg')
+            self.texteCuve += self.ecritVariable('Azimut_20deg')
+            self.texteCuve += self.ecritVariable('Azimut_25deg')
+            self.texteCuve += self.ecritVariable('Azimut_30deg')
+            self.texteCuve += self.ecritVariable('Azimut_35deg')
+            self.texteCuve += self.ecritVariable('Azimut_40deg')
+            self.texteCuve += self.ecritVariable('Azimut_45deg')
+
+      self.texteCuve += self.sousRubrique('Irradiation','B.')
+
+      if self.dico_mot.has_key('TypeIrradiation'):
+
+         if str(self.dico_mot["TypeIrradiation"])=='RTndt de la cuve a l instant de l analyse':
+            self.texteCuve += self.affecteValeur('TypeIrradiation', 'RTNDT')
+            self.texteCuve+="# - si RTNDT, fournir RTNDT"+"\n"
+            self.texteCuve+="# - si FLUENCE, fournir MODELIRR, et autres parametres selon MODELIRR (voir ci-dessous)"+"\n"
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('RTNDT')
+
+         if str(self.dico_mot["TypeIrradiation"])=='Modele d irradiation':
+            self.texteCuve += self.affecteValeur('TypeIrradiation', 'FLUENCE')
+            self.texteCuve+="# - si RTNDT, fournir RTNDT"+"\n"
+            self.texteCuve+="# - si FLUENCE, fournir MODELIRR, et autres parametres selon MODELIRR (voir ci-dessous)"+"\n"
+            self.texteCuve+="#"+"\n"
+            if self.dico_mot.has_key('ModeleIrradiation'):
+               if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Houssin':
+                  self.texteCuve += self.affecteValeur('ModeleIrradiation', 'HOUSSIN')
+               if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Persoz':
+                  self.texteCuve += self.affecteValeur('ModeleIrradiation', 'PERSOZ')
+               if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Lefebvre':
+                  self.texteCuve += self.affecteValeur('ModeleIrradiation', 'LEFEBVRE')
+               if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : Regulatory Guide 1.00 rev 2':
+                  self.texteCuve += self.affecteValeur('ModeleIrradiation', 'USNRCmdb')
+               if str(self.dico_mot["ModeleIrradiation"])=='Joint Soude : formulation de FIM/FIS Brillaud':
+                  self.texteCuve += self.affecteValeur('ModeleIrradiation', 'BRILLAUD')
+               if str(self.dico_mot["ModeleIrradiation"])=='Joint Soude : Regulatory Guide 1.00 rev 2':
+                  self.texteCuve += self.affecteValeur('ModeleIrradiation', 'USNRCsoud')
+            else :
+              self.texteCuve += self.affecteValeurDefaut('ModeleIrradiation')
+            self.texteCuve+="# - pour tout modele,                       fournir (CU, CU_MESSAGE),"+"\n"
+            self.texteCuve+="#                                                   (NI, NI_MESSAGE),"+"\n"
+            self.texteCuve+="# - si HOUSSIN, PERSOZ, LEFEBVRE, BRILLAUD, fournir (P, P_MESSAGE)"+"\n"
+            self.texteCuve+="# - pour tout modele,                       fournir (RTimoy, RTimoy_MESSAGE),"+"\n"
+            self.texteCuve+="# - si USNRCsoud ou USNRCmdb,               fournir (RTicov, RTicov_MESSAGE)"+"\n"
+            self.texteCuve+="#                                                   (USectDRT, USectDRT_MESSAGE)"+"\n"
+            self.texteCuve+="# - pour tout modele,                       fournir (nbectDRTNDT, nbectDRTNDT_MESSAGE)"+"\n"
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('TeneurCuivre')
+            self.texteCuve += self.ecritVariable('TeneurCuivre_mess')
+            self.texteCuve += self.ecritVariable('TeneurNickel')
+            self.texteCuve += self.ecritVariable('TeneurNickel_mess')
+            if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Houssin' or str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Persoz' or str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : formule de FIM/FIS Lefebvre' or str(self.dico_mot["ModeleIrradiation"])=='Joint Soude : formulation de FIM/FIS Brillaud':
+               self.texteCuve += self.ecritVariable('TeneurPhosphore')
+               self.texteCuve += self.ecritVariable('TeneurPhosphore_mess')
+            self.texteCuve += self.ecritVariable('MoyenneRTndt')
+            self.texteCuve += self.ecritVariable('MoyenneRTndt_mess')
+            if str(self.dico_mot["ModeleIrradiation"])=='Metal de Base : Regulatory Guide 1.00 rev 2' or str(self.dico_mot["ModeleIrradiation"])=='Joint Soude : Regulatory Guide 1.00 rev 2':
+               self.texteCuve += self.ecritVariable('CoefVariationRTndt')
+               self.texteCuve += self.ecritVariable('CoefVariationRTndt_mess')
+               self.texteCuve += self.ecritVariable('EcartTypeRTndt')
+               self.texteCuve += self.ecritVariable('EcartTypeRTndt_mess')
+            self.texteCuve += self.ecritVariable('NombreEcartTypeRTndt')
+            self.texteCuve += self.ecritVariable('NombreEcartTypeRTndt_mess')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('TypeIrradiation')
+         self.texteCuve+="# - si RTNDT, fournir RTNDT"+"\n"
+         self.texteCuve+="# - si FLUENCE, fournir MODELIRR, et autres parametres selon MODELIRR (voir ci-dessous)"+"\n"
+         self.texteCuve+="#"+"\n"
+         self.texteCuve += self.affecteValeurDefaut('RTNDT')
+
+      self.texteCuve += self.sousRubrique('Modele de tenacite','C.')
+      self.texteCuve+="# tenacite d amorcage"+"\n"
+
+      if self.dico_mot.has_key('ModeleTenacite'):
+         if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'RCC-M')
+         if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2 CUVE1D':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'RCC-M_simpl')
+         if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2.33 (Houssin)':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'Houssin_RC')
+         if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME avec KI=KIpalier':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'RCC-M_pal')
+         if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME avec KI~exponentiel':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'RCC-M_exp')
+         if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'Wallin')
+         if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve (REME)':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'REME')
+         if str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb01 (etude ORNL)':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'ORNL')
+         if str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb02':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'WEIB2')
+         if str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb03':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'WEIB3')
+         if str(self.dico_mot["ModeleTenacite"])=='Weibull generalisee':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'WEIB-GEN')
+         if str(self.dico_mot["ModeleTenacite"])=='Exponentielle n\xb01 (Frama)':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'Frama')
+         if str(self.dico_mot["ModeleTenacite"])=='Exponentielle n\xb02 (LOGWOLF)':
+            self.texteCuve += self.affecteValeur('ModeleTenacite', 'LOGWOLF')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('ModeleTenacite')
+      self.texteCuve+="# - si RCC-M, RCC-M_pal, Houssin_RC, fournir (nbectKIc, nbectKIc_MESSAGE), KICPAL, KICCDV"+"\n"
+      self.texteCuve+="# - si RCC-M_exp,                    fournir (nbectKIc, nbectKIc_MESSAGE), KICCDV"+"\n"
+      self.texteCuve+="# - si RCC-M_simpl,                  ne rien fournir"+"\n"
+      self.texteCuve+="# - si Frama, LOGWOLF,               fournir (nbectKIc, nbectKIc_MESSAGE)"+"\n"
+      self.texteCuve+="# - si REME, ORNL, WEIB3, WEIB2,     fournir NBCARAC, puis (nbectKIc, nbectKIc_MESSAGE) ou (fractKIc, fractKIc_MESSAGE) selon valeur de NBCARAC"+"\n"
+      self.texteCuve+="# - si Wallin,                       fournir NBCARAC, puis (nbectKIc, nbectKIc_MESSAGE) ou (fractKIc, fractKIc_MESSAGE) selon valeur de NBCARAC,"+"\n"
+      self.texteCuve+="#                                                     puis T0WALLIN"+"\n"
+      self.texteCuve+="# - si WEIB-GEN,                     fournir NBCARAC, puis (nbectKIc, nbectKIc_MESSAGE) ou (fractKIc, fractKIc_MESSAGE) selon valeur de NBCARAC,"+"\n"
+      self.texteCuve+="#                                                     puis A1, A2, A3, B1, B2, B3, C1, C2, C3"+"\n"
+      self.texteCuve+="#   loi de Weibull P(K<x) = 1 - exp{-[ (x-a(T)) / b(T) ]^c(T) }"+"\n"
+      self.texteCuve+="#   avec        a(T) = A1 + A2*exp[A3*(T-RTNDT)]"+"\n"
+      self.texteCuve+="#               b(T) = B1 + B2*exp[B3*(T-RTNDT)]"+"\n"
+      self.texteCuve+="#               c(T) = C1 + C2*exp[C3*(T-RTNDT)]"+"\n"
+      self.texteCuve+="#"+"\n"
+      if self.dico_mot.has_key('ModeleTenacite'):
+         if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb01 (etude ORNL)' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb03' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb02' :
+            self.texteCuve += self.ecritVariable('NBRE_CARACTERISTIQUE')
+            self.texteCuve+="# - Si CARAC = QUANTILE, fournir (nbectKIc, nbectKIc_MESSAGE)"+"\n"
+            self.texteCuve+="# - Si CARAC = ORDRE,    fournir (fractKIc, fractKIc_MESSAGE)"+"\n"
+
+         if str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2' or str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME avec KI=KIpalier' or str(self.dico_mot["ModeleTenacite"])=='RCC-M/ASME coefficient=2.33 (Houssin)' :
+            self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc')
+            self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc_mess')
+            self.texteCuve += self.ecritVariable('PalierDuctile_KIc')
+            self.texteCuve += self.ecritVariable('CoefficientVariation_KIc')
+
+         if str(self.dico_mot["ModeleTenacite"])=='Exponentielle n\xb01 (Frama)' or str(self.dico_mot["ModeleTenacite"])=='Exponentielle n\xb02 (LOGWOLF)' :
+            self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc')
+            self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc_mess')
+
+         if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve (REME)' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb01 (etude ORNL)' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb03' or str(self.dico_mot["ModeleTenacite"])=='Weibull n\xb02' or str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve' or str(self.dico_mot["ModeleTenacite"])=='Weibull generalisee':
+            if str(self.dico_mot["NBRE_CARACTERISTIQUE"])=='QUANTILE' :
+               self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc')
+               self.texteCuve += self.ecritVariable('NbEcartType_MoyKIc_mess')
+            if str(self.dico_mot["NBRE_CARACTERISTIQUE"])=='ORDRE' :
+               self.texteCuve += self.ecritVariable('Fractile_KIc')
+               self.texteCuve += self.ecritVariable('Fractile_KIc_mess')
+
+            if str(self.dico_mot["ModeleTenacite"])=='Weibull basee sur la master cuve' :
+               self.texteCuve += self.ecritVariable('Temperature_KIc100')
+
+            if str(self.dico_mot["ModeleTenacite"])=='Weibull generalisee' :
+               self.texteCuve += self.ecritVariable('A1')
+               self.texteCuve += self.ecritVariable('A2')
+               self.texteCuve += self.ecritVariable('A3')
+               self.texteCuve += self.ecritVariable('B1')
+               self.texteCuve += self.ecritVariable('B2')
+               self.texteCuve += self.ecritVariable('B3')
+               self.texteCuve += self.ecritVariable('C1')
+               self.texteCuve += self.ecritVariable('C2')
+               self.texteCuve += self.ecritVariable('C3')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('NbEcartType_MoyKIc')
+         self.texteCuve += self.affecteValeurDefaut('NbEcartType_MoyKIc_mess')
+         self.texteCuve += self.affecteValeurDefaut('PalierDuctile_KIc')
+         self.texteCuve += self.affecteValeurDefaut('CoefficientVariation_KIc')
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Correction plastique"+"\n"
+
+      if self.dico_mot.has_key('CorrectionPlastique'):
+         if str(self.dico_mot["CorrectionPlastique"])=='Correction plastique BETA (pour DSR et defaut decale)':
+            self.texteCuve += self.affecteValeur('AttnCorrBeta','NON')
+         if str(self.dico_mot["CorrectionPlastique"])=='Correction plastique BETA attenuee (pour DSR et defaut decale)':
+            self.texteCuve += self.affecteValeur('AttnCorrBeta','OUI')
+         if str(self.dico_mot["CorrectionPlastique"])=='Correction plastique IRWIN (pour defaut debouchant)':
+            self.texteCuve += self.affecteValeur('CorrIrwin','OUI')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('AttnCorrBeta')
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Prise en compte de l'arret de fissure si DETERMINISTE"+"\n"
+
+      self.texteCuve += self.ecritVariable('ArretDeFissure')
+      self.texteCuve+="# - si ARRETFISSURE=OUI, fournir (INCRDEF, INCRDEF_MESSAGE), nbectKIa, KIAPAL, KIACDV"+"\n"
+      if self.dico_mot.has_key('ArretDeFissure'):
+         if str(self.dico_mot["ArretDeFissure"])=='OUI':
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('IncrementTailleFissure')
+            self.texteCuve += self.ecritVariable('IncrementTailleFissure_mess')
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# Parametres pour le calcul de la tenacite a l arret"+"\n"
+            self.texteCuve += self.ecritVariable('NbEcartType_MoyKIa')
+            self.texteCuve += self.ecritVariable('PalierDuctile_KIa')
+            self.texteCuve += self.ecritVariable('CoefficientVariation_KIa')
+
+      # Rubrique Etat initial
+      self.texteCuve += self.rubrique('ETAT INITIAL')
+
+      self.texteCuve+="# Profil radial de la temperature initiale dans la cuve"+"\n"
+      self.texteCuve+="# abscisse (m) / temp initiale dans la cuve"+"\n"
+      self.texteCuve+="# Prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+      if self.dico_mot.has_key('ProfilRadial_TemperatureInitiale'):
+         self.imprime(2,(self.dico_mot["ProfilRadial_TemperatureInitiale"]))
+         self.texteCuve += self.amontAval('Amont_TemperatureInitiale','Aval_TemperatureInitiale')
+      else :
+         self.texteCuve+="    1.9940    287."+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Profils radiaux des contraintes residuelles dans la cuve"+"\n"
+      self.texteCuve+="# abscisse (m) / sigma rr / sigma tt / sigma zz"+"\n"
+      self.texteCuve+="# Prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+      if self.dico_mot.has_key('ProfilRadial_ContraintesInitiales'):
+         self.imprime(4,(self.dico_mot["ProfilRadial_ContraintesInitiales"]))
+         self.texteCuve += self.amontAval('Amont_ContraintesInitiales','Aval_ContraintesInitiales')
+      else :
+         self.texteCuve+="1.994     0. 0.  0."+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Instant initial"+"\n"
+      self.texteCuve += self.ecritVariable('InstantInitialisation')
+
+      # Rubrique CARACTERISTIQUES DU REVETEMENT
+      self.texteCuve += self.rubrique('CARACTERISTIQUES DU REVETEMENT')
+
+      self.texteCuve += self.ecritVariable('ConditionLimiteThermiqueREV')
+      self.texteCuve+="# - si CHALEUR,   fournir Temperature (degC) / chaleur volumique (J/kg/K)"+"\n"
+      self.texteCuve+="# - si ENTHALPIE, fournir Temperature (degC) / enthalpie (J/kg)"+"\n"
+      self.texteCuve+="# Finir chacune des listes par la prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+      self.texteCuve+="#"+"\n"
+      if self.dico_mot.has_key('ChaleurREV_Fct_Temperature'):
+         self.texteCuve+="# Temperature (degC) / chaleur volumique (J/kg/K)"+"\n"
+         self.imprime(2,(self.dico_mot["ChaleurREV_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_ChaleurREV','Aval_ChaleurREV')
+      elif self.dico_mot.has_key('EnthalpieREV_Fct_Temperature'):
+         self.texteCuve+="# Temperature (degC) / enthalpie (J/kg)"+"\n"
+         self.imprime(2,(self.dico_mot["EnthalpieREV_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_EnthalpieREV','Aval_EnthalpieREV')
+      else :
+         self.texteCuve+="# Temperature (degC) / chaleur volumique (J/kg/K)"+"\n"
+         self.texteCuve+="0.    36.03E5 "+"\n"
+         self.texteCuve+="20.   36.03E5 "+"\n"
+         self.texteCuve+="200.  41.65E5 "+"\n"
+         self.texteCuve+="350.  43.47E5 "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Temperature (degC) / conductivite thermique (W/m/degC)"+"\n"
+      if self.dico_mot.has_key('ConductiviteREV_Fct_Temperature'):
+         self.imprime(2,(self.dico_mot["ConductiviteREV_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_ConductiviteREV','Aval_ConductiviteREV')
+      else :
+         self.texteCuve+="0.    14.7 "+"\n"
+         self.texteCuve+="20.   14.7 "+"\n"
+         self.texteCuve+="200.  17.2 "+"\n"
+         self.texteCuve+="350.  19.3 "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Temperature (degC) / module d'Young (MPa)"+"\n"
+      if self.dico_mot.has_key('ModuleYoungREV_Fct_Temperature'):
+         self.imprime(2,(self.dico_mot["ModuleYoungREV_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_ModuleYoungREV','Aval_ModuleYoungREV')
+      else :
+         self.texteCuve+="0.    198500. "+"\n"
+         self.texteCuve+="20.   197000. "+"\n"
+         self.texteCuve+="200.  184000. "+"\n"
+         self.texteCuve+="350.  172000. "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Temperature (degC) / coefficient de dilatation thermique (degC-1)"+"\n"
+      if self.dico_mot.has_key('CoeffDilatThermREV_Fct_Temperature'):
+         self.imprime(2,(self.dico_mot["CoeffDilatThermREV_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_CoeffDilatThermREV','Aval_CoeffDilatThermREV')
+      else :
+         self.texteCuve+="0.    16.40E-6 "+"\n"
+         self.texteCuve+="20.   16.40E-6 "+"\n"
+         self.texteCuve+="200.  17.20E-6 "+"\n"
+         self.texteCuve+="350.  17.77E-6 "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Temperature (degC) / limite d'elasticite (MPa)"+"\n"
+      if self.dico_mot.has_key('LimiteElasticiteREV_Fct_Temperature'):
+         self.imprime(2,(self.dico_mot["LimiteElasticiteREV_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_LimiteElasticiteREV','Aval_LimiteElasticiteREV')
+      else :
+         self.texteCuve+="0.    380. "+"\n"
+         self.texteCuve+="20.   370. "+"\n"
+         self.texteCuve+="100.  330. "+"\n"
+         self.texteCuve+="300.  270. "+"\n"
+         self.texteCuve+="LL"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve += self.ecritVariable('TemperatureDeformationNulleREV')
+      self.texteCuve += self.ecritVariable('TemperaturePourCoefDilatThermREV')
+      self.texteCuve += self.ecritVariable('CoefficientPoissonREV')
+
+      # Rubrique CARACTERISTIQUES DU METAL DE BASE
+      self.texteCuve += self.rubrique('CARACTERISTIQUES DU METAL DE BASE')
+
+      self.texteCuve += self.ecritVariable('ConditionLimiteThermiqueMDB')
+
+      self.texteCuve+="# - si CHALEUR,   fournir Temperature (degC) / chaleur volumique (J/kg/K)"+"\n"
+      self.texteCuve+="# - si ENTHALPIE, fournir Temperature (degC) / enthalpie (J/kg)"+"\n"
+      self.texteCuve+="# Finir chacune des listes par la prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+      self.texteCuve+="#"+"\n"
+
+      if self.dico_mot.has_key('ChaleurMDB_Fct_Temperature'):
+         self.texteCuve+="# Temperature (degC) / chaleur volumique (J/kg/K)"+"\n"
+         self.imprime(2,(self.dico_mot["ChaleurMDB_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_ChaleurMDB','Aval_ChaleurMDB')
+      elif self.dico_mot.has_key('EnthalpieMDB_Fct_Temperature'):
+         self.texteCuve+="# Temperature (degC) / enthalpie (J/kg)"+"\n"
+         self.imprime(2,(self.dico_mot["EnthalpieMDB_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_EnthalpieMDB','Aval_EnthalpieMDB')
+      else :
+         self.texteCuve+="# Temperature (degC) / chaleur volumique (J/kg/K)"+"\n"
+         self.texteCuve+="0.    34.88E+05 "+"\n"
+         self.texteCuve+="20.   34.88E+05 "+"\n"
+         self.texteCuve+="200.  40.87E+05 "+"\n"
+         self.texteCuve+="350.  46.02E+05 "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Temperature (degC) / conductivite thermique (W/m/degC)"+"\n"
+      if self.dico_mot.has_key('ConductiviteMDB_Fct_Temperature'):
+         self.imprime(2,(self.dico_mot["ConductiviteMDB_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_ConductiviteMDB','Aval_ConductiviteMDB')
+      else :
+         self.texteCuve+="0.    37.7 "+"\n"
+         self.texteCuve+="20.   37.7 "+"\n"
+         self.texteCuve+="200.  40.5 "+"\n"
+         self.texteCuve+="350.  38.7 "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Temperature (degC) / module d'Young (MPa)"+"\n"
+      if self.dico_mot.has_key('ModuleYoungMDB_Fct_Temperature'):
+         self.imprime(2,(self.dico_mot["ModuleYoungMDB_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Aval_ModuleYoungMDB','Aval_ModuleYoungMDB')
+      else :
+         self.texteCuve+="0.    205000. "+"\n"
+         self.texteCuve+="20.   204000. "+"\n"
+         self.texteCuve+="200.  193000. "+"\n"
+         self.texteCuve+="350.  180000. "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="# Temperature (degC) / coefficient de dilatation thermique (degC-1)"+"\n"
+      if self.dico_mot.has_key('CoeffDilatThermMDB_Fct_Temperature'):
+         self.imprime(2,(self.dico_mot["CoeffDilatThermMDB_Fct_Temperature"]))
+         self.texteCuve += self.amontAval('Amont_CoeffDilatThermMDB','Aval_CoeffDilatThermMDB')
+      else :
+         self.texteCuve+="0.    11.22E-6 "+"\n"
+         self.texteCuve+="20.   11.22E-6 "+"\n"
+         self.texteCuve+="200.  12.47E-6 "+"\n"
+         self.texteCuve+="350.  13.08E-6 "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve+="#"+"\n"
+      self.texteCuve += self.ecritVariable('TemperatureDeformationNulleMDB')
+      self.texteCuve += self.ecritVariable('TemperaturePourCoefDilatThermMDB')
+      self.texteCuve += self.ecritVariable('CoefficientPoissonMDB')
+
+      # Rubrique CARACTERISTIQUES DU TRANSITOIRE MECANIQUE-THERMOHYDRAULIQUE
+      self.texteCuve += self.rubrique('CARACTERISTIQUES DU TRANSITOIRE MECANIQUE-THERMOHYDRAULIQUE')
+      self.texteCuve += self.sousRubrique('Chargement mecanique : transitoire de pression','')
+
+      self.texteCuve+="# instant (s) / pression (MPa)"+"\n"
+      self.texteCuve+="# Prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
       if self.dico_mot.has_key('ProfilTemporel_Pression'):
          self.imprime(2,(self.dico_mot["ProfilTemporel_Pression"]))
-      
+         self.texteCuve += self.amontAval('Amont_Pression','Aval_Pression')
+      else :
+         self.texteCuve+="0.    15.5 "+"\n"
+         self.texteCuve+="20.   0.1 "+"\n"
+         self.texteCuve+="200.  0.1 "+"\n"
+         self.texteCuve+="1000. 0.1 "+"\n"
+         self.texteCuve+="CC"+"\n"
+
+      self.texteCuve += self.sousRubrique('Chargement thermo-hydraulique','')
+      if self.dico_mot.has_key('TypeConditionLimiteThermique'):
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee en paroi':
+            self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'TEMP_IMPO')
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Flux de chaleur impose en paroi':
+            self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'FLUX_REP')
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et coefficient echange':
+            self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'ECHANGE')
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Debit massique et temperature d injection de securite':
+            self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'DEBIT')
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et debit d injection de securite':
+            self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'TEMP_FLU')
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP':
+            self.texteCuve += self.affecteValeur('TypeConditionLimiteThermique', 'APRP')
+      else :
+         self.texteCuve += self.affecteValeurDefaut('TypeConditionLimiteThermique')
+
+      self.texteCuve+="# - si TEMP_IMPO, fournir Instant (s) / Temperature imposee (degC)"+"\n"
+      self.texteCuve+="# - si FLUX_REP,  fournir Instant (s) / Flux de chaleur impose (W/m2)"+"\n"
+      self.texteCuve+="# - si ECHANGE,   fournir Instant (s) / Temperature impose (degC)"+"\n"
+      self.texteCuve+="#                    puis Instant (s) / Coefficient d echange (W/m2/K)"+"\n"
+      self.texteCuve+="# - si DEBIT,     fournir Instant (s) / Debit massique (kg/s)"+"\n"
+      self.texteCuve+="#                    puis Instant (s) / Temperature d injection de securite  (degC)"+"\n"
+      self.texteCuve+="#                    puis Modele VESTALE : (DH, DH_MESSAGE), (SECTION, SECTION_MESSAGE), (DELTA, DELTA_MESSAGE), EPS, COEFVESTALE"+"\n"
+      self.texteCuve+="#                    puis Modele CREARE  : (VM, VM_MESSAGE), (T0, T0_MESSAGE), (SE, SE_MESSAGE)"+"\n"
+      self.texteCuve+="# - si TEMP_FLU,  fournir Instant (s) / Temperature du fluide (degC)"+"\n"
+      self.texteCuve+="#                    puis Instant (s) / Debit d injection de securite  (kg/s)"+"\n"
+      self.texteCuve+="#                    puis Modele VESTALE : (DH, DH_MESSAGE), (SECTION, SECTION_MESSAGE), (DELTA, DELTA_MESSAGE), EPS, COEFVESTALE"+"\n"
+      self.texteCuve+="# - si APRP,      fournir INSTANT1, INSTANT2, QACCU, QIS"+"\n"
+      self.texteCuve+="#                    puis TIS_MESSAGE"+"\n"
+      self.texteCuve+="#                    puis Instant (s) / Temperature du fluide (degC) tel que dans l'exemple ci-dessous"+"\n"
+      self.texteCuve+="#                         0.    286."+"\n"
+      self.texteCuve+="#                         12.   20.             # 1er palier à T=TACCU"+"\n"
+      self.texteCuve+="#                         20.   20.             # idem que ci-dessus"+"\n"
+      self.texteCuve+="#                         21.   18.             # 2nd palier à T=T1 : sera remplace par nouvelle valeur calculee par fonction idoine"+"\n"
+      self.texteCuve+="#                         45.   18.             # idem que ci-dessus"+"\n"
+      if self.dico_mot.has_key('TypeConditionLimiteThermique'):
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP':
+            self.texteCuve+="#                         46.   9999999999.     # 3eme palier à T=Tis, temperature d injection de securite"+"\n"
+         else :
+            self.texteCuve+="#                         46.   %INLET-TIS%     # 3eme palier à T=Tis, temperature d injection de securite"+"\n"
+      else :
+         self.texteCuve+="#                         46.   %INLET-TIS%     # 3eme palier à T=Tis, temperature d injection de securite"+"\n"
+      self.texteCuve+="#                         1870. 9999999999.     # idem que ci-dessus"+"\n"
+      self.texteCuve+="#                         1871. 80."+"\n"
+      self.texteCuve+="#                         3871. 80."+"\n"
+      self.texteCuve+="#                    puis Instant (s) / Debit d injection de securite  (kg/s)"+"\n"
+      self.texteCuve+="#                    puis Modele VESTALE : (DH, DH_MESSAGE), (SECTION, SECTION_MESSAGE), (DELTA, DELTA_MESSAGE), EPS, COEFVESTALE"+"\n"
+      self.texteCuve+="# Finir chacune des listes par la prolongation aux frontieres amont et aval: C = constant / E = exclu / L = lineaire"+"\n"
+      self.texteCuve+="#"+"\n"
+
+      if self.dico_mot.has_key('TypeConditionLimiteThermique'):
+
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP':
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# Definition de parametres pour le cas d un transitoire APRP"+"\n"
+            self.texteCuve += self.ecritVariable('Instant_1')
+            self.texteCuve += self.ecritVariable('Instant_2')
+            self.texteCuve += self.ecritVariable('DebitAccumule')
+            self.texteCuve += self.ecritVariable('DebitInjectionSecurite')
+            self.texteCuve += self.ecritVariable('TempInjectionSecurite_mess')
+
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee en paroi' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et coefficient echange' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et debit d injection de securite' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP' :
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# instant (s) / temperature imposee du fluide (degC)"+"\n"
+            if self.dico_mot.has_key('ProfilTemporel_TemperatureImposeeFluide'):
+               self.imprime(2,(self.dico_mot["ProfilTemporel_TemperatureImposeeFluide"]))
+               self.texteCuve += self.amontAval('Amont_TemperatureImposeeFluide','Aval_TemperatureImposeeFluide')
+           else :
+               self.texteCuve+="0.    286. "+"\n"
+               self.texteCuve+="20.   20. "+"\n"
+               self.texteCuve+="200.  7. "+"\n"
+               self.texteCuve+="1000. 80. "+"\n"
+               self.texteCuve+="CC"+"\n"
+
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Flux de chaleur impose en paroi':
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# instant (s) / flux de chaleur impose (W/m2)"+"\n"
+            if self.dico_mot.has_key('ProfilTemporel_FluxChaleur'):
+               self.imprime(2,(self.dico_mot["ProfilTemporel_FluxChaleur"]))
+               self.texteCuve += self.amontAval('Amont_FluxChaleur','Aval_FluxChaleur')
+               self.texteCuve+="#"+"\n"
+           else :
+               self.texteCuve+="0.    -0. "+"\n"
+               self.texteCuve+="20.   -366290. "+"\n"
+               self.texteCuve+="200.  -121076. "+"\n"
+               self.texteCuve+="1000.  -56372."+"\n"
+               self.texteCuve+="CC"+"\n"
+
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et debit d injection de securite' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP':
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# instant (s) / Debit d injection de securite  (kg/s)"+"\n"
+            if self.dico_mot.has_key('ProfilTemporel_DebitInjection'):
+               self.imprime(2,(self.dico_mot["ProfilTemporel_DebitInjection"]))
+               self.texteCuve += self.amontAval('Amont_DebitInjection','Aval_DebitInjection')
+           else :
+               self.texteCuve+="0.    4590. "+"\n"
+               self.texteCuve+="20.   4590. "+"\n"
+               self.texteCuve+="200.  340. "+"\n"
+               self.texteCuve+="1000. 31.1 "+"\n"
+               self.texteCuve+="CC"+"\n"
+
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et coefficient echange' :
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# instant (s) / Coefficient d echange (W/m2/K)"+"\n"
+            if self.dico_mot.has_key('ProfilTemporel_CoefficientEchange'):
+               self.imprime(2,(self.dico_mot["ProfilTemporel_CoefficientEchange"]))
+               self.texteCuve += self.amontAval('Amont_CoefficientEchange','Aval_CoefficientEchange')
+           else :
+               self.texteCuve+="0.    138454. "+"\n"
+               self.texteCuve+="20.   19972. "+"\n"
+               self.texteCuve+="200.  2668. "+"\n"
+               self.texteCuve+="1000. 2668. "+"\n"
+               self.texteCuve+="CC"+"\n"
+
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Debit massique et temperature d injection de securite' :
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# instant (s) / Debit massique (kg/s)"+"\n"
+            if self.dico_mot.has_key('ProfilTemporel_DebitMassique'):
+               self.imprime(2,(self.dico_mot["ProfilTemporel_DebitMassique"]))
+               self.texteCuve += self.amontAval('Amont_DebitMassique','Aval_DebitMassique')
+           else :
+               self.texteCuve+="0.    18.4 "+"\n"
+               self.texteCuve+="20.   18.4 "+"\n"
+               self.texteCuve+="200.  31.1 "+"\n"
+               self.texteCuve+="1000. 31.1 "+"\n"
+               self.texteCuve+="CC"+"\n"
+
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# instant (s) / Temperature d injection de securite  (degC)"+"\n"
+            if self.dico_mot.has_key('ProfilTemporel_TemperatureInjection'):
+               self.imprime(2,(self.dico_mot["ProfilTemporel_TemperatureInjection"]))
+               self.texteCuve += self.amontAval('Amont_TemperatureInjection','Aval_TemperatureInjection')
+           else :
+               self.texteCuve+="0.    7.0 "+"\n"
+               self.texteCuve+="20.   7.0 "+"\n"
+               self.texteCuve+="200.  7.0 "+"\n"
+               self.texteCuve+="1000. 7.0 "+"\n"
+               self.texteCuve+="CC"+"\n"
+
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Debit massique et temperature d injection de securite' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Temperature imposee du fluide et debit d injection de securite' or str(self.dico_mot["TypeConditionLimiteThermique"])=='Courbe APRP' :
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# Transitoire des coefficients d echange : modele VESTALE"+"\n"
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('DiametreHydraulique')
+            self.texteCuve += self.ecritVariable('DiametreHydraulique_mess')
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('SectionEspaceAnnulaire')
+            self.texteCuve += self.ecritVariable('SectionEspaceAnnulaire_mess')
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('HauteurCaracConvectionNaturelle')
+            self.texteCuve += self.ecritVariable('HauteurCaracConvectionNaturelle_mess')
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('CritereConvergenceRelative')
+            self.texteCuve += self.ecritVariable('CoefficientsVestale')
+         if str(self.dico_mot["TypeConditionLimiteThermique"])=='Debit massique et temperature d injection de securite':
+            self.texteCuve+="#"+"\n"
+            self.texteCuve+="# Transitoire de temperature fluide locale : modele CREARE"+"\n"
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('VolumeMelange_CREARE')
+            self.texteCuve += self.ecritVariable('VolumeMelange_CREARE_mess')
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('TemperatureInitiale_CREARE')
+            self.texteCuve += self.ecritVariable('TemperatureInitiale_CREARE_mess')
+            self.texteCuve+="#"+"\n"
+            self.texteCuve += self.ecritVariable('SurfaceEchange_FluideStructure')
+            self.texteCuve += self.ecritVariable('SurfaceEchange_FluideStructure_mess')
+      else :
+         self.texteCuve+="#"+"\n"
+         self.texteCuve+="# instant (s) / temperature imposee du fluide (degC)"+"\n"
+         self.texteCuve+="0.    286. "+"\n"
+         self.texteCuve+="20.   20. "+"\n"
+         self.texteCuve+="200.  7. "+"\n"
+         self.texteCuve+="1000. 80. "+"\n"
+         self.texteCuve+="CC"+"\n"
+      self.texteCuve+="#"+"\n"
+      self.texteCuve+="############################################################################################"+"\n"
+
 
    def imprime(self,nbdeColonnes,valeur):
       self.liste=[]
diff --git a/generator/generator_file_from_template.py b/generator/generator_file_from_template.py
new file mode 100644 (file)
index 0000000..1fd91b4
--- /dev/null
@@ -0,0 +1,94 @@
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+
+import os
+
+from generator_python import PythonGenerator
+
+
+def entryPoint():
+    """
+    Return a dictionary containing the description needed to load the plugin
+    """
+    return {'name' : 'file_from_template',
+            'factory' : FileFromTemplateGenerator}
+
+
+class FileFromTemplateGenerator(PythonGenerator):
+    """
+    This generator creates an output file from a template (file with holes) in
+    addition to Eficas .comm file. The parts to replace in the template must be
+    in the form %KEYWORD%, where KEYWORD may be either the name of the Eficas
+    element (short form, for instance MY_MCSIMP) or the "path" to the Eficas
+    element (long form, for instance MYPROC.MYBLOC.MY_MCSIMP).
+    
+    To use this generator, the configuration of the code must implement two
+    methods: get_extension() that must return the extension of the output file
+    and get_template_file() that must return the path of the template file. Be
+    sure also that your catalog is coherent with your template file.
+    """
+    
+    def gener(self, obj, format = 'brut', config = None):
+        self.config = config
+        self.kw_dict = {}
+        self.text = PythonGenerator.gener(self, obj, format)
+        self.generate_output_from_template()
+        return self.text
+    
+    def generate_output_from_template(self) :
+        """
+        Generate the output text from the template file and the keywords
+        """
+        templateFileName = self.config.get_template_file()
+        if not os.path.isfile(templateFileName):
+            raise Exception("Template file %s does not exist." %
+                            templateFileName)
+        f = file(templateFileName, "r")
+        template = f.read()  
+        f.close()
+        self.output_text = self.replace_keywords(template)
+
+    def generMCSIMP(self, obj) :
+        """
+        Save object value in the keyword dict for further use, then generate
+        the text corresponding to the MCSIMP element.
+        """
+        short_keyword = obj.nom.strip()
+        long_keyword = ""
+        for i in obj.get_genealogie()[:-1]:
+            long_keyword += i + "."
+        long_keyword += short_keyword
+        self.kw_dict[short_keyword] = obj.valeur
+        self.kw_dict[long_keyword] = obj.valeur
+        return PythonGenerator.generMCSIMP(self, obj)
+
+    def replace_keywords(self, template_string):
+        result = template_string
+        for item in self.kw_dict.iteritems():
+            replace_str = "%" + item[0] + "%"
+            result = result.replace(replace_str, str(item[1]))
+        return result
+    
+    def writeDefault(self, basefilename):
+        output_filename = os.path.splitext(basefilename)[0] + \
+                          self.config.get_extension()
+        f = open(output_filename, 'w')
+        f.write(self.output_text)
+        f.close()
index e1bf23391f9dca9ba756e39abeef5f49c4b69f8c..09a20a9d338d13722c179435adb255d71d0a4f64 100644 (file)
@@ -118,7 +118,7 @@ class HomardGenerator(PythonGenerator):
       self.dico_mot_depend['CCSolN__'] ='self.dico_mot_clef.has_key("NITER")'
       self.dico_mot_depend['CCSolNP1'] ='self.dico_mot_clef.has_key("NITER")'
 
-   def gener(self,obj,format='brut'):
+   def gener(self,obj,format='brut',config=None):
       self.text=PythonGenerator.gener(self,obj,format)
       self.genereConfiguration()
       return self.text
index 3e94abf719a661d117b137f71f58aad420d85d9a..a93dd35bdcc60fc6333ed02cbfea2d4756838a0d 100644 (file)
@@ -75,7 +75,7 @@ class IniGenerator:
       fp.write(self.text)
       fp.close()
 
-   def gener(self,obj):
+   def gener(self,obj,config=None):
       """
          Tous les mots-clés simples du niveau haut sont mis dans la section DEFAUT
          Tous les mots-clés facteurs sont convertis en sections
diff --git a/generator/generator_map.py b/generator/generator_map.py
new file mode 100644 (file)
index 0000000..9835fe7
--- /dev/null
@@ -0,0 +1,159 @@
+# -*- coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+"""
+   Ce module contient le plugin generateur de fichier au format
+   SEP pour EFICAS.
+
+"""
+import traceback
+import types,string,re,os
+
+from generator_python import PythonGenerator
+
+
+def entryPoint():
+   """
+      Retourne les informations necessaires pour le chargeur de plugins
+
+      Ces informations sont retournees dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 'MAP',
+        # La factory pour creer une instance du plugin
+          'factory' : MapGenerator,
+          }
+
+
+class MapGenerator(PythonGenerator):
+   """
+      Ce generateur parcourt un objet de type JDC et produit
+      un texte au format eficas et
+      un texte au format py
+
+   """
+   # Les extensions de fichier permis?
+   extensions=('.map',)
+
+
+   def initialise(self,config):
+      self.config=config
+      self.nom_racine=self.config.PATH_STUDY+"/"+self.config.NAME_SCHEME+"/"
+      if not( os.path.exists(self.nom_racine)):
+         os.makedirs(self.nom_racine)
+      self.listeCODE=[]
+      self.text=""
+      self.textCode=""
+      self.texteExecution=""
+      self.ssCode=self.config.appli.ssCode
+
+   def verifie(self):
+      print 'verification generique'
+
+   def gener(self,obj,format='brut',config=None):
+      print 'generation dans generator_map'
+      self.initialise(config)
+      text=PythonGenerator.gener(self,obj,format)
+      self.verifie()
+      self.generePythonMap("non")
+      return text
+
+   def generRUN(self,obj,format='brut',config=None,):
+      print 'generRUN dans generator_map'
+      self.initialise(config)
+      text=PythonGenerator.gener(self,obj,format)
+      self.verifie()
+      self.generePythonMap("oui") 
+      return self.texteExecution
+
+
+   def generRUNYACS(self,obj,format='brut',config=None,nomFichier=None):
+      self.initialise(config)
+      text=PythonGenerator.gener(self,obj,format)
+      import sys
+      sys.path.append('/local/noyret/Salome_5.1.3/Install/YACS/lib/python2.5/site-packages/salome/')
+      self.verifie()
+      import monCreateYacs
+      self.monSchema=monCreateYacs.getSchema(config)
+      self.proc=self.monSchema.createProc()
+      for elt in self.listeCODE:
+          code=elt.keys()[0]
+          dico=elt[code]
+          if code in self.__class__.__dict__.keys():
+             codeYACS=str(code)+"YACS"
+             if hasattr(self.monSchema, codeYACS): 
+                fct=getattr(self.monSchema, codeYACS)
+                fct(self.proc,dico)
+      self.monSchema.write_yacs_proc(self.proc,str(nomFichier))
+
+   def generePythonMap(self,execution) :
+      '''
+         self.dictMCVal est un dictionnaire qui est indexe par le nom du code (exple PYGMEE)
+         la valeur associee a la clef est egalement un dictionnaire 
+         ce dictionnaire a pour clef la genealogie du MCSimp suivi de sa valeur
+
+      '''
+      for elt in self.listeCODE:
+          code=elt.keys()[0]
+          dico=elt[code]
+          self.dictMCVal={}
+          self.dictMCVal[code]=dico
+          if code in self.__class__.__dict__.keys():
+             texteCode=apply(self.__class__.__dict__[code],(self,execution))
+             self.texteExecution=self.texteExecution+texteCode
+
+   def generPROC_ETAPE(self,obj):
+      clefDico=obj.nom
+      self.DictTemp={}
+      s=PythonGenerator.generPROC_ETAPE(self,obj)
+      dico={}
+      dico[obj.nom]=self.DictTemp
+      self.listeCODE.append(dico)
+      return s
+
+
+   def generMCSIMP(self,obj) :
+      """
+      Convertit un objet MCSIMP en texte python
+      Remplit le dictionnaire des MCSIMP si nous ne sommes ni dans une loi, ni dans une variable
+      """
+      s=PythonGenerator.generMCSIMP(self,obj)
+      clef=""
+      for i in obj.get_genealogie() :
+           clef=clef+"_"+i
+      self.DictTemp[clef]=obj.valeur
+      return s
+
+
+   def  remplaceCONFIG(self,chaine,liste) :
+       for mot in liste :
+           rplact="%_"+mot+"%"
+           result=chaine.replace(rplact,self.config.__dict__[mot])
+           chaine=result
+       return chaine
+
+   def  remplaceDICO(self,chaine,dico) :
+       for mot in dico.keys() :
+           rplact="%"+mot+"%"
+           result=chaine.replace(rplact,str(dico[mot]))
+           chaine=result
+       return chaine
+
index b3118c60e08735943ad10789be5da6ba3a1fed1b..202fe534f7dff9972f3f594ec724bd655bcf3de6 100644 (file)
@@ -63,7 +63,7 @@ class OpenturnsGenerator(PythonGenerator):
        self.dictTempo={}
        self.TraiteMCSIMP=1
 
-   def gener(self,obj,format='brut'):
+   def gener(self,obj,format='brut',config=None):
        #print "IDM: gener dans generator_openturns.py"
        self.initDico()
        self.text=PythonGenerator.gener(self,obj,format)
@@ -78,7 +78,7 @@ class OpenturnsGenerator(PythonGenerator):
        """
        s=PythonGenerator.generMCSIMP(self,obj)
        if self.TraiteMCSIMP == 1 : 
-          self.dictMCVal[obj.nom]=obj.val
+          self.dictMCVal[obj.nom]=obj.valeur
        else :
           self.dictTempo[obj.nom]=obj.valeur
        return s
index 1023eb901a90ebc3d3273150a34dc1d48bfcdd54..e743d6ec9e80b1b525287839941d5fffb22fda34 100644 (file)
@@ -68,7 +68,7 @@ class OpenturnsGenerator(PythonGenerator):
       sys.exit(1)
       """
 
-   def gener(self,obj,format='brut'):
+   def gener(self,obj,format='brut',config=None):
       print "IDM: gener dans generator_openturns_study.py"
       self.initDico()
       self.text=PythonGenerator.gener(self,obj,format)
@@ -82,7 +82,7 @@ class OpenturnsGenerator(PythonGenerator):
       """
       s=PythonGenerator.generMCSIMP(self,obj)
       if self.TraiteMCSIMP == 1 : 
-         self.dictMCVal[obj.nom]=obj.val
+         self.dictMCVal[obj.nom]=obj.valeur
       else :
          self.dictTempo[obj.nom]=obj.valeur
       return s
@@ -117,8 +117,7 @@ class OpenturnsGenerator(PythonGenerator):
    def genereSTD(self):
       print "IDM: genereSTD dans generator_openturns_study.py"
       print "IDM: self.listeVariables=", self.listeVariables
-      MonBaseGenerateur=Generateur(self.appli,self.dictMCVal, self.listeVariables, self.dictMCLois)
-      MonGenerateur=MonBaseGenerateur.getSTDGenerateur()
+      MonGenerateur=self.getGenerateur()
       #try :
       if 1== 1 :
          self.texteSTD=MonGenerateur.CreeSTD()
@@ -131,4 +130,11 @@ class OpenturnsGenerator(PythonGenerator):
       f.write( self.texteSTD )
       f.close()
 
-
+   def getGenerateur (self):
+      print "IDM: getGenerateur dans generator_openturns_study.py"
+      print "IDM: self.dictMCVal=", self.dictMCVal
+      print "IDM: self.listeVariables=", self.listeVariables
+      print "IDM: self.dictMCLois=", self.dictMCLois
+      MonBaseGenerateur=Generateur(self.appli,self.dictMCVal, self.listeVariables, self.dictMCLois)
+      MonGenerateur=MonBaseGenerateur.getSTDGenerateur()
+      return MonGenerateur
index 5720bfb41929ad5a61b8fd48a00578f9995b8fc2..33923becd694dfbbcaca6f1b6247c667b10e2790 100644 (file)
@@ -69,7 +69,7 @@ class OpenturnsGenerator(PythonGenerator):
        """
        self.wrapperXML=None
 
-   def gener(self,obj,format='brut'):
+   def gener(self,obj,format='brut',config=None):
        #print "IDM: gener dans generator_openturns_wrapper.py"
        self.initDico()
        self.text=PythonGenerator.gener(self,obj,format)
@@ -83,10 +83,14 @@ class OpenturnsGenerator(PythonGenerator):
        Remplit le dictionnaire des MCSIMP si nous ne sommes ni dans une loi, ni dans une variable
        """
        s=PythonGenerator.generMCSIMP(self,obj)
+       if not( type(obj.valeur) in (list, tuple)) and (obj.get_min_max()[1] != 1):
+          valeur=(obj.valeur,)
+       else :
+          valeur=obj.valeur
        if self.traiteMCSIMP == 1 : 
-          self.dictMCVal[obj.nom]=obj.val
+          self.dictMCVal[obj.nom]=valeur
        else :
-          self.dictTempo[obj.nom]=obj.valeur
+          self.dictTempo[obj.nom]=valeur
        return s
 
    def generETAPE(self,obj):
@@ -109,7 +113,6 @@ class OpenturnsGenerator(PythonGenerator):
    def generMCFACT(self,obj):
        # Il n est pas possible d utiliser obj.valeur qui n est pas 
        # a jour pour les nouvelles variables ou les modifications 
-       #print "generMCFACT" , obj.nom
        if obj.nom in ( "Files", ) :
           self.traiteMCSIMP=0
          self.dictTempo={}
@@ -119,7 +122,7 @@ class OpenturnsGenerator(PythonGenerator):
        return s
 
    def genereXML(self):
-       #print "IDM: genereXML dans generator_openturns_wrapper.py"
+       print "IDM: genereXML dans generator_openturns_wrapper.py"
        #print "appli.CONFIGURATION=",self.appli.CONFIGURATION.__dict__
        if self.listeFichiers != [] :
           self.dictMCVal["Files"]=self.listeFichiers
index 62c27729b3e50d9a4552c5bffe55db2ae205d22f..35d9ebb1563fd9bbe169623cb5afa6cb048f3833 100644 (file)
@@ -77,7 +77,7 @@ class PythGenerator:
       fp.write(self.text)
       fp.close()
 
-   def gener(self,obj,format='standard'):
+   def gener(self,obj,format='standard',config=None):
       """
          Tous les mots-clés simples du niveau haut sont transformés en variables 
 
index 20b4ec3bc1cf93629fb951932815f9ed10f4a579..6d178dcac33eefe763b067dcb093e3fe42b70925 100644 (file)
@@ -83,7 +83,7 @@ class PythonGenerator:
       fp.write(self.text)
       fp.close()
 
-   def gener(self,obj,format='brut'):
+   def gener(self,obj,format='brut',config=None):
       """
           Retourne une représentation du JDC obj sous une
           forme qui est paramétrée par format.
@@ -153,7 +153,7 @@ class PythonGenerator:
       elif isinstance(obj,Formula):
          return self.generFormula(obj)
       else:
-         raise "Type d'objet non prévu",obj
+         raise "Type d'objet non prevu",obj
 
    def generJDC(self,obj):
       """
@@ -476,9 +476,9 @@ class PythonGenerator:
          # ou la notation scientifique
          s = str(valeur)
          clefobj=etape.get_sdname()
-         if self.appli and self.appli.dict_reels.has_key(clefobj):
-           if self.appli.dict_reels[clefobj].has_key(valeur):
-             s=self.appli.dict_reels[clefobj][valeur]
+         if self.appli.appliEficas and self.appli.appliEficas.dict_reels.has_key(clefobj):
+           if self.appli.appliEficas.dict_reels[clefobj].has_key(valeur):
+             s=self.appli.appliEficas.dict_reels[clefobj][valeur]
       elif type(valeur) == types.StringType :
          if valeur.find('\n') == -1:
             # pas de retour chariot, on utilise repr
@@ -518,12 +518,21 @@ class PythonGenerator:
           Convertit un objet MCSIMP en une liste de chaines de caractères à la
           syntaxe python
       """
+      waitTuple=0
       if type(obj.valeur) in (types.TupleType,types.ListType) :
          s = ''
-         for val in obj.valeur :
-            s =s +self.format_item(val,obj.etape) + ','
-         if len(obj.valeur) > 1:
-            s = '(' + s + '),'
+         for ss_type in obj.definition.type:
+          if repr(ss_type).find('Tuple') != -1 :
+             waitTuple=1
+             break
+
+         if waitTuple :
+            s = str(obj.valeur) +','
+         else :
+            for val in obj.valeur :
+               s =s +self.format_item(val,obj.etape) + ','
+            if len(obj.valeur) > 1:
+               s = '(' + s + '),'
          if obj.nbrColonnes() :
             s=self.formatColonnes(obj.nbrColonnes(),s)
       else :
@@ -547,5 +556,3 @@ class PythonGenerator:
       #else :
          textformat=text
       return textformat
-
-
diff --git a/generator/generator_s_poly_st_1.py b/generator/generator_s_poly_st_1.py
new file mode 100644 (file)
index 0000000..81abff1
--- /dev/null
@@ -0,0 +1,229 @@
+# -* coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+"""
+   Ce module contient le plugin generateur de fichier au format
+   SEP pour EFICAS.
+
+"""
+import traceback
+import types,string,re,os
+
+from generator_map import MapGenerator
+
+#____________________________________________________________________________________
+#  Liste des mots cles de config remplaces dans les fichiers à trous 
+#
+CONFIGliste=('NAME_SCHEME', 'PATH_ASTER', 'PATH_BENHUR', 'PATH_MODULE', 'PATH_PYGMEE', 'PATH_STUDY', 'repIni', 'PATH_FDVGRID' ,'PATH_GMSH')
+
+#_____________________________________________________________________
+# Attention les variables suivantes sont nécessaires entre les codes :
+# finesse et taille
+
+def entryPoint():
+   """
+      Retourne les informations necessaires pour le chargeur de plugins
+
+      Ces informations sont retournees dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 's_poly_st_1',
+        # La factory pour creer une instance du plugin
+          'factory' : s_poly_st_1Generator,
+          }
+
+
+class s_poly_st_1Generator(MapGenerator):
+   """
+      Ce generateur parcourt un objet de type JDC et produit
+      un texte au format eficas et
+      un texte au format py
+
+   """
+   
+   def verifie(self):
+       self.ssRepertoire=self.config.appli.readercata.fic_cata.split("/")[-1].split(".")[0]
+       liste=[]
+       for i in self.listeCODE:
+           liste.append(i.keys()[0])
+       if len(liste) != len(set(liste)):
+           raise AsException("il n'est pas prevu d avoir deux fois le meme code dans ce schema")
+
+
+   def PYGMEE(self,execution) :
+   #--------------------------------------------------------------------
+   # utilisation d un fichier a trous pour generer le fichier de l etude
+
+       # on recupere les valeurs de PYGMEE 
+       # qui seront utilisés par d autres codes
+       # en particulier Benhur et Aster 
+       dicoPygmee=self.dictMCVal["PYGMEE"]
+       self.taillePYGMEE=dicoPygmee['_PYGMEE_TAILLE']
+
+       monFichierInput=self.config.INSTALLDIR+"/MAP/Templates/"+self.ssRepertoire+"/pygmee_input_template.txt"
+       monFichierOutput=self.nom_racine+"/pygmee_input.txt"
+
+       f = file(monFichierInput,"r")
+       chaine = f.read()  
+       f.close()   
+
+       chaine2=self.remplaceCONFIG(chaine,CONFIGliste)
+       chaine=self.remplaceDICO(chaine2,dicoPygmee)
+
+       if  os.path.isfile(monFichierOutput) :
+           print "je detruis pygmee_input.txt"
+           commande="rm -rf " + monFichierOutput
+           os.system (commande)
+       f=open(monFichierOutput,'wb')
+       f.write(chaine)
+       f.close()
+
+       if execution=="non" : return ""
+
+       if ('_PYGMEE_LANCEMENT' in dicoPygmee.keys()) and  dicoPygmee['_PYGMEE_LANCEMENT'] == 'oui':
+           commande="echo '__________________';\n"
+           commande=commande + "echo 'execution de PYGMEE';\n"
+           commande=commande + "cd "+self.nom_racine+";\n"
+           commande=commande + "python "+self.config.PATH_PYGMEE+"/pygmee_v1.py;\n"
+           commande=commande + "echo 'fin execution de PYGMEE';\n"
+           commande=commande + "echo '_____________________';\n\n\n"
+           return commande
+       else:
+           return ""
+
+   def BENHUR(self,execution) :
+   #--------------------------------------------------------------------
+   #
+       dicoBenhur=self.dictMCVal["BENHUR"]
+       if hasattr(self,'taillePYGMEE'):
+           dicoBenhur["_PYGMEE_TAILLE"]=self.taillePYGMEE
+       else :
+           dicoBenhur["_PYGMEE_TAILLE"]=0
+           print "Attention la variable Taille_VER non definie"
+       
+       finesse=str(dicoBenhur["_BENHUR_FINESSE"])
+       self.finesseBENHUR=finesse
+
+       #Lecture du fichier a trous
+       monFichierInput=self.config.INSTALLDIR+"/MAP/Templates/"+self.ssRepertoire+"/benhur_pygmee_template.txt"
+       monFichierOutput=self.config.PATH_STUDY+"/"+self.config.NAME_SCHEME+"/"+self.config.NAME_SCHEME+"_benhur_"+finesse+".bhr"
+       f = file(monFichierInput)
+       chaine = f.read()  
+       f.close()   
+       chaine2=self.remplaceCONFIG(chaine,CONFIGliste)
+       chaine=self.remplaceDICO(chaine2,dicoBenhur)
+       f=open(monFichierOutput,'wb')
+       f.write(chaine)
+       f.close()
+
+       nom_BHR_Files=self.config.PATH_BENHUR+"/BHR_files.txt"
+       f=open(nom_BHR_Files,'wb')
+       f.write(monFichierOutput)
+       f.write("\n\n\n")
+       f.close()
+
+       if execution=="non" : return ""
+       if ('_BENHUR_LANCEMENT' in dicoBenhur.keys()) and  dicoBenhur['_BENHUR_LANCEMENT'] == 'oui':
+           commande="echo '__________________';\n"
+           commande=commande + "echo 'execution de BENHUR';\n"
+           commande=commande + "cd "+self.config.PATH_BENHUR+";\n"
+           commande=commande + "./benhur;\n"
+           commande=commande + "echo 'fin execution de BENHUR';\n"
+           commande=commande + "echo '________________________';\n\n\n"
+           return commande
+       else:
+          return ""
+
+
+   def ASTER(self,execution) :
+   #--------------------------------------------------------------------
+   # utilisation de deux fichiers a trous pour generer les .comm et .export
+      print "Generation de ASTER"
+      dicoAster=self.dictMCVal["ASTER"]
+
+      try :
+         dicoAster["_PYGMEE_TAILLE"]=self.taillePYGMEE
+      except :
+         print "Necessite de definir PYGMEE"
+      try :
+         dicoAster["_BENHUR_FINESSE"]=self.finesseBENHUR
+      except :
+         print "Necessite de definir BENHUR"
+
+      monFichierCommOutput=self.nom_racine+"s_poly_st_1_aster.comm"
+      monFichierExportOutput=self.nom_racine+"s_poly_st_1_aster.export"
+      self.monFichierMSH=self.nom_racine+"/"+self.config.NAME_SCHEME+"_aster.resu.msh"
+
+      monFichierCommInput=self.config.INSTALLDIR+"/MAP/Templates/"+self.ssRepertoire+"/s_poly_st_1_aster_template.comm"
+      monFichierExportInput=self.config.INSTALLDIR+"/MAP/Templates/"+self.ssRepertoire+"/s_poly_st_1_aster_template.export"
+
+      #Lecture du fichier a trous a pour le fichier export
+      f = file(monFichierExportInput)
+      chaine = f.read()  
+      f.close()   
+      chaine2=self.remplaceCONFIG(chaine,CONFIGliste)
+      chaine=self.remplaceDICO(chaine2,dicoAster)
+      f=open(monFichierExportOutput,'wb')
+      f.write(chaine)
+      f.close()
+
+      #Lecture du fichier a trous a pour le fichier comm
+      f = file(monFichierCommInput)
+      chaine = f.read()  
+      f.close()   
+      chaine2=self.remplaceCONFIG(chaine,CONFIGliste)
+      chaine=self.remplaceDICO(chaine2,dicoAster)
+      f=open(monFichierCommOutput,'wb')
+      f.write(chaine)
+      f.close()
+
+      if ('_ASTER_LANCEMENT' in dicoAster.keys()) and  dicoAster['_ASTER_LANCEMENT'] == 'oui':
+         commande="cd "+self.config.PATH_MODULE+";"
+         commande=commande + self.config.PATH_ASTER + "bin/as_run "+monFichierExportOutput +";\n"
+         return commande
+      else:
+         return ""
+
+   def FDVGRID(self,execution) :
+   #--------------------------------------------------------------------
+   #
+       dicoFdvgrid=self.dictMCVal["FDVGRID"]
+       if execution=="non" : return ""
+       fichierInput=self.config.PATH_FDVGRID+'../user/boules_15_B11_2024.txt'
+       chaine="%_PATH_FDVGRID%/fdvgrid %_FDVGRID_DIMENSION% %_FDVGRID_DIFFUSION_COMPOX% %_FDVGRID_DIFFUSION_COMPOY% "
+       chaine=chaine +"%_FDVGRID_DIFFUSION_COMPOZ% %_FDVGRID_FORMULATION% %_FDVGRID_CL% "
+       chaine=chaine +"%_FDVGRID_DISCRET% %_FDVGRID_SOLVER% %_FDVGRID_RESIDU%"
+       chaine2=self.remplaceCONFIG(chaine,CONFIGliste)
+       chaine=self.remplaceDICO(chaine2,dicoFdvgrid)
+       return chaine
+      #  ./fdvgrid 3D 1.0 0.0 0.0 v t 100 cross 1.e-4
+
+
+   def GMSH(self,execution) :
+      dicoGmsh=self.dictMCVal["GMSH"]
+      if ('_GMSH_LANCEMENT' in dicoGmsh.keys()) and  dicoGmsh['_GMSH_LANCEMENT'] == 'oui':
+         commande=self.config.PATH_GMSH+"/gmsh "
+         commande=commande + self.monFichierMSH+";\n"
+         return commande
+      else:
+         return ""
+
+
diff --git a/generator/generator_s_polymers_st_1.py b/generator/generator_s_polymers_st_1.py
new file mode 100644 (file)
index 0000000..8b4bca8
--- /dev/null
@@ -0,0 +1,217 @@
+# -* coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+"""
+   Ce module contient le plugin generateur de fichier au format
+   SEP pour EFICAS.
+
+"""
+import traceback
+import types,string,re,os
+
+from generator_map import MapGenerator
+
+#____________________________________________________________________________________
+# PYGMEEDict contient une equivalence entre le catalogue Map et les lignes generees
+# comme entete (commentaire ?) dans le fichier d'input de pygmee
+#
+
+CONFIGliste=('NAME_SCHEME', 'PATH_ASTER', 'PATH_BENHUR', 'PATH_MODULE', 'PATH_PYGMEE', 'PATH_STUDY', 'repIni')
+PYGMEEDict={
+       "_PYGMEE_FUSEAU1_b_forme_FICHIER"  : "#fuseau 1 (entree de lecfus) format : diametre DCE croissant / fraction cumulee decroisant ",
+       "FUSEAU2" :  "#fuseau 2 (entree de lecfus) format : diametre DCE croissant / fraction cumulee decroisant",
+       "_PYGMEE_TAILLE" : "# taille du VER en microns ",
+       "_PYGMEE_DISTANCE" : "# distance de repulsion :",
+           }
+
+#_______________________________________________________________________________________________________
+# listeOrdonneeMCPygmee contient une liste (donc ordonnee) des mots clefs pour 
+# imposer l'ordre des  lignes generees
+listeOrdonneeMCPygmee =('_PYGMEE_FUSEAU1_b_forme_FICHIER', 'FUSEAU2', '_PYGMEE_TAILLE','_PYGMEE_DISTANCE')
+
+
+BENHURDict={
+       "_BENHUR_FINESSE" : "discretisation des arretes du VER ",
+           }
+
+ASTERDict={
+       "_ASTER_LANCEMENT" : "execution de Code_Aster",
+       "_ASTER_CONDUCTIVITE_I" : "conductivite des inclusions",
+       "_ASTER_CONDUCTIVITE_M" : "conductivite de la matrice",
+           }
+
+GMSHDict={
+       "_GMSH_LANCEMENT" : "execution de GMSH",
+           }
+
+def entryPoint():
+   """
+      Retourne les informations necessaires pour le chargeur de plugins
+
+      Ces informations sont retournees dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 's_polymers_st_1',
+        # La factory pour creer une instance du plugin
+          'factory' : s_poly_st_1Generator,
+          }
+
+
+class s_poly_st_1Generator(MapGenerator):
+   """
+      Ce generateur parcourt un objet de type JDC et produit
+      un texte au format eficas et
+      un texte au format py
+
+   """
+   
+   def verifie(self):
+       liste=[]
+       for i in self.listeCODE:
+           liste.append(i.keys()[0])
+       if len(liste) != len(set(liste)):
+           raise AsException("il n'est pas prevu d avoir deux fois le meme code dans ce schema")
+
+
+   def PYGMEE(self,execution) :
+       dicoPygmee=self.dictMCVal["PYGMEE"]
+       self.dictPYGMEE=dicoPygmee
+       monFichier=self.config.PATH_PYGMEE+"/pygmee_input.txt"
+
+       #Lecture du fichier a trous
+       f = file(self.config.repIni+"/pygmee_input.txt","r")
+       chaine = f.read()  
+       f.close()   
+       chaine2=self.remplaceCONFIG(chaine,CONFIGliste)
+       chaine=self.remplaceDICO(chaine2,dicoPygmee)
+
+       if  os.path.isfile(monFichier) :
+           print "je detruis pygmee_input.txt"
+           commande="rm -rf " + monFichier
+           os.system (commande)
+       f=open(monFichier,'wb')
+       f.write(chaine)
+       f.close()
+       if execution=="non" : return ""
+
+       if ('_PYGMEE_LANCEMENT' in dicoPygmee.keys()) and  dicoPygmee['_PYGMEE_LANCEMENT'] == 'oui':
+           commande="echo '__________________';\n"
+           commande=commande + "echo 'execution de PYGMEE';\n"
+           commande=commande + "cd "+self.config.PATH_PYGMEE+";\n"
+           commande=commande + "python "+self.config.PATH_PYGMEE+"/pygmee_v1.py;\n"
+           commande=commande + "echo 'fin execution de PYGMEE';\n"
+           commande=commande + "echo '_____________________';\n\n\n"
+           return commande
+       else:
+           return ""
+
+   def BENHUR(self,execution) :
+       dicoBenhur=self.dictMCVal["BENHUR"]
+       if hasattr(self,'dictPYGMEE') and '_PYGMEE_TAILLE' in self.dictMCVal['PYGMEE']:
+           dicoBenhur["_PYGMEE_TAILLE"]=self.dictPYGMEE['_PYGMEE_TAILLE']
+       else :
+           dicoBenhur["_PYGMEE_TAILLE"]=0
+           print "Attention la variable Taille_VER non definie"
+       
+       finesse=str(dicoBenhur["_BENHUR_FINESSE"])
+       nom_fichier_BHR=self.config.PATH_STUDY+"/"+self.config.NAME_SCHEME+"_benhur_"+finesse+".bhr"
+       nom_BHR_Files=self.config.PATH_BENHUR+"/BHR_files.txt"
+
+       #Lecture du fichier a trous
+       f = file(self.config.repIni+"/benhur_pygmee.txt","r")
+       chaine = f.read()  
+       f.close()   
+       chaine2=self.remplaceCONFIG(chaine,CONFIGliste)
+       chaine=self.remplaceDICO(chaine2,dicoBenhur)
+
+       try :
+          f=open(nom_fichier_BHR,'wb')
+       except :
+          print "Pb de Generation de BENHUR"
+          return ""
+       f.write(chaine)
+       f.close()
+
+       f=open(nom_BHR_Files,'wb')
+       f.write(nom_fichier_BHR)
+       f.write("\n\n\n")
+       f.close()
+
+       if execution=="non" : return ""
+       if ('_BENHUR_LANCEMENT' in dicoBenhur.keys()) and  dicoBenhur['_BENHUR_LANCEMENT'] == 'oui':
+           commande="echo '__________________';\n"
+           commande=commande + "echo 'execution de BENHUR';\n"
+           commande=commande + "cd "+self.config.PATH_BENHUR+";\n"
+           commande=commande + "./benhur;\n"
+           commande=commande + "echo 'fin execution de BENHUR';\n"
+           commande=commande + "echo '________________________';\n\n\n"
+           return commande
+       else:
+          return ""
+
+
+
+   def ASTER(self,execution) :
+      print "Generation de ASTER"
+      dicoAster=self.dictMCVal["ASTER"]
+      nom_racine=self.config.PATH_MODULE+"/"+self.config.NAME_SCHEME+"/"+self.config.NAME_SCHEME
+      nom_fichier_ASTER=nom_racine+"_aster.comm"
+
+      #Lecture du fichier a trous
+      f = file(self.config.repIni+"/s_poly_st_1_aster_template.comm","r")
+      chaine = f.read()  
+      f.close()   
+      chaine2=self.remplaceDICO(chaine,self.dictPYGMEE)
+      chaine=self.remplaceDICO(chaine2,dicoAster)
+
+      f=open(nom_fichier_ASTER,'wb')
+      f.write(chaine)
+      f.close()
+
+      if ('_ASTER_LANCEMENT' in dicoAster.keys()) and  dicoAster['_ASTER_LANCEMENT'] == 'oui':
+         commande="cd "+self.config.PATH_MODULE+";"
+         commande=commande + self.config.PATH_ASTER + "/as_run "+self.config.PATH_MODULE
+         commande=commande + "/"+self.config.NAME_SCHEME+"/"+self.config.NAME_SCHEME+"_aster.export"
+         os.system(commande)
+      else:
+         return ""
+
+   def GMSH(self,execution) :
+      dicoGmsh=self.dictMCVal["GMSH"]
+      if ('_GMSH_LANCEMENT' in dicoGmsh.keys()) and  dicoGmsh['_GMSH_LANCEMENT'] == 'oui':
+         commande="cd "+self.config.PATH_MODULE+";"
+         commande=commande + "gmsh "+self.config.PATH_MODULE+"/"+self.config.NAME_SCHEME+"/"+self.config.NAME_SCHEME+"_aster.resu.msh"
+         print commande
+         os.system(commande)
+      else:
+         return ""
+
+   def METHODE(self,execution) :
+      print "METHODE"
+      return ""
+
+   def MATERIAUX(self,execution) :
+      print "MATERIAUX"
+      return ""
+
+   def DISCRETISATION(self,execution) :
+      print "DISCRETISATION"
+      return ""
diff --git a/generator/generator_s_scc_st_2.py b/generator/generator_s_scc_st_2.py
new file mode 100644 (file)
index 0000000..79dfbcb
--- /dev/null
@@ -0,0 +1,93 @@
+# -* coding: utf-8 -*-
+#            CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
+"""
+   Ce module contient le plugin generateur de fichier au format
+   SEP pour EFICAS.
+
+"""
+import traceback
+import types,string,re,os
+
+from generator_map import MapGenerator
+
+import sys
+sys.path.append('/local00/bin/MAP/classes/python/')
+try :
+  from class_MAP_parameters import *
+except :
+  pass
+
+dico_post={"analyse statistique classique":("c_post_distribution_properties","PDF"),
+"analyse statistique de la qualite":("",""),
+"analyse de la dispersion suivant la distance au joint":("c_post_distribution_properties","dgb"),
+"analyse de la dispersion suivant la distance a la pointe de fissure":("",""),
+"visualisation dans le triangle standard":("","")}
+
+def entryPoint():
+   """
+      Retourne les informations necessaires pour le chargeur de plugins
+
+      Ces informations sont retournees dans un dictionnaire
+   """
+   return {
+        # Le nom du plugin
+          'name' : 's_scc_st_2',
+        # La factory pour creer une instance du plugin
+          'factory' : s_scc_st_2Generator,
+          }
+
+
+class s_scc_st_2Generator(MapGenerator):
+   """
+      Ce generateur parcourt un objet de type JDC et produit
+      un texte au format eficas et
+      un texte au format py
+
+   """
+   
+   def TABLEAU(self,execution):
+       dico=self.dictMCVal["TABLEAU"]
+       self.file_in_name=dico['_TABLEAU_FICHIER']
+       return ""
+       
+   def TRAITEMENT(self, execution):
+       dico=self.dictMCVal["TRAITEMENT"]
+       post=dico['_TRAITEMENT_TYPE']
+       variable=dico['_TRAITEMENT_VARIABLE']
+       composant=dico_post[post][0]
+       maDirectory=self.config.PATH_MAP+'/components/'+composant+'/'
+       monFichier=self.config.PATH_STUDY+'/'+composant+'_'+dico_post[post][1]+'_'+variable+'.input'
+
+       parameter=MAP_parameters()
+       parameter.add_component(composant)
+       parameter.add_parameter(composant, 'file_in_name', self.file_in_name)
+       parameter.add_parameter(composant, 'variable_name', variable)
+       parameter.add_parameter(composant, 'post', dico_post[post][1])
+       parameter.add_parameter(composant, 'study_name', self.config.appli.ssCode)
+       parameter.add_parameter(composant, 'study_path', self.config.PATH_STUDY)
+       parameter.write(monFichier)
+
+       command='cd '+maDirectory+'src/'+'\n'+'python '+composant+'.py -i '+monFichier+';'
+       print "command = ", command
+       if (execution=="oui") :
+          return command
+
+       return ""
index 298dd547d438ad112819c63d8d2817916a4931e9..59496b1523ce877bd82cfbb991c9fec1f9a3ede1 100644 (file)
@@ -67,7 +67,7 @@ class vers3DSalomeGenerator(PythonGenerator):
                             "BARRE", "CABLE", "CARA", "COQUE", "EPAIS", 
                             "EXCENTREMENT", "GROUP_MA", "ORIENTATION", 
                             "POUTRE", "SECTION", "VALE", "VARI_SECT",
-                            "GRILLE", "ANGL_REP",
+                            "GRILLE", "ANGL_REP", "VECTEUR",
                              "b_constant", "b_homothetique", 
                             "b_rectangle", "b_affine", "b_cercle" )
       self.dict_deb_com={"POUTRE":"VisuPoutre", "CABLE" : "VisuCable",
@@ -77,7 +77,7 @@ class vers3DSalomeGenerator(PythonGenerator):
       self.dict_suite_com={"RECTANGLE":"Rectangle","GENERALE":"Generale",
                            "CERCLE":"Cercle"}
 
-      self.dict_traduit={"VARI_SECT":"extrusion","EXCENTREMENT":"Excentre","EPAIS":"Epais"}
+      self.dict_traduit={"VARI_SECT":"extrusion","EXCENTREMENT":"Excentre","EPAIS":"Epais","VECTEUR":"Vecteur"}
 
       self.init_ligne() 
 
@@ -89,12 +89,13 @@ class vers3DSalomeGenerator(PythonGenerator):
       self.commande = ""
       self.dict_attributs = {} 
 
-   def gener(self,node):
+   def gener(self,node,config=None):
       """
       """
       self.node=node
       self.list_commandes=[];
       self.generator(self.node.object)
+      #print self.list_commandes
       return self.list_commandes
 
    def generator(self,obj):
@@ -223,4 +224,3 @@ class vers3DSalomeGenerator(PythonGenerator):
       self.dict_attributs["axeX"]=alpha
       self.dict_attributs["axeY"]=beta
       self.dict_attributs["axeZ"]=gamma
-
diff --git a/generator/monCreateYacs.py b/generator/monCreateYacs.py
new file mode 100755 (executable)
index 0000000..2d495d7
--- /dev/null
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+
+import pilot
+import SALOMERuntime
+import loader
+import logging
+import traceback
+import os
+
+class CreeSchemaYacs :
+     def __init__(self,config):
+        print "dans le init de CreeSchemaYacs " 
+        self.config=config
+        self.ssCode=config.appli.ssCode
+        self.setUp()
+        self.addCatalog()
+        self.nodeAvant=None
+
+     def setUp(self):
+        SALOMERuntime.RuntimeSALOME_setRuntime()
+        self.runtime = pilot.getRuntime()
+        self.loader  = loader.YACSLoader()
+        self.loader.registerProcCataLoader()
+
+     def addCatalog(self):
+        try:
+           monCataFile= os.environ["EFICAS_ROOT_DIR"]
+           monCataFile=monCataFile+"/share/salome/resources/eficas/cata"
+           monCataFile=monCataFile+self.ssCode+".xml"
+           print monCataFile
+           self.monCata = self.runtime.loadCatalog("proc",monCataFile)
+        except:
+           logging.fatal("Exception in loading MAP catalog")
+           traceback.print_exc()
+           sys.exit(1)
+
+     def createProc(self):
+        proc = self.runtime.createProc("proc")
+        proc.setTypeCode("pyobj", self.runtime.getTypeCode("pyobj"))
+        t_pyobj  = proc.getTypeCode("pyobj")
+        t_string = proc.getTypeCode("string")
+        return proc
+
+     def write_yacs_proc(self,proc, yacs_schema_filename):
+         proc.saveSchema(yacs_schema_filename)
+
+class s_poly_st_1(CreeSchemaYacs) :
+
+     def BENHURYACS(self,proc,dico):
+         monFichierInput=self.config.PATH_BENHUR+"/BHR_files.txt"
+         factoryNode = self.monCata._nodeMap["benhur"]
+         self.benhurNode = factoryNode.cloneNode("benhur")
+         self.benhurNode.getInputPort("fileInput").edInitPy(monFichierInput)
+         self.benhurNode.getInputPort("pathBenhur").edInitPy(self.config.PATH_BENHUR)
+         proc.edAddChild(self.benhurNode)
+         if self.nodeAvant != None :
+            proc.edAddCFLink(self.nodeAvant,self.benhurNode)
+         self.nodeAvant=self.benhurNode
+
+     def PYGMEEYACS(self,proc,dico):
+         monFichierInput=self.config.PATH_STUDY+"/"+self.config.NAME_SCHEME+"/pygmee_input.txt"
+         factoryNode = self.monCata._nodeMap["pygmee"]
+         self.pygmeeNode = factoryNode.cloneNode("pygmee")
+         self.pygmeeNode.getInputPort("pathPygmee").edInitPy(self.config.PATH_PYGMEE)
+         self. pygmeeNode.getInputPort("fileInput").edInitPy(monFichierInput)
+         proc.edAddChild(self.pygmeeNode)
+         if self.nodeAvant != None :
+            proc.edAddCFLink(self.nodeAvant,self.pygmeeNode)
+         self.nodeAvant=self.pygmeeNode
+
+     def ASTERYACS(self,proc,dico):
+         factoryNode = self.monCata._nodeMap["asterRun"]
+         self.asterNode = factoryNode.cloneNode("asterRun")
+         nom_racine=self.config.PATH_STUDY+"/"+self.config.NAME_SCHEME+"/"
+         monFichierExport=nom_racine+"s_poly_st_1_aster.export"
+         monFichierMed=nom_racine+"s_poly_st_1_aster.resu.med"
+         self.asterNode.getInputPort("pathAster").edInitPy(self.config.PATH_ASTER+"/bin")
+         self.asterNode.getInputPort("fileExport").edInitPy(monFichierExport)
+         self.asterNode.getInputPort("fileMed").edInitPy(monFichierMed)
+
+         proc.edAddChild(self.asterNode)
+         if self.nodeAvant != None :
+            proc.edAddCFLink(self.nodeAvant,self.asterNode)
+         self.nodeAvant=self.asterNode
+
+dictKlass={'s_poly_st_1':s_poly_st_1}
+def getSchema(config):
+     schema=config.appli.ssCode
+     return dictKlass[schema](config)
+
+
+if __name__ == "__main__":
+     monCreator=getSchema('s_poly_st_1')
+     proc=monCreator.createProc()
+     monCreator.ajoutPygmee(proc)
+     monCreator.ajoutBenhur(proc)
+     monCreator.write_yacs_proc(proc,"/tmp/toto.xml")
+